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; }
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();
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); } } }
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]); }
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; }
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); }
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); } } }
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")); } } }