예제 #1
0
 public static function SyncTaskItems($type, $userId, $arUserTaskItems)
 {
     global $DB;
     $arTasksReturn = array();
     $arDelete = array();
     $strSql = "SELECT ID \n\t\t\tFROM b_tasks \n\t\t\tWHERE \n\t\t\t\tEXCHANGE_ID IS NOT NULL \n\t\t\t\tAND ZOMBIE = 'N'\n\t\t\t\tAND RESPONSIBLE_ID = " . intval($userId);
     $rsIDs = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     while ($arID = $rsIDs->Fetch()) {
         $arDelete[] = (int) $arID["ID"];
     }
     foreach ($arUserTaskItems as $taskItem) {
         $strSql = "SELECT ID, EXCHANGE_MODIFIED \n\t\t\t\tFROM b_tasks \n\t\t\t\tWHERE \n\t\t\t\t\tEXCHANGE_ID = '" . $DB->ForSql($taskItem["XML_ID"]) . "' \n\t\t\t\t\tAND ZOMBIE = 'N'\n\t\t\t\t\tAND RESPONSIBLE_ID = " . intval($userId);
         $rsTask = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if ($task = $rsTask->Fetch()) {
             $key = array_search($task["ID"], $arDelete);
             if ($key !== false) {
                 unset($arDelete[$key]);
             }
             if ($task["EXCHANGE_MODIFIED"] != $taskItem["MODIFICATION_LABEL"]) {
                 $arTasksReturn[] = array("XML_ID" => $taskItem["XML_ID"], "ID" => $task["ID"]);
                 $arDoNotDelete[] = $task["ID"];
             }
         } else {
             $arTasksReturn[] = array("XML_ID" => $taskItem["XML_ID"], "ID" => 0);
         }
     }
     if (sizeof($arDelete)) {
         // Remove only tasks with RESPONSIBLE_ID = $userId
         $strSql = "SELECT ID FROM b_tasks WHERE ID IN (" . implode(",", $arDelete) . ") AND RESPONSIBLE_ID = " . (int) $userId;
         $rc = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         while ($arItem = $rc->Fetch()) {
             CTasks::Delete($arItem['ID'], array('skipExchangeSync' => true));
         }
     }
     return $arTasksReturn;
 }
