%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/tasks/traits/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/tasks/traits/DataExport.php |
<?php namespace humhub\modules\tasks\traits; use humhub\modules\comment\models\Comment; use humhub\modules\tasks\models\Task; use PhpOffice\PhpSpreadsheet\Shared\Date; use PhpOffice\PhpSpreadsheet\Style\NumberFormat; use yii\helpers\ArrayHelper; trait DataExport { /** * Getting the parrent content container name related to task * * @return \Closure */ private function getRelatedContainer() { return function ($model) { /* @var $model Task */ return $model->content->container->getDisplayName(); }; } /** * Getting the checklist separated by ", " related to task * * @param array $relationsData * @return \Closure */ private function getTaskItems($relationsData) { return function($model, $key) use ($relationsData) { $items = ArrayHelper::map($relationsData[$key]['items'], 'id', 'title'); return implode(', ', $items); }; } /** * Getting the list of assigned users separated by ", " related to task * * @param array $relationsData * @return \Closure */ private function getAssignedUsers($relationsData) { return function($model, $key) use ($relationsData) { $usersInfo = $this->getUsersInfo($key, $relationsData, Task::USER_ASSIGNED); $users = ArrayHelper::map($usersInfo, 'id', 'fullname'); return implode(', ', $users); }; } /** * Getting the list of responsible users separated by ", " related to task * * @param array $relationsData * @return \Closure */ private function getResponsibleUsers($relationsData) { return function($model, $key) use ($relationsData) { $usersInfo = $this->getUsersInfo($key, $relationsData, Task::USER_RESPONSIBLE); $users = ArrayHelper::map($usersInfo, 'id', 'fullname'); return implode(', ', $users); }; } /** * Getting the list of comments separated by " | " related to task * * @return \Closure */ private function getComments() { return function ($model, $key) { $commentsCount = Comment::GetCommentCount(get_class($model), $key); $comments = Comment::GetCommentsLimited(get_class($model), $key, $commentsCount); $messages = array_map(function($comment) { /* @var $comment Comment */ return $comment->createdBy ? $comment->createdBy->getDisplayName().': '.$comment->message : $comment->message; }, $comments); return implode(' | ', $messages); }; } private function prepareData($key, $initialData, $subKey = null) { $data = []; array_map(function ($item) use (&$data, $key, $subKey) { $data[$item[$key]] = $subKey ? $item[$subKey] : $item; }, $initialData); return $data; } private function getUsersInfo($key, $data, $userType) { $profiles = $this->prepareData('id', $data[$key]['users'], 'profile'); $taskUsers = []; array_map(function ($user) use (&$taskUsers) { $uniqueKey = "{$user['user_id']}_{$user['user_type']}"; $taskUsers[$uniqueKey] = $user; }, $data[$key]['taskUsers']); return $this->prepareUsersInfo($profiles, $taskUsers, $userType); } private function prepareUsersInfo($profiles, $taskUsers, $userType) { $info = []; array_map(function ($profile) use (&$info, $taskUsers, $userType) { $uniqueKey = "{$profile['user_id']}_{$userType}"; if (key_exists($uniqueKey, $taskUsers)) { $info[] = [ 'id' => $profile['user_id'], 'fullname' => "{$profile['firstname']} {$profile['lastname']}" ]; } }, $profiles); return $info; } }