示例#1
0
 public static function fetchListArray($userId, $arOrder, $arFilter, $arParams = array(), $arSelect = array())
 {
     $arItemsData = array();
     $rsData = null;
     try {
         $arParamsOut = array('USER_ID' => $userId, 'bIgnoreErrors' => true);
         if (isset($arParams['nPageTop'])) {
             $arParamsOut['nPageTop'] = $arParams['nPageTop'];
         } elseif (isset($arParams['NAV_PARAMS'])) {
             $arParamsOut['NAV_PARAMS'] = $arParams['NAV_PARAMS'];
         }
         $arFilter['CHECK_PERMISSIONS'] = 'Y';
         // Always check permissions
         if (!empty($arSelect)) {
             $arSelect = array_merge($arSelect, static::getMinimalSelectLegacy());
         }
         $arTasksIDs = array();
         $rsData = CTasks::getList($arOrder, $arFilter, $arSelect, $arParamsOut);
         if (!is_object($rsData)) {
             throw new TasksException();
         }
         while ($arData = $rsData->fetch()) {
             $taskId = (int) $arData['ID'];
             $arTasksIDs[] = $taskId;
             $arData['AUDITORS'] = array();
             $arData['ACCOMPLICES'] = array();
             $arItemsData[$taskId] = $arData;
         }
         if (is_array($arTasksIDs) && !empty($arTasksIDs)) {
             // fill ACCOMPLICES and AUDITORS
             $rsMembers = CTaskMembers::GetList(array(), array('TASK_ID' => $arTasksIDs));
             if (!is_object($rsMembers)) {
                 throw new TasksException();
             }
             while ($arMember = $rsMembers->fetch()) {
                 $taskId = (int) $arMember['TASK_ID'];
                 if (in_array($taskId, $arTasksIDs, true)) {
                     if ($arMember['TYPE'] === 'A') {
                         $arItemsData[$taskId]['ACCOMPLICES'][] = $arMember['USER_ID'];
                     } elseif ($arMember['TYPE'] === 'U') {
                         $arItemsData[$taskId]['AUDITORS'][] = $arMember['USER_ID'];
                     }
                 }
             }
             // fill tags
             if (isset($arParams['LOAD_TAGS']) && $arParams['LOAD_TAGS']) {
                 foreach ($arTasksIDs as $taskId) {
                     $arItemsData[$taskId]['TAGS'] = array();
                 }
                 $rsTags = CTaskTags::getList(array(), array('TASK_ID' => $arTasksIDs));
                 if (!is_object($rsTags)) {
                     throw new TasksException();
                 }
                 while ($arTag = $rsTags->fetch()) {
                     $taskId = (int) $arTag['TASK_ID'];
                     if (in_array($taskId, $arTasksIDs, true)) {
                         $arItemsData[$taskId]['TAGS'][] = $arTag['NAME'];
                     }
                 }
             }
         }
     } catch (Exception $e) {
         CTaskAssert::logError('[0xa819f6f1] probably SQL error at ' . $e->getFile() . ':' . $e->getLine());
         throw new TasksException('', TasksException::TE_SQL_ERROR | TasksException::TE_ACTION_FAILED_TO_BE_PROCESSED);
     }
     return array($arItemsData, $rsData);
 }
示例#2
0
 private static function setTargetSorting($userId, $groupId, $sourceId, $targetId)
 {
     $filterCtrl = CTaskFilterCtrl::getInstance($userId, $groupId > 0);
     $filter = $filterCtrl->getFilterPresetConditionById(CTaskFilterCtrl::STD_PRESET_ALL_MY_TASKS);
     $filter["CHECK_PERMISSIONS"] = "Y";
     $filter["SORTING"] = "N";
     if ($groupId > 0) {
         $filter["GROUP_ID"] = $groupId;
     }
     $order = array("SORTING" => "ASC", "STATUS_COMPLETE" => "ASC", "DEADLINE" => "ASC,NULLS", "ID" => "ASC");
     $params = array("USER_ID" => $userId, "bIgnoreErrors" => true, "nPageTop" => static::MAX_PAGE_TOP);
     $result = \CTasks::getList($order, $filter, array("ID", "SORTING"), $params);
     $lastSortedItem = static::getMaxSort($userId, $groupId);
     $prevTaskSort = $lastSortedItem ? intval($lastSortedItem["SORT"]) : 0;
     $prevTaskId = $lastSortedItem && $lastSortedItem["TASK_ID"] ? $lastSortedItem["TASK_ID"] : 0;
     list($items, $targetFound) = static::getSortedItems($result, $userId, $groupId, $prevTaskSort, $prevTaskId, $sourceId, $targetId);
     static::insertBatch($items);
     if (count($items) > 0) {
         if ($lastSortedItem) {
             static::update($lastSortedItem["ID"], array("NEXT_TASK_ID" => $items[0]["TASK_ID"]));
         }
         if (!$targetFound) {
             static::setTargetSorting($userId, $groupId, $sourceId, $targetId);
         }
     }
 }
