Esempio n. 1
0
 /**
  * ћетод возвращает массив произвольной структуры, содержащий всю информацию о документе. ѕо этому массиву документ восстановливаетс¤ методом RecoverDocumentFromHistory.
  *
  * @param string $documentId - код документа.
  * @return array - массив документа.
  */
 public function GetDocumentForHistory($documentId, $historyIndex)
 {
     $documentId = intval($documentId);
     if ($documentId <= 0) {
         throw new CBPArgumentNullException("documentId");
     }
     $arResult = null;
     $dbDocumentList = CIBlockElement::GetList(array(), array("ID" => $documentId, "SHOW_NEW" => "Y", "SHOW_HISTORY" => "Y"));
     if ($objDocument = $dbDocumentList->GetNextElement()) {
         $arDocumentFields = $objDocument->GetFields();
         $arDocumentProperties = $objDocument->GetProperties();
         $arResult["NAME"] = $arDocumentFields["~NAME"];
         $arResult["FIELDS"] = array();
         foreach ($arDocumentFields as $fieldKey => $fieldValue) {
             if ($fieldKey == "~PREVIEW_PICTURE" || $fieldKey == "~DETAIL_PICTURE") {
                 $arResult["FIELDS"][substr($fieldKey, 1)] = CBPDocument::PrepareFileForHistory(array("iblock", "CIBlockDocument", $documentId), $fieldValue, $historyIndex);
             } elseif (substr($fieldKey, 0, 1) == "~") {
                 $arResult["FIELDS"][substr($fieldKey, 1)] = $fieldValue;
             }
         }
         $arResult["PROPERTIES"] = array();
         foreach ($arDocumentProperties as $propertyKey => $propertyValue) {
             if (strlen($propertyValue["USER_TYPE"]) > 0) {
                 $arResult["PROPERTIES"][$propertyKey] = array("VALUE" => $propertyValue["VALUE"], "DESCRIPTION" => $propertyValue["DESCRIPTION"]);
             } elseif ($propertyValue["PROPERTY_TYPE"] == "L") {
                 $arResult["PROPERTIES"][$propertyKey] = array("VALUE" => $propertyValue["VALUE_ENUM_ID"], "DESCRIPTION" => $propertyValue["DESCRIPTION"]);
             } elseif ($propertyValue["PROPERTY_TYPE"] == "F") {
                 $arResult["PROPERTIES"][$propertyKey] = array("VALUE" => CBPDocument::PrepareFileForHistory(array("iblock", "CIBlockDocument", $documentId), $propertyValue["VALUE"], $historyIndex), "DESCRIPTION" => $propertyValue["DESCRIPTION"]);
             } else {
                 $arResult["PROPERTIES"][$propertyKey] = array("VALUE" => $propertyValue["VALUE"], "DESCRIPTION" => $propertyValue["DESCRIPTION"]);
             }
         }
     }
     return $arResult;
 }
 /**
  * Метод возвращает массив произвольной структуры, содержащий всю информацию о документе. По этому массиву документ восстановливается методом RecoverDocumentFromHistory.
  *
  * @param string $documentId - код документа.
  * @return array - массив документа.
  */
 public function GetDocumentForHistory($documentId, $historyIndex, $update = false)
 {
     $documentId = intval($documentId);
     if ($documentId <= 0) {
         throw new CBPArgumentNullException("documentId");
     }
     $diskId = self::processGetDiskIdByDocId($documentId);
     if ($diskId !== null) {
         return self::proxyToDisk(__FUNCTION__, array($diskId, $historyIndex, $update));
     }
     $arResult = null;
     $dbDocumentList = CIBlockElement::GetList(array(), array("ID" => $documentId, "SHOW_NEW" => "Y", "SHOW_HISTORY" => "Y"));
     if ($objDocument = $dbDocumentList->GetNextElement()) {
         $arDocumentFields = $objDocument->GetFields();
         $arDocumentProperties = $objDocument->GetProperties();
         $arResult["NAME"] = $arDocumentFields["~NAME"];
         $arResult["FIELDS"] = array();
         foreach ($arDocumentFields as $fieldKey => $fieldValue) {
             if ($fieldKey == "~PREVIEW_PICTURE" || $fieldKey == "~DETAIL_PICTURE") {
                 $arResult["FIELDS"][substr($fieldKey, 1)] = CBPDocument::PrepareFileForHistory(array("webdav", "CIBlockDocumentWebdavSocnet", $documentId), $fieldValue, $historyIndex);
             } elseif (substr($fieldKey, 0, 1) == "~") {
                 $arResult["FIELDS"][substr($fieldKey, 1)] = $fieldValue;
             }
         }
         $arResult["PROPERTIES"] = array();
         foreach ($arDocumentProperties as $propertyKey => $propertyValue) {
             if (strlen($propertyValue["USER_TYPE"]) > 0) {
                 $arResult["PROPERTIES"][$propertyKey] = array("VALUE" => $propertyValue["VALUE"], "DESCRIPTION" => $propertyValue["DESCRIPTION"]);
             } elseif ($propertyValue["PROPERTY_TYPE"] == "L") {
                 $arResult["PROPERTIES"][$propertyKey] = array("VALUE" => $propertyValue["VALUE_ENUM_ID"], "DESCRIPTION" => $propertyValue["DESCRIPTION"]);
             } elseif ($propertyValue["PROPERTY_TYPE"] == "F" && $propertyKey == 'FILE') {
                 $arDocID = $documentId;
                 if (!is_array($documentId)) {
                     $arDocID = array("webdav", "CIBlockDocumentWebdavSocnet", $documentId);
                 }
                 $arResult['PROPERTIES'][$propertyKey] = CWebdavDocumentHistory::GetFileForHistory($arDocID, $propertyValue, $historyIndex);
                 $arResult['OLD_FILE_ID'] = $propertyValue['VALUE'];
                 //for historical comment.
                 if ($update) {
                     $historyGlueState = CWebdavDocumentHistory::GetHistoryState($arDocID, null, null, array('CHECK_TIME' => 'Y'));
                 } else {
                     $historyGlueState = CWebdavDocumentHistory::GetHistoryState($arDocID, null, null, array('NEW' => 'Y', 'CHECK_TIME' => 'Y'));
                 }
                 $arResult['PROPERTIES'][$propertyKey]['HISTORYGLUE'] = $historyGlueState;
             } elseif ($propertyValue["PROPERTY_TYPE"] == "F") {
                 $arResult["PROPERTIES"][$propertyKey] = array("VALUE" => CBPDocument::PrepareFileForHistory(array("webdav", "CIBlockDocumentWebdavSocnet", $documentId), $propertyValue["VALUE"], $historyIndex), "DESCRIPTION" => $propertyValue["DESCRIPTION"]);
             } else {
                 $arResult["PROPERTIES"][$propertyKey] = array("VALUE" => $propertyValue["VALUE"], "DESCRIPTION" => $propertyValue["DESCRIPTION"]);
             }
         }
     }
     return $arResult;
 }
