/** * Update status for the task when dragging in the kanban view */ public function actionUpdateStatusOnDragInKanbanView($type) { $getData = GetUtil::getData(); $counter = 1; $response = array(); if (count($getData['items']) > 0) { foreach ($getData['items'] as $taskId) { if ($taskId != '') { $kanbanItem = KanbanItem::getByTask(intval($taskId)); $task = Task::getById(intval($taskId)); //if kanban type is completed if ($type == KanbanItem::TYPE_COMPLETED) { //kanban update has to be done first $kanbanItem->sortOrder = TasksUtil::resolveAndGetSortOrderForTaskOnKanbanBoard($type, $task); $kanbanItem->type = intval($type); $kanbanItem->save(); //set the scenario $task->setScenario('kanbanViewDrag'); $this->processStatusUpdateViaAjax($task, Task::STATUS_COMPLETED, false); $response['button'] = ''; $response['status'] = Task::getStatusDisplayName($task->status); $response['owner'] = $task->owner->getFullName(); $subscriptionContent = TasksUtil::resolveAndRenderTaskCardDetailsSubscribersContent($task); $subscriptionContent .= TasksUtil::resolveSubscriptionLink($task, 'subscribe-task-link', 'unsubscribe-task-link'); $response['subscriptionContent'] = $subscriptionContent; } else { //When in the same column if ($type == $kanbanItem->type) { $kanbanItem->sortOrder = $counter; $kanbanItem->save(); } else { //This would be the one which is dragged across column $targetStatus = TasksUtil::getDefaultTaskStatusForKanbanItemType(intval($type)); $this->processStatusUpdateViaAjax($task, $targetStatus, false); $content = TasksUtil::resolveActionButtonForTaskByStatus($targetStatus, $this->getId(), $this->getModule()->getId(), intval($taskId)); $kanbanItem->sortOrder = $counter; $kanbanItem->type = intval($type); $kanbanItem->save(); $subscriptionContent = TasksUtil::resolveAndRenderTaskCardDetailsSubscribersContent($task); $subscriptionContent .= TasksUtil::resolveSubscriptionLink($task, 'subscribe-task-link', 'unsubscribe-task-link'); $response['button'] = $content; $response['status'] = Task::getStatusDisplayName($task->status); $response['owner'] = $task->owner->getFullName(); $response['subscriptionContent'] = $subscriptionContent; } } $counter++; } } } echo CJSON::encode($response); }
/** * Check kanban type for status and update if it is required, it is required * when user is changing the status from modal detail view * @param $task Task */ public static function checkKanbanTypeByStatusAndUpdateIfRequired(Task $task) { $kanbanItem = KanbanItem::getByTask($task->id); //It should be created here but check for create as well here if ($kanbanItem == null) { TasksUtil::createKanbanItemFromTask($task); } else { if (!TasksUtil::isKanbanItemTypeValidBasedOnTaskStatus($kanbanItem->type, $task->status)) { $kanbanTypeByStatus = TasksUtil::resolveKanbanItemTypeForTaskStatus($task->status); if ($kanbanItem->type != $kanbanTypeByStatus) { $sourceKanbanItemType = $kanbanItem->type; //put the item at the end $kanbanItem->sortOrder = TasksUtil::resolveAndGetSortOrderForTaskOnKanbanBoard($kanbanTypeByStatus, $task); $kanbanItem->type = $kanbanTypeByStatus; $kanbanItem->save(); //Resort the source column if ($task->project->id > 0) { TasksUtil::sortKanbanColumnItems($sourceKanbanItemType, $task->project); } elseif ($task->activityItems->count() > 0) { TasksUtil::sortKanbanColumnItems($sourceKanbanItemType, $task->activityItems->offsetGet(0)); } } } } }