$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; }