$depth = intval($_POST["depth"]) + 1; $bGannt = false; if (isset($_POST['bGannt'])) { $bGannt = (bool) $_POST['bGannt']; } // Override CHECK_PERMISSIONS, if it was given in $_POST['filter'] $arFilter['CHECK_PERMISSIONS'] = 'Y'; $rsTasks = CTasks::GetList($arOrder, $arFilter); $arTasks = array(); $arTasksIDs = array(); $arViewed = array(); while ($task = $rsTasks->GetNext()) { $arTasks[$task["ID"]] = $task; $arTasksIDs[] = $task["ID"]; $arViewed[$task["ID"]] = $task["VIEWED_DATE"] ? $task["VIEWED_DATE"] : $task["CREATED_DATE"]; $rsTaskFiles = CTaskFiles::GetList(array(), array("TASK_ID" => $task["ID"])); $task["FILES"] = array(); while ($arTaskFile = $rsTaskFiles->Fetch()) { $rsFile = CFile::GetByID($arTaskFile["FILE_ID"]); if ($arFile = $rsFile->Fetch()) { $task["FILES"][] = $arFile; } } $arTasks[$task["ID"]] = $task; } unset($arFilter["PARENT_ID"]); $rsChildrenCount = CTasks::GetChildrenCount($arFilter, $arTasksIDs); if ($rsChildrenCount) { while ($arChildrens = $rsChildrenCount->Fetch()) { $arChildrenCount["PARENT_" . $arChildrens["PARENT_ID"]] = $arChildrens["CNT"]; }
/** * @param integer $fileId * @throws TasksException * @throws CTaskAssertException * * This function is deprecated, it wont work with a new disk-based file attachment mechanism * * @deprecated */ public function removeAttachedFile($fileId) { CTaskAssert::assertLaxIntegers($fileId); CTaskAssert::assert($fileId > 0); if (!$this->isActionAllowed(self::ACTION_EDIT)) { CTaskAssert::log('access denied while trying to remove file: fileId=' . $fileId . ', taskId=' . $this->taskId . ', userId=' . $this->executiveUserId, CTaskAssert::ELL_WARNING); throw new TasksException('', TasksException::TE_ACTION_NOT_ALLOWED); } if (!CTaskFiles::Delete($this->taskId, $fileId)) { throw new TasksException('File #' . $fileId . ' not attached to task #' . $this->taskId, TasksException::TE_FILE_NOT_ATTACHED_TO_TASK); } }
function UpdateListItems($listName, $updates) { global $USER, $DB; $arPaths = array('user' => COption::GetOptionString('intranet', 'path_task_user_entry', '/company/personal/user/#USER_ID#/tasks/task/view/#TASK_ID#/'), 'group' => COption::GetOptionString('intranet', 'path_task_group_entry', '/workgroups/group/#GROUP_ID#/tasks/task/view/#TASK_ID#/')); if (!$this->__Init()) { return $this->error; } if (!($listName_original = CIntranetUtils::checkGUID($listName))) { return new CSoapFault('Data error', 'Wrong GUID - ' . $listName); } $listName = ToUpper(CIntranetUtils::makeGUID($listName_original)); $obResponse = new CXMLCreator('Results'); $obBatch = $updates->children[0]; $atrONERROR = $obBatch->getAttribute('OnError'); $atrDATEINUTC = $obBatch->getAttribute('DateInUtc'); $atrPROPERTIES = $obBatch->getAttribute('Properties'); $arChanges = $obBatch->children; $arResultIDs = array(); $dateStart = ConvertTimeStamp(strtotime('-1 hour'), 'FULL'); $arResponseRows = array(); $arResponseRowsError = array(); $arReplicationIDs = array(); foreach ($arChanges as $obMethod) { $arData = array('_command' => $obMethod->getAttribute('Cmd')); $ID = false; $bUpdate = true; $arElement = false; $arSection = $this->arUsersSection; foreach ($obMethod->children as $obField) { $name = $obField->getAttribute('Name'); if ($name == 'MetaInfo') { $name .= '_' . $obField->getAttribute('Property'); } $arData[$name] = $obField->content; } $obResponseRow = new CXMLCreator('Result'); $obResponseRow->setAttribute('ID', $obMethod->getAttribute('ID') . ',' . $arData['_command']); $obResponseRow->setAttribute('List', $listName); $obResponseRow->addChild($obErrorCode = new CXMLCreator('ErrorCode')); if ($arData['ID'] > 0) { $rsElement = CTasks::GetById($arData['ID']); if ($rsElement && ($arElement = $rsElement->Fetch())) { if (!is_array($arElement)) { $obErrorCode->setData('0x81020016'); $bUpdate = false; } else { if ($arElement['taskType'] == "group") { $arGroupTmp = CSocNetGroup::GetByID($arElement['ownerId']); if ($arGroupTmp["CLOSED"] == "Y") { if (COption::GetOptionString("socialnetwork", "work_with_closed_groups", "N") != "Y") { return new CSoapFault('Cannot modify archive group task', 'Cannot modify archive group task'); } } } $arElement['arParams'] = array(intval($arElement['GROUP_ID']) > 0 ? 'PATH_TO_USER_TASKS_TASK' : 'PATH_TO_GROUP_TASKS_TASK' => str_replace(array('#USER_ID#', '#GROUP_ID#', '#TASK_ID#'), array($USER->GetID(), $arSection['XML_ID'], $arElement['ID']), $arPaths[$arElement['taskType']])); } } else { $obErrorCode->setData('0x81020016'); $bUpdate = false; } } if ($bUpdate) { if ($arData['_command'] == 'Delete' && $arElement["CREATED_BY"] == $USER->GetID()) { $arError = false; if (!CTasks::Delete($arElement['ID'])) { $obErrorCode->setData('0x81020014'); } else { $obErrorCode->setData('0x00000000'); } } elseif ($arData['_command'] == 'New' || $arData['_command'] == 'Update') { $arData['Body'] = trim($arData['Body']); $arData['Body'] = str_replace(array(" ", " ", ' '), "", $arData['Body']); $arData['Body'] = preg_replace("/<![^>]*>/", '', $arData['Body']); if (($pos = strpos($arData['Body'], '<BODY>')) !== false) { $arData['Body'] = substr($arData['Body'], $pos + 6); } echo $pos . ' '; if (($pos = strpos($arData['Body'], '</BODY>')) !== false) { $arData['Body'] = substr($arData['Body'], 0, $pos); } echo $pos . ' '; $TZBias = intval(date('Z')); $arData['StartDate'] = $arData['StartDate'] ? $this->__makeTS($arData['StartDate']) + $TZBias : ''; $arData['DueDate'] = $arData['DueDate'] ? $this->__makeTS($arData['DueDate']) + $TZBias : ''; $arData['MetaInfo_DateComplete'] = $arData['MetaInfo_DateComplete'] ? $this->__makeTS($arData['EndDate']) + $TZBias : ''; $probablyHtmlInDescription = strpos($arData['Body'], '<') !== false && strpos($arData['Body'], '>'); $arFields = array('DESCRIPTION_IN_BBCODE' => $probablyHtmlInDescription ? 'N' : 'Y', 'CHANGED_BY' => $USER->GetID(), 'CHANGED_DATE' => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), time()), 'SITE_ID' => SITE_ID, 'TITLE' => $arData['Title'], 'START_DATE_PLAN' => $arData['StartDate'] ? ConvertTimeStamp($arData['StartDate']) : '', 'DEADLINE' => $arData['DueDate'] ? ConvertTimeStamp($arData['DueDate']) : '', 'DESCRIPTION' => $arData['Body'], 'PRIORITY' => isset($arData['Priority']) ? intval($arData['Priority']) : 1, 'DURATION_PLAN' => $arData['MetaInfo_TotalWork'] / 60, 'DURATION_FACT' => $arData['MetaInfo_ActualWork'] / 60, 'CLOSED_DATE' => $arData['MetaInfo_DateComplete'] ? ConvertTimeStamp($arData['MetaInfo_DateComplete']) : ''); if (in_array($arData['Status'], $this->arStatuses)) { $arFields["STATUS"] = $arData['Status']; } if ($assigned_to = $arData['AssignedTo']) { if ($USER_ID = $this->__getUser($assigned_to)) { $arFields['RESPONSIBLE_ID'] = $USER_ID; } else { $obErrorCode->setData('0x81020054'); $bUpdate = false; } } else { $arFields['RESPONSIBLE_ID'] = $USER->getId(); } if ($bUpdate) { CTimeZone::Disable(); $ID = 0; $obTask = new CTasks(); $arError = false; if ($arData['_command'] == 'New') { if ($arFields["RESPONSIBLE_ID"] == $USER->GetID() || CTasks::IsSubordinate($arFields["RESPONSIBLE_ID"], $USER->GetID())) { $arFields["STATUS"] = 2; } else { $arFields["STATUS"] = 1; } $arFields['OUTLOOK_VERSION'] = 1; $arFields["CREATED_BY"] = $USER->GetID(); $arFields["CREATED_DATE"] = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), time()); if ($ID = $obTask->Add($arFields)) { $arReplicationIDs[$ID] = $arData['MetaInfo_ReplicationID']; $obErrorCode->setData('0x00000000'); } } else { if ($arElement["CREATED_BY"] == $USER->GetID() || $arElement["RESPONSIBLE_ID"] == $USER->GetID()) { if ($arElement["CREATED_BY"] != $USER->GetID()) { unset($arFields["TITLE"], $arFields["START_DATE_PLAN"], $arFields["DESCRIPTION"], $arFields["PRIORITY"], $arFields["DURATION_PLAN"], $arFields["CLOSED_DATE"]); if ($arElement["ALLOW_CHANGE_DEADLINE"] != "Y") { unset($arFields["DEADLINE"]); } if ($arElement["TASK_CONTROL"] != "Y" && $arFields["STATUS"] == 5) { $arFields["STATUS"] = 4; } } elseif ($arElement["RESPONSIBLE_ID"] != $USER->GetID() && ($arFields["STATUS"] == 6 || $arFields["STATUS"] == 3)) { unset($arFields["STATUS"]); } $arFields['OUTLOOK_VERSION'] = $arData['owshiddenversion']; if (sizeof($arFields) > 0) { if ($obTask->Update($arData['ID'], $arFields)) { $ID = $arData['ID']; $obErrorCode->setData('0x00000000'); } } } } CTimeZone::Enable(); if (is_array($obTask->GetErrors()) && count($obTask->GetErrors()) > 0) { $ID = 0; $obErrorCode->setData('0x81020014'); $bUpdate = false; } else { $taskType = $arElement ? $arElement['taskType'] : 'user'; $ownerId = $arElement ? $arElement['ownerId'] : $USER->GetID(); $arParams = $arElement ? $arElement['arParams'] : array('PATH_TO_USER_TASKS_TASK' => str_replace(array('#USER_ID#', '#GROUP_ID#', '#TASK_ID#'), array($USER->GetID(), $arSection['XML_ID'], $ID), $arPaths['user'])); } } } } if ($ID > 0) { $arResponseRows[$ID] = $obResponseRow; } else { $arResponseRowsError[] = $obResponseRow; } } if (sizeof($arResponseRows) > 0) { $dbRes = CTasks::GetList(array('ID' => 'ASC'), array('ID' => array_keys($arResponseRows), 'MEMBER' => $USER->GetID())); while ($arRes = $dbRes->Fetch()) { if ($arResponseRows[$arRes['ID']]) { $rsFiles = CTaskFiles::GetList(array(), array("TASK_ID" => $arRes["ID"])); $arRes["FILES"] = array(); while ($arFiles = $rsFiles->Fetch()) { $arRes["FILES"][] = $arFiles["FILE_ID"]; } $obRow = $this->__getRow($arRes, $listName, $last_change = 0); if ($arReplicationIDs[$arRes['ID']]) { $obRow->setAttribute('ows_MetaInfo_ReplicationID', $arReplicationIDs[$arRes['ID']]); } $obRow->setAttribute('xmlns:z', "#RowsetSchema"); $arResponseRows[$arRes['ID']]->addChild($obRow); $obResponse->addChild($arResponseRows[$arRes['ID']]); } } } foreach ($arResponseRowsError as $obChange) { $obResponse->addChild($obChange); } return array('UpdateListItemsResult' => $obResponse); }
/** * @param integer $TASK_ID * @param array $SAVE_FILES * @return bool|CDBResult * * @var CDatabase $DB */ public static function DeleteByTaskID($TASK_ID, $SAVE_FILES = array()) { global $DB; $rsTaskFiles = CTaskFiles::GetList(array(), array("TASK_ID" => $TASK_ID)); $sqrWhereAdditional = ''; if (is_array($SAVE_FILES) && count($SAVE_FILES)) { $sqrWhereAdditional .= 'AND FILE_ID NOT IN (' . implode(',', array_map('intval', $SAVE_FILES)) . ')'; } $TASK_ID = intval($TASK_ID); $strSql = "DELETE FROM b_tasks_file WHERE TASK_ID = " . $TASK_ID . ' ' . $sqrWhereAdditional; $result = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); if ($result) { $arFilesToDelete = array(); while ($arTaskFiles = $rsTaskFiles->Fetch()) { // Skip files, that attached to some existing tasks $rsFiles = CTaskFiles::GetList(array(), array("FILE_ID" => $arTaskFiles["FILE_ID"])); if (!($arFile = $rsFiles->Fetch())) { if (!in_array($arTaskFiles["FILE_ID"], $SAVE_FILES)) { $arFilesToDelete[] = $arTaskFiles["FILE_ID"]; } } } foreach ($arFilesToDelete as $file) { CFile::Delete($file); } } return $result; }
for ($i = 0; $i < $count; $i++) { $fileID = CTaskFiles::saveFileTemporary($curUserId, $_FILES["task-attachments"]["name"][$i], $_FILES["task-attachments"]["size"][$i], $_FILES["task-attachments"]["tmp_name"][$i], $_FILES["task-attachments"]["type"][$i]); $tmp = array("name" => $_FILES["task-attachments"]["name"][$i], "fileID" => $fileID); if ($fileID) { $tmp["fileULR"] = "/bitrix/components/bitrix/tasks.task.detail/show_file.php?fid=" . (int) $fileID; } $arResult[] = $tmp; } } $APPLICATION->RestartBuffer(); Header('Content-Type: text/html; charset=' . LANG_CHARSET); ?> <script type="text/javascript"> <?php echo CUtil::JSEscape($callbackFunctionName); ?> (<?php echo CUtil::PhpToJsObject($arResult); ?> , <?php echo intval($_POST["uniqueID"]); ?> ); </script> <?php } elseif ($_POST["mode"] == "delete") { if (check_bitrix_sessid()) { CTaskFiles::removeTemporaryFile($curUserId, (int) $_POST['fileID']); } } die;
$items[$id] = $data; } else { $items[] = $data; } } } $_POST['CHECKLIST_ITEMS'] = $items; // too bad } $arResult["ERRORS"] = $template->GetErrors(); if (sizeof($arResult["ERRORS"]) == 0) { $arUploadedFils = unserialize($arFields["FILES"]); if (is_array($arUploadedFils) && count($arUploadedFils)) { $userId = (int) $USER->GetID(); foreach ($arUploadedFils as $fileId) { CTaskFiles::removeTemporaryFile($userId, (int) $fileId); } } // add\update check list items here try { \Bitrix\Tasks\Template\CheckListItemTable::updateForTemplate($templateID, $_POST['CHECKLIST_ITEMS']); } catch (\Bitrix\Main\ArgumentException $e) { } if (strlen($_POST["save"]) > 0) { if ((string) $arParams['PATH_TO_TEMPLATES_TEMPLATE'] !== '' && intval($templateID)) { $redirectPath = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_TEMPLATES_TEMPLATE"], array('template_id' => $templateID, 'action' => 'view')); } else { $redirectPath = $arResult["RETURN_URL"]; } } else { $redirectPath = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_TASKS_TEMPLATES"], array());
} unset($rsUser, $arUser); // Store photos links in task data foreach ($arResult['TASKS'] as $key => $value) { $arResult['TASKS'][$key]['META::ORIGINATOR_PHOTO_SRC'] = false; $arResult['TASKS'][$key]['META::RESPONSIBLE_PHOTO_SRC'] = false; if (isset($arUsersPhotos[$value['CREATED_BY']])) { $arResult['TASKS'][$key]['META::ORIGINATOR_PHOTO_SRC'] = $arUsersPhotos[$value['CREATED_BY']]; } if (isset($arUsersPhotos[$value['RESPONSIBLE_ID']])) { $arResult['TASKS'][$key]['META::RESPONSIBLE_PHOTO_SRC'] = $arUsersPhotos[$value['RESPONSIBLE_ID']]; } } if (!$bSkipFiles) { if (count($arTasksIDs)) { $rsTaskFiles = CTaskFiles::GetList(array(), array('TASK_ID' => $arTasksIDs)); while ($arTaskFile = $rsTaskFiles->Fetch()) { $rsFile = CFile::GetByID($arTaskFile['FILE_ID']); if ($arFile = $rsFile->Fetch()) { $arResult['TASKS'][$arTaskFile['TASK_ID']]['FILES'][] = $arFile; } } } } if (!$bSkipUpdatesCount) { $arResult['UPDATES_COUNT'] = CTasks::GetUpdatesCount($arViewedDates); } if (!$bSkipGroupsDataFetch) { // collect groups with tasks $arResult['GROUPS'] = array(0 => array('ID' => 0, 'NAME' => GetMessage('MB_TASKS_TASKS_LIST_PSEUDO_GROUP_NAME'), 'META:TASKS_IN_GROUP' => $arGroupsStat[0]['TASKS_IN_GROUP'], 'META:TASKS_STATUSES' => $arGroupsStat[0]['STATUSES'], 'META:TASKS_PRIORITIES' => $arGroupsStat[0]['PRIORITIES'])); // List of groups to be fetched from DB
function Delete($ID) { global $DB, $USER_FIELD_MANAGER; $ID = intval($ID); if ($ID > 0) { $rsTemplate = CTaskTemplates::GetByID($ID); if ($arTemplate = $rsTemplate->Fetch()) { // Remove all agents for this template /** @noinspection PhpDynamicAsStaticMethodCallInspection */ CAgent::RemoveAgent('CTasks::RepeatTaskByTemplateId(' . $ID . ');', 'tasks'); /** @noinspection PhpDynamicAsStaticMethodCallInspection */ CAgent::RemoveAgent('CTasks::RepeatTaskByTemplateId(' . $ID . ', 0);', 'tasks'); /** @noinspection PhpDynamicAsStaticMethodCallInspection */ CAgent::RemoveAgent('CTasks::RepeatTaskByTemplateId(' . $ID . ', 1);', 'tasks'); if ($arTemplate["FILES"]) { $arFiles = unserialize($arTemplate["FILES"]); if (is_array($arFiles)) { $arFilesToDelete = array(); foreach ($arFiles as $file) { $rsFile = CTaskFiles::GetList(array(), array("FILE_ID" => $file)); if (!($arFile = $rsFile->Fetch())) { $arFilesToDelete[] = $file; } } foreach ($arFilesToDelete as $file) { CFile::Delete($file); } } } $dbConnection = \Bitrix\Main\HttpApplication::getConnection(); $strSql = "DELETE FROM b_tasks_template WHERE ID = " . $ID; if ($DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__)) { $USER_FIELD_MANAGER->Delete("TASKS_TASK_TEMPLATE", $ID); // drop children (sub-templates) $dbConnection->query("delete from b_tasks_template where ID in (" . Template\DependencyTable::getSubTreeSql($ID) . ")"); // drop tree records for this templates and it`s children try { Template\DependencyTable::dropLinkL($ID); } catch (\Bitrix\Tasks\DB\Tree\TargetNodeNotFoundException $e) { } return true; } } } return false; }
function AddFiles($ID, $arFiles = array(), $arParams = array()) { $arFilesIds = array(); $userId = null; $bCheckRightsOnFiles = false; if (is_array($arParams)) { if (isset($arParams['USER_ID']) && $arParams['USER_ID'] > 0) { $userId = (int) $arParams['USER_ID']; } if (isset($arParams['CHECK_RIGHTS_ON_FILES'])) { $bCheckRightsOnFiles = $arParams['CHECK_RIGHTS_ON_FILES']; } } if ($userId === null) { global $USER; $userId = is_object($USER) ? intval($USER->GetID()) : 1; } if ($arFiles) { foreach ($arFiles as $file) { $arFilesIds[] = (int) $file; } if (count($arFilesIds)) { CTaskFiles::AddMultiple($ID, $arFilesIds, array('USER_ID' => $userId, 'CHECK_RIGHTS_ON_FILES' => $bCheckRightsOnFiles)); } } }
if ($arParams["FILE_ID"] > 0) { if ($arParams["TEMPLATE_ID"]) { $rsTemplate = CTaskTemplates::GetList(array(), array("ID" => $arParams["TEMPLATE_ID"], "CREATED_BY" => $USER->GetID())); if ($arTemplate = $rsTemplate->Fetch()) { $arTemplate["FILES"] = unserialize($arTemplate["FILES"]); if (is_array($arTemplate["FILES"]) && in_array($arParams["FILE_ID"], $arTemplate["FILES"])) { $bFound = true; } } } else { if ($arParams['TASK_ID']) { if (CTaskFiles::isUserfieldFileAccessibleByUser($arParams['TASK_ID'], $arParams['FILE_ID'], $USER->GetID())) { $bFound = true; } } if (!$bFound && CTaskFiles::isFileAccessibleByUser((int) $arParams["FILE_ID"], $USER->GetID())) { $bFound = true; } } } if ($bFound) { $arResult["FILE"] = CFile::GetFileArray($arParams["FILE_ID"]); } } if (!$arResult["FILE"]) { require $_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/include/prolog_after.php"; ShowError("File not found"); require $_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/include/epilog.php"; die; } set_time_limit(0);
$arTemplate["ACCOMPLICES"] = $arTemplate["~ACCOMPLICES"] ? unserialize($arTemplate["~ACCOMPLICES"]) : array(); $arTemplate["AUDITORS"] = $arTemplate["~AUDITORS"] ? unserialize($arTemplate["~AUDITORS"]) : array(); $arTemplate["RESPONSIBLES"] = $arTemplate["~RESPONSIBLES"] ? unserialize($arTemplate["~RESPONSIBLES"]) : array(); $arTemplate["FILES"] = $arTemplate["~FILES"] ? unserialize($arTemplate["~FILES"]) : array(); $arTemplate["TAGS"] = $arTemplate["~TAGS"] = $arTemplate["~TAGS"] ? unserialize($arTemplate["~TAGS"]) : ""; $arTemplate["DEPENDS_ON"] = $arTemplate["~DEPENDS_ON"] ? unserialize($arTemplate["~DEPENDS_ON"]) : array(); $arTemplate["DESCRIPTION"] = $arTemplate["~DESCRIPTION"]; $arTemplate["CREATED_BY_NAME"] = $arTemplate["~CREATED_BY_NAME"]; $arTemplate["CREATED_BY_LAST_NAME"] = $arTemplate["~CREATED_BY_LAST_NAME"]; $arTemplate["CREATED_BY_SECOND_NAME"] = $arTemplate["~CREATED_BY_SECOND_NAME"]; $arTemplate["CREATED_BY_LOGIN"] = $arTemplate["~CREATED_BY_LOGIN"]; if (!empty($arTemplate["FILES"])) { foreach ($arTemplate["FILES"] as $key => $file) { $newFile = CFile::CopyFile($file); if ($newFile > 0) { CTaskFiles::markFileTemporary($loggedInUserId, $newFile); $arTemplate["FILES"][$key] = $newFile; } } } $arTemplate["REPLICATE_PARAMS"] = unserialize($arTemplate["~REPLICATE_PARAMS"]); if (is_array($arTemplate["REPLICATE_PARAMS"])) { foreach ($arTemplate["REPLICATE_PARAMS"] as $field => $value) { $arTemplate["REPLICATE_" . $field] = $value; } } if ($arTemplate["DEADLINE_AFTER"]) { $deadlineAfter = $arTemplate["DEADLINE_AFTER"] / (24 * 60 * 60); $arTemplate["DEADLINE"] = date($DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")), strtotime(date("Y-m-d 00:00") . " +" . $deadlineAfter . " days")); } // check list items