Esempio n. 3
0
 public static function GetDocumentForHistory($documentId, $historyIndex)
 {
     global $USER_FIELD_MANAGER;
     $arDocumentID = self::GetDocumentInfo($documentId);
     if (empty($arDocumentID)) {
         throw new CBPArgumentNullException('documentId');
     }
     $arResult = self::GetDocument($documentId);
     switch ($arDocumentID['TYPE']) {
         case 'CONTACT':
             if (!empty($arResult['PHOTO'])) {
                 $arResult['PHOTO'] = CBPDocument::PrepareFileForHistory(array('crm', 'CCrmDocument' . ucfirst(strtolower($arDocumentID['TYPE'])), $documentId), $arResult['PHOTO'], $historyIndex);
             }
             break;
         case 'COMPANY':
             if (!empty($arResult['LOGO'])) {
                 $arResult['LOGO'] = CBPDocument::PrepareFileForHistory(array('crm', 'CCrmDocument' . ucfirst(strtolower($arDocumentID['TYPE'])), $documentId), $arResult['LOGO'], $historyIndex);
             }
             break;
     }
     $arUserFields = $USER_FIELD_MANAGER->GetUserFields('CRM_' . $arDocumentID['TYPE'], $arDocumentID['ID'], LANGUAGE_ID);
     foreach ($arUserFields as $FIELD_NAME => $arUserField) {
         if ($arUserField['USER_TYPE']['BASE_TYPE'] == 'file') {
             $arFiles = !is_array($arUserField[$FIELD_NAME]) ? array($arUserField[$FIELD_NAME]) : $arUserField[$FIELD_NAME];
             foreach ($arFiles as $sFilePath) {
                 $sFilePath = CBPDocument::PrepareFileForHistory(array('crm', 'CCrmDocument' . ucfirst(strtolower($arDocumentID['TYPE'])), $documentId), $sFilePath, $historyIndex);
                 if (!is_array($arUserField[$FIELD_NAME])) {
                     $arResult[$FIELD_NAME] = $sFilePath;
                     break;
                 } else {
                     $arResult[$FIELD_NAME][] = $sFilePath;
                 }
             }
         }
     }
     return $arResult;
 }
 public static function GetFileForHistory($documentId, $propertyValue, $historyIndex)
 {
     $newFileID = $propertyValue['VALUE'];
     $bNewFile = true;
     $history = self::GetHistoryService();
     $dbDoc = $history->GetHistoryList(array("ID" => "DESC"), array("DOCUMENT_ID" => $documentId), false, false, array("ID", "DOCUMENT_ID", "NAME", "MODIFIED", "USER_ID", "USER_NAME", "USER_LAST_NAME", "USER_LOGIN", "DOCUMENT"));
     $newFileHash = CWebDavBase::_get_file_hash($newFileID);
     $oldFileHash = null;
     if ($newFileHash !== null) {
         if ($dbDoc && ($arTmpDoc = $dbDoc->Fetch())) {
             while ($arDoc = $dbDoc->Fetch()) {
                 $oldFileHash = $arDoc['DOCUMENT']['PROPERTIES']['FILE']['HASH'];
                 if ($oldFileHash == $newFileHash) {
                     $bNewFile = false;
                     $result = $arDoc['DOCUMENT']['PROPERTIES']['FILE'];
                     break;
                 }
             }
         }
     }
     if ($oldFileHash == null || $newFileHash == null) {
         $bNewFile = true;
     }
     // add new copy to history
     if ($bNewFile) {
         $result = array("VALUE" => CBPDocument::PrepareFileForHistory($documentId, $propertyValue["VALUE"], $historyIndex), "DESCRIPTION" => $propertyValue["DESCRIPTION"], "HASH" => $newFileHash);
     }
     return $result;
 }