Example #1
0
$arParams["RESULT"] = is_array($arParams["RESULT"]) ? $arParams["RESULT"] : array();
$arParams["DATE_TIME_FORMAT"] = trim(empty($arParams["DATE_TIME_FORMAT"]) ? $DB->DateFormatToPHP(CSite::GetDateFormat("FULL")) : $arParams["DATE_TIME_FORMAT"]);
$arParams['NAME_TEMPLATE'] = empty($arParams['NAME_TEMPLATE']) ? CSite::GetNameFormat(false) : str_replace(array("#NOBR#", "#/NOBR#"), array("", ""), $arParams["NAME_TEMPLATE"]);
$arParams["PARAMS"]['NAME_TEMPLATE'] = $arParams['NAME_TEMPLATE'];
/********************************************************************
				/Input params
********************************************************************/
$arResult['UID'] = strtolower($arParams['PARAMS']['arUserField']['ENTITY_ID']) . "_" . $this->randString(6);
$arResult['allowExtDocServices'] = CWebDavTools::allowUseExtServiceGlobal();
$arResult['allowCreateDocByExtServices'] = CWebDavTools::allowCreateDocByExtServiceGlobal();
if (!empty($arParams['PARAMS']['arUserField']['ENTITY_ID'])) {
    if ($arParams['PARAMS']['arUserField']['ENTITY_ID'] == 'BLOG_COMMENT') {
        $arResult['URL_TO_POST'] = $arParams['PARAMS']['arUserField']['URL_TO_POST'];
        $arResult['ID_TO_POST'] = $arParams['PARAMS']['arUserField']['POST_ID'];
        if ($arResult['IS_HISTORY_DOC'] = $arParams['PARAMS']['arUserField']['USER_TYPE_ID'] == 'webdav_element_history') {
            $arResult['HISTORY_DOC'] = CUserTypeWebdavElementHistory::getDataFromValue($arParams['PARAMS']['arUserField']['VALUE']);
            $arResult['HISTORY_DOC'] = array_merge($arResult['HISTORY_DOC'][0], $arResult['HISTORY_DOC'][1]);
        }
    }
    if ($arParams['PARAMS']['arUserField']['ENTITY_ID'] == 'BLOG_POST') {
        $arResult['URL_TO_POST'] = $arParams['PARAMS']['arUserField']['URL_TO_POST'];
        $arResult['ID_TO_POST'] = $arParams['PARAMS']['arUserField']['POST_ID'];
    }
}
if ($arParams['EDIT'] == 'Y') {
    if ($arParams['PARAMS']['arUserField']['ENTITY_ID'] == 'BLOG_POST') {
        $arResult['showCheckboxToAllowEdit'] = $arResult['allowExtDocServices'] && !empty($arParams['PARAMS']['arUserField']['SETTINGS']['UF_TO_SAVE_ALLOW_EDIT']);
        if ($arResult['showCheckboxToAllowEdit']) {
            global $USER_FIELD_MANAGER;
            $arResult['ufToSaveAllowEdit'] = array();
            $arResult['ufToSaveAllowEdit']['FIELD'] = $arParams['PARAMS']['arUserField']['SETTINGS']['UF_TO_SAVE_ALLOW_EDIT'];
 protected function migrateWebdavElementHistory()
 {
     $this->abortIfNeeded();
     if ($this->isStepFinished(__METHOD__)) {
         return;
     }
     $userFieldManager = Driver::getInstance()->getUserFieldManager();
     $connection = $this->connection;
     $rsData = CUserTypeEntity::GetList(array(), array("ENTITY_ID" => "BLOG_COMMENT", "XML_ID" => "UF_BLOG_COMMENT_FH"));
     if (!$rsData->fetch()) {
         $this->setStepFinished(__METHOD__);
         $this->log(array('Could not find UF_BLOG_COMMENT_FH in entity BLOG_COMMENT'));
         return;
     }
     unset($rsData);
     if (!$connection->isTableExists('b_uts_blog_comment') || !$connection->getTableField('b_uts_blog_comment', 'UF_BLOG_COMMENT_FH')) {
         $this->setStepFinished(__METHOD__);
         $this->log(array('b_uts_blog_comment does not exist or column UF_BLOG_COMMENT_FH does not exist.'));
         return;
     }
     unset($rsData);
     list($connectorClass, $moduleId) = $userFieldManager->getConnectorDataByEntityType('BLOG_COMMENT');
     $lastId = $this->getStorageId();
     $result = $connection->query("SELECT * from b_uts_blog_comment WHERE VALUE_ID > {$lastId} AND UF_BLOG_COMMENT_FH <> '' ORDER BY VALUE_ID ASC");
     while ($userFieldRow = $result->fetch()) {
         $this->abortIfNeeded();
         $dataFromValue = CUserTypeWebdavElementHistory::getDataFromValue($userFieldRow['UF_BLOG_COMMENT_FH']);
         if (!$dataFromValue) {
             $this->storeStorageId($userFieldRow['VALUE_ID']);
             continue;
         }
         $dataFromValue = $dataFromValue[0];
         //this is head version
         if (empty($dataFromValue['v'])) {
             list($newVersionId, $objectId) = $this->getLastVersionByElementId($dataFromValue['id']);
             if (!$newVersionId || !$objectId) {
                 $this->storeStorageId($userFieldRow['VALUE_ID']);
                 $this->log(array('Could not find migrate Head Version from disk. Skip.', $userFieldRow));
                 continue;
             }
             $errorCollection = new ErrorCollection();
             $attachedData = array('MODULE_ID' => $moduleId, 'OBJECT_ID' => $objectId, 'VERSION_ID' => $newVersionId, 'ENTITY_ID' => $userFieldRow['VALUE_ID'], 'ENTITY_TYPE' => $connectorClass, 'IS_EDITABLE' => 2);
             $attachedModel = AttachedObject::add($attachedData, $errorCollection);
             if (!$attachedModel || $errorCollection->hasErrors()) {
                 $this->storeStorageId($userFieldRow['VALUE_ID']);
                 $this->log(array('Could not created attached object'));
                 continue;
             }
             $connection->queryExecute("UPDATE b_uts_blog_comment SET UF_BLOG_COMMENT_FH = '{$attachedModel->getId()}' WHERE VALUE_ID = {$userFieldRow['VALUE_ID']}");
             $this->storeStorageId($userFieldRow['VALUE_ID']);
             continue;
         } else {
             list($newVersionId, $objectId) = $this->getLastVersionByBpId($dataFromValue['v']);
             if (!$newVersionId || !$objectId) {
                 $this->storeStorageId($userFieldRow['VALUE_ID']);
                 $this->log(array('Could not find migrate Version from disk. Skip.', $userFieldRow));
                 continue;
             }
             $errorCollection = new ErrorCollection();
             $attachedData = array('MODULE_ID' => $moduleId, 'OBJECT_ID' => $objectId, 'VERSION_ID' => $newVersionId, 'ENTITY_ID' => $userFieldRow['VALUE_ID'], 'ENTITY_TYPE' => $connectorClass, 'IS_EDITABLE' => 2);
             $attachedModel = AttachedObject::add($attachedData, $errorCollection);
             if (!$attachedModel || $errorCollection->hasErrors()) {
                 $this->storeStorageId($userFieldRow['VALUE_ID']);
                 $this->log(array('Could not created attached object', $userFieldRow));
                 continue;
             }
             $connection->queryExecute("UPDATE b_uts_blog_comment SET UF_BLOG_COMMENT_FH = '{$attachedModel->getId()}' WHERE VALUE_ID = {$userFieldRow['VALUE_ID']}");
             $this->storeStorageId($userFieldRow['VALUE_ID']);
             continue;
         }
     }
     $connection->queryExecute("UPDATE b_user_field SET USER_TYPE_ID = 'disk_version' WHERE ENTITY_ID = 'BLOG_COMMENT' AND XML_ID = 'UF_BLOG_COMMENT_FH'");
     $this->storeStorageId(0);
     $this->setStepFinished(__METHOD__);
     return;
 }
 /**
  * @return array
  */
 protected function commitFile()
 {
     $filename = CTempFile::GetFileName(uniqid('_wd'));
     $nameToSavedFile = $this->getNameToSavedFile($this->getWebdav()->arParams['element_name']);
     CheckDirPath($filename);
     $doc = $this->getDocHandler()->downloadFile(array('id' => $this->getFileId(), 'mimeType' => $this->getWebdav()->get_mime_type($nameToSavedFile)));
     if (!$doc['content']) {
         return array('status' => 'error');
     }
     file_put_contents($filename, $doc['content']);
     $runRename = $nameToSavedFile != $this->getWebdav()->arParams['element_name'];
     $oldName = $this->getWebdav()->arParams['element_name'];
     $options = array('new' => false, 'FILE_NAME' => $nameToSavedFile, 'NAME' => $nameToSavedFile, 'ELEMENT_ID' => $this->getWebdav()->arParams['item_id'], 'TMP_FILE' => $filename);
     global $DB;
     $DB->startTransaction();
     if (!$this->getWebdav()->put_commit($options)) {
         $DB->rollback();
         $response = array('status' => 'error');
     } else {
         $DB->commit();
         $webdav = $this->getWebdav();
         $response = array('status' => 'success');
         $response['elementId'] = $webdav->arParams['element_array']['ID'];
         //this is info for comment. And fileId == false,as this is last version and not save in BPhistory
         $response['cid'] = $this->generateCidForFile($response['elementId']);
         $response['serialize'] = CUserTypeWebdavElementHistory::genData(array('ib' => $webdav->IBLOCK_ID, 'ib_code' => $webdav->arParams['element_array']['IBLOCK_CODE'], 'id' => $response['elementId']), array('t_vers' => empty($options['THROUGH_VERSION']) ? 0 : $options['THROUGH_VERSION']));
         if ($runRename) {
             CWebDavTools::clearByTag('webdav_element_internal_' . $webdav->arParams['element_array']['ID']);
             $response['newName'] = $options['NAME'];
             $response['oldName'] = $oldName;
         }
     }
     @unlink($filename);
     return $response;
 }