예제 #2
0
             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);
             }
         }
     } elseif ($_POST["mode"] == "reminders") {
         CTaskReminders::Delete(array("TASK_ID" => intval($_POST["id"]), "USER_ID" => $USER->GetID()));
         if (isset($_POST["reminders"])) {
             $obReminder = new CTaskReminders();
예제 #3
0
 private function proceedAction($actionId, $arActionArguments = null)
 {
     $actionId = (int) $actionId;
     if ($actionId == self::ACTION_ADD_FAVORITE || $actionId == self::ACTION_DELETE_FAVORITE || $actionId == self::ACTION_TOGGLE_FAVORITE) {
         if (!is_array($arActionArguments)) {
             $arActionArguments = array();
         }
         $addChildren = true;
         if (array_key_exists('AFFECT_CHILDREN', $arActionArguments)) {
             $addChildren = $arActionArguments['AFFECT_CHILDREN'] == 'Y' || $arActionArguments['AFFECT_CHILDREN'] === true;
         }
         $tellSocnet = true;
         if (array_key_exists('TELL_SOCNET', $arActionArguments)) {
             $tellSocnet = $arActionArguments['TELL_SOCNET'] == 'Y' || $arActionArguments['TELL_SOCNET'] === true;
         }
         switch ($actionId) {
             case self::ACTION_ADD_FAVORITE:
                 $f = 'add';
                 break;
             case self::ACTION_DELETE_FAVORITE:
                 $f = 'delete';
                 break;
             default:
                 $f = 'toggle';
                 break;
         }
         // ensure we have access to the task
         $this->checkCanReadThrowException();
         // drop cache
         $this->markCacheAsDirty();
         // here could be trouble: socnet doesn`t know anything aboult child tasks
         // in case of a ticket came, get all child tasks IDs here, pass ID list to \Bitrix\Tasks\Integration\Socialnetwork\Task::toggleFavorites()
         // and also pass ID list as a cache to FavoriteTable::$f to avoid calling same query twice
         $res = FavoriteTable::$f(array('TASK_ID' => $this->getId(), 'USER_ID' => $this->executiveUserId), array('AFFECT_CHILDREN' => $addChildren));
         if (!$res->isSuccess()) {
             static::throwExceptionVerbose($res->getErrors());
         }
         if ($actionId == self::ACTION_TOGGLE_FAVORITE) {
             $result = $res instanceof \Bitrix\Main\Entity\AddResult;
             $add = $result;
         } else {
             $result = true;
             $add = $actionId == self::ACTION_ADD_FAVORITE;
         }
         foreach (GetModuleEvents('tasks', 'OnTaskToggleFavorite', true) as $arEvent) {
             ExecuteModuleEventEx($arEvent, array($this->getId(), $this->executiveUserId, $add));
         }
         if ($tellSocnet) {
             \Bitrix\Tasks\Integration\Socialnetwork\Task::toggleFavorites(array('TASK_ID' => $this->getId(), 'USER_ID' => $this->executiveUserId, 'OPERATION' => $add ? 'ADD' : 'DELETE'));
         }
         return $result;
     }
     $arTaskData = $this->getData($bSpecialChars = false);
     $arNewFields = null;
     if ($actionId == self::ACTION_REMOVE) {
         if (!$this->isActionAllowed(self::ACTION_REMOVE)) {
             throw new TasksException('', TasksException::TE_ACTION_NOT_ALLOWED | TasksException::TE_ACCESS_DENIED);
         }
         $this->markCacheAsDirty();
         /** @noinspection PhpDeprecationInspection */
         if (CTasks::Delete($this->taskId) !== true) {
             throw new TasksException('Cannot delete task ' . $this->taskId, TasksException::TE_ACTION_FAILED_TO_BE_PROCESSED);
         }
         return;
     } elseif ($actionId == self::ACTION_EDIT) {
         $this->lastOperationResultData['UPDATE'] = array();
         $arFields = $arActionArguments['FIELDS'];
         $arParams = $arActionArguments['PARAMETERS'];
         if (!is_array($arParams)) {
             $arParams = array();
         }
         if (isset($arFields['ID'])) {
             unset($arFields['ID']);
         }
         $arParams = array_merge($arParams, array('USER_ID' => $this->executiveUserId, 'CHECK_RIGHTS_ON_FILES' => true));
         $actionChangeDeadlineFields = array('DEADLINE', 'START_DATE_PLAN', 'END_DATE_PLAN');
         $arGivenFieldsNames = array_keys($arFields);
         if (array_key_exists('STATUS', $arFields) && !in_array((int) $arFields['STATUS'], array(CTasks::STATE_NEW, CTasks::STATE_PENDING, CTasks::STATE_IN_PROGRESS, CTasks::STATE_SUPPOSEDLY_COMPLETED, CTasks::STATE_COMPLETED, CTasks::STATE_DEFERRED, CTasks::STATE_DECLINED), true)) {
             throw new TasksException('Invalid status given', TasksException::TE_WRONG_ARGUMENTS);
         }
         if (array_key_exists('PRIORITY', $arFields) && !in_array((int) $arFields['PRIORITY'], array(CTasks::PRIORITY_LOW, CTasks::PRIORITY_AVERAGE, CTasks::PRIORITY_HIGH), true)) {
             throw new TasksException('Invalid priority given', TasksException::TE_WRONG_ARGUMENTS);
         }
         if (array_key_exists('CREATED_BY', $arFields) && !$this->isActionAllowed(self::ACTION_CHANGE_DIRECTOR)) {
             throw new TasksException('Access denied for field CREATED_BY to be updated', TasksException::TE_ACTION_NOT_ALLOWED);
         }
         if (array_diff($actionChangeDeadlineFields, $arGivenFieldsNames) && !$this->isActionAllowed(self::ACTION_CHANGE_DEADLINE)) {
             throw new TasksException('Access denied for field CREATED_BY to be updated', TasksException::TE_ACTION_NOT_ALLOWED);
         }
         // Get list of fields, except just checked above
         $arGeneralFields = array_diff($arGivenFieldsNames, array_merge($actionChangeDeadlineFields, array('CREATED_BY')));
         // Is there is something more for update?
         if (!empty($arGeneralFields)) {
             if (!$this->isActionAllowed(self::ACTION_EDIT)) {
                 throw new TasksException('Access denied for field CREATED_BY to be updated', TasksException::TE_ACTION_NOT_ALLOWED);
             }
         }
         $this->markCacheAsDirty();
         $o = new CTasks();
         /** @noinspection PhpDeprecationInspection */
         if ($o->update($this->taskId, $arFields, $arParams) !== true) {
             $this->markCacheAsDirty();
             static::throwExceptionVerbose($o->GetErrors());
         }
         $this->markCacheAsDirty();
         $this->lastOperationResultData['UPDATE'] = $o->getLastOperationResultData();
         $prevData = $o->getPreviousData();
         if ($arActionArguments['SUBTASKS_CHANGE_GROUP'] !== false && intval($prevData['GROUP_ID']) != intval($arFields['GROUP_ID'])) {
             $this->moveSubTasksToGroup($arFields['GROUP_ID']);
         }
         return;
     }
     switch ($actionId) {
         case self::ACTION_ACCEPT:
             $arNewFields['STATUS'] = CTasks::STATE_PENDING;
             break;
         case self::ACTION_DECLINE:
             $arNewFields['STATUS'] = CTasks::STATE_DECLINED;
             if (isset($arActionArguments['DECLINE_REASON'])) {
                 $arNewFields['DECLINE_REASON'] = $arActionArguments['DECLINE_REASON'];
             } else {
                 $arNewFields['DECLINE_REASON'] = '';
             }
             break;
         case self::ACTION_COMPLETE:
             if ($arTaskData['TASK_CONTROL'] === 'N' || $arTaskData['CREATED_BY'] == $this->executiveUserId) {
                 $arNewFields['STATUS'] = CTasks::STATE_COMPLETED;
             } else {
                 $arNewFields['STATUS'] = CTasks::STATE_SUPPOSEDLY_COMPLETED;
             }
             break;
         case self::ACTION_APPROVE:
             $arNewFields['STATUS'] = CTasks::STATE_COMPLETED;
             break;
         case self::ACTION_START:
             $arNewFields['STATUS'] = CTasks::STATE_IN_PROGRESS;
             break;
         case self::ACTION_PAUSE:
             $arNewFields['STATUS'] = CTasks::STATE_PENDING;
             break;
         case self::ACTION_DELEGATE:
             $arNewFields['STATUS'] = CTasks::STATE_PENDING;
             if (!isset($arActionArguments['RESPONSIBLE_ID'])) {
                 throw new TasksException('Expected $arActionArguments[\'RESPONSIBLE_ID\']', TasksException::TE_WRONG_ARGUMENTS);
             }
             $arNewFields['RESPONSIBLE_ID'] = $arActionArguments['RESPONSIBLE_ID'];
             if (isset($arTaskData['AUDITORS']) && count($arTaskData['AUDITORS'])) {
                 if (!in_array($this->executiveUserId, $arTaskData['AUDITORS'])) {
                     $arNewFields['AUDITORS'] = $arTaskData['AUDITORS'];
                     $arNewFields['AUDITORS'][] = $this->executiveUserId;
                 }
             } else {
                 $arNewFields['AUDITORS'] = array($this->executiveUserId);
             }
             break;
         case self::ACTION_DEFER:
             $arNewFields['STATUS'] = CTasks::STATE_DEFERRED;
             break;
         case self::ACTION_DISAPPROVE:
         case self::ACTION_RENEW:
             $arNewFields['STATUS'] = CTasks::STATE_PENDING;
             break;
         default:
             break;
     }
     if ($arNewFields === null) {
         throw new TasksException();
     }
     // Don't update task, if nothing changed
     $bNeedUpdate = false;
     foreach ($arNewFields as $fieldName => $newValue) {
         $curValue = $arTaskData[$fieldName];
         // Convert task data arrays to strings, for comparing
         if (is_array($curValue)) {
             sort($curValue);
             sort($newValue);
             $curValue = implode('|', $curValue);
             $newValue = implode('|', $newValue);
         }
         if ($curValue != $newValue) {
             $bNeedUpdate = true;
             break;
         }
     }
     if ($bNeedUpdate) {
         if (!$this->isActionAllowed($actionId)) {
             throw new TasksException('', TasksException::TE_ACTION_NOT_ALLOWED | TasksException::TE_ACCESS_DENIED);
         }
         $arParams = array('USER_ID' => $this->executiveUserId);
         $this->markCacheAsDirty();
         $o = new CTasks();
         /** @noinspection PhpDeprecationInspection */
         if ($o->Update($this->taskId, $arNewFields, $arParams) !== true) {
             throw new TasksException('', TasksException::TE_ACTION_FAILED_TO_BE_PROCESSED);
         }
     }
 }
예제 #4
0
 protected static function DeleteTask(&$arFields)
 {
     $typeID = isset($arFields['TYPE_ID']) ? intval($arFields['TYPE_ID']) : CCrmActivityType::Undefined;
     if ($typeID !== CCrmActivityType::Task) {
         return false;
     }
     $associatedEntityID = isset($arFields['ASSOCIATED_ENTITY_ID']) ? intval($arFields['ASSOCIATED_ENTITY_ID']) : 0;
     if ($associatedEntityID <= 0) {
         return false;
     }
     if (!(IsModuleInstalled('tasks') && CModule::IncludeModule('tasks'))) {
         return false;
     }
     self::$TASK_OPERATIONS[$associatedEntityID] = 'D';
     CTasks::Delete($associatedEntityID);
     unset(self::$TASK_OPERATIONS[$associatedEntityID]);
 }
예제 #5
0
 public static function RemoveTask($task_id)
 {
     $rc = CTasks::Delete($task_id);
     $executed = 'failed';
     if ($rc) {
         $executed = 'executed';
     }
     $arResult = array('bResultInJson' => false, 'result' => array('rc' => $executed, 'action_perfomed' => 'remove', 'data' => array('task_id' => (int) $task_id)));
     return $arResult;
 }
예제 #6
0
 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("&#10;", "&#13;", '&nbsp;'), "", $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);
 }
예제 #7
0
 private function proceedAction($actionId, $arActionArguments = null)
 {
     $actionId = (int) $actionId;
     $arTaskData = $this->getData($bSpecialChars = false);
     $arNewFields = null;
     if ($actionId == self::ACTION_REMOVE) {
         if (!$this->isActionAllowed(self::ACTION_REMOVE)) {
             throw new TasksException('', TasksException::TE_ACTION_NOT_ALLOWED | TasksException::TE_ACCESS_DENIED);
         }
         $this->markCacheAsDirty();
         /** @noinspection PhpDeprecationInspection */
         if (CTasks::Delete($this->taskId) !== true) {
             throw new TasksException('', TasksException::TE_ACTION_FAILED_TO_BE_PROCESSED);
         }
         return;
     } elseif ($actionId == self::ACTION_EDIT) {
         $arFields = $arActionArguments['FIELDS'];
         if (isset($arFields['ID'])) {
             unset($arFields['ID']);
         }
         $arParams = array('USER_ID' => $this->executiveUserId, 'CHECK_RIGHTS_ON_FILES' => true);
         $actionChangeDeadlineFields = array('DEADLINE', 'START_DATE_PLAN', 'END_DATE_PLAN');
         $arGivenFieldsNames = array_keys($arFields);
         if (array_key_exists('STATUS', $arFields) && !in_array((int) $arFields['STATUS'], array(CTasks::STATE_NEW, CTasks::STATE_PENDING, CTasks::STATE_IN_PROGRESS, CTasks::STATE_SUPPOSEDLY_COMPLETED, CTasks::STATE_COMPLETED, CTasks::STATE_DEFERRED, CTasks::STATE_DECLINED), true)) {
             throw new TasksException('Invalid status given', TasksException::TE_WRONG_ARGUMENTS);
         }
         if (array_key_exists('PRIORITY', $arFields) && !in_array((int) $arFields['PRIORITY'], array(CTasks::PRIORITY_LOW, CTasks::PRIORITY_AVERAGE, CTasks::PRIORITY_HIGH), true)) {
             throw new TasksException('Invalid priority given', TasksException::TE_WRONG_ARGUMENTS);
         }
         if (array_key_exists('CREATED_BY', $arFields) && !$this->isActionAllowed(self::ACTION_CHANGE_DIRECTOR)) {
             throw new TasksException('Access denied for field CREATED_BY to be updated', TasksException::TE_ACTION_NOT_ALLOWED);
         }
         if (array_diff($actionChangeDeadlineFields, $arGivenFieldsNames) && !$this->isActionAllowed(self::ACTION_CHANGE_DEADLINE)) {
             throw new TasksException('Access denied for field CREATED_BY to be updated', TasksException::TE_ACTION_NOT_ALLOWED);
         }
         // Get list of fields, except just checked above
         $arGeneralFields = array_diff($arGivenFieldsNames, array_merge($actionChangeDeadlineFields, array('CREATED_BY')));
         // Is there is something more for update?
         if (!empty($arGeneralFields)) {
             if (!$this->isActionAllowed(self::ACTION_EDIT)) {
                 throw new TasksException('Access denied for field CREATED_BY to be updated', TasksException::TE_ACTION_NOT_ALLOWED);
             }
         }
         $this->markCacheAsDirty();
         $o = new CTasks();
         /** @noinspection PhpDeprecationInspection */
         if ($o->update($this->taskId, $arFields, $arParams) !== true) {
             $this->markCacheAsDirty();
             throw new TasksException(serialize($o->GetErrors()), TasksException::TE_ACTION_FAILED_TO_BE_PROCESSED | TasksException::TE_FLAG_SERIALIZED_ERRORS_IN_MESSAGE);
         }
         $this->markCacheAsDirty();
         return;
     }
     switch ($actionId) {
         case self::ACTION_ACCEPT:
             $arNewFields['STATUS'] = CTasks::STATE_PENDING;
             break;
         case self::ACTION_DECLINE:
             $arNewFields['STATUS'] = CTasks::STATE_DECLINED;
             if (isset($arActionArguments['DECLINE_REASON'])) {
                 $arNewFields['DECLINE_REASON'] = $arActionArguments['DECLINE_REASON'];
             } else {
                 $arNewFields['DECLINE_REASON'] = '';
             }
             break;
         case self::ACTION_COMPLETE:
             if ($arTaskData['TASK_CONTROL'] === 'N' || $arTaskData['CREATED_BY'] == $this->executiveUserId) {
                 $arNewFields['STATUS'] = CTasks::STATE_COMPLETED;
             } else {
                 $arNewFields['STATUS'] = CTasks::STATE_SUPPOSEDLY_COMPLETED;
             }
             break;
         case self::ACTION_APPROVE:
             $arNewFields['STATUS'] = CTasks::STATE_COMPLETED;
             break;
         case self::ACTION_START:
             $arNewFields['STATUS'] = CTasks::STATE_IN_PROGRESS;
             break;
         case self::ACTION_PAUSE:
             $arNewFields['STATUS'] = CTasks::STATE_PENDING;
             break;
         case self::ACTION_DELEGATE:
             $arNewFields['STATUS'] = CTasks::STATE_PENDING;
             if (!isset($arActionArguments['RESPONSIBLE_ID'])) {
                 throw new TasksException('Expected $arActionArguments[\'RESPONSIBLE_ID\']', TasksException::TE_WRONG_ARGUMENTS);
             }
             $arNewFields['RESPONSIBLE_ID'] = $arActionArguments['RESPONSIBLE_ID'];
             if (isset($arTaskData['AUDITORS']) && count($arTaskData['AUDITORS'])) {
                 if (!in_array($this->executiveUserId, $arTaskData['AUDITORS'])) {
                     $arNewFields['AUDITORS'] = $arTaskData['AUDITORS'];
                     $arNewFields['AUDITORS'][] = $this->executiveUserId;
                 }
             } else {
                 $arNewFields['AUDITORS'] = array($this->executiveUserId);
             }
             break;
         case self::ACTION_DEFER:
             $arNewFields['STATUS'] = CTasks::STATE_DEFERRED;
             break;
         case self::ACTION_DISAPPROVE:
         case self::ACTION_RENEW:
             $arNewFields['STATUS'] = CTasks::STATE_PENDING;
             break;
         default:
             break;
     }
     if ($arNewFields === null) {
         throw new TasksException();
     }
     // Don't update task, if nothing changed
     $bNeedUpdate = false;
     foreach ($arNewFields as $fieldName => $newValue) {
         $curValue = $arTaskData[$fieldName];
         // Convert task data arrays to strings, for comparing
         if (is_array($curValue)) {
             sort($curValue);
             sort($newValue);
             $curValue = implode('|', $curValue);
             $newValue = implode('|', $newValue);
         }
         if ($curValue != $newValue) {
             $bNeedUpdate = true;
             break;
         }
     }
     if ($bNeedUpdate) {
         if (!$this->isActionAllowed($actionId)) {
             throw new TasksException('', TasksException::TE_ACTION_NOT_ALLOWED | TasksException::TE_ACCESS_DENIED);
         }
         $arParams = array('USER_ID' => $this->executiveUserId);
         $this->markCacheAsDirty();
         $o = new CTasks();
         /** @noinspection PhpDeprecationInspection */
         if ($o->Update($this->taskId, $arNewFields, $arParams) !== true) {
             throw new TasksException('', TasksException::TE_ACTION_FAILED_TO_BE_PROCESSED);
         }
     }
 }
예제 #8
0
 function InstallService($serviceID, $serviceStage)
 {
     $wizard =& $this->GetWizard();
     if (CModule::IncludeModule("iblock")) {
         $type = substr($serviceID, 0, -1);
         if ($type == "iblockElement") {
             $dbItem = CIBlockElement::GetList(array(), array("=IBLOCK_CODE" => $serviceStage), false, false, array("ID"));
             while ($arItem = $dbItem->Fetch()) {
                 CIBlockElement::Delete($arItem["ID"]);
             }
         } elseif ($type == "iblockSectionElement") {
             $dbItem = CIBlockElement::GetList(array(), array("=IBLOCK_CODE" => $serviceStage), false, false, array("ID"));
             while ($arItem = $dbItem->Fetch()) {
                 CIBlockElement::Delete($arItem["ID"]);
             }
             $dbItem = CIBlockSection::GetList(array(), array("=IBLOCK_CODE" => $serviceStage), false, array("ID"));
             while ($arItem = $dbItem->Fetch()) {
                 CIBlockSection::Delete($arItem["ID"]);
             }
         } elseif ($serviceID == "iblockDepartmentsElement") {
             $dbItem = CIBlockSection::GetList(array(), array("=IBLOCK_CODE" => "departments"));
             while ($arItem = $dbItem->Fetch()) {
                 if ($arItem["DEPTH_LEVEL"] > 2) {
                     CIBlockSection::Delete($arItem["ID"]);
                 }
             }
         } elseif ($serviceID == "tasks") {
             if (CModule::IncludeModule("tasks")) {
                 $dbItem = CTasks::GetList(array(), array("SITE_ID" => $wizard->GetVar("siteID")));
                 while ($arItem = $dbItem->Fetch()) {
                     CTasks::Delete($arItem["ID"]);
                 }
             }
         } elseif ($serviceID == "calendar") {
             if (CModule::IncludeModule("calendar")) {
                 $dbItem = CCalendarEvent::GetList();
                 foreach ($dbItem as $arItem) {
                     CCalendarEvent::Delete(array("id" => $arItem["ID"]));
                 }
             }
         } elseif ($serviceID == "meeting") {
             if (CModule::IncludeModule("meeting")) {
                 $dbItem = CMeeting::GetList(array(), array());
                 while ($arItem = $dbItem->Fetch()) {
                     if ($arItem["ID"]) {
                         CMeeting::Delete($arItem["ID"]);
                     }
                 }
             }
         } elseif ($serviceID == "user") {
             if ($serviceStage == "user") {
                 $dbUser = CUser::GetList($by = "ID", $order = "DESC", array(">ID" => 1));
                 while ($arUser = $dbUser->Fetch()) {
                     CUser::Delete($arUser["ID"]);
                 }
             }
         } elseif ($serviceID == "crm") {
             if ($serviceStage == "crm") {
                 if (CModule::IncludeModule('crm')) {
                     $CCrmLead = new CCrmLead();
                     $resLead = CCrmLead::GetList(array(), array(), array(), false);
                     while ($rowLead = $resLead->Fetch()) {
                         $CCrmLead->Delete($rowLead["ID"]);
                     }
                     $CCrmContact = new CCrmContact();
                     $resContact = CCrmContact::GetList(array(), array(), array(), false);
                     while ($rowContact = $resContact->Fetch()) {
                         $CCrmContact->Delete($rowContact["ID"]);
                     }
                     $CCrmCompany = new CCrmCompany();
                     $resCompany = CCrmCompany::GetList(array(), array(), array(), false);
                     while ($rowCompany = $resCompany->Fetch()) {
                         $CCrmCompany->Delete($rowCompany["ID"]);
                     }
                     $CCrmDeal = new CCrmDeal();
                     $resDeal = CCrmDeal::GetList(array(), array(), array(), false);
                     while ($rowDeal = $resDeal->Fetch()) {
                         $CCrmDeal->Delete($rowDeal["ID"]);
                     }
                 }
             }
         } elseif ($serviceID == "cache") {
             require_once $_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/classes/general/cache_html.php";
             if ($serviceStage == "cache1") {
                 BXClearCache(true);
             } elseif ($serviceStage == "cache2") {
                 $GLOBALS["CACHE_MANAGER"]->CleanAll();
             } elseif ($serviceStage == "cache3") {
                 $GLOBALS["stackCacheManager"]->CleanAll();
             } elseif ($serviceStage == "cache4") {
                 CHTMLPagesCache::CleanAll();
             }
             COption::SetOptionString("main", "wizard_clear_exec", "Y", false, $wizard->GetVar("siteID"));
         }
     }
 }