public function testAdd() { /** @var $dbList \CDBResult */ $dbList = \CIBlock::GetList(); $ibCountBefore = $dbList->SelectedRowsCount(); $beforeIds = array(); while ($arIblock = $dbList->Fetch()) { $beforeIds[] = $arIblock['ID']; } $this->_applyFixtures(self::FIXTURE_TYPE_ADD); $dbList = \CIBlock::GetList(); $ibCountAfter = $dbList->SelectedRowsCount(); $afterIds = array(); while ($arIblock = $dbList->Fetch()) { $afterIds[] = $arIblock['ID']; } $aAddedId = array_diff($afterIds, $beforeIds); $this->_processIblockId = array_shift($aAddedId); $this->assertNotEmpty($ibCountAfter, $this->errorMessage('record IB must be present')); $this->assertNotEquals($ibCountAfter, $ibCountBefore, $this->errorMessage('not also recording information block')); $this->assertNotEmpty($this->_processIblockId, $this->errorMessage('unavailable identifier of the new information block')); $rsProps = \CIBlockProperty::GetList(null, array('IBLOCK_ID' => $this->_processIblockId)); $this->assertNotEmpty($rsProps->AffectedRowsCount(), $this->errorMessage('added properties not available information block', array(':iblockId' => $this->_processIblockId))); $rsSections = \CIBlockSection::getList(null, array('IBLOCK_ID' => $this->_processIblockId), false, array('ID')); $this->assertNotEmpty($rsSections->AffectedRowsCount(), $this->errorMessage('added sections not available information block')); $registerRef = (bool) DbVersionReferencesTable::getList(array('filter' => array('=DB_VERSION' => Module::getInstance()->getDbVersion(), '=GROUP' => ReferenceController::GROUP_IBLOCK, '=ITEM_ID' => $this->_processIblockId)))->fetch(); $this->assertTrue($registerRef, $this->errorMessage('In added apply not created iblock reference ' . $this->_processIblockId)); }
protected static function actionAdd($name, $arFields) { if ($name == 'ADDELEMENT') { if (!self::checkElement($arFields)) { return; } // we don't have the GLOBAL_ACTIVE flag in $arFields so we should check it manually if (is_array($arFields['IBLOCK_SECTION']) && count($arFields['IBLOCK_SECTION']) > 0) { $arNewSections = array(); $arFilter = array('ID' => $arFields['IBLOCK_SECTION'], 'IBLOCK_ID' => $arFields['IBLOCK_ID'], 'GLOBAL_ACTIVE' => 'Y'); $dbRes = \CIBlockSection::getList(array(), $arFilter, false, array('ID')); while ($ar = $dbRes->fetch()) { $arNewSections[] = $ar['ID']; } if (count($arNewSections) <= 0) { // element is added to inactive sections return; } $arFields['IBLOCK_SECTION'] = $arNewSections; } } elseif ($name == 'ADDSECTION') { $dbRes = \CIBlockSection::getList(array(), array('ID' => $arFields['ID'], 'GLOBAL_ACTIVE' => 'Y'), false, array('ID')); if (!$dbRes->fetch()) { // section is added to inactive branch return; } } $arSitemaps = SitemapIblockTable::getByIblock($arFields, $name == 'ADDSECTION' ? SitemapIblockTable::TYPE_SECTION : SitemapIblockTable::TYPE_ELEMENT); $arFields['TIMESTAMP_X'] = ConvertTimeStamp(false, "FULL"); if (isset($arFields['IBLOCK_SECTION']) && is_array($arFields['IBLOCK_SECTION']) && count($arFields['IBLOCK_SECTION']) > 0) { $arFields['IBLOCK_SECTION_ID'] = min($arFields['IBLOCK_SECTION']); } if (count($arSitemaps) > 0) { $arSiteDirs = array(); $dbSite = SiteTable::getList(array('select' => array('LID', 'DIR'))); while ($arSite = $dbSite->fetch()) { $arSiteDirs[$arSite['LID']] = $arSite['DIR']; } foreach ($arSitemaps as $arSitemap) { $arFields['LANG_DIR'] = $arSiteDirs[$arSitemap['SITE_ID']]; $rule = array('url' => $name == 'ADDSECTION' ? \CIBlock::replaceDetailUrl($arSitemaps[0]['SECTION_PAGE_URL'], $arFields, false, "S") : \CIBlock::replaceDetailUrl($arSitemaps[0]['DETAIL_PAGE_URL'], $arFields, false, "E"), 'lastmod' => MakeTimeStamp($arFields['TIMESTAMP_X'])); $fileName = str_replace(array('#IBLOCK_ID#', '#IBLOCK_CODE#', '#IBLOCK_XML_ID#'), array($arFields['IBLOCK_ID'], $arSitemap['IBLOCK_CODE'], $arSitemap['IBLOCK_XML_ID']), $arSitemap['SITEMAP_FILE_IBLOCK']); $sitemapFile = new SitemapFile($fileName, $arSitemap); $sitemapFile->appendIblockEntry($rule['url'], $rule['lastmod']); $sitemapIndex = new SitemapIndex($arSitemap['SITEMAP_FILE'], $arSitemap); $sitemapIndex->appendIndexEntry($sitemapFile); if ($arSitemap['ROBOTS'] == 'Y') { $robotsFile = new RobotsFile($arSitemap['SITE_ID']); $robotsFile->addRule(array(RobotsFile::SITEMAP_RULE, $sitemapIndex->getUrl())); } } } }
protected function getSectionIdByCode($sectionCode = "") { $sectionId = 0; if ($sectionCode !== '') { return $sectionId; } $sectionFilter = array("IBLOCK_ID" => $this->arParams['IBLOCK_ID'], "IBLOCK_ACTIVE" => "Y"); $sectionFilter["=CODE"] = $sectionCode; $sectionIt = CIBlockSection::getList(array(), $sectionFilter, false, array("ID")); if ($section = $sectionIt->Fetch()) { $sectionId = $section['ID']; } return $sectionId; }
public static function getNotEmptySections($filter = array('sections' => array(), 'elements' => array()), $sort = array()) { CModule::includeModule('iblock'); $sections = array(); $rsSections = CIBlockSection::getList($sort, $filter['sections']); while ($section = $rsSections->getNext()) { $sections[$section['ID']] = $section; } $tmpSections = $sections; $sections = array(); $rsElements = CIBlockElement::getList(array('SORT'), $filter['elements'], array('IBLOCK_SECTION_ID')); while ($element = $rsElements->getNext()) { if ($element['CNT'] > 0) { $sections[$element['IBLOCK_SECTION_ID']] = $tmpSections[$element['IBLOCK_SECTION_ID']]; } } return $sections; }
private function getSectionDataByAttachObject(array $attachObject) { if (empty($attachObject['type'])) { throw new \Bitrix\Main\ArgumentException('type', 'attachObject'); } if (!isset($attachObject['id'])) { throw new \Bitrix\Main\ArgumentException('id', 'attachObject'); } if ($attachObject['type'] == \CWebDavSymlinkHelper::ENTITY_TYPE_GROUP) { $data = \CWebDavIblock::getRootSectionDataForGroup((int) $attachObject['id']); $data['SOCNET_GROUP_ID'] = $attachObject['id']; return $data; } if ($attachObject['type'] == \CWebDavSymlinkHelper::ENTITY_TYPE_USER) { $sectionId = (int) $attachObject['id']; $sectionData = \CIBlockSection::getList(array(), array('ID' => $sectionId, 'CHECK_PERMISSIONS' => 'Y'), false, array('SOCNET_GROUP_ID', 'IBLOCK_ID', 'CREATED_BY', 'NAME')); if (!$sectionData || !($sectionData = $sectionData->fetch())) { return array(); } $allowableIblock = false; $iblockType = false; foreach (array('user_files', 'group_files', 'shared_files') as $type) { $wdIblockOptions = \CWebDavIblock::libOptions($type, false, SITE_ID); if (is_set($wdIblockOptions, 'id') && intval($wdIblockOptions['id']) > 0) { if ($sectionData['IBLOCK_ID'] == $wdIblockOptions['id']) { $allowableIblock = true; $iblockType = $type; } } } if (!$allowableIblock) { return array(); } \CWebDavSymlinkHelper::setIblockIdForSectionId($sectionId, $sectionData['IBLOCK_ID']); return array('NAME' => $sectionData['NAME'], 'IBLOCK_ID' => $sectionData['IBLOCK_ID'], 'IBLOCK_TYPE' => $iblockType, 'SECTION_ID' => $sectionId, 'CREATED_BY' => $sectionData['CREATED_BY'], 'SOCNET_GROUP_ID' => isset($sectionData['SOCNET_GROUP_ID']) ? $sectionData['SOCNET_GROUP_ID'] : null); } throw new \Bitrix\Main\ArgumentException('Wrong type', 'attachObject'); }
protected function checkSection($sectionId = -1, $sectionCode = "") { if ($this->arParams['IBLOCK_ID'] <= 0) { return 0; } $bSectionFound = false; $sectionFilter = array("IBLOCK_ID" => $this->arParams['IBLOCK_ID'], "IBLOCK_ACTIVE" => "Y"); $id = 0; if ($sectionId > 0) { $sectionFilter["ID"] = $sectionId; $sectionIt = CIBlockSection::GetList(array(), $sectionFilter, false, array("ID")); if ($section = $sectionIt->Fetch()) { $id = $section['ID']; $bSectionFound = true; } } if (!$bSectionFound && $sectionCode !== '') { $sectionFilter["=CODE"] = $sectionCode; $sectionIt = CIBlockSection::getList(array(), $sectionFilter, false, array("ID")); if ($section = $sectionIt->Fetch()) { $id = $section['ID']; } } return $id; }
public static function onBeforeConfirmNotify($module, $tag, $value, $arNotify) { global $USER; $userId = $USER->getId(); if ($module == 'webdav' && $userId) { $tagData = explode('|', $tag); $folderInviteId = intval($tagData[2]); if ($tagData[0] == "WEBDAV" && $tagData[1] == "INVITE" && $folderInviteId > 0 && $userId == $tagData[3]) { if (\Bitrix\Main\Loader::includeModule('im')) { CIMNotify::DeleteByTag(\Bitrix\Webdav\FolderInviteTable::getNotifyTag(array('ID' => $folderInviteId, 'INVITE_USER_ID' => $userId))); } //decline if ($value === 'N') { \Bitrix\Webdav\FolderInviteTable::delete($folderInviteId); return false; } $targetSectionData = CWebDavIblock::getRootSectionDataForUser($userId); if (!$targetSectionData) { return false; } $folderInviteData = \Bitrix\Webdav\FolderInviteTable::getRowById($folderInviteId); if (!$folderInviteData) { return false; } $sectionToShare = CIBlockSection::getList(array(), array('ID' => $folderInviteData['SECTION_ID'], 'IBLOCK_ID' => $folderInviteData['IBLOCK_ID'], 'CHECK_PERMISSIONS' => 'N'), false, array('NAME', 'SOCNET_GROUP_ID'))->fetch(); if (empty($sectionToShare['NAME']) || empty($sectionToShare['SOCNET_GROUP_ID'])) { return false; } if (\Bitrix\Main\Loader::includeModule('socialnetwork')) { $group = CSocNetGroup::GetList(array(), array('ID' => $sectionToShare['SOCNET_GROUP_ID']), false, false, array('NAME'))->fetch(); } if (empty($group)) { return false; } $groupId = $sectionToShare['SOCNET_GROUP_ID']; $dispatcher = new \Bitrix\Webdav\InviteDispatcher(); $attachObjectType = CWebDavSymlinkHelper::ENTITY_TYPE_GROUP; $attachObjectId = (int) $groupId; $inviteComponentParams = array('attachObject' => array('id' => $attachObjectId, 'type' => $attachObjectType), 'attachToUserId' => $folderInviteData['INVITE_USER_ID'], 'inviteFromUserId' => $folderInviteData['USER_ID'], 'canEdit' => $folderInviteData['CAN_EDIT']); $response = $dispatcher->processActionConnect($inviteComponentParams); if ($response['status'] == $dispatcher::STATUS_SUCCESS) { \Bitrix\Webdav\FolderInviteTable::update($folderInviteId, array('IS_APPROVED' => true, 'LINK_SECTION_ID' => $response['sectionId'])); } return $response['status'] == $dispatcher::STATUS_SUCCESS; } } }
protected function createDataExcel() { $obList = new CList($this->arIBlock["ID"]); $gridOptions = new CGridOptions($this->arResult["GRID_ID"]); $gridColumns = $gridOptions->GetVisibleColumns(); $gridSort = $gridOptions->GetSorting(array("sort" => array("name" => "asc"))); $this->arResult["ELEMENTS_HEADERS"] = array(); $arSelect = array("ID", "IBLOCK_ID"); $arProperties = array(); $this->arResult["FIELDS"] = $arListFields = $obList->GetFields(); foreach ($arListFields as $fieldId => $arField) { if (!count($gridColumns) || in_array($fieldId, $gridColumns)) { if (substr($fieldId, 0, 9) == "PROPERTY_") { $arProperties[] = $fieldId; } else { $arSelect[] = $fieldId; } } if ($fieldId == "CREATED_BY") { $arSelect[] = "CREATED_USER_NAME"; } if ($fieldId == "MODIFIED_BY") { $arSelect[] = "USER_NAME"; } $this->arResult["ELEMENTS_HEADERS"][$fieldId] = $arField["NAME"]; } if (!count($gridColumns) || in_array("IBLOCK_SECTION_ID", $gridColumns)) { $arSelect[] = "IBLOCK_SECTION_ID"; } $this->arResult["ELEMENTS_HEADERS"]["IBLOCK_SECTION_ID"] = Loc::getMessage("CC_BLL_COLUMN_SECTION"); /* FILTER */ $sections = array(); foreach ($this->arResult["LIST_SECTIONS"] as $id => $name) { $sections[$id] = $name; } $this->arResult["FILTER"] = array(array("id" => "list_section_id", "type" => "list", "items" => $sections, "filtered" => $this->arResult["SECTION_ID"] !== false, "filter_value" => $this->arResult["SECTION_ID"], "value" => $this->arResult["SECTION_ID"])); $i = 1; $arFilterable = array(); $arCustomFilter = array(); $arDateFilter = array(); foreach ($arListFields as $fieldId => $arField) { if ($arField["TYPE"] == "ACTIVE_FROM" || $arField["TYPE"] == "ACTIVE_TO") { $this->arResult["FILTER"][$i] = array("id" => "DATE_" . $fieldId, "name" => htmlspecialcharsex($arField["NAME"]), "type" => "date"); $arFilterable["DATE_" . $fieldId] = ""; $arDateFilter["DATE_" . $fieldId] = true; } elseif ($arField["TYPE"] == "DATE_CREATE" || $arField["TYPE"] == "TIMESTAMP_X") { $this->arResult["FILTER"][$i] = array("id" => $fieldId, "name" => htmlspecialcharsex($arField["NAME"]), "type" => "date"); $arFilterable[$fieldId] = ""; $arDateFilter[$fieldId] = true; } elseif (is_array($arField["PROPERTY_USER_TYPE"]) && array_key_exists("GetPublicFilterHTML", $arField["PROPERTY_USER_TYPE"])) { $this->arResult["FILTER"][$i] = array("id" => $fieldId, "name" => htmlspecialcharsex($arField["NAME"]), "type" => "custom", "fieldsType" => $arField["TYPE"], "enable_settings" => false, "value" => call_user_func_array($arField["PROPERTY_USER_TYPE"]["GetPublicFilterHTML"], array($arField, array("VALUE" => $fieldId, "FORM_NAME" => "filter_" . $this->arResult["GRID_ID"], "GRID_ID" => $this->arResult["GRID_ID"])))); $arFilterable[$fieldId] = ""; if (array_key_exists("AddFilterFields", $arField["PROPERTY_USER_TYPE"])) { $arCustomFilter[$fieldId] = array("callback" => $arField["PROPERTY_USER_TYPE"]["AddFilterFields"], "filter" => &$this->arResult["FILTER"][$i]); } } elseif ($arField["TYPE"] == "SORT" || $arField["TYPE"] == "N") { $this->arResult["FILTER"][$i] = array("id" => $fieldId, "name" => htmlspecialcharsex($arField["NAME"]), "type" => "number"); $arFilterable[$fieldId] = ""; } elseif ($arField["TYPE"] == "G") { $items = array(); $prop_secs = CIBlockSection::GetList(array("left_margin" => "asc"), array("IBLOCK_ID" => $arField["LINK_IBLOCK_ID"])); while ($ar_sec = $prop_secs->Fetch()) { $items[$ar_sec["ID"]] = str_repeat(". ", $ar_sec["DEPTH_LEVEL"] - 1) . $ar_sec["NAME"]; } $this->arResult["FILTER"][$i] = array("id" => $fieldId, "name" => htmlspecialcharsex($arField["NAME"]), "type" => "list", "items" => $items, "params" => array("size" => 5, "multiple" => "multiple"), "valign" => "top"); $arFilterable[$fieldId] = ""; } elseif ($arField["TYPE"] == "E") { //Should be handled in template $this->arResult["FILTER"][$i] = array("id" => $fieldId, "name" => htmlspecialcharsex($arField["NAME"]), "type" => "E", "value" => $arField); $arFilterable[$fieldId] = ""; } elseif ($arField["TYPE"] == "L") { $items = array(); $propEnums = CIBlockProperty::GetPropertyEnum($arField["ID"]); while ($arEnum = $propEnums->Fetch()) { $items[$arEnum["ID"]] = $arEnum["VALUE"]; } $this->arResult["FILTER"][$i] = array("id" => $fieldId, "name" => htmlspecialcharsex($arField["NAME"]), "type" => "list", "items" => $items, "params" => array("size" => 5, "multiple" => "multiple"), "valign" => "top"); $arFilterable[$fieldId] = ""; } elseif (in_array($arField["TYPE"], array("S", "S:HTML", "NAME", "DETAIL_TEXT", "PREVIEW_TEXT"))) { $this->arResult["FILTER"][$i] = array("id" => $fieldId, "name" => htmlspecialcharsex($arField["NAME"])); $arFilterable[$fieldId] = "?"; } else { $this->arResult["FILTER"][$i] = array("id" => $fieldId, "name" => htmlspecialcharsex($arField["NAME"]), "fieldsType" => $arField["TYPE"]); $arFilterable[$fieldId] = ""; } $i++; } $arFilter = array(); $gridFilter = $gridOptions->GetFilter($this->arResult["FILTER"]); foreach ($gridFilter as $key => $value) { if (substr($key, -5) == "_from") { $op = ">="; $newKey = substr($key, 0, -5); } elseif (substr($key, -3) == "_to") { $op = "<="; $newKey = substr($key, 0, -3); if (array_key_exists($newKey, $arDateFilter)) { if (!preg_match("/\\d\\d:\\d\\d:\\d\\d\$/", $value)) { $value .= " 23:59:59"; } } } else { $op = ""; $newKey = $key; } if (array_key_exists($newKey, $arFilterable)) { if ($op == "") { $op = $arFilterable[$newKey]; } $arFilter[$op . $newKey] = $value; } } foreach ($arCustomFilter as $fieldId => $arCallback) { $filtered = false; call_user_func_array($arCallback["callback"], array($arListFields[$fieldId], array("VALUE" => $fieldId, "GRID_ID" => $this->arResult["GRID_ID"]), &$arFilter, &$filtered)); } $arFilter["IBLOCK_ID"] = $this->arIBlock["ID"]; $arFilter["CHECK_PERMISSIONS"] = $this->listsPerm >= CListPermissions::CAN_READ ? "N" : "Y"; if (!$this->arResult["ANY_SECTION"]) { $arFilter["SECTION_ID"] = $this->arResult["SECTION_ID"]; } $rsElements = CIBlockElement::GetList($gridSort["sort"], $arFilter, false, false, $arSelect); $this->arResult["EXCEL_COLUMN_NAME"] = array(); $this->arResult["EXCEL_CELL_VALUE"] = array(); $count = 0; $comments = false; if (in_array("COMMENTS", $gridColumns) && CModule::includeModule("forum")) { $comments = true; } while ($obElement = $rsElements->GetNextElement()) { $data = $obElement->GetFields(); $propertyArray = $obElement->GetProperties(); if (!empty($arProperties)) { foreach ($propertyArray as $arProp) { $fieldId = "PROPERTY_" . $arProp["ID"]; if (in_array($fieldId, $arProperties)) { $arField = $this->arResult["FIELDS"][$fieldId]; if (is_array($arField["PROPERTY_USER_TYPE"]) && is_array($arField["PROPERTY_USER_TYPE"]["GetPublicViewHTML"])) { if ($arProp["USER_TYPE"] == "map_yandex") { $data[$fieldId] = !empty($arProp["VALUE"]) ? $arProp["VALUE"] : ''; continue; } elseif ($arProp["USER_TYPE"] == "DiskFile") { if (!empty($arProp["VALUE"]) && $this->arResult["DISK"]) { $listValue = current($arProp["VALUE"]); if (!is_array($listValue)) { $listValue = $arProp["VALUE"]; } $number = 0; $countFiles = count($listValue); foreach ($listValue as $idAttached) { $number++; list($type, $realId) = Bitrix\Disk\Uf\FileUserType::detectType($idAttached); if ($type == Bitrix\Disk\Uf\FileUserType::TYPE_ALREADY_ATTACHED) { $attachedModel = Bitrix\Disk\AttachedObject::loadById($realId); if (!$attachedModel) { continue; } $fileModel = Bitrix\Disk\File::loadById($attachedModel->getObjectId(), array('STORAGE')); if (!$fileModel) { continue; } $data[$fieldId] .= $fileModel->getName(); $data[$fieldId] .= $countFiles != $number ? ', ' : ''; } } } continue; } if (is_array($arProp["~VALUE"])) { foreach ($arProp["~VALUE"] as $propValue) { $data[$fieldId][] = call_user_func_array($arField["PROPERTY_USER_TYPE"]["GetPublicViewHTML"], array($arField, array("VALUE" => $propValue), array())); } } else { $data[$fieldId] = call_user_func_array($arField["PROPERTY_USER_TYPE"]["GetPublicViewHTML"], array($arField, array("VALUE" => $arProp["~VALUE"]), array())); } } elseif ($arField["PROPERTY_TYPE"] == "E") { if (empty($arProp['VALUE'])) { continue; } if (!is_array($arProp['VALUE'])) { $arProp['VALUE'] = array($arProp['VALUE']); } $elementQuery = CIBlockElement::getList(array(), array("=ID" => $arProp['VALUE']), false, false, array("NAME")); while ($element = $elementQuery->fetch()) { $data[$fieldId][] = $element['NAME']; } } elseif ($arField["PROPERTY_TYPE"] == "G") { if (empty($arProp['VALUE'])) { continue; } if (!is_array($arProp['VALUE'])) { $arProp['VALUE'] = array($arProp['VALUE']); } $sectionQuery = CIBlockSection::getList(array(), array("=ID" => $arProp['VALUE'])); while ($section = $sectionQuery->fetch()) { $data[$fieldId][] = $section['NAME']; } } elseif ($arField["PROPERTY_TYPE"] == "L") { $data[$fieldId] = htmlspecialcharsex($arProp["VALUE_ENUM"]); } elseif ($arField["PROPERTY_TYPE"] == "F") { $files = is_array($arProp["VALUE"]) ? $arProp["VALUE"] : array($arProp["VALUE"]); $number = 1; $countFiles = count($files); foreach ($files as $file) { $value = CFile::MakeFileArray($file); $data[$fieldId] .= $value["name"]; $data[$fieldId] .= $countFiles != $number ? ', ' : ''; $number++; } } else { $data[$fieldId] = htmlspecialcharsex($arProp["VALUE"]); } } } if (!empty($data["IBLOCK_SECTION_ID"])) { if (array_key_exists($data["IBLOCK_SECTION_ID"], $this->arResult["SECTIONS"])) { $data["IBLOCK_SECTION_ID"] = $this->arResult["SECTIONS"][$data["IBLOCK_SECTION_ID"]]["NAME"]; } } if (in_array("BIZPROC", $gridColumns)) { $data["BIZPROC"] = $this->getArrayBizproc($data); } } if ($comments) { $countComments = $this->getCommentsProcess($data["ID"]); } if (isset($data["CREATED_BY"])) { $data["CREATED_BY"] = "[" . $data["CREATED_BY"] . "] " . $data["CREATED_USER_NAME"]; } if (isset($data["MODIFIED_BY"])) { $data["MODIFIED_BY"] = "[" . $data["MODIFIED_BY"] . "] " . $data["USER_NAME"]; } if (isset($data["ACTIVE_FROM"])) { $data['ACTIVE_FROM'] = FormatDateFromDB($data['ACTIVE_FROM']); } if (isset($data["ACTIVE_TO"])) { $data['ACTIVE_TO'] = FormatDateFromDB($data['ACTIVE_TO']); } if (isset($data["DATE_CREATE"])) { $data['DATE_CREATE'] = FormatDateFromDB($data['DATE_CREATE']); } if (isset($data["TIMESTAMP_X"])) { $data['TIMESTAMP_X'] = FormatDateFromDB($data['TIMESTAMP_X']); } foreach ($gridColumns as $position => $id) { if ($id == "COMMENTS") { if ($comments) { $data[$id] = $countComments; } else { continue; } } $this->arResult["EXCEL_CELL_VALUE"][$count][$position] = is_array($data[$id]) ? implode('/', $data[$id]) : $data[$id]; $this->arResult["EXCEL_COLUMN_NAME"][$position] = $this->arResult["ELEMENTS_HEADERS"][$id]; } $count++; } }
protected function migrateExternalLinks() { $this->abortIfNeeded(); if ($this->isStepFinished(__METHOD__)) { return array(0, 0); } $successCount = $failedCount = 0; $this->log(array('Start migrate external links')); $lastCreationDate = $this->getLastConvertedExtLinkCreationDate(); $connection = Application::getInstance()->getConnection(); $query = $connection->query("\n\t\t\tSELECT * from b_webdav_ext_links ext\n\t\t\tWHERE ext.LINK_TYPE = 'M' AND ext.RESOURCE_TYPE = 'IBLOCK' AND ext.CREATION_DATE > {$lastCreationDate} AND (ext.ELEMENT_ID IS NULL OR ext.ELEMENT_ID = 0)\n\t\t\tORDER BY ext.CREATION_DATE\n\t\t"); while ($query && ($extLinkRow = $query->fetch())) { $this->abortIfNeeded(); $extLinkData = $this->prepareDataFromOldExtLink($extLinkRow); if (empty($extLinkRow['ROOT_SECTION_ID']) && !empty($extLinkRow['URL'])) { $this->log(array('Migrate simple ext.link from common storage (without symbolic link)')); $success = true; $pathItems = explode('/', ltrim($extLinkRow['URL'], '/')); $nameOfElement = array_pop($pathItems); $prevSectionId = 0; $prevIblockId = $extLinkRow['IBLOCK_ID']; foreach ($pathItems as $path) { $pathFilter = array('=NAME' => $path, 'IBLOCK_ID' => $prevIblockId, 'SECTION_ID' => $prevSectionId); $section = CIBlockSection::getList(array(), $pathFilter, false, array('ID', 'IBLOCK_ID'))->fetch(); if (!$section) { $success = false; break; } $prevSectionId = $section['ID']; $prevIblockId = $section['IBLOCK_ID']; } unset($path); if (!$success) { $this->log(array('Could not migrate ext.link (resolve path)', $extLinkRow)); $this->storeConvertedExtLinkCreationDate($extLinkRow['CREATION_DATE']); continue; } $targetElement = CIBlockElement::getList(array(), array('=NAME' => $nameOfElement, 'IBLOCK_ID' => $prevIblockId, 'SECTION_ID' => $prevSectionId), false, false, array('ID'))->fetch(); if (!$targetElement || empty($targetElement['ID'])) { $this->log(array('Could not migrate ext.link (find iblockElement)', $extLinkRow)); $this->storeConvertedExtLinkCreationDate($extLinkRow['CREATION_DATE']); continue; } $targetElement['ID'] = (int) $targetElement['ID']; $result = $this->connection->query("SELECT ID FROM b_disk_object WHERE WEBDAV_ELEMENT_ID = {$targetElement['ID']}")->fetch(); if (!$result || empty($result['ID'])) { $this->log(array('Could not migrate ext.link (find b_disk_object)', $extLinkRow)); $this->storeConvertedExtLinkCreationDate($extLinkRow['CREATION_DATE']); continue; } $extLinkData['OBJECT_ID'] = $result['ID']; } elseif (!empty($extLinkRow['ROOT_SECTION_ID']) && !empty($extLinkRow['URL'])) { $this->log(array('Migrate ext.link from user storage (may contains symbolic link)')); $success = true; $pathItems = explode('/', ltrim($extLinkRow['URL'], '/')); $nameOfElement = array_pop($pathItems); $prevSectionId = $extLinkRow['ROOT_SECTION_ID']; $prevIblockId = $extLinkRow['IBLOCK_ID']; foreach ($pathItems as $path) { $pathFilter = array('=NAME' => $path, 'IBLOCK_ID' => $prevIblockId, 'SECTION_ID' => $prevSectionId); $section = CIBlockSection::getList(array(), $pathFilter, false, array('ID', 'IBLOCK_ID', 'UF_LINK_IBLOCK_ID', 'UF_LINK_SECTION_ID'))->fetch(); if (!$section) { $success = false; break; } $prevSectionId = empty($section['UF_LINK_SECTION_ID']) ? $section['ID'] : $section['UF_LINK_SECTION_ID']; $prevIblockId = empty($section['UF_LINK_IBLOCK_ID']) ? $section['IBLOCK_ID'] : $section['UF_LINK_IBLOCK_ID']; } unset($path); if (!$success) { $this->log(array('Could not migrate ext.link (resolve symbolic path)', $extLinkRow)); $this->storeConvertedExtLinkCreationDate($extLinkRow['CREATION_DATE']); continue; } $targetElement = CIBlockElement::getList(array(), array('=NAME' => $nameOfElement, 'IBLOCK_ID' => $prevIblockId, 'SECTION_ID' => $prevSectionId), false, false, array('ID'))->fetch(); if (!$targetElement || empty($targetElement['ID'])) { $this->log(array('Could not migrate ext.link (find iblockElement)', $extLinkRow)); $this->storeConvertedExtLinkCreationDate($extLinkRow['CREATION_DATE']); continue; } $targetElement['ID'] = (int) $targetElement['ID']; $result = $this->connection->query("SELECT ID FROM b_disk_object WHERE WEBDAV_ELEMENT_ID = {$targetElement['ID']}")->fetch(); if (!$result || empty($result['ID'])) { $this->log(array('Could not migrate ext.link (find b_disk_object)', $extLinkRow)); $this->storeConvertedExtLinkCreationDate($extLinkRow['CREATION_DATE']); continue; } $extLinkData['OBJECT_ID'] = $result['ID']; } $result = ExternalLinkTable::add($extLinkData); if (!$result->isSuccess()) { $this->log(array('Could not add new ext.link', $extLinkData, $result->getErrors())); $this->storeConvertedExtLinkCreationDate($extLinkRow['CREATION_DATE']); continue; } $this->log(array('Success attempt', $result->getId())); $this->storeConvertedExtLinkCreationDate($extLinkRow['CREATION_DATE']); } $this->setStepFinished(__METHOD__); $this->log(array('Finish migrate external links')); return array($successCount, $failedCount); }