예제 #1
0
 /**
  * This method is deprecated. Use CTaskItem::add() instead.
  * @deprecated
  */
 public function Add($arFields, $arParams = array())
 {
     global $DB, $USER, $USER_FIELD_MANAGER, $CACHE_MANAGER, $APPLICATION;
     if (isset($arFields['META::EVENT_GUID'])) {
         $eventGUID = $arFields['META::EVENT_GUID'];
         unset($arFields['META::EVENT_GUID']);
     } else {
         $eventGUID = sha1(uniqid('AUTOGUID', true));
     }
     if (!array_key_exists('GUID', $arFields)) {
         $arFields['GUID'] = CTasksTools::genUuid();
     }
     if (!isset($arFields['SITE_ID'])) {
         $arFields['SITE_ID'] = SITE_ID;
     }
     $bWasFatalError = false;
     $spawnedByAgent = false;
     $effectiveUserId = null;
     $bCheckRightsOnFiles = false;
     // for backward compatibility
     if (is_array($arParams)) {
         if (isset($arParams['SPAWNED_BY_AGENT']) && ($arParams['SPAWNED_BY_AGENT'] === 'Y' || $arParams['SPAWNED_BY_AGENT'] === true)) {
             $spawnedByAgent = true;
         }
         if (isset($arParams['USER_ID']) && $arParams['USER_ID'] > 0) {
             $effectiveUserId = (int) $arParams['USER_ID'];
         }
         if (isset($arParams['CHECK_RIGHTS_ON_FILES'])) {
             if ($arParams['CHECK_RIGHTS_ON_FILES'] === 'Y' || $arParams['CHECK_RIGHTS_ON_FILES'] === true) {
                 $bCheckRightsOnFiles = true;
             } else {
                 $bCheckRightsOnFiles = false;
             }
         }
     }
     if ($effectiveUserId === null) {
         $effectiveUserId = is_object($USER) ? intval($USER->GetID()) : 1;
     }
     if (!isset($arFields['CREATED_BY']) || !$arFields['CREATED_BY']) {
         $arFields['CREATED_BY'] = $effectiveUserId;
     }
     if ($this->CheckFields($arFields, false, $effectiveUserId)) {
         if ($USER_FIELD_MANAGER->CheckFields("TASKS_TASK", 0, $arFields, $effectiveUserId)) {
             $nowDateTimeString = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), time() + CTasksTools::getTimeZoneOffset());
             if (!isset($arFields["CHANGED_BY"])) {
                 $arFields["STATUS_CHANGED_BY"] = $arFields["CHANGED_BY"] = $arFields["CREATED_BY"];
                 $arFields["STATUS_CHANGED_DATE"] = $arFields["CHANGED_DATE"] = $arFields["CREATED_DATE"] = $nowDateTimeString;
             }
             $arFields["OUTLOOK_VERSION"] = 1;
             foreach (GetModuleEvents('tasks', 'OnBeforeTaskAdd', true) as $arEvent) {
                 if (ExecuteModuleEventEx($arEvent, array(&$arFields)) === false) {
                     $e = $APPLICATION->GetException();
                     if ($e) {
                         if ($e instanceof CAdminException) {
                             if (is_array($e->messages)) {
                                 foreach ($e->messages as $msg) {
                                     $this->_errors[] = $msg;
                                 }
                             }
                         } else {
                             $this->_errors[] = array('text' => $e->getString(), 'id' => 'unknown');
                         }
                     }
                     if (empty($this->_errors)) {
                         $this->_errors[] = array("text" => GetMessage("TASKS_UNKNOWN_ADD_ERROR"), "id" => "ERROR_UNKNOWN_ADD_TASK_ERROR");
                     }
                     return false;
                 }
             }
             $oTaskList = CTaskCountersProcessor::getInstance();
             $oTaskList->onBeforeTaskAdd($arFields, $effectiveUserId);
             $ID = $DB->Add("b_tasks", $arFields, array("DESCRIPTION"), "tasks");
             $arFields["ACCOMPLICES"] = (array) $arFields["ACCOMPLICES"];
             $arFields["AUDITORS"] = (array) $arFields["AUDITORS"];
             if ($ID) {
                 $rsTask = CTasks::GetByID($ID, false);
                 if ($arTask = $rsTask->Fetch()) {
                     CTasks::AddAccomplices($ID, $arFields["ACCOMPLICES"]);
                     CTasks::AddAuditors($ID, $arFields["AUDITORS"]);
                     CTasks::AddFiles($ID, $arFields["FILES"], array('USER_ID' => $effectiveUserId, 'CHECK_RIGHTS_ON_FILES' => $bCheckRightsOnFiles));
                     CTasks::AddTags($ID, $arTask["CREATED_BY"], $arFields["TAGS"], $effectiveUserId);
                     CTasks::AddPrevious($ID, $arFields["DEPENDS_ON"]);
                     $USER_FIELD_MANAGER->Update("TASKS_TASK", $ID, $arFields, $effectiveUserId);
                     $arFields["ID"] = $ID;
                     CTasks::__updateViewed($ID, $effectiveUserId, $onTaskAdd = true);
                     CTaskCountersProcessor::onAfterTaskAdd($arFields, $effectiveUserId);
                     CTaskComments::onAfterTaskAdd($ID, $arFields);
                     $occurAsUserId = CTasksTools::getOccurAsUserId();
                     if (!$occurAsUserId) {
                         $occurAsUserId = $effectiveUserId ? $effectiveUserId : 1;
                     }
                     CTaskNotifications::SendAddMessage(array_merge($arFields, array('CHANGED_BY' => $occurAsUserId)), array('SPAWNED_BY_AGENT' => $spawnedByAgent));
                     CTaskSync::AddItem($arFields);
                     // MS Exchange
                     // changes log
                     $arLogFields = array("TASK_ID" => $ID, "USER_ID" => $occurAsUserId, "CREATED_DATE" => $nowDateTimeString, "FIELD" => "NEW");
                     $log = new CTaskLog();
                     $log->Add($arLogFields);
                     try {
                         $lastEventName = '';
                         foreach (GetModuleEvents('tasks', 'OnTaskAdd', true) as $arEvent) {
                             $lastEventName = $arEvent['TO_CLASS'] . '::' . $arEvent['TO_METHOD'] . '()';
                             ExecuteModuleEventEx($arEvent, array($ID, &$arFields));
                         }
                     } catch (Exception $e) {
                         CTaskAssert::logWarning('[0x37eb64ae] exception in module event: ' . $lastEventName);
                     }
                     CTasks::Index($arTask, $arFields["TAGS"]);
                     // search index
                     // clear cache
                     if ($arFields["GROUP_ID"]) {
                         $CACHE_MANAGER->ClearByTag("tasks_group_" . $arFields["GROUP_ID"]);
                     }
                     $arParticipants = array_unique(array_merge(array($arFields["CREATED_BY"], $arFields["RESPONSIBLE_ID"]), $arFields["ACCOMPLICES"], $arFields["AUDITORS"]));
                     foreach ($arParticipants as $userId) {
                         $CACHE_MANAGER->ClearByTag("tasks_user_" . $userId);
                     }
                     // Emit pull event
                     try {
                         $arPullRecipients = array();
                         foreach ($arParticipants as $userId) {
                             $arPullRecipients[] = (int) $userId;
                         }
                         $taskGroupId = 0;
                         // no group
                         if (isset($arFields['GROUP_ID']) && $arFields['GROUP_ID'] > 0) {
                             $taskGroupId = (int) $arFields['GROUP_ID'];
                         }
                         $arPullData = array('TASK_ID' => (int) $ID, 'AFTER' => array('GROUP_ID' => $taskGroupId), 'TS' => time(), 'event_GUID' => $eventGUID);
                         self::EmitPullWithTagPrefix($arPullRecipients, 'TASKS_GENERAL_', 'task_add', $arPullData);
                         self::EmitPullWithTag($arPullRecipients, 'TASKS_TASK_' . (int) $ID, 'task_add', $arPullData);
                     } catch (Exception $e) {
                         $bWasFatalError = true;
                         $this->_errors[] = 'at line ' . $e->GetLine() . ', ' . $e->GetMessage();
                     }
                     if ($arFields['GROUP_ID'] && CModule::IncludeModule("socialnetwork")) {
                         CSocNetGroup::SetLastActivity($arFields['GROUP_ID']);
                     }
                 }
             }
             if ($bWasFatalError) {
                 soundex('push&pull: bWasFatalError === true');
             }
             return $ID;
         } else {
             $e = $APPLICATION->GetException();
             foreach ($e->messages as $msg) {
                 $this->_errors[] = $msg;
             }
         }
     }
     if (empty($this->_errors)) {
         $this->_errors[] = array("text" => GetMessage("TASKS_UNKNOWN_ADD_ERROR"), "id" => "ERROR_UNKNOWN_ADD_TASK_ERROR");
     }
     return false;
 }
예제 #2
0
 /**
  * Create new task and return instance for it
  *
  * @param array $arNewTaskData New task fields.
  * @param integer $executiveUserId Put 1 (admin) to skip rights check.
  * @throws TasksException - on access denied, task not exists.
  * @throws CTaskAssertException
  * @throws Exception - on unexpected error.
  *
  * @return object of class CTaskItem
  */
 public static function add($arNewTaskData, $executiveUserId)
 {
     CTaskAssert::assertLaxIntegers($executiveUserId);
     CTaskAssert::assert($executiveUserId > 0);
     // Use of BB code by default, HTML is deprecated,
     // but supported for backward compatibility when tasks created
     // from template or as copy of old task with HTML-description.
     if (isset($arNewTaskData['DESCRIPTION_IN_BBCODE']) && $arNewTaskData['DESCRIPTION_IN_BBCODE'] === 'N' && isset($arNewTaskData['DESCRIPTION']) && $arNewTaskData['DESCRIPTION'] !== '' && strpos($arNewTaskData['DESCRIPTION'], '<') !== false) {
         $arNewTaskData['DESCRIPTION_IN_BBCODE'] = 'N';
         // Set HTML mode
     } else {
         $arNewTaskData['DESCRIPTION_IN_BBCODE'] = 'Y';
     }
     if (!isset($arNewTaskData['CREATED_BY'])) {
         $arNewTaskData['CREATED_BY'] = $executiveUserId;
     }
     // Check some conditions for non-admins
     if (!CTasksTools::IsAdmin($executiveUserId) && !CTasksTools::IsPortalB24Admin($executiveUserId)) {
         if ($arNewTaskData['RESPONSIBLE_ID'] != $executiveUserId && $arNewTaskData['CREATED_BY'] != $executiveUserId) {
             throw new TasksException(serialize(array(array('text' => GetMessage('TASKS_TASK_CREATE_ACCESS_DENIED'), 'id' => 'ERROR_TASK_CREATE_ACCESS_DENIED'))), TasksException::TE_ACCESS_DENIED);
         }
         if (isset($arNewTaskData['GROUP_ID']) && $arNewTaskData['GROUP_ID'] > 0) {
             /** @noinspection PhpDynamicAsStaticMethodCallInspection */
             if (!CSocNetFeaturesPerms::CanPerformOperation($executiveUserId, SONET_ENTITY_GROUP, $arNewTaskData['GROUP_ID'], 'tasks', 'create_tasks')) {
                 throw new TasksException(serialize(array(array('text' => GetMessage('TASKS_TASK_CREATE_ACCESS_DENIED'), 'id' => 'ERROR_TASK_CREATE_ACCESS_DENIED'))), TasksException::TE_ACCESS_DENIED);
             }
         }
     }
     if (!array_key_exists('GUID', $arNewTaskData)) {
         $arNewTaskData['GUID'] = CTasksTools::genUuid();
     }
     $arParams = array('USER_ID' => $executiveUserId, 'CHECK_RIGHTS_ON_FILES' => true);
     $o = new CTasks();
     /** @noinspection PhpDeprecationInspection */
     $rc = $o->Add($arNewTaskData, $arParams);
     if (!($rc > 0)) {
         static::throwExceptionVerbose($o->GetErrors());
     }
     return new CTaskItem((int) $rc, $executiveUserId);
 }
예제 #3
0
        if (!$oTask->isActionAllowed(CTaskItem::ACTION_EDIT)) {
            throw new TasksException();
        }
    } catch (TasksException $e) {
        ShowError(GetMessage("TASKS_TASK_NOT_FOUND"));
        return;
    }
}
if (array_key_exists("back_url", $_REQUEST) && strlen($_REQUEST["back_url"]) > 0) {
    $arResult["RETURN_URL"] = htmlspecialcharsbx(trim($_REQUEST["back_url"]));
}
// a bundle of parameters considering copying and creating by template
$arResult['COPY_PARAMS'] = array('ORIGIN_TASK' => intval($_POST['COPY_PARAMS']['ORIGIN_TASK']), 'COPY_CHILD_TASKS' => isset($_POST['COPY_PARAMS']) ? $_POST['COPY_PARAMS']['COPY_CHILD_TASKS'] == 'Y' : true, 'ORIGIN_TEMPLATE' => intval($_POST['COPY_PARAMS']['ORIGIN_TEMPLATE']), 'COPY_CHILD_TEMPLATES' => isset($_POST['COPY_PARAMS']) ? $_POST['COPY_PARAMS']['COPY_CHILD_TEMPLATES'] == 'Y' : true);
$arData = array();
$arResult['TASK'] = null;
$arResult['FORM_GUID'] = CTasksTools::genUuid();
$arResult["USER_FIELDS"] = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFields("TASKS_TASK", $arParams["TASK_ID"] ? $arParams["TASK_ID"] : 0, LANGUAGE_ID);
//Form submitted
$arResult['needStep'] = false;
if ($_SERVER["REQUEST_METHOD"] == "POST" && check_bitrix_sessid() && ($arResult["ACTION"] == "create" || $arResult["ACTION"] == "edit")) {
    if (!function_exists('lambda_sgkrg455d_funcCreateSubtasks')) {
        function lambda_sgkrg455d_funcCreateSubtasks($arFields, $arAllResponsibles, $index, $loggedInUserId, $woStepper = false, $parameters = array())
        {
            $allResponsiblesCount = count($arAllResponsibles);
            $arResponsibles = array_slice($arAllResponsibles, $index);
            $cutoffTime = microtime(true) + 5;
            foreach ($arResponsibles as $responsible) {
                $arFields['RESPONSIBLE_ID'] = $responsible;
                ++$index;
                try {
                    $arFieldsToSave = $arFields;