示例#3
0
 public static function Delete($ID, $arParams = array())
 {
     global $DB, $USER;
     $ID = intval($ID);
     if ($ID < 1) {
         return false;
     }
     $executiveUserId = null;
     if (isset($arParams['USER_ID'])) {
         $executiveUserId = (int) $arParams['USER_ID'];
     } elseif (is_object($USER) && method_exists($USER, 'getId')) {
         $executiveUserId = (int) $USER->getId();
     }
     /** @noinspection PhpDeprecationInspection */
     $rsRemovingLogItem = self::getByID($ID);
     if ($rsRemovingLogItem && ($arRemovingLogItem = $rsRemovingLogItem->fetch())) {
         $taskId = $arRemovingLogItem['TASK_ID'];
     } else {
         return false;
     }
     $curDuration = 0;
     $rsTask = CTasks::getList(array(), array('ID' => $taskId), array('ID', 'TIME_SPENT_IN_LOGS'));
     if ($rsTask && ($arTask = $rsTask->fetch())) {
         $curDuration = (int) $arTask['TIME_SPENT_IN_LOGS'];
     }
     foreach (GetModuleEvents('tasks', 'OnBeforeTaskElapsedTimeDelete', true) as $arEvent) {
         if (ExecuteModuleEventEx($arEvent, array($ID, $arRemovingLogItem)) === false) {
             return false;
         }
     }
     $strSql = "DELETE FROM b_tasks_elapsed_time WHERE ID = " . $ID;
     $rc = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     $occurAsUserId = CTasksTools::getOccurAsUserId();
     if (!$occurAsUserId) {
         $occurAsUserId = $executiveUserId ? $executiveUserId : 1;
     }
     $oLog = new CTaskLog();
     $oLog->Add(array('TASK_ID' => $taskId, 'USER_ID' => $occurAsUserId, '~CREATED_DATE' => $DB->currentTimeFunction(), 'FIELD' => 'TIME_SPENT_IN_LOGS', 'FROM_VALUE' => $curDuration, 'TO_VALUE' => $curDuration - (int) $arRemovingLogItem['SECONDS']));
     foreach (GetModuleEvents('tasks', 'OnTaskElapsedTimeDelete', true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array($ID, &$arRemovingLogItem));
     }
     return $rc;
 }
示例#4
0
 private static function iterateAgentWork($arFilterExpiredSoon, $arFilterExpired, $arSelect, $arParams)
 {
     global $DB;
     $arTasks = array();
     $arExpiredTaskIds = array();
     $arExpiredSoonTaskIds = array();
     $rs = CTasks::getList(array(), $arFilterExpired, $arSelect, $arParams);
     while ($arTask = $rs->fetch()) {
         $taskId = (int) $arTask['ID'];
         $arExpiredTaskIds[] = $taskId;
         $arTasks[$taskId] = array('CREATED_BY' => $arTask['CREATED_BY'], 'RESPONSIBLE_ID' => $arTask['RESPONSIBLE_ID'], 'REAL_STATUS' => $arTask['REAL_STATUS'], 'DEADLINE' => $arTask['DEADLINE'], 'ACCOMPLICES' => array(), 'AUDITORS' => array(), 'DEADLINE_COUNTED' => $arTask['DEADLINE_COUNTED']);
     }
     $rs = CTasks::getList(array(), $arFilterExpiredSoon, $arSelect, $arParams);
     while ($arTask = $rs->fetch()) {
         $taskId = (int) $arTask['ID'];
         $arExpiredSoonTaskIds[] = $taskId;
         $arTasks[$taskId] = array('CREATED_BY' => $arTask['CREATED_BY'], 'RESPONSIBLE_ID' => $arTask['RESPONSIBLE_ID'], 'REAL_STATUS' => $arTask['REAL_STATUS'], 'DEADLINE' => $arTask['DEADLINE'], 'ACCOMPLICES' => array(), 'AUDITORS' => array(), 'DEADLINE_COUNTED' => $arTask['DEADLINE_COUNTED']);
     }
     $arAllTaskIds = array_merge($arExpiredTaskIds, $arExpiredSoonTaskIds);
     // mark, that this tasks are counted
     if (count($arExpiredTaskIds)) {
         $strSql = "UPDATE b_tasks \n\t\t\t\tSET DEADLINE_COUNTED = " . self::DEADLINE_COUNTED_AS_EXPIRED . " \n\t\t\t\tWHERE ID IN(" . implode(',', $arExpiredTaskIds) . ")";
         $rc = $DB->query($strSql, $bIgnoreDbErrors = true);
         if (!$rc) {
             throw new Exception();
         }
     }
     if (count($arExpiredSoonTaskIds)) {
         $strSql = "UPDATE b_tasks \n\t\t\t\tSET DEADLINE_COUNTED = " . self::DEADLINE_COUNTED_AS_EXPIRED_CANDIDATE . " \n\t\t\t\tWHERE ID IN(" . implode(',', $arExpiredSoonTaskIds) . ")";
         $rc = $DB->query($strSql, $bIgnoreDbErrors = true);
         if (!$rc) {
             throw new Exception();
         }
     }
     // get ACCOMPLICES and AUDITORS
     $allTasksCount = count($arAllTaskIds);
     if ($allTasksCount) {
         $rsMembers = CTaskMembers::GetList(array(), array('TASK_ID' => $arAllTaskIds));
         if (!is_object($rsMembers)) {
             throw new Exception();
         }
         while ($arMember = $rsMembers->fetch()) {
             $taskId = (int) $arMember['TASK_ID'];
             if ($arMember['TYPE'] === 'A') {
                 $arTasks[$taskId]['ACCOMPLICES'][] = (int) $arMember['USER_ID'];
             } elseif ($arMember['TYPE'] === 'U') {
                 $arTasks[$taskId]['AUDITORS'][] = (int) $arMember['USER_ID'];
             }
         }
     }
     // process counters
     $objSelf = self::getInstance();
     foreach ($arTasks as $arTask) {
         $objSelf->actualizeExpirityCounters($arTask['DEADLINE'], $arTask['DEADLINE_COUNTED'], $arTask['REAL_STATUS'], $arTask['RESPONSIBLE_ID'], $arTask['CREATED_BY'], $arTask['AUDITORS'], $arTask['ACCOMPLICES']);
     }
     return $allTasksCount;
 }