示例#1
0
 public static function UpdateItem($arFields, $arTask)
 {
     global $DB;
     if (!(CModule::IncludeModule("dav") && CDavExchangeTasks::IsExchangeEnabled())) {
         return;
     }
     $isResponsibleChanged = isset($arFields['RESPONSIBLE_ID']) && isset($arTask['RESPONSIBLE_ID']) && (int) $arFields['RESPONSIBLE_ID'] !== (int) $arTask['RESPONSIBLE_ID'];
     // If responsible changed, we must reassign task to other Exchange-account,
     // but not update the existing task in account of prev. responsible
     if ($isResponsibleChanged) {
         // Prevent unexpected resynchronization of this task in case if DeleteItem() or AddItem() will not complete they work
         $strSql = "UPDATE b_tasks SET EXCHANGE_ID = NULL, EXCHANGE_MODIFIED = NULL WHERE ID = " . (int) $arTask['ID'];
         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         self::DeleteItem($arTask);
         $arActualTaskData = array_merge($arTask, $arFields);
         self::AddItem($arActualTaskData);
         return;
     }
     // If item is not in Exchange, skip it ...
     if (!($arTask["EXCHANGE_ID"] && $arTask["EXCHANGE_MODIFIED"])) {
         // ... but if there is responsible changed - create task in Exchange
         if ($isResponsibleChanged) {
             $arActualTaskData = array_merge($arTask, $arFields);
             self::AddItem($arActualTaskData);
         }
         return;
     }
     $bodyType = 'html';
     if (isset($arFields['DESCRIPTION_IN_BBCODE'])) {
         if ($arFields['DESCRIPTION_IN_BBCODE'] === 'Y') {
             $bodyType = 'text';
         }
     }
     $priorityMapping = array_flip(self::$PriorityMapping);
     $arModifyEventArray = array("USER_ID" => $arFields["RESPONSIBLE_ID"] ? $arFields["RESPONSIBLE_ID"] : $arTask["RESPONSIBLE_ID"], "BODY_TYPE" => $bodyType);
     if ($arFields["TITLE"]) {
         $arModifyEventArray["SUBJECT"] = $arFields["TITLE"];
     }
     if ($arFields["DESCRIPTION"]) {
         $arModifyEventArray["BODY"] = $arFields["DESCRIPTION"];
     }
     if ($arFields["PRIORITY"]) {
         $arModifyEventArray["IMPORTANCE"] = $priorityMapping[strtolower($arFields["PRIORITY"])];
     }
     if (isset($arFields['GUID'])) {
         $arModifyEventArray['GUID'] = $arFields['GUID'];
     }
     //$arModifyEventArray['SERIALIZED_DATA'] = serialize($arFields);
     if ($arFields["DURATION_FACT"]) {
         $arModifyEventArray["ACTUAL_WORK"] = $arFields["DURATION_FACT"] * 60;
     }
     if ($arFields["START_DATE_PLAN"]) {
         $arModifyEventArray["START_DATE"] = $arFields["START_DATE_PLAN"];
     }
     if ($arFields["DEADLINE"]) {
         $arModifyEventArray["DUE_DATE"] = $arFields["DEADLINE"];
     }
     if ($arFields["STATUS"]) {
         $arModifyEventArray["STATUS"] = self::$StatusMappingReverse[$arFields["STATUS"]];
     }
     if ($arFields["DURATION_PLAN"]) {
         $arModifyEventArray["TOTAL_WORK"] = $arFields["DURATION_PLAN"] * 60;
     }
     $result = CDavExchangeTasks::DoUpdateItem($arModifyEventArray["USER_ID"], $arTask["EXCHANGE_ID"], $arTask["EXCHANGE_MODIFIED"], $arModifyEventArray);
     if (array_key_exists("XML_ID", $result)) {
         $arExchangeFields = array("EXCHANGE_MODIFIED" => $result["MODIFICATION_LABEL"]);
         $strUpdate = $DB->PrepareUpdate("b_tasks", $arExchangeFields, "tasks");
         $strSql = "UPDATE b_tasks SET " . $strUpdate . " WHERE ID=" . $arFields["ID"];
         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     }
 }