Exemplo n.º 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;
 }