/** * Delete an elapsed time record */ public function delete($id) { global $USER; $result = array(); if ($id = $this->checkId($id)) { // get task id $taskId = $this->getOwnerTaskId($id); if ($taskId) { $task = \CTaskItem::getInstanceFromPool($taskId, $USER->GetId()); // or directly, new \CTaskItem($taskId, $USER->GetId()); $item = new \CTaskElapsedItem($task, $id); $item->delete(); } } return $result; }
public function deleteDependOn($parentId) { $exceptionInfo = array('AUX' => array('MESSAGE' => array('FROM_TASK_ID' => $parentId, 'TASK_ID' => $this->getId(), 'LINK_TYPE' => $linkType))); if ($this->isActionAllowed(self::ACTION_CHANGE_DEADLINE)) { $parentTask = CTaskItem::getInstanceFromPool($parentId, $this->executiveUserId); if ($parentTask->isActionAllowed(self::ACTION_CHANGE_DEADLINE)) { $result = DependenceTable::deleteLink($this->getId(), $parentId); if (!$result->isSuccess()) { $exceptionInfo['ERROR'] = $result->getErrorMessages(); throw new ActionFailedException(Loc::getMessage('TASK_CANT_DELETE_LINK'), $exceptionInfo); } return; } } throw new ActionNotAllowedException(Loc::getMessage('TASK_CANT_DELETE_LINK'), $exceptionInfo); }
if ($i < $iMax) { echo ", "; } } else { $params = array("PATHS" => $arPaths, "PLAIN" => false, "DEFER" => true, "SITE_ID" => $SITE_ID, "TASK_ADDED" => false, 'IFRAME' => 'N', "NAME_TEMPLATE" => $nameTemplate, 'DATA_COLLECTION' => array(array("CHILDREN_COUNT" => $arChildrenCount["PARENT_" . $task["ID"]], "DEPTH" => $depth, "UPDATES_COUNT" => $arUpdatesCount[$task["ID"]], "PROJECT_EXPANDED" => true, 'ALLOWED_ACTIONS' => null, "TASK" => $task))); if ($columnsOrder !== null) { $params['COLUMNS_IDS'] = $columnsOrder; } $APPLICATION->IncludeComponent('bitrix:tasks.list.items', '.default', $params, null, array("HIDE_ICONS" => "Y")); } } if ($bIsJSON) { echo "]"; } } else { $oTask = CTaskItem::getInstanceFromPool($_POST['id'], $USER->getId()); $arTask = $oTask->getData($bEscape = false); if ($_POST["mode"] == "delete" && $oTask->isActionAllowed(CTaskItem::ACTION_REMOVE)) { $APPLICATION->RestartBuffer(); $task = new CTasks(); $rc = $task->Delete(intval($_POST["id"])); if ($rc === false) { $strError = 'Error'; if ($ex = $APPLICATION->GetException()) { $strError = $ex->GetString(); } if ($_POST["type"] == "json") { echo "['strError' : '" . CUtil::JSEscape(htmlspecialcharsbx($strError)) . "']"; } else { echo htmlspecialcharsbx($strError); }
function tasksRenderJSON($arTask, $childrenCount, $arPaths, $bParent = false, $bGant = false, $top = false, $nameTemplate = "", $arAdditionalFields = array(), $bSkipJsMenu = false) { global $USER; $arAllowedTaskActions = array(); if (isset($arTask['META:ALLOWED_ACTIONS'])) { $arAllowedTaskActions = $arTask['META:ALLOWED_ACTIONS']; } elseif ($arTask['ID']) { $oTask = CTaskItem::getInstanceFromPool($arTask['ID'], $USER->getId()); $arAllowedTaskActions = $oTask->getAllowedTaskActionsAsStrings(); $arTask['META:ALLOWED_ACTIONS'] = $arAllowedTaskActions; } $runningTaskId = $runningTaskTimer = null; if ($arTask['ALLOW_TIME_TRACKING'] === 'Y') { $oTimer = CTaskTimerManager::getInstance($USER->getId()); $runningTaskData = $oTimer->getRunningTask(false); $runningTaskId = $runningTaskData['TASK_ID']; $runningTaskTimer = time() - $runningTaskData['TIMER_STARTED_AT']; } ?> { id : <?php echo $arTask["ID"]; ?> , name : "<?php echo CUtil::JSEscape($arTask["TITLE"]); ?> ", <?php if ($arTask["GROUP_ID"]) { ?> projectId : <?php echo $arTask["GROUP_ID"]; ?> , projectName : '<?php echo CUtil::JSEscape($arTask['GROUP_NAME']); ?> ', <?php } ?> status : "<?php echo tasksStatus2String($arTask["STATUS"]); ?> ", realStatus : "<?php echo $arTask["REAL_STATUS"]; ?> ", url: '<?php echo CUtil::JSEscape(CComponentEngine::MakePathFromTemplate($arPaths["PATH_TO_TASKS_TASK"], array("task_id" => $arTask["ID"], "action" => "view"))); ?> ', details: window.top.onDetails, priority : <?php echo $arTask["PRIORITY"]; ?> , mark : <?php echo !$arTask["MARK"] ? "null" : "'" . $arTask["MARK"] . "'"; ?> , responsible: '<?php echo CUtil::JSEscape(tasksFormatNameShort($arTask["RESPONSIBLE_NAME"], $arTask["RESPONSIBLE_LAST_NAME"], $arTask["RESPONSIBLE_LOGIN"], $arTask["RESPONSIBLE_SECOND_NAME"], $nameTemplate)); ?> ', director: '<?php echo CUtil::JSEscape(tasksFormatNameShort($arTask["CREATED_BY_NAME"], $arTask["CREATED_BY_LAST_NAME"], $arTask["CREATED_BY_LOGIN"], $arTask["CREATED_BY_SECOND_NAME"], $nameTemplate)); ?> ', responsibleId : <?php echo $arTask["RESPONSIBLE_ID"]; ?> , directorId : <?php echo $arTask["CREATED_BY"]; ?> , responsible_name: '<?php echo CUtil::JSEscape($arTask["RESPONSIBLE_NAME"]); ?> ', responsible_second_name: '<?php echo CUtil::JSEscape($arTask["RESPONSIBLE_SECOND_NAME"]); ?> ', responsible_last_name: '<?php echo CUtil::JSEscape($arTask["RESPONSIBLE_LAST_NAME"]); ?> ', responsible_login: '******', director_name: '<?php echo CUtil::JSEscape($arTask["CREATED_BY_NAME"]); ?> ', director_second_name: '<?php echo CUtil::JSEscape($arTask["CREATED_BY_SECOND_NAME"]); ?> ', director_last_name: '<?php echo CUtil::JSEscape($arTask["CREATED_BY_LAST_NAME"]); ?> ', director_login: '******', dateCreated : <?php tasksJSDateObject($arTask["CREATED_DATE"], $top); ?> , <?php if ($arTask["START_DATE_PLAN"]) { ?> dateStart : <?php tasksJSDateObject($arTask["START_DATE_PLAN"], $top); ?> ,<?php } else { ?> dateStart: null,<?php } ?> <?php if ($arTask["END_DATE_PLAN"]) { ?> dateEnd : <?php tasksJSDateObject($arTask["END_DATE_PLAN"], $top); ?> ,<?php } else { ?> dateEnd: null,<?php } ?> <?php if ($arTask["DATE_START"]) { ?> dateStarted: <?php tasksJSDateObject($arTask["DATE_START"], $top); ?> ,<?php } ?> dateCompleted : <?php if ($arTask["CLOSED_DATE"]) { tasksJSDateObject($arTask["CLOSED_DATE"], $top); } else { ?> null<?php } ?> , <?php if ($arTask["DEADLINE"]) { ?> dateDeadline : <?php tasksJSDateObject($arTask["DEADLINE"], $top); ?> ,<?php } else { ?> dateDeadline: null,<?php } ?> canEditPlanDates : <?php if ($arAllowedTaskActions['ACTION_EDIT']) { ?> true<?php } else { ?> false<?php } ?> , <?php if ($arTask["PARENT_ID"] && $bParent) { ?> parentTaskId : <?php echo $arTask["PARENT_ID"]; ?> , <?php } ?> <?php if (sizeof($arTask["FILES"])) { $i = 0; ?> files: [ <?php foreach ($arTask["FILES"] as $file) { $i++; ?> { name : '<?php echo CUtil::JSEscape($file["ORIGINAL_NAME"]); ?> ', url : '/bitrix/components/bitrix/tasks.task.detail/show_file.php?fid=<?php echo $file["ID"]; ?> ', size : '<?php echo CUtil::JSEscape(CFile::FormatSize($file["FILE_SIZE"])); ?> ' }<?php if ($i != sizeof($arTask["FILES"])) { ?> ,<?php } ?> <?php } ?> ], <?php } ?> <?php if (count($arTask['ACCOMPLICES']) > 0) { $i = 0; echo 'accomplices: ['; foreach ($arTask['ACCOMPLICES'] as $ACCOMPLICE_ID) { if ($i++) { echo ','; } echo '{ id: ' . (int) $ACCOMPLICE_ID . ' }'; } echo '], '; } ?> <?php if (count($arTask['AUDITORS']) > 0) { $i = 0; echo 'auditors: ['; foreach ($arTask['AUDITORS'] as $AUDITOR_ID) { if ($i++) { echo ','; } echo '{ id: ' . (int) $AUDITOR_ID . ' }'; } echo '], '; } ?> isSubordinate: <?php echo $arTask["SUBORDINATE"] == "Y" ? "true" : "false"; ?> , isInReport: <?php echo $arTask["ADD_IN_REPORT"] == "Y" ? "true" : "false"; ?> , hasChildren : <?php if ((int) $childrenCount > 0) { echo 'true'; } else { echo 'false'; } ?> , childrenCount : <?php echo (int) $childrenCount; ?> , canEditDealine : <?php if ($arAllowedTaskActions['ACTION_EDIT'] || $arAllowedTaskActions['ACTION_CHANGE_DEADLINE']) { echo 'true'; } else { echo 'false'; } ?> , canStartTimeTracking : <?php if ($arAllowedTaskActions['ACTION_START_TIME_TRACKING']) { ?> true<?php } else { ?> false<?php } ?> , ALLOW_TIME_TRACKING : <?php if (isset($arTask['ALLOW_TIME_TRACKING']) && $arTask['ALLOW_TIME_TRACKING'] === 'Y') { echo 'true'; } else { echo 'false'; } ?> , TIMER_RUN_TIME : <?php if ($runningTaskId == $arTask['ID']) { echo (int) $runningTaskTimer; } else { echo 'false'; } ?> , TIME_SPENT_IN_LOGS : <?php echo (int) $arTask['TIME_SPENT_IN_LOGS']; ?> , TIME_ESTIMATE : <?php echo (int) $arTask['TIME_ESTIMATE']; ?> , IS_TASK_TRACKING_NOW : <?php if ($runningTaskId == $arTask['ID']) { echo 'true'; } else { echo 'false'; } ?> , menuItems: [<?php tasksGetItemMenu($arTask, $arPaths, SITE_ID, $bGant, $top, $bSkipJsMenu); ?> ] <?php foreach ($arAdditionalFields as $key => $value) { echo ', ' . $key . ' : ' . $value . "\n"; } ?> } <?php }
} else { $arResult['SYSTEM_COLUMN_IDS'] = array(CTaskColumnList::SYS_COLUMN_CHECKBOX, CTaskColumnList::SYS_COLUMN_COMPLETE); // checkbox & complete columns } $oTimer = $arTimer = null; // we will load timer data on demand, only once $index = 0; $arResult['ITEMS'] = array(); foreach ($arParams['~DATA_COLLECTION'] as &$dataItem) { $arResult['ITEMS'][$index] = array('TASK' => $dataItem['TASK'], 'CHILDREN_COUNT' => $dataItem['CHILDREN_COUNT'], 'DEPTH' => isset($dataItem['DEPTH']) ? $dataItem['DEPTH'] : 0, 'UPDATES_COUNT' => isset($dataItem['UPDATES_COUNT']) ? $dataItem['UPDATES_COUNT'] : 0, 'PROJECT_EXPANDED' => isset($dataItem['PROJECT_EXPANDED']) ? $dataItem['PROJECT_EXPANDED'] : true, 'ALLOWED_ACTIONS' => null); if (isset($dataItem['ALLOWED_ACTIONS'])) { $arResult['ITEMS'][$index]['ALLOWED_ACTIONS'] = $dataItem['ALLOWED_ACTIONS']; } elseif (isset($dataItem['TASK']['META:ALLOWED_ACTIONS'])) { $arResult['ITEMS'][$index]['ALLOWED_ACTIONS'] = $dataItem['TASK']['META:ALLOWED_ACTIONS']; } elseif ($dataItem['TASK']['ID']) { $oTask = CTaskItem::getInstanceFromPool($dataItem['TASK']['ID'], $loggedInUser); $arResult['ITEMS'][$index]['ALLOWED_ACTIONS'] = $oTask->getAllowedTaskActionsAsStrings(); } if ($dataItem["TASK"]['ALLOW_TIME_TRACKING'] === 'Y') { if ($dataItem['TASK']['TIME_ESTIMATE'] > 0 && $arResult['ITEMS'][$index]['CURRENT_TASK_SPENT_TIME'] > $dataItem['TASK']['TIME_ESTIMATE']) { $arResult['ITEMS'][$index]['TASK_TIMER_OVERDUE'] = 'Y'; } else { $arResult['ITEMS'][$index]['TASK_TIMER_OVERDUE'] = 'N'; } // Lazy load timer data only once if ($oTimer === null) { $oTimer = CTaskTimerManager::getInstance($loggedInUser); $arTimer = $oTimer->getRunningTask(false); // false => allow use static cache $arResult['TIMER'] = $arTimer; }
$isIframe = false; } $APPLICATION->IncludeComponent("bitrix:tasks.task.detail.parts", ".default", array('INNER_HTML' => $_POST['INNER_HTML'], 'MODE' => $_POST['MODE'], 'BLOCKS' => array($_POST['BLOCK']), 'IS_IFRAME' => $isIframe, 'PATH_TO_TEMPLATES_TEMPLATE' => $_POST['PATH_TO_TEMPLATES_TEMPLATE'], 'PATH_TO_USER_PROFILE' => $_POST['PATH_TO_USER_PROFILE'], 'PATH_TO_TASKS_TASK' => $_POST['PATH_TO_TASKS_TASK'], 'FIRE_ON_CHANGED_EVENT' => $_POST['FIRE_ON_CHANGED_EVENT'], 'NAME_TEMPLATE' => $nameTemplate, 'LOAD_TASK_DATA' => 'Y', 'TASK_ID' => (int) $_POST['TASK_ID']), null, array('HIDE_ICONS' => 'Y')); break; default: CTaskAssert::logError('[0x4fae6498] Unexpected $_POST[\'BLOCK\'] value: ' . $_POST['BLOCK']); break; } } else { CTaskAssert::logError('[0x0907bb31] $_POST[\'BLOCK\'] expected, but not given'); } } elseif ($action === 'render_comments') { CModule::IncludeModule('tasks'); CModule::IncludeModule('forum'); $permission = 'A'; $oTask = CTaskItem::getInstanceFromPool($_POST['taskId'], $loggedInUserId); $arTask = $oTask->getData($bEscape = false); $arTaskUsers = CTasks::__GetSearchPermissions($arTask); if ($USER->CanAccess($arTaskUsers) === true || $USER->IsAdmin() || CTasksTools::IsPortalB24Admin()) { $permission = 'M'; } $APPLICATION->RestartBuffer(); header('Content-Type: text/html; charset=' . LANG_CHARSET); $APPLICATION->IncludeComponent("bitrix:forum.comments", "bitrix24", array("FORUM_ID" => $_POST['forumId'], "ENTITY_TYPE" => "TK", "ENTITY_ID" => $_POST['taskId'], "ENTITY_XML_ID" => "TASK_" . $_POST['taskId'], "URL_TEMPLATES_PROFILE_VIEW" => $_POST['PATH_TO_USER_PROFILE'], "MESSAGES_PER_PAGE" => $_POST['ITEM_DETAIL_COUNT'], "PAGE_NAVIGATION_TEMPLATE" => "arrows", "DATE_TIME_FORMAT" => CDatabase::DateFormatToPHP(FORMAT_DATETIME), "PATH_TO_SMILE" => $_POST['PATH_TO_FORUM_SMILE'], "EDITOR_CODE_DEFAULT" => "N", "SHOW_MODERATION" => "Y", "SHOW_AVATAR" => "Y", "SHOW_RATING" => $_POST['SHOW_RATING'], "RATING_TYPE" => $_POST['RATING_TYPE'], "SHOW_MINIMIZED" => "N", "USE_CAPTCHA" => "N", 'PREORDER' => 'N', "SHOW_LINK_TO_FORUM" => "N", "SHOW_SUBSCRIBE" => "N", "FILES_COUNT" => 10, "SHOW_WYSIWYG_EDITOR" => "Y", "AUTOSAVE" => true, "PERMISSION" => $permission, "NAME_TEMPLATE" => $_POST["NAME_TEMPLATE"], "MESSAGE_COUNT" => 3), null, array('HIDE_ICONS' => 'Y')); require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_after.php'; exit; } else { CTaskAssert::logError('[0x447f7b28] Unknown action: ' . $action); } } CMain::FinalActions();
$breakExecution = true; } break; case 'CTaskCheckListItem::complete()': case 'CTaskCheckListItem::renew()': case 'CTaskCheckListItem::delete()': case 'CTaskCheckListItem::isComplete()': case 'CTaskCheckListItem::update()': case 'CTaskCheckListItem::moveAfterItem()': CTaskAssert::assert(isset($arAction['taskId'], $arAction['itemId'])); // Is task id the result of previous operation in batch? $taskId = BXTasksResolveDynaParamValue($arAction['taskId'], array('$arOperationsResults' => $arOperationsResults)); // Is item id the result of previous operation in batch? $itemId = BXTasksResolveDynaParamValue($arAction['itemId'], array('$arOperationsResults' => $arOperationsResults)); CTaskAssert::assertLaxIntegers($taskId, $itemId); $oTask = CTaskItem::getInstanceFromPool($taskId, $loggedInUserId); $oCheckListItem = new CTaskCheckListItem($oTask, $itemId); $returnValue = null; switch ($arAction['operation']) { case 'CTaskCheckListItem::moveAfterItem()': $insertAfterItemId = BXTasksResolveDynaParamValue($arAction['insertAfterItemId'], array('$arOperationsResults' => $arOperationsResults)); CTaskAssert::assertLaxIntegers($insertAfterItemId); $oCheckListItem->moveAfterItem($insertAfterItemId); break; case 'CTaskCheckListItem::complete()': $oCheckListItem->complete(); break; case 'CTaskCheckListItem::renew()': $oCheckListItem->renew(); break; case 'CTaskCheckListItem::delete()':
/** * Move a specified check list item after another check list item */ public function moveAfter($id, $afterId) { // you can move check list items ONLY when you have write access to the task global $USER; $result = array(); if (($id = $this->checkId($id)) && ($afterId = $this->checkId($afterId))) { if ($id != $afterId) { // get task id $taskId = $this->getOwnerTaskId($id); if ($taskId) { $task = \CTaskItem::getInstanceFromPool($taskId, $USER->GetId()); // or directly, new \CTaskItem($taskId, $USER->GetId()); if (!$task->isActionAllowed(\CTaskItem::ACTION_EDIT)) { throw new Tasks\ActionNotAllowedException('Checklist move after', array('AUX' => array('ERROR' => array('TASK_ID' => $taskId, 'ITEM' => $id, 'AFTER_ITEM' => $afterId)))); } $item = new \CTaskCheckListItem($task, $id); $item->moveAfterItem($afterId); } } } return $result; }
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } if (!CModule::IncludeModule("tasks")) { ShowError(GetMessage("TASKS_MODULE_NOT_FOUND")); return; } $arResult['LOGGED_IN_USER'] = $USER->getId(); if (isset($arParams['~ALLOWED_ACTIONS'])) { $arResult['ALLOWED_ACTIONS'] = $arParams['~ALLOWED_ACTIONS']; } elseif (isset($arParams['~TASK']['META:ALLOWED_ACTIONS'])) { $arResult['ALLOWED_ACTIONS'] = $arParams['~TASK']['META:ALLOWED_ACTIONS']; } elseif ($arParams['~TASK']['ID']) { $oTask = CTaskItem::getInstanceFromPool($arParams['~TASK']['ID'], $arResult['LOGGED_IN_USER']); $arResult['ALLOWED_ACTIONS'] = $oTask->getAllowedTaskActionsAsStrings(); $arParams['~TASK']['META:ALLOWED_ACTIONS'] = $arResult['ALLOWED_ACTIONS']; } $arResult['IFRAME'] = null; if (isset($arParams['IFRAME'])) { $arResult['IFRAME'] = $arParams['IFRAME']; } if ($arParams["~TASK"]['ALLOW_TIME_TRACKING'] === 'Y') { if ($arParams['~TASK']['TIME_ESTIMATE'] > 0 && $arResult['CURRENT_TASK_SPENT_TIME'] > $arParams['~TASK']['TIME_ESTIMATE']) { $arResult['TASK_TIMER_OVERDUE'] = 'Y'; } else { $arResult['TASK_TIMER_OVERDUE'] = 'N'; } $oTimer = CTaskTimerManager::getInstance($arResult['LOGGED_IN_USER']); $arTimer = $oTimer->getRunningTask(false);
protected static function doUpdate($userId, $taskId, array $data, array $parameters, Collection $errors) { $task = \CTaskItem::getInstanceFromPool($taskId, $userId); if (!$task->isActionAllowed(\CTaskItem::ACTION_CHANGE_DIRECTOR)) { unset($data['CREATED_BY']); } if (!is_array($parameters['TASK_ACTION_UPDATE_PARAMETERS'])) { $parameters['TASK_ACTION_UPDATE_PARAMETERS'] = array(); } $task->update($data, $parameters['TASK_ACTION_UPDATE_PARAMETERS']); if (is_array($data[static::SE_PREFIX . 'CHECKLIST']) && !empty($data[static::SE_PREFIX . 'CHECKLIST'])) { // add checklist here } return $task; }
} } } } $arFields["REPLICATE_PARAMS"] = array(); foreach ($_POST as $field => $value) { if (substr($field, 0, 10) == "REPLICATE_") { $arFields["REPLICATE_PARAMS"][substr($field, 10)] = substr($field, -5) == "_DATE" ? ConvertDateTime($value) : $value; } } $arChecklistItems = array(); $arResult["ERRORS"] = array(); if ($arResult["ACTION"] == "edit") { $arFields["RESPONSIBLE_ID"] = $_POST["RESPONSIBLE_ID"]; try { $oTask = CTaskItem::getInstanceFromPool($arParams['TASK_ID'], $loggedInUserId); if ($oTask->isActionAllowed(CTaskItem::ACTION_CHANGE_DIRECTOR) && isset($_POST['CREATED_BY'])) { $arFields["CREATED_BY"] = $_POST['CREATED_BY']; } // Save checklist data $arChecklistItems = $APPLICATION->IncludeComponent("bitrix:tasks.task.detail.parts", ".default", array('MODE' => 'JUST AFTER TASK EDITED', 'BLOCKS' => array("checklist"), 'TASK_ID' => (int) $arParams['TASK_ID']), null, array('HIDE_ICONS' => 'Y')); $oTask->update($arFields); } catch (Exception $e) { if ($e->GetCode() & TasksException::TE_FLAG_SERIALIZED_ERRORS_IN_MESSAGE) { $arResult['ERRORS'] = unserialize($e->GetMessage()); } else { $arResult['ERRORS'][] = array('text' => 'UNKNOWN ERROR OCCURED', 'id' => 'ERROR_TASKS_UNKNOWN'); } } $taskID = $arParams['TASK_ID']; } else {