protected function processActionShowSubFolders() { if (!$this->checkRequiredPostParams(array('objectId'))) { $this->sendJsonErrorResponse(); } $showOnlyDeleted = (bool) $this->request->getPost('showOnlyDeleted'); $isRoot = (bool) $this->request->getPost('isRoot'); /** @var Folder $folder */ $folder = Folder::loadById((int) $this->request->getPost('objectId'), array('STORAGE')); if (!$folder) { $this->errorCollection->add(array(new Error(Loc::getMessage('DISK_BREADCRUMBS_ERROR_COULD_NOT_FIND_FOLDER'), self::ERROR_COULD_NOT_FIND_FOLDER))); $this->sendJsonErrorResponse(); } $securityContext = $folder->getStorage()->getCurrentUserSecurityContext(); $subFolders = array(); $filter = array('TYPE' => ObjectTable::TYPE_FOLDER); if ($showOnlyDeleted) { $filter['!=DELETED_TYPE'] = ObjectTable::DELETED_TYPE_NONE; } if ($showOnlyDeleted && $isRoot) { $filter['DELETED_TYPE'] = ObjectTable::DELETED_TYPE_ROOT; $children = $folder->getDescendants($securityContext, array('filter' => $filter)); } else { $children = $folder->getChildren($securityContext, array('filter' => $filter)); } foreach ($children as $subFolder) { /** @var Folder $subFolder */ $subFolders[] = array('id' => $subFolder->getId(), 'name' => $subFolder->getName(), 'isLink' => $subFolder->isLink()); } unset($subFolder); \Bitrix\Main\Type\Collection::sortByColumn($subFolders, 'name'); $this->sendJsonSuccessResponse(array('items' => $subFolders)); }
private function getGridData($gridId) { $grid = array('ID' => $gridId); $securityContext = $this->storage->getCurrentUserSecurityContext(); $parameters = array('with' => array('FILE', 'CREATE_USER'), 'filter' => array('IS_EXPIRED' => false, 'OBJECT.STORAGE_ID' => $this->storage->getId(), 'CREATED_BY' => $this->getUser()->getId())); $parameters = Driver::getInstance()->getRightsManager()->addRightsCheck($securityContext, $parameters, array('OBJECT_ID', 'OBJECT.CREATED_BY')); $items = ExternalLink::getModelList($parameters); Collection::sortByColumn($items, array('CREATE_TIME' => array(SORT_NUMERIC, SORT_ASC))); $urlManager = Driver::getInstance()->getUrlManager(); $rows = array(); foreach ($items as $externalLink) { /** @var ExternalLink $externalLink */ $exportData = $externalLink->toArray(); $nameSpecialChars = htmlspecialcharsbx($externalLink->getFile()->getName()); $createDateText = htmlspecialcharsbx((string) $externalLink->getCreateTime()); $columnName = "\n\t\t\t\t<table class=\"bx-disk-object-name\"><tr>\n\t\t\t\t\t\t<td style=\"width: 45px;\"><div data-object-id=\"{$externalLink->getId()}\" class=\"draggable bx-file-icon-container-small bx-disk-file-icon\"></div></td>\n\t\t\t\t\t\t<td><a class=\"bx-disk-folder-title\" id=\"disk_obj_{$externalLink->getId()}\" href=\"\" data-bx-dateModify=\"{$createDateText}\">{$nameSpecialChars}</a></td>\n\t\t\t\t</tr></table>\n\t\t\t"; $createdByLink = \CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_USER'], array("user_id" => $externalLink->getCreatedBy())); $rows[] = array('data' => $exportData, 'columns' => array('CREATE_TIME' => formatDate('x', $externalLink->getCreateTime()->getTimestamp(), time() + CTimeZone::getOffset()), 'UPDATE_TIME' => formatDate('x', $externalLink->getCreateTime()->getTimestamp(), time() + CTimeZone::getOffset()), 'NAME' => $columnName, 'FORMATTED_SIZE' => CFile::formatSize($externalLink->getFile()->getSize()), 'CREATE_USER' => "\n\t\t\t\t\t\t<div class=\"bx-disk-user-link\"><a target='_blank' href=\"{$createdByLink}\" id=\"\">" . htmlspecialcharsbx($externalLink->getCreateUser()->getFormattedName()) . "</a></div>\n\t\t\t\t\t"), 'actions' => array(array("PSEUDO_NAME" => "download", "DEFAULT" => true, "ICONCLASS" => "download", "TEXT" => Loc::getMessage('DISK_EXTERNAL_LINK_LIST_ACT_DOWNLOAD'), "ONCLICK" => "jsUtils.Redirect(arguments, '" . $urlManager->getUrlForDownloadFile($externalLink->getFile()) . "')"), array("PSEUDO_NAME" => "disable_external_link", "ICONCLASS" => "disable_external_link", "TEXT" => Loc::getMessage('DISK_EXTERNAL_LINK_LIST_ACT_DISABLE_EXTERNAL_LINK'), "SHORT_TEXT" => Loc::getMessage('DISK_EXTERNAL_LINK_LIST_ACT_DISABLE_EXTERNAL_LINK_SHORT'), "ONCLICK" => "BX.Disk['ExternalLinkListClass_{$this->getComponentId()}'].disableExternalLink({$externalLink->getId()}, {$externalLink->getObjectId()})"))); } unset($externalLink); $grid['MODE'] = 'list'; $grid['HEADERS'] = array(array('id' => 'ID', 'name' => 'ID', 'default' => false, 'show_checkbox' => true), array('id' => 'NAME', 'name' => Loc::getMessage('DISK_EXTERNAL_LINK_LIST_COLUMN_NAME'), 'default' => true), array('id' => 'CREATE_TIME', 'name' => Loc::getMessage('DISK_EXTERNAL_LINK_LIST_COLUMN_CREATE_TIME'), 'default' => true), array('id' => 'CREATE_USER', 'name' => Loc::getMessage('DISK_EXTERNAL_LINK_LIST_COLUMN_CREATE_USER'), 'default' => false), array('id' => 'FORMATTED_SIZE', 'name' => Loc::getMessage('DISK_EXTERNAL_LINK_LIST_COLUMN_FORMATTED_SIZE'), 'default' => true)); $grid['ROWS'] = $rows; $grid['ROWS_COUNT'] = count($rows); $grid['FOOTER'] = array(); return $grid; }
protected static function AppyUserSettings($suffix) { $arAuthServices = self::$arAuthServices; //user settings: sorting, active $arServices = unserialize(COption::GetOptionString("socialservices", "auth_services" . $suffix, "")); if (is_array($arServices)) { $i = 0; foreach ($arServices as $serv => $active) { if (isset($arAuthServices[$serv])) { $arAuthServices[$serv]["__sort"] = $i++; $arAuthServices[$serv]["__active"] = $active == "Y"; } } \Bitrix\Main\Type\Collection::sortByColumn($arAuthServices, "__sort"); } return $arAuthServices; }
protected function __construct() { $event = new Main\Event("main", "OnApplicationsBuildList"); $event->send(); foreach ($event->getResults() as $eventResult) { $result = $eventResult->getParameters(); if (is_array($result)) { if (!is_array($result[0])) { $result = array($result); } foreach ($result as $app) { $this->applications[$app["ID"]] = $app; } } } Main\Type\Collection::sortByColumn($this->applications, "SORT"); }
protected function processActionGetListStorage() { $this->checkRequiredPostParams(array('proxyType')); if ($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $proxyTypePost = $this->request->getPost('proxyType'); $diskSecurityContext = $this->getSecurityContextByUser($this->getUser()); $siteId = null; $siteDir = null; if ($this->request->getPost('siteId')) { $siteId = $this->request->getPost('siteId'); } if ($this->request->getPost('siteDir')) { $siteDir = rtrim($this->request->getPost('siteDir'), '/'); } $result = array(); $filterReadableList = array(); $checkSiteId = false; if ($proxyTypePost == 'user') { $result['TITLE'] = Loc::getMessage('DISK_AGGREGATOR_USER_TITLE'); $filterReadableList = array('STORAGE.ENTITY_TYPE' => ProxyType\User::className()); } elseif ($proxyTypePost == 'group') { $checkSiteId = true; $result['TITLE'] = Loc::getMessage('DISK_AGGREGATOR_GROUP_TITLE'); $filterReadableList = array('STORAGE.ENTITY_TYPE' => ProxyType\Group::className()); } foreach (Storage::getReadableList($diskSecurityContext, array('filter' => $filterReadableList)) as $storage) { if ($checkSiteId) { $groupObject = CSocNetGroup::getList(array(), array('ID' => $storage->getEntityId()), false, false, array('SITE_ID')); $group = $groupObject->fetch(); if (!empty($group) && $group['SITE_ID'] != $siteId) { continue; } } $proxyType = $storage->getProxyType(); $result['DATA'][] = array("TITLE" => $proxyType->getEntityTitle(), "URL" => $siteDir . $proxyType->getBaseUrlFolderList(), "ICON" => $proxyType->getEntityImageSrc(64, 64)); } if (!empty($result['DATA'])) { Collection::sortByColumn($result['DATA'], array('TITLE' => SORT_ASC)); $this->sendJsonSuccessResponse(array('listStorage' => $result['DATA'], 'title' => $result['TITLE'])); } else { $this->errorCollection->add(array(new Error(Loc::getMessage('DISK_AGGREGATOR_ERROR_COULD_NOT_FIND_DATA')))); $this->sendJsonErrorResponse(); } }
/** * Fixes cold start, when we don't have any data in RecentlyUsedTable. * @param mixed|int|User|\CAllUser $user User. * @return bool * @throws \Bitrix\Main\ArgumentException */ private function fixColdStart($user) { $userId = User::resolveUserId($user); if (!$userId) { $this->errorCollection->addOne(new Error('Could not get user id.')); return false; } $storage = Driver::getInstance()->getStorageByUserId($userId); if (!$storage) { $this->errorCollection->addOne(new Error('Could not get storage by user id.')); return false; } $fromDate = DateTime::createFromTimestamp(time() - 14 * 24 * 3600); $objects = array(); $query = FileTable::getList(array('select' => array('ID', 'UPDATE_TIME'), 'filter' => array('STORAGE_ID' => $storage->getId(), 'TYPE' => ObjectTable::TYPE_FILE, 'DELETED_TYPE' => ObjectTable::DELETED_TYPE_NONE, '>UPDATE_TIME' => $fromDate, array('LOGIC' => 'OR', array('CREATED_BY' => $userId), array('UPDATED_BY' => $userId))), 'order' => array('UPDATE_TIME' => 'DESC'), 'limit' => RecentlyUsedTable::MAX_COUNT_FOR_USER)); while ($row = $query->fetch()) { $objects[] = array('USER_ID' => $userId, 'OBJECT_ID' => $row['ID'], 'CREATE_TIME' => $row['UPDATE_TIME']); } unset($row, $query, $fromDate); Collection::sortByColumn($objects, array('CREATE_TIME' => SORT_ASC)); RecentlyUsedTable::insertBatch($objects); return true; }
public static function GetArray($IBLOCK_ID, $SECTION_ID = 0, $bNewSection = false) { global $DB; $IBLOCK_ID = intval($IBLOCK_ID); $SECTION_ID = intval($SECTION_ID); $result = array(); if ($SECTION_ID > 0) { $rs = $DB->Query($s = "\n\t\t\t\tSELECT\n\t\t\t\t\tB.SECTION_PROPERTY,\n\t\t\t\t\tBP.ID PROPERTY_ID,\n\t\t\t\t\tBSP.SECTION_ID LINK_ID,\n\t\t\t\t\tBSP.SMART_FILTER,\n\t\t\t\t\tBP.SORT,\n\t\t\t\t\tBS.LEFT_MARGIN,\n\t\t\t\t\tBS.NAME LINK_TITLE\n\t\t\t\tFROM\n\t\t\t\t\tb_iblock B\n\t\t\t\t\tINNER JOIN b_iblock_property BP ON BP.IBLOCK_ID = B.ID\n\t\t\t\t\tINNER JOIN b_iblock_section M ON M.ID = " . $SECTION_ID . "\n\t\t\t\t\tINNER JOIN b_iblock_section BS ON BS.IBLOCK_ID = M.IBLOCK_ID\n\t\t\t\t\t\tAND M.LEFT_MARGIN >= BS.LEFT_MARGIN\n\t\t\t\t\t\tAND M.RIGHT_MARGIN <= BS.RIGHT_MARGIN\n\t\t\t\t\tINNER JOIN b_iblock_section_property BSP ON BSP.IBLOCK_ID = BS.IBLOCK_ID AND BSP.SECTION_ID = BS.ID AND BSP.PROPERTY_ID = BP.ID\n\t\t\t\tWHERE\n\t\t\t\t\tB.ID = " . $IBLOCK_ID . "\n\t\t\t\tORDER BY\n\t\t\t\t\tBP.SORT ASC, BP.ID ASC, BS.LEFT_MARGIN DESC\n\t\t\t"); while ($ar = $rs->Fetch()) { $result[$ar["PROPERTY_ID"]] = array("PROPERTY_ID" => $ar["PROPERTY_ID"], "SMART_FILTER" => $ar["SMART_FILTER"], "INHERITED" => $SECTION_ID == $ar["LINK_ID"] ? "N" : "Y", "INHERITED_FROM" => $ar["LINK_ID"], "SORT" => $ar["SORT"], "LEFT_MARGIN" => $ar["LEFT_MARGIN"], "LINK_TITLE" => $ar["LINK_TITLE"]); } } if ($SECTION_ID >= 0) { $rs = $DB->Query("\n\t\t\t\tSELECT\n\t\t\t\t\tB.SECTION_PROPERTY,\n\t\t\t\t\tBP.ID PROPERTY_ID,\n\t\t\t\t\tBSP.SECTION_ID LINK_ID,\n\t\t\t\t\tBSP.SMART_FILTER,\n\t\t\t\t\tBP.SORT,\n\t\t\t\t\t0 LEFT_MARGIN,\n\t\t\t\t\tB.NAME LINK_TITLE\n\t\t\t\tFROM\n\t\t\t\t\tb_iblock B\n\t\t\t\t\tINNER JOIN b_iblock_property BP ON BP.IBLOCK_ID = B.ID\n\t\t\t\t\tLEFT JOIN b_iblock_section_property BSP ON BSP.SECTION_ID = 0 AND BSP.PROPERTY_ID = BP.ID\n\t\t\t\tWHERE\n\t\t\t\t\tB.ID = " . $IBLOCK_ID . "\n\t\t\t\tORDER BY\n\t\t\t\t\tBP.SORT ASC, BP.ID ASC\n\t\t\t"); while ($ar = $rs->Fetch()) { if ($ar["SECTION_PROPERTY"] === "Y") { if (strlen($ar["LINK_ID"])) { $result[$ar["PROPERTY_ID"]] = array("PROPERTY_ID" => $ar["PROPERTY_ID"], "SMART_FILTER" => $ar["SMART_FILTER"], "INHERITED" => $SECTION_ID == 0 && !$bNewSection ? "N" : "Y", "INHERITED_FROM" => 0, "SORT" => $ar["SORT"], "LEFT_MARGIN" => $ar["LEFT_MARGIN"], "LINK_TITLE" => $ar["LINK_TITLE"]); } } else { $result[$ar["PROPERTY_ID"]] = array("PROPERTY_ID" => $ar["PROPERTY_ID"], "SMART_FILTER" => "N", "INHERITED" => $SECTION_ID == 0 && !$bNewSection ? "N" : "Y", "INHERITED_FROM" => 0, "SORT" => $ar["SORT"], "LEFT_MARGIN" => $ar["LEFT_MARGIN"], "LINK_TITLE" => $ar["LINK_TITLE"]); } } if (!empty($result)) { \Bitrix\Main\Type\Collection::sortByColumn($result, array("SORT" => SORT_ASC, "PROPERTY_ID" => SORT_ASC), '', null, true); } } return $result; }
private function getParentRights() { if ($this->parentRights !== null) { return $this->parentRights; } $this->parentRights = Driver::getInstance()->getRightsManager()->getParentsRights($this->object->getId()); Collection::sortByColumn($this->parentRights, array('DEPTH_LEVEL' => SORT_DESC)); return $this->parentRights; }
foreach ($arMatrix as $keyOffer => $arRow) { if ($boolExist) { if (!isset($arItem['OFFERS'][$keyOffer]['TREE'])) { $arItem['OFFERS'][$keyOffer]['TREE'] = array(); } $arItem['OFFERS'][$keyOffer]['TREE']['PROP_' . $arSKUPropList[$strOneCode]['ID']] = $arMatrix[$keyOffer][$strOneCode]['VALUE']; $arItem['OFFERS'][$keyOffer]['SKU_SORT_' . $strOneCode] = $arMatrix[$keyOffer][$strOneCode]['SORT']; $arUsedFields[$strOneCode] = true; $arSortFields['SKU_SORT_' . $strOneCode] = SORT_NUMERIC; } else { unset($arMatrix[$keyOffer][$strOneCode]); } } } $arItem['OFFERS_PROP'] = $arUsedFields; \Bitrix\Main\Type\Collection::sortByColumn($arItem['OFFERS'], $arSortFields); // Find Selected offer foreach ($arItem['OFFERS'] as $ind => $offer) { if ($offer['SELECTED']) { $arItem['OFFERS_SELECTED'] = $ind; break; } } $arMatrix = array(); $intSelected = -1; $arItem['MIN_PRICE'] = false; /*foreach ($arItem['OFFERS'] as $keyOffer => $arOffer) { if (empty($arItem['MIN_PRICE']) && $arOffer['CAN_BUY']) { $intSelected = $keyOffer;
public static function ImportTemplate($id, $documentType, $autoExecute, $name, $description, $datum, $systemCode = null, $systemImport = false) { $id = intval($id); if ($id <= 0) { $id = 0; } $datumTmp = CheckSerializedData($datum) ? @unserialize($datum) : null; if (!is_array($datumTmp) || is_array($datumTmp) && !array_key_exists("TEMPLATE", $datumTmp)) { if (function_exists("gzcompress")) { $datumTmp = @gzuncompress($datum); $datumTmp = CheckSerializedData($datumTmp) ? @unserialize($datumTmp) : null; } } if (!is_array($datumTmp) || is_array($datumTmp) && !array_key_exists("TEMPLATE", $datumTmp)) { throw new Exception(GetMessage("BPCGWTL_WRONG_TEMPLATE")); } if (array_key_exists("VERSION", $datumTmp) && $datumTmp["VERSION"] == 2) { $datumTmp["TEMPLATE"] = self::ConvertArrayCharset($datumTmp["TEMPLATE"], BP_EI_DIRECTION_IMPORT); $datumTmp["PARAMETERS"] = self::ConvertArrayCharset($datumTmp["PARAMETERS"], BP_EI_DIRECTION_IMPORT); $datumTmp["VARIABLES"] = self::ConvertArrayCharset($datumTmp["VARIABLES"], BP_EI_DIRECTION_IMPORT); $datumTmp["CONSTANTS"] = isset($datumTmp["CONSTANTS"]) ? self::ConvertArrayCharset($datumTmp["CONSTANTS"], BP_EI_DIRECTION_IMPORT) : array(); $datumTmp["DOCUMENT_FIELDS"] = self::ConvertArrayCharset($datumTmp["DOCUMENT_FIELDS"], BP_EI_DIRECTION_IMPORT); } if (!$systemImport) { if (!self::WalkThroughWorkflowTemplate($datumTmp["TEMPLATE"], array("CBPWorkflowTemplateLoader", "ImportTemplateChecker"), new CBPWorkflowTemplateUser(CBPWorkflowTemplateUser::CurrentUser))) { return false; } } elseif ($id > 0 && !empty($datumTmp["CONSTANTS"])) { $userConstants = self::getTemplateConstants($id); if (!empty($userConstants)) { foreach ($userConstants as $constantName => $constantData) { if (isset($datumTmp["CONSTANTS"][$constantName])) { $datumTmp["CONSTANTS"][$constantName]['Default'] = $constantData['Default']; } } } } $templateData = array("DOCUMENT_TYPE" => $documentType, "AUTO_EXECUTE" => $autoExecute, "NAME" => $name, "DESCRIPTION" => $description, "TEMPLATE" => $datumTmp["TEMPLATE"], "PARAMETERS" => $datumTmp["PARAMETERS"], "VARIABLES" => $datumTmp["VARIABLES"], "CONSTANTS" => $datumTmp["CONSTANTS"], "USER_ID" => $systemImport ? 1 : $GLOBALS["USER"]->GetID(), "MODIFIER_USER" => new CBPWorkflowTemplateUser($systemImport ? 1 : CBPWorkflowTemplateUser::CurrentUser)); if (!is_null($systemCode)) { $templateData["SYSTEM_CODE"] = $systemCode; } if ($id <= 0) { $templateData['ACTIVE'] = 'Y'; } if ($id > 0) { self::Update($id, $templateData, $systemImport); } else { $id = self::Add($templateData, $systemImport); } $runtime = CBPRuntime::GetRuntime(); $runtime->StartRuntime(); $documentService = $runtime->GetService("DocumentService"); $arDocumentFields = $documentService->GetDocumentFields($documentType); if (is_array($datumTmp["DOCUMENT_FIELDS"])) { $len = strlen("_PRINTABLE"); $arFieldsTmp = array(); foreach ($datumTmp["DOCUMENT_FIELDS"] as $code => $field) { if (!array_key_exists($code, $arDocumentFields) && strtoupper(substr($code, -$len)) != "_PRINTABLE") { $arFieldsTmp[$code] = array("name" => $field["Name"], "code" => $code, "type" => $field["Type"], "multiple" => $field["Multiple"], "required" => $field["Required"]); if (is_array($field["Options"]) && count($field["Options"]) > 0) { foreach ($field["Options"] as $k => $v) { $arFieldsTmp[$code]["options"] .= "[" . $k . "]" . $v . "\n"; } } unset($field["Name"], $field["Type"], $field["Multiple"], $field["Required"], $field["Options"]); $arFieldsTmp[$code] = array_merge($arFieldsTmp[$code], $field); } } if (!empty($arFieldsTmp)) { \Bitrix\Main\Type\Collection::sortByColumn($arFieldsTmp, "sort"); foreach ($arFieldsTmp as $fieldTmp) { $documentService->AddDocumentField($documentType, $fieldTmp); } } } return $id; }
if ($arPriceBoundaries[$i]["FROM"] < $arPrice["QUANTITY_FROM"] && $arPriceBoundaries[$i]["TO"] >= $arPrice["QUANTITY_TO"] && $arPrice["QUANTITY_TO"] != 0) { $arPriceBoundariesError[] = str_replace("#TYPE#", $arPrice["CATALOG_GROUP_NAME"], str_replace("#RIGHT#", $arPrice["QUANTITY_TO"], str_replace("#LEFT#", $arPrice["QUANTITY_FROM"], GetMessage("C2IT_BOUND_DIAP")))); $bNewSegment = false; break; } } } if ($bNewSegment) { $arPriceBoundaries[] = array("FROM" => $arPrice["QUANTITY_FROM"], "TO" => $arPrice["QUANTITY_TO"]); } } } } if (!empty($arPriceBoundaries)) { if (count($arPriceBoundaries) > 1) { Main\Type\Collection::sortByColumn($arPriceBoundaries, array('FROM' => SORT_ASC)); } else { $arPriceBoundaries[0]['FROM'] = false; $arPriceBoundaries[0]['TO'] = false; } } // prices tab $tabControl1->BeginNextTab(); $arCatPricesExist = array(); // attr for exist prices for range $bUseExtendedPrice = $bVarsFromForm ? $price_useextform == 'Y' : count($arPriceBoundaries) > 1; $str_CAT_VAT_ID = $bVarsFromForm ? $CAT_VAT_ID : ($arBaseProduct['VAT_ID'] == 0 ? $arMainCatalog['VAT_ID'] : $arBaseProduct['VAT_ID']); $str_CAT_VAT_INCLUDED = $bVarsFromForm ? $CAT_VAT_INCLUDED : $arBaseProduct['VAT_INCLUDED']; ?> <input type="hidden" name="price_useextform" id="price_useextform_N" value="N" /> <table border="0" cellspacing="0" cellpadding="0" width="100%" class="edit-table" id="catalog_vat_table">
$arItem['OFFERS'][$keyOffer]['TREE'] = array(); $arItem['OFFERS'][$keyOffer]['TREE']['PROP_'.$arSKUPropList[$strOneCode]['ID']] = $arMatrix[$keyOffer][$strOneCode]['VALUE']; $arItem['OFFERS'][$keyOffer]['SKU_SORT_'.$strOneCode] = $arMatrix[$keyOffer][$strOneCode]['SORT']; $arUsedFields[$strOneCode] = true; $arSortFields['SKU_SORT_'.$strOneCode] = SORT_NUMERIC; } else { unset($arMatrix[$keyOffer][$strOneCode]); } } } $arItem['OFFERS_PROP'] = $arUsedFields; $arItem['OFFERS_PROP_CODES'] = (!empty($arUsedFields) ? base64_encode(serialize(array_keys($arUsedFields))) : ''); Collection::sortByColumn($arItem['OFFERS'], $arSortFields); $arMatrix = array(); $intSelected = -1; $arItem['MIN_PRICE'] = false; $arItem['MIN_BASIS_PRICE'] = false; foreach ($arItem['OFFERS'] as $keyOffer => $arOffer) { if (empty($arItem['MIN_PRICE']) && $arOffer['CAN_BUY']) { $intSelected = $keyOffer; $arItem['MIN_PRICE'] = (isset($arOffer['RATIO_PRICE']) ? $arOffer['RATIO_PRICE'] : $arOffer['MIN_PRICE']); $arItem['MIN_BASIS_PRICE'] = $arOffer['MIN_PRICE']; } $arSKUProps = false; if (!empty($arOffer['DISPLAY_PROPERTIES']))
} else { if (!$setItem['ITEM_DATA']['CAN_BUY']) { $resort = true; } $arResult['SET_ITEMS']['OTHER'][] = $setItem['ITEM_DATA']; } $found = true; } unset($setItem, $currentSet); if (!$found || empty($arResult['SET_ITEMS']['DEFAULT'])) { $this->AbortResultCache(); return; } unset($found); if ($resort) { Main\Type\Collection::sortByColumn($arResult['SET_ITEMS']['OTHER'], array('CAN_BUY' => SORT_DESC, 'SET_SORT' => SORT_ASC)); } unset($resort); if (defined('BX_COMP_MANAGED_CACHE') && (!empty($tagIblockList) || !empty($tagCurrencyList))) { $taggedCache = Application::getInstance()->getTaggedCache(); if (!empty($tagIblockList)) { foreach ($tagIblockList as &$iblock) { $taggedCache->registerTag('iblock_id_' . $iblock); } unset($iblock); } if (!empty($tagCurrencyList)) { foreach ($tagCurrencyList as &$currency) { $taggedCache->registerTag('currency_id_' . $currency); } unset($currency);
/** * Works with nodes which have negative rights. * * We have to get all negative nodes in subtree and order by DEPTH_LEVEL ASC. * Then we go from each negative node up and calculate opportunity to read this object by ACCESS_CODE. * If we have positive right on different TASK_ID in subtree, then we can't delete simple rights from subtree. * If we don't have positive right on different TASK_ID in subtree, then we delete simple rights from subtree * before we find another positive rights with same ACCESS_CODE. * * @return $this * @throws \Bitrix\Main\ArgumentOutOfRangeException */ private function workWithNegativeNodes() { $negativeNodes = $this->connection->query("\n\t\t\tSELECT\n\t\t\t\tr.ACCESS_CODE, r.TASK_ID,\n\t\t\t\tr.OBJECT_ID, p.DEPTH_LEVEL\n\t\t\tFROM b_disk_right r\n\t\t\t\tINNER JOIN b_disk_object_path p ON p.OBJECT_ID = r.OBJECT_ID\n\t\t\tWHERE\n\t\t\t\tp.PARENT_ID = {$this->objectId} AND r.NEGATIVE = 1\n\t\t")->fetchAll(); $rightsManager = Driver::getInstance()->getRightsManager(); Collection::sortByColumn($negativeNodes, array('DEPTH_LEVEL' => SORT_ASC)); foreach ($negativeNodes as $negativeNode) { $nodeObject = BaseObject::buildFromArray(array('ID' => $negativeNode['OBJECT_ID'], 'TYPE' => ObjectTable::TYPE_FOLDER)); $runClean = true; foreach ($rightsManager->getAllListNormalizeRights($nodeObject) as $right) { if ($right['ACCESS_CODE'] !== $negativeNode['ACCESS_CODE']) { continue; } //the right goes from parent if (!empty($right['NEGATIVE']) && $right['OBJECT_ID'] != $negativeNode['OBJECT_ID'] && $right['TASK_ID'] == $negativeNode['TASK_ID']) { $runClean = false; break; } if (!empty($right['NEGATIVE'])) { continue; } if ($rightsManager->containsOperationInTask($rightsManager::OP_READ, $right['TASK_ID'])) { $runClean = false; break; } } unset($right); if (!$runClean) { //the node and all sub-elements inherit OP_READ from another positive right. continue; } $this->deleteSimpleRightFromSubTree($negativeNode['OBJECT_ID'], $negativeNode['ACCESS_CODE']); } unset($negativeNode); return $this; }
/** * Sorting array by column. * You can use short mode: Collection::sortByColumn($arr, 'value'); This is equal Collection::sortByColumn($arr, array('value' => SORT_ASC)) * * More example: * Collection::sortByColumn($arr, array('value' => array(SORT_NUMERIC, SORT_ASC), 'attr' => SORT_DESC), array('attr' => 'strlen'), 'www'); * * @param array $array * @param string|array $columns * @param string|array $callbacks * @param bool $preserveKeys If false numeric keys will be re-indexed. If true - preserve. * @param null $defaultValueIfNotSetValue If value not set - use $defaultValueIfNotSetValue (any cols) */ function sortByColumn(array &$array, $columns, $callbacks = '', $defaultValueIfNotSetValue = null, $preserveKeys = false) { \Bitrix\Main\Type\Collection::sortByColumn($array, $columns, $callbacks, $defaultValueIfNotSetValue, $preserveKeys); }
/** * @param $targetFolderId * @param bool $detectSubFoldersOnObject * @throws \Bitrix\Main\ArgumentOutOfRangeException * @return array */ protected function getSubFolders($targetFolderId, $detectSubFoldersOnObject = true) { /** @var Folder $folder */ $folder = Folder::loadById($targetFolderId); if (!$folder) { $this->errorCollection->addOne(new Error(Loc::getMessage('DISK_BREADCRUMBS_TREE_ERROR_COULD_NOT_FIND_FOLDER'), self::ERROR_COULD_NOT_FIND_FOLDER)); $this->sendJsonErrorResponse(); } $securityContext = $folder->getStorage()->getCurrentUserSecurityContext(); $subFolders = array(); $parameters = array('filter' => array('TYPE' => ObjectTable::TYPE_FOLDER)); if ($detectSubFoldersOnObject) { $parameters['select'] = array('*', 'HAS_SUBFOLDERS'); } foreach ($folder->getChildren($securityContext, $parameters) as $subFolder) { /** @var Folder $subFolder */ $subFolders[] = array('id' => $subFolder->getId(), 'name' => $subFolder->getName(), 'isLink' => $subFolder->isLink(), 'hasSubFolders' => $subFolder->hasSubFolders()); } unset($subFolder); \Bitrix\Main\Type\Collection::sortByColumn($subFolders, 'name'); return $subFolders; }
protected function processActionShowSubFoldersToAdd() { $this->checkRequiredPostParams(array('objectId')); if ($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } /** @var Folder $folder */ $folder = Folder::loadById((int) $this->request->getPost('objectId'), array('STORAGE')); if (!$folder) { $this->errorCollection->add(array(new Error(Loc::getMessage('DISK_FOLDER_LIST_ERROR_COULD_NOT_FIND_OBJECT'), self::ERROR_COULD_NOT_FIND_OBJECT))); $this->sendJsonErrorResponse(); } $securityContext = $folder->getStorage()->getCurrentUserSecurityContext(); //we should preload specific rights by object on current level, because we are filtering by canAdd. And we can use fakeSecurityContext by $folder->getChildren $securityContext->preloadOperationsForChildren($folder->getRealObjectId()); $subFolders = array(); foreach ($folder->getChildren(Driver::getInstance()->getFakeSecurityContext(), array('select' => array('*', 'HAS_SUBFOLDERS'), 'filter' => array('TYPE' => ObjectTable::TYPE_FOLDER))) as $subFolder) { /** @var Folder $subFolder */ if ($subFolder->canAdd($securityContext)) { $subFolders[] = array('id' => $subFolder->getId(), 'name' => $subFolder->getName(), 'isLink' => $subFolder->isLink(), 'hasSubFolders' => $subFolder->hasSubFolders()); } } unset($subFolder); \Bitrix\Main\Type\Collection::sortByColumn($subFolders, 'name'); $this->sendJsonSuccessResponse(array('items' => $subFolders)); }
protected function fillObjectRightsMoveTasks() { if ($this->isStepFinished(__METHOD__)) { return; } $defaultIblockPermissions = $defaultUserPermissions = array(); foreach ($this->getIblockWithUserFiles() as $iblock) { $res = $this->connection->query("\n\t\t\t\tSELECT r.TASK_ID, r.GROUP_CODE\n\t\t\t\tFROM b_iblock_right r\n\t\t\t\tWHERE r.ENTITY_TYPE='iblock'\n\t\t\t\t\tAND r.GROUP_CODE<>'SA'\n\t\t\t\t\tAND r.IBLOCK_ID=" . $iblock['ID']); while ($r = $res->fetch()) { $defaultIblockPermissions[$r['TASK_ID']] = $r; } break; } $lastId = $this->getLastIblockId(); $tasks = $this->connection->query("SELECT DISTINCT TASK_ID FROM b_disk_right")->fetchAll(); \Bitrix\Main\Type\Collection::sortByColumn($tasks, 'TASK_ID'); $defaultUserStorageRights = Option::get("disk", "default_user_storage_rights", array()); if (is_string($defaultUserStorageRights)) { $defaultUserStorageRights = unserialize($defaultUserStorageRights); } foreach ($tasks as $row) { $taskId = $row['TASK_ID']; if ($lastId > $taskId) { continue; } $this->abortIfNeeded(); $newTaskId = $this->convertIblockTaskToDiskTask($taskId); if ($newTaskId === self::COULD_NOT_FIND_IBLOCK_TASK) { $this->storeIblockId($taskId); continue; } if (!$newTaskId) { throw new Exception("Couldn't convert task {$taskId}"); } if ($newTaskId == self::DENY_TASK) { $this->connection->queryExecute("DELETE FROM b_disk_right WHERE TASK_ID={$taskId}"); } else { if ($defaultIblockPermissions[$taskId]) { $defaultUserStorageRights[$newTaskId] = $defaultIblockPermissions[$taskId]['GROUP_CODE']; Option::set("disk", "default_user_storage_rights", serialize($defaultUserStorageRights)); } $this->connection->queryExecute("UPDATE b_disk_right SET TASK_ID={$newTaskId} WHERE TASK_ID={$taskId}"); } $this->storeIblockId($taskId); } unset($row); $this->storeIblockId(0); $this->setStepFinished(__METHOD__); }
if ($boolExist) { if (!isset($arResult['OFFERS'][$keyOffer]['TREE'])) { $arResult['OFFERS'][$keyOffer]['TREE'] = array(); } $arResult['OFFERS'][$keyOffer]['TREE']['PROP_' . $arSKUPropList[$strOneCode]['ID']] = $arMatrix[$keyOffer][$strOneCode]['VALUE']; $arResult['OFFERS'][$keyOffer]['SKU_SORT_' . $strOneCode] = $arMatrix[$keyOffer][$strOneCode]['SORT']; $arUsedFields[$strOneCode] = true; $arSortFields['SKU_SORT_' . $strOneCode] = SORT_NUMERIC; } else { unset($arMatrix[$keyOffer][$strOneCode]); } } } $arResult['OFFERS_PROP'] = $arUsedFields; $arResult['OFFERS_PROP_CODES'] = !empty($arUsedFields) ? base64_encode(serialize(array_keys($arUsedFields))) : ''; Collection::sortByColumn($arResult['OFFERS'], $arSortFields); $offerSet = array(); if (!empty($arIDS) && CBXFeatures::IsFeatureEnabled('CatCompleteSet')) { $offerSet = array_fill_keys($arIDS, false); $rsSets = CCatalogProductSet::getList(array(), array('@OWNER_ID' => $arIDS, '=SET_ID' => 0, '=TYPE' => CCatalogProductSet::TYPE_GROUP), false, false, array('ID', 'OWNER_ID')); while ($arSet = $rsSets->Fetch()) { $arSet['OWNER_ID'] = (int) $arSet['OWNER_ID']; $offerSet[$arSet['OWNER_ID']] = true; $arResult['OFFER_GROUP'] = true; } if ($offerSet[$arResult['ID']]) { foreach ($offerSet as &$setOfferValue) { if ($setOfferValue === false) { $setOfferValue = true; } }
/** * Gets all descendants objects by the folder. * @param SecurityContext $securityContext Security context. * @param array $parameters Parameters. * @param int $orderDepthLevel Order for depth level (default asc). * @throws \Bitrix\Main\ArgumentOutOfRangeException * @return BaseObject[] */ public function getDescendants(SecurityContext $securityContext, array $parameters = array(), $orderDepthLevel = SORT_ASC) { if (!isset($parameters['filter'])) { $parameters['filter'] = array(); } if (!isset($parameters['select'])) { $parameters['select'] = array('*'); } if (!empty($parameters['filter']['MIXED_SHOW_DELETED'])) { unset($parameters['filter']['DELETED_TYPE'], $parameters['filter']['MIXED_SHOW_DELETED']); } elseif (!array_key_exists('DELETED_TYPE', $parameters['filter']) && !array_key_exists('!DELETED_TYPE', $parameters['filter']) && !array_key_exists('!=DELETED_TYPE', $parameters['filter'])) { $parameters['filter']['DELETED_TYPE'] = ObjectTable::DELETED_TYPE_NONE; } $parameters['select']['DEPTH_LEVEL'] = 'PATH_CHILD.DEPTH_LEVEL'; $parameters = Driver::getInstance()->getRightsManager()->addRightsCheck($securityContext, $parameters, array('ID', 'CREATED_BY')); $data = FolderTable::getDescendants($this->id, static::prepareGetListParameters($parameters))->fetchAll(); Collection::sortByColumn($data, array('DEPTH_LEVEL' => $orderDepthLevel)); $modelData = array(); foreach ($data as $item) { $modelData[] = BaseObject::buildFromArray($item); } unset($item); return $modelData; }
public static function GetPropertyValuesArray(&$result, $iblockID, $filter, $propertyFilter = array()) { $iblockExtVersion = CIBlockElement::GetIBVersion($iblockID) == 2; $propertiesList = array(); $mapCodes = array(); $userTypesList = array(); $existList = array(); $selectListMultiply = array('SORT' => SORT_ASC, 'VALUE' => SORT_STRING); $selectAllMultiply = array('PROPERTY_VALUE_ID' => SORT_ASC); $propertyListFilter = array('IBLOCK_ID' => $iblockID); $propertyID = array(); if (isset($propertyFilter['ID'])) { $propertyID = is_array($propertyFilter['ID']) ? $propertyFilter['ID'] : array($propertyFilter['ID']); Collection::normalizeArrayValuesByInt($propertyID); } if (!empty($propertyID)) { $propertyListFilter['@ID'] = $propertyID; } elseif (isset($propertyFilter['CODE'])) { if (!is_array($propertyFilter['CODE'])) { $propertyFilter['CODE'] = array($propertyFilter['CODE']); } $propertyCodes = array(); if (!empty($propertyFilter['CODE'])) { foreach ($propertyFilter['CODE'] as &$code) { $code = (string) $code; if ($code !== '') { $propertyCodes[] = $code; } } unset($code); } if (!empty($propertyCodes)) { $propertyListFilter['@CODE'] = $propertyCodes; } unset($propertyCodes); } $propertyListFilter['=ACTIVE'] = isset($propertyFilter['ACTIVE']) && ($propertyFilter['ACTIVE'] == 'Y' || $propertyFilter['ACTIVE'] == 'N') ? $propertyFilter['ACTIVE'] : 'Y'; $propertyID = array(); $propertyIterator = PropertyTable::getList(array('select' => array('ID', 'IBLOCK_ID', 'NAME', 'ACTIVE', 'SORT', 'CODE', 'DEFAULT_VALUE', 'PROPERTY_TYPE', 'ROW_COUNT', 'COL_COUNT', 'LIST_TYPE', 'MULTIPLE', 'XML_ID', 'FILE_TYPE', 'MULTIPLE_CNT', 'LINK_IBLOCK_ID', 'WITH_DESCRIPTION', 'SEARCHABLE', 'FILTRABLE', 'IS_REQUIRED', 'VERSION', 'USER_TYPE', 'USER_TYPE_SETTINGS', 'HINT'), 'filter' => $propertyListFilter, 'order' => array('SORT' => 'ASC', 'ID' => 'ASC'))); while ($property = $propertyIterator->fetch()) { $propertyID[] = (int) $property['ID']; $property['CODE'] = trim((string) $property['CODE']); if ($property['CODE'] === '') { $property['CODE'] = $property['ID']; } $code = $property['CODE']; $property['~NAME'] = $property['NAME']; if (preg_match("/[;&<>\"]/", $property['NAME'])) { $property['NAME'] = htmlspecialcharsex($property['NAME']); } if ($property['USER_TYPE']) { $userType = CIBlockProperty::GetUserType($property['USER_TYPE']); if (isset($userType['ConvertFromDB'])) { $userTypesList[$property['ID']] = $userType; if (array_key_exists("DEFAULT_VALUE", $property)) { $value = array("VALUE" => $property["DEFAULT_VALUE"], "DESCRIPTION" => ""); $value = call_user_func_array($userType["ConvertFromDB"], array($property, $value)); $property["DEFAULT_VALUE"] = $value["VALUE"]; } } } if ($property['USER_TYPE_SETTINGS'] !== '' || $property['USER_TYPE_SETTINGS'] !== null) { $property['USER_TYPE_SETTINGS'] = unserialize($property['USER_TYPE_SETTINGS']); } $property['~DEFAULT_VALUE'] = $property['DEFAULT_VALUE']; if (is_array($property['DEFAULT_VALUE']) || preg_match("/[;&<>\"]/", $property['DEFAULT_VALUE'])) { $property['DEFAULT_VALUE'] = htmlspecialcharsex($property['DEFAULT_VALUE']); } if ($property['PROPERTY_TYPE'] == PropertyTable::TYPE_LIST) { $existList[] = $property['ID']; } $mapCodes[$property['ID']] = $code; $propertiesList[$code] = $property; } unset($property, $propertyIterator); if (empty($propertiesList)) { return; } if (!empty($existList)) { $enumList = array(); $enumIterator = PropertyEnumerationTable::getList(array('select' => array('ID', 'PROPERTY_ID', 'VALUE', 'SORT', 'XML_ID'), 'filter' => array('PROPERTY_ID' => $existList), 'order' => array('PROPERTY_ID' => 'ASC', 'SORT' => 'ASC', 'VALUE' => 'ASC'))); while ($enum = $enumIterator->fetch()) { if (!isset($enumList[$enum['PROPERTY_ID']])) { $enumList[$enum['PROPERTY_ID']] = array(); } $enumList[$enum['PROPERTY_ID']][$enum['ID']] = array('ID' => $enum['ID'], 'VALUE' => $enum['VALUE'], 'SORT' => $enum['SORT'], 'XML_ID' => $enum['XML_ID']); } unset($enum, $enumIterator); } $valuesRes = !empty($propertyID) ? CIBlockElement::GetPropertyValues($iblockID, $filter, true, array('ID' => $propertyID)) : CIBlockElement::GetPropertyValues($iblockID, $filter, true); while ($value = $valuesRes->Fetch()) { $elementID = $value['IBLOCK_ELEMENT_ID']; if (!isset($result[$elementID])) { continue; } $elementValues = array(); $existDescription = isset($value['DESCRIPTION']); foreach ($propertiesList as $code => $property) { $existElementDescription = isset($value['DESCRIPTION']) && array_key_exists($property['ID'], $value['DESCRIPTION']); $existElementPropertyID = isset($value['PROPERTY_VALUE_ID']) && array_key_exists($property['ID'], $value['PROPERTY_VALUE_ID']); $elementValues[$code] = $property; $elementValues[$code]['VALUE_ENUM'] = null; $elementValues[$code]['VALUE_XML_ID'] = null; $elementValues[$code]['VALUE_SORT'] = null; $elementValues[$code]['VALUE'] = null; if ('Y' === $property['MULTIPLE']) { $elementValues[$code]['PROPERTY_VALUE_ID'] = false; if (!isset($value[$property['ID']]) || empty($value[$property['ID']])) { $elementValues[$code]['DESCRIPTION'] = false; $elementValues[$code]['VALUE'] = false; $elementValues[$code]['~DESCRIPTION'] = false; $elementValues[$code]['~VALUE'] = false; if ('L' == $property['PROPERTY_TYPE']) { $elementValues[$code]['VALUE_ENUM_ID'] = false; $elementValues[$code]['VALUE_ENUM'] = false; $elementValues[$code]['VALUE_XML_ID'] = false; $elementValues[$code]['VALUE_SORT'] = false; } } else { if ($existElementPropertyID) { $elementValues[$code]['PROPERTY_VALUE_ID'] = $value['PROPERTY_VALUE_ID'][$property['ID']]; } if (isset($userTypesList[$property['ID']])) { foreach ($value[$property['ID']] as $valueKey => $oneValue) { $raw = call_user_func_array($userTypesList[$property['ID']]['ConvertFromDB'], array($property, array('VALUE' => $oneValue, 'DESCRIPTION' => $existElementDescription ? $value['DESCRIPTION'][$property['ID']][$valueKey] : ''))); $value[$property['ID']][$valueKey] = $raw['VALUE']; if (!$existDescription) { $value['DESCRIPTION'] = array(); $existDescription = true; } if (!$existElementDescription) { $value['DESCRIPTION'][$property['ID']] = array(); $existElementDescription = true; } $value['DESCRIPTION'][$property['ID']][$valueKey] = (string) $raw['DESCRIPTION']; } if (isset($oneValue)) { unset($oneValue); } } if ('L' == $property['PROPERTY_TYPE']) { if (empty($value[$property['ID']])) { $elementValues[$code]['VALUE_ENUM_ID'] = $value[$property['ID']]; $elementValues[$code]['DESCRIPTION'] = $existElementDescription ? $value['DESCRIPTION'][$property['ID']] : array(); } else { $selectedValues = array(); foreach ($value[$property['ID']] as $listKey => $listValue) { if (isset($enumList[$property['ID']][$listValue])) { $selectedValues[$listKey] = $enumList[$property['ID']][$listValue]; $selectedValues[$listKey]['DESCRIPTION'] = $existElementDescription && array_key_exists($listKey, $value['DESCRIPTION'][$property['ID']]) ? $value['DESCRIPTION'][$property['ID']][$listKey] : ''; $selectedValues[$listKey]['PROPERTY_VALUE_ID'] = $existElementPropertyID && array_key_exists($listKey, $value['PROPERTY_VALUE_ID'][$property['ID']]) ? $value['PROPERTY_VALUE_ID'][$property['ID']][$listKey] : ''; } } if (empty($selectedValues)) { $elementValues[$code]['VALUE_ENUM_ID'] = $value[$property['ID']]; $elementValues[$code]['DESCRIPTION'] = $existElementDescription ? $value['DESCRIPTION'][$property['ID']] : array(); } else { Collection::sortByColumn($selectedValues, $selectListMultiply); $elementValues[$code]['VALUE_ENUM_ID'] = array(); $elementValues[$code]['VALUE'] = array(); $elementValues[$code]['VALUE_ENUM'] = array(); $elementValues[$code]['VALUE_XML_ID'] = array(); $elementValues[$code]['DESCRIPTION'] = array(); $elementValues[$code]['PROPERTY_VALUE_ID'] = array(); foreach ($selectedValues as $listValue) { if (!isset($elementValues[$code]['VALUE_SORT'])) { $elementValues[$code]['VALUE_SORT'] = array($listValue['SORT']); } $elementValues[$code]['VALUE_ENUM_ID'][] = $listValue['ID']; $elementValues[$code]['VALUE'][] = $listValue['VALUE']; $elementValues[$code]['VALUE_ENUM'][] = $listValue['VALUE']; $elementValues[$code]['VALUE_XML_ID'][] = $listValue['XML_ID']; $elementValues[$code]['PROPERTY_VALUE_ID'][] = $listValue['PROPERTY_VALUE_ID']; $elementValues[$code]['DESCRIPTION'][] = $listValue['DESCRIPTION']; } unset($selectedValues); } } } else { if (empty($value[$property['ID']]) || !$existElementPropertyID || isset($userTypesList[$property['ID']])) { $elementValues[$code]['VALUE'] = $value[$property['ID']]; $elementValues[$code]['DESCRIPTION'] = $existElementDescription ? $value['DESCRIPTION'][$property['ID']] : array(); } else { $selectedValues = array(); foreach ($value['PROPERTY_VALUE_ID'][$property['ID']] as $propKey => $propValueID) { $selectedValues[$propKey] = array('PROPERTY_VALUE_ID' => $propValueID, 'VALUE' => $value[$property['ID']][$propKey]); if ($existElementDescription) { $selectedValues[$propKey]['DESCRIPTION'] = $value['DESCRIPTION'][$property['ID']][$propKey]; } } unset($propValueID, $propKey); Collection::sortByColumn($selectedValues, $selectAllMultiply); $elementValues[$code]['PROPERTY_VALUE_ID'] = array(); $elementValues[$code]['VALUE'] = array(); $elementValues[$code]['DESCRIPTION'] = array(); foreach ($selectedValues as &$propValue) { $elementValues[$code]['PROPERTY_VALUE_ID'][] = $propValue['PROPERTY_VALUE_ID']; $elementValues[$code]['VALUE'][] = $propValue['VALUE']; if ($existElementDescription) { $elementValues[$code]['DESCRIPTION'][] = $propValue['DESCRIPTION']; } } unset($propValue, $selectedValues); } } } $elementValues[$code]['~VALUE'] = $elementValues[$code]['VALUE']; if (is_array($elementValues[$code]['VALUE'])) { foreach ($elementValues[$code]['VALUE'] as &$oneValue) { $isArr = is_array($oneValue); if ($isArr || '' !== $oneValue && null !== $oneValue) { if ($isArr || preg_match("/[;&<>\"]/", $oneValue)) { $oneValue = htmlspecialcharsEx($oneValue); } } } if (isset($oneValue)) { unset($oneValue); } } else { if ('' !== $elementValues[$code]['VALUE'] && null !== $elementValues[$code]['VALUE']) { if (preg_match("/[;&<>\"]/", $elementValues[$code]['VALUE'])) { $elementValues[$code]['VALUE'] = htmlspecialcharsEx($elementValues[$code]['VALUE']); } } } $elementValues[$code]['~DESCRIPTION'] = $elementValues[$code]['DESCRIPTION']; if (is_array($elementValues[$code]['DESCRIPTION'])) { foreach ($elementValues[$code]['DESCRIPTION'] as &$oneDescr) { $isArr = is_array($oneDescr); if ($isArr || !$isArr && '' !== $oneDescr && null !== $oneDescr) { if ($isArr || preg_match("/[;&<>\"]/", $oneDescr)) { $oneDescr = htmlspecialcharsEx($oneDescr); } } } if (isset($oneDescr)) { unset($oneDescr); } } else { if ('' !== $elementValues[$code]['DESCRIPTION'] && null !== $elementValues[$code]['DESCRIPTION']) { if (preg_match("/[;&<>\"]/", $elementValues[$code]['DESCRIPTION'])) { $elementValues[$code]['DESCRIPTION'] = htmlspecialcharsEx($elementValues[$code]['DESCRIPTION']); } } } } else { $elementValues[$code]['VALUE_ENUM'] = $iblockExtVersion ? '' : null; $elementValues[$code]['PROPERTY_VALUE_ID'] = $iblockExtVersion ? $elementID . ':' . $property['ID'] : null; if (!isset($value[$property['ID']]) || false === $value[$property['ID']]) { $elementValues[$code]['DESCRIPTION'] = ''; $elementValues[$code]['VALUE'] = ''; $elementValues[$code]['~DESCRIPTION'] = ''; $elementValues[$code]['~VALUE'] = ''; if ('L' == $property['PROPERTY_TYPE']) { $elementValues[$code]['VALUE_ENUM_ID'] = null; } } else { if ($existElementPropertyID) { $elementValues[$code]['PROPERTY_VALUE_ID'] = $value['PROPERTY_VALUE_ID'][$property['ID']]; } if (isset($userTypesList[$property['ID']])) { $raw = call_user_func_array($userTypesList[$property['ID']]['ConvertFromDB'], array($property, array('VALUE' => $value[$property['ID']], 'DESCRIPTION' => $existElementDescription ? $value['DESCRIPTION'][$property['ID']] : ''))); $value[$property['ID']] = $raw['VALUE']; if (!$existDescription) { $value['DESCRIPTION'] = array(); $existDescription = true; } $value['DESCRIPTION'][$property['ID']] = (string) $raw['DESCRIPTION']; $existElementDescription = true; } if ('L' == $property['PROPERTY_TYPE']) { $elementValues[$code]['VALUE_ENUM_ID'] = $value[$property['ID']]; if (isset($enumList[$property['ID']][$value[$property['ID']]])) { $elementValues[$code]['VALUE'] = $enumList[$property['ID']][$value[$property['ID']]]['VALUE']; $elementValues[$code]['VALUE_ENUM'] = $elementValues[$code]['VALUE']; $elementValues[$code]['VALUE_XML_ID'] = $enumList[$property['ID']][$value[$property['ID']]]['XML_ID']; $elementValues[$code]['VALUE_SORT'] = $enumList[$property['ID']][$value[$property['ID']]]['SORT']; } $elementValues[$code]['DESCRIPTION'] = $existElementDescription ? $value['DESCRIPTION'][$property['ID']] : null; } else { $elementValues[$code]['VALUE'] = $value[$property['ID']]; $elementValues[$code]['DESCRIPTION'] = $existElementDescription ? $value['DESCRIPTION'][$property['ID']] : ''; } } $elementValues[$code]['~VALUE'] = $elementValues[$code]['VALUE']; $isArr = is_array($elementValues[$code]['VALUE']); if ($isArr || '' !== $elementValues[$code]['VALUE'] && null !== $elementValues[$code]['VALUE']) { if ($isArr || preg_match("/[;&<>\"]/", $elementValues[$code]['VALUE'])) { $elementValues[$code]['VALUE'] = htmlspecialcharsEx($elementValues[$code]['VALUE']); } } $elementValues[$code]['~DESCRIPTION'] = $elementValues[$code]['DESCRIPTION']; $isArr = is_array($elementValues[$code]['DESCRIPTION']); if ($isArr || '' !== $elementValues[$code]['DESCRIPTION'] && null !== $elementValues[$code]['DESCRIPTION']) { if ($isArr || preg_match("/[;&<>\"]/", $elementValues[$code]['DESCRIPTION'])) { $elementValues[$code]['DESCRIPTION'] = htmlspecialcharsEx($elementValues[$code]['DESCRIPTION']); } } } } if (isset($result[$elementID]['PROPERTIES'])) { $result[$elementID]['PROPERTIES'] = $elementValues; } else { $result[$elementID] = $elementValues; } unset($elementValues); } }
} if ($existDelete) { foreach ($arResult['DELETED_OFFER_FIELDS'] as $propCode) { $arResult['ALL_OFFER_FIELDS'][$propCode] = array("CODE" => $propCode, "IS_DELETED" => "Y", "ACTION_LINK" => str_replace('#CODE#', $propCode, $arResult['~ADD_FEATURE_OF_FIELD_TEMPLATE']), 'SORT' => $arResult['FIELDS_SORT'][$propCode]); } unset($propCode, $arResult['DELETED_OFFER_FIELDS']); } Collection::sortByColumn($arResult['ALL_OFFER_FIELDS'], array('SORT' => SORT_ASC)); } $arResult['ALL_OFFER_PROPERTIES'] = array(); $existShow = !empty($arResult["SHOW_OFFER_PROPERTIES"]); $existDelete = !empty($arResult["DELETED_OFFER_PROPERTIES"]); if ($existShow || $existDelete) { if ($existShow) { foreach ($arResult['SHOW_OFFER_PROPERTIES'] as $propCode => $arProp) { $arResult["SHOW_OFFER_PROPERTIES"][$propCode]["IS_DELETED"] = "N"; $arResult["SHOW_OFFER_PROPERTIES"][$propCode]["ACTION_LINK"] = str_replace('#CODE#', $propCode, $arResult['~DELETE_FEATURE_OF_PROPERTY_TEMPLATE']); } unset($arProp, $propCode); $arResult['ALL_OFFER_PROPERTIES'] = $arResult['SHOW_OFFER_PROPERTIES']; } if ($existDelete) { foreach ($arResult['DELETED_OFFER_PROPERTIES'] as $propCode => $arProp) { $arResult["DELETED_OFFER_PROPERTIES"][$propCode]["IS_DELETED"] = "Y"; $arResult["DELETED_OFFER_PROPERTIES"][$propCode]["ACTION_LINK"] = str_replace('#CODE#', $propCode, $arResult['~ADD_FEATURE_OF_PROPERTY_TEMPLATE']); $arResult['ALL_OFFER_PROPERTIES'][$propCode] = $arResult["DELETED_OFFER_PROPERTIES"][$propCode]; } unset($arProp, $propCode, $arResult['DELETED_OFFER_PROPERTIES']); } Collection::sortByColumn($arResult['ALL_OFFER_PROPERTIES'], array('SORT' => SORT_ASC, 'ID' => SORT_ASC)); }
function __AddPropCellType($intOFPropID, $strPrefix, $arPropInfo) { static $arUserTypeList = null; if ($arUserTypeList === null) { $arUserTypeList = CIBlockProperty::GetUserType(); \Bitrix\Main\Type\Collection::sortByColumn($arUserTypeList, array('DESCRIPTION' => SORT_STRING)); } $boolUserPropExist = !empty($arUserTypeList); ob_start(); ?> <select name="<?php echo $strPrefix . $intOFPropID; ?> _PROPERTY_TYPE" id="<?php echo $strPrefix . $intOFPropID; ?> _PROPERTY_TYPE" style="width:150px"><?php if ($boolUserPropExist) { ?> <optgroup label="<?php echo GetMessage('IB_E_PROP_BASE_TYPE_GROUP'); ?> "><?php } ?> <option value="S" <?php if ($arPropInfo['PROPERTY_TYPE'] == "S" && !$arPropInfo['USER_TYPE']) { echo " selected"; } ?> ><?php echo GetMessage("IB_E_PROP_TYPE_S"); ?> </option> <option value="N" <?php if ($arPropInfo['PROPERTY_TYPE'] == "N" && !$arPropInfo['USER_TYPE']) { echo " selected"; } ?> ><?php echo GetMessage("IB_E_PROP_TYPE_N"); ?> </option> <option value="L" <?php if ($arPropInfo['PROPERTY_TYPE'] == "L" && !$arPropInfo['USER_TYPE']) { echo " selected"; } ?> ><?php echo GetMessage("IB_E_PROP_TYPE_L"); ?> </option> <option value="F" <?php if ($arPropInfo['PROPERTY_TYPE'] == "F" && !$arPropInfo['USER_TYPE']) { echo " selected"; } ?> ><?php echo GetMessage("IB_E_PROP_TYPE_F"); ?> </option> <option value="G" <?php if ($arPropInfo['PROPERTY_TYPE'] == "G" && !$arPropInfo['USER_TYPE']) { echo " selected"; } ?> ><?php echo GetMessage("IB_E_PROP_TYPE_G"); ?> </option> <option value="E" <?php if ($arPropInfo['PROPERTY_TYPE'] == "E" && !$arPropInfo['USER_TYPE']) { echo " selected"; } ?> ><?php echo GetMessage("IB_E_PROP_TYPE_E"); ?> </option> <?php if ($boolUserPropExist) { ?> </optgroup><optgroup label="<?php echo GetMessage('IB_E_PROP_USER_TYPE_GROUP'); ?> "><?php } foreach ($arUserTypeList as $ar) { ?> <option value="<?php echo htmlspecialcharsbx($ar["PROPERTY_TYPE"] . ":" . $ar["USER_TYPE"]); ?> " <?php if ($arPropInfo['PROPERTY_TYPE'] == $ar["PROPERTY_TYPE"] && $arPropInfo['USER_TYPE'] == $ar["USER_TYPE"]) { echo " selected"; } ?> ><?php echo htmlspecialcharsbx($ar["DESCRIPTION"]); ?> </option> <?php } if ($boolUserPropExist) { ?> </optgroup><?php } ?> </select><?php $strResult = ob_get_contents(); ob_end_clean(); return $strResult; }
function GetList($arOrder = array(), $arFilter = array(), $arSelect = false) { /** @global CMain $APPLICATION */ global $APPLICATION; if (isset($arFilter["ID"]) && !is_array($arFilter["ID"])) { $arFilter["ID"] = array($arFilter["ID"]); } $folders = array("/local/templates", BX_PERSONAL_ROOT . "/templates"); $arRes = array(); foreach ($folders as $folder) { $path = $_SERVER["DOCUMENT_ROOT"] . $folder; if (is_dir($path)) { $handle = opendir($path); if ($handle) { while (($file = readdir($handle)) !== false) { if ($file == "." || $file == ".." || !is_dir($path . "/" . $file)) { continue; } if ($file == ".default") { continue; } if (isset($arRes[$file])) { continue; } if (isset($arFilter["ID"]) && !in_array($file, $arFilter["ID"])) { continue; } $arTemplate = array("DESCRIPTION" => ""); if (file_exists($fname = $path . "/" . $file . "/lang/" . LANGUAGE_ID . "/description.php")) { __IncludeLang($fname, false, true); } elseif (file_exists($fname = $path . "/" . $file . "/lang/" . LangSubst(LANGUAGE_ID) . "/description.php")) { __IncludeLang($fname, false, true); } if (file_exists($fname = $path . "/" . $file . "/description.php")) { include $fname; } $arTemplate["ID"] = $file; $arTemplate["PATH"] = $folder . "/" . $file; if (!isset($arTemplate["NAME"])) { $arTemplate["NAME"] = $file; } if ($arSelect === false || in_array("SCREENSHOT", $arSelect)) { if (file_exists($path . "/" . $file . "/lang/" . LANGUAGE_ID . "/screen.gif")) { $arTemplate["SCREENSHOT"] = $folder . "/" . $file . "/lang/" . LANGUAGE_ID . "/screen.gif"; } elseif (file_exists($path . "/" . $file . "/screen.gif")) { $arTemplate["SCREENSHOT"] = $folder . "/" . $file . "/screen.gif"; } else { $arTemplate["SCREENSHOT"] = false; } if (file_exists($path . "/" . $file . "/lang/" . LANGUAGE_ID . "/preview.gif")) { $arTemplate["PREVIEW"] = $folder . "/" . $file . "/lang/" . LANGUAGE_ID . "/preview.gif"; } elseif (file_exists($path . "/" . $file . "/preview.gif")) { $arTemplate["PREVIEW"] = $folder . "/" . $file . "/preview.gif"; } else { $arTemplate["PREVIEW"] = false; } } if ($arSelect === false || in_array("CONTENT", $arSelect)) { $arTemplate["CONTENT"] = $APPLICATION->GetFileContent($path . "/" . $file . "/header.php") . "#WORK_AREA#" . $APPLICATION->GetFileContent($path . "/" . $file . "/footer.php"); } if ($arSelect === false || in_array("STYLES", $arSelect)) { if (file_exists($path . "/" . $file . "/styles.css")) { $arTemplate["STYLES"] = $APPLICATION->GetFileContent($path . "/" . $file . "/styles.css"); $arTemplate["STYLES_TITLE"] = CSiteTemplate::__GetByStylesTitle($path . "/" . $file . "/.styles.php"); } if (file_exists($path . "/" . $file . "/template_styles.css")) { $arTemplate["TEMPLATE_STYLES"] = $APPLICATION->GetFileContent($path . "/" . $file . "/template_styles.css"); } } $arRes[$file] = $arTemplate; } closedir($handle); } } } if (is_array($arOrder)) { $columns = array(); static $fields = array("ID" => 1, "NAME" => 1, "DESCRIPTION" => 1, "SORT" => 1); foreach ($arOrder as $key => $val) { $key = strtoupper($key); if (isset($fields[$key])) { $columns[$key] = strtoupper($val) == "DESC" ? SORT_DESC : SORT_ASC; } } if (!empty($columns)) { \Bitrix\Main\Type\Collection::sortByColumn($arRes, $columns); } } $db_res = new CDBResult(); $db_res->InitFromArray($arRes); return $db_res; }
} else { $res = array('DEFAULTS' => CTimeMan::GetModuleSettings($arNeededSettings), 'DEPARTMENTS' => array(), 'USERS' => array()); foreach ($_REQUEST['DEPARTMENTS'] as $dpt) { $res['DEPARTMENTS'][] = array('ID' => $dpt, 'SETTINGS' => CTimeMan::GetSectionPersonalSettings($dpt, true, $arNeededSettings), 'SETTINGS_ALL' => CTimeMan::GetSectionSettings($dpt, $arNeededSettings)); } foreach ($_REQUEST['USERS'] as $user) { $TMUSER = new CTimeManUser($user); $res['USERS'][] = array('ID' => $user, 'SETTINGS' => $TMUSER->GetPersonalSettings($arNeededSettings), 'SETTINGS_ALL' => $TMUSER->GetSettings($arNeededSettings)); } } break; case 'admin_data': $obReport = new CTimeManAdminReport(array('show_all' => $_REQUEST['show_all'] == 'Y', 'ts' => $_REQUEST['ts'], 'page' => $_REQUEST['page'], 'amount' => 30, 'department' => $_REQUEST['department'], 'path_user' => COption::GetOptionString('intranet', 'path_user', '/company/personal/user/#USER_ID#/', $site_id), 'nav_handler' => 'window.BXTMREPORT.Page')); $bReturnRes = true; $res = $obReport->GetData(); \Bitrix\Main\Type\Collection::sortByColumn($res['USERS'], array('HEAD' => SORT_DESC, 'NAME' => SORT_ASC)); $res['DEPARTMENTS'] = array_values($res['DEPARTMENTS']); break; case 'admin_save': $ID = intval($_REQUEST['ID']); $arEntry = null; if (CTimeManEntry::Approve($ID, true)) { if ($_REQUEST['INFO']) { $arFields = array(); if (isset($_REQUEST['INFO']['TIME_START'])) { $arFields['TIME_START'] = intval($_REQUEST['INFO']['TIME_START']); } if (isset($_REQUEST['INFO']['TIME_FINISH'])) { $arFields['TIME_FINISH'] = intval($_REQUEST['INFO']['TIME_FINISH']); } if (isset($_REQUEST['INFO']['TIME_LEAKS'])) {
private function getGridData($gridId, $showDeleted = false) { $grid = array('ID' => $gridId); $gridOptions = new CGridOptions($grid['ID']); $gridSort = $gridOptions->getSorting(array('sort' => array('NAME' => 'ASC'), 'vars' => array('by' => 'by', 'order' => 'order'))); $filter = array(); $grid['SORT'] = $gridSort['sort']; $grid['SORT_VARS'] = $gridSort['vars']; $grid['MODE'] = $this->getViewMode(); $possibleColumnForSorting = array('UPDATE_TIME' => array('ALIAS' => 'UPDATE_TIME', 'LABEL' => Loc::getMessage('DISK_FOLDER_LIST_SORT_BY_UPDATE_TIME')), 'NAME' => array('ALIAS' => 'NAME', 'LABEL' => Loc::getMessage('DISK_FOLDER_LIST_SORT_BY_NAME')), 'FORMATTED_SIZE' => array('ALIAS' => 'SIZE', 'LABEL' => Loc::getMessage('DISK_FOLDER_LIST_SORT_BY_FORMATTED_SIZE'))); $byColumn = key($grid['SORT']); if (!isset($possibleColumnForSorting[$byColumn]) || strtolower($grid['SORT'][$byColumn]) !== 'desc' && strtolower($grid['SORT'][$byColumn]) !== 'asc') { $grid['SORT'] = array(); } $order = $grid['SORT']; $byColumn = key($order); $sortingColumns = array('TYPE' => array(SORT_NUMERIC, SORT_ASC), $possibleColumnForSorting[$byColumn]['ALIAS'] => strtolower($order[$byColumn]) === 'asc' ? SORT_ASC : SORT_DESC); if ($byColumn !== 'NAME') { $sortingColumns[$possibleColumnForSorting['NAME']['ALIAS']] = SORT_ASC; } $securityContext = $this->storage->getCurrentUserSecurityContext(); $proxyType = $this->storage->getProxyType(); $isStorageCurrentUser = $proxyType instanceof ProxyType\User && $proxyType->getTitleForCurrentUser() != $proxyType->getTitle(); $parameters = array('with' => array('CREATE_USER'), 'filter' => array('PARENT_ID' => $this->folder->getRealObjectId(), 'DELETED_TYPE' => ObjectTable::DELETED_TYPE_NONE)); $parameters = Driver::getInstance()->getRightsManager()->addRightsCheck($securityContext, $parameters, array('ID', 'CREATED_BY')); $needPagination = $this->needPagination(); $pageNumber = (int) $this->request->getQuery('pageNumber'); if ($pageNumber <= 0) { $pageNumber = 1; } if ($needPagination) { $parameters['order'] = array(); foreach ($sortingColumns as $columnName => $columnData) { if (is_array($columnData)) { $parameters['order'][$columnName] = in_array(SORT_DESC, $columnData, true) ? 'DESC' : 'ASC'; } else { $parameters['order'][$columnName] = SORT_DESC === $columnData ? 'DESC' : 'ASC'; } } unset($columnName, $columnData); $parameters['limit'] = self::COUNT_ON_PAGE + 1; // +1 because we want to know about existence next page $parameters['offset'] = self::COUNT_ON_PAGE * ($pageNumber - 1); } $this->folder->preloadOperationsForChildren($securityContext); $sharedObjectIds = $this->getUserShareObjectIds(); $isDesktopDiskInstall = \Bitrix\Disk\Desktop::isDesktopDiskInstall(); $nowTime = time() + CTimeZone::getOffset(); $fullFormatWithoutSec = preg_replace('/:s$/', '', CAllDatabase::dateFormatToPHP(CSite::GetDateFormat("FULL"))); $urlManager = Driver::getInstance()->getUrlManager(); $rows = array(); $storageTitle = $proxyType->getTitle(); $isEnabledShowExtendedRights = $this->storage->isEnabledShowExtendedRights(); $result = $this->folder->getList($parameters); $countObjectsOnPage = 0; $needShowNextPagePagination = false; while ($row = $result->fetch()) { $countObjectsOnPage++; if ($needPagination && $countObjectsOnPage > self::COUNT_ON_PAGE) { $needShowNextPagePagination = true; break; } $object = BaseObject::buildFromArray($row); /** @var File|Folder $object */ $name = $object->getName(); $objectId = $object->getId(); $exportData = array('TYPE' => $object->getType(), 'NAME' => $name, 'ID' => $objectId); $relativePath = trim($this->arParams['RELATIVE_PATH'], '/'); $detailPageFile = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_FILE_VIEW'], array('FILE_ID' => $objectId, 'FILE_PATH' => ltrim($relativePath . '/' . $name, '/'))); $listingPage = rtrim(CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_FOLDER_LIST'], array('PATH' => $relativePath)), '/'); $isFolder = $object instanceof Folder; $actions = $tileActions = $columns = array(); if ($object->canRead($securityContext)) { $exportData['OPEN_URL'] = $urlManager->encodeUrn($isFolder ? $listingPage . '/' . $name . '/' : $detailPageFile); $actions[] = array("PSEUDO_NAME" => "open", "DEFAULT" => true, "ICONCLASS" => "show", "TEXT" => Loc::getMessage('DISK_FOLDER_LIST_ACT_OPEN'), "ONCLICK" => "jsUtils.Redirect(arguments, '" . $exportData['OPEN_URL'] . "')"); if (!$object->canChangeRights($securityContext) && !$object->canShare($securityContext)) { $actions[] = array("PSEUDO_NAME" => "share", "ICONCLASS" => "share", "TEXT" => Loc::getMessage('DISK_FOLDER_LIST_ACT_SHOW_SHARING_DETAIL_2'), "ONCLICK" => "BX.Disk.showSharingDetailWithoutEdit({\n\t\t\t\t\t\t\t\tajaxUrl: '/bitrix/components/bitrix/disk.folder.list/ajax.php',\n\t\t\t\t\t\t\t\tobject: {\n\t\t\t\t\t\t\t\t\tid: {$objectId},\n\t\t\t\t\t\t\t\t\tname: '{$name}',\n\t\t\t\t\t\t\t\t\tisFolder: " . ($isFolder ? 'true' : 'false') . "\n\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t})"); } elseif ($object->canChangeRights($securityContext)) { $actions[] = array("PSEUDO_NAME" => "share", "ICONCLASS" => "share", "TEXT" => Loc::getMessage('DISK_FOLDER_LIST_ACT_SHOW_SHARING_DETAIL_2'), "ONCLICK" => "BX.Disk['FolderListClass_{$this->componentId}'].showSharingDetailWithChangeRights({\n\t\t\t\t\t\t\t\tajaxUrl: '/bitrix/components/bitrix/disk.folder.list/ajax.php',\n\t\t\t\t\t\t\t\tobject: {\n\t\t\t\t\t\t\t\t\tid: {$objectId},\n\t\t\t\t\t\t\t\t\tname: '{$name}',\n\t\t\t\t\t\t\t\t\tisFolder: " . ($isFolder ? 'true' : 'false') . "\n\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t})"); } elseif ($object->canShare($securityContext)) { $actions[] = array("PSEUDO_NAME" => "share", "ICONCLASS" => "share", "TEXT" => Loc::getMessage('DISK_FOLDER_LIST_ACT_SHOW_SHARING_DETAIL_2'), "ONCLICK" => "BX.Disk['FolderListClass_{$this->componentId}'].showSharingDetailWithSharing({\n\t\t\t\t\t\t\t\tajaxUrl: '/bitrix/components/bitrix/disk.folder.list/ajax.php',\n\t\t\t\t\t\t\t\tobject: {\n\t\t\t\t\t\t\t\t\tid: {$objectId},\n\t\t\t\t\t\t\t\t\tname: '{$name}',\n\t\t\t\t\t\t\t\t\tisFolder: " . ($isFolder ? 'true' : 'false') . "\n\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t})"); } if ($isEnabledShowExtendedRights && !$object->isLink() && $object->canChangeRights($securityContext)) { $actions[] = array("PSEUDO_NAME" => "rights", "ICONCLASS" => "rights", "TEXT" => Loc::getMessage('DISK_FOLDER_LIST_ACT_RIGHTS_SETTINGS'), "ONCLICK" => "BX.Disk['FolderListClass_{$this->componentId}'].showRightsOnObjectDetail({\n\t\t\t\t\t\t\t\tobject: {\n\t\t\t\t\t\t\t\t\tid: {$objectId},\n\t\t\t\t\t\t\t\t\tname: '{$name}',\n\t\t\t\t\t\t\t\t\tisFolder: " . ($isFolder ? 'true' : 'false') . "\n\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t})"); } if (!$isFolder) { $actions[] = array("PSEUDO_NAME" => "download", "ICONCLASS" => "download", "TEXT" => Loc::getMessage('DISK_FOLDER_LIST_ACT_DOWNLOAD'), "ONCLICK" => "jsUtils.Redirect(arguments, '" . $urlManager->getUrlForDownloadFile($object) . "')"); } $actions[] = array("PSEUDO_NAME" => "copy", "ICONCLASS" => "copy", "TEXT" => Loc::getMessage('DISK_FOLDER_LIST_ACT_COPY'), "ONCLICK" => "BX.Disk['FolderListClass_{$this->componentId}'].openCopyModalWindow({\n\t\t\t\t\t\tid: {$this->storage->getRootObjectId()},\n\t\t\t\t\t\tname: '" . CUtil::JSEscape($storageTitle) . "'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tid: {$objectId},\n\t\t\t\t\t\tname: '" . CUtil::JSEscape($name) . "'\n\t\t\t\t\t});"); if ($object->canDelete($securityContext)) { $actions[] = array("PSEUDO_NAME" => "move", "ICONCLASS" => "move", "TEXT" => Loc::getMessage('DISK_FOLDER_LIST_ACT_MOVE'), "ONCLICK" => "BX.Disk['FolderListClass_{$this->componentId}'].openMoveModalWindow({\n\t\t\t\t\t\t\tid: {$this->storage->getRootObjectId()},\n\t\t\t\t\t\t\tname: '" . CUtil::JSEscape($storageTitle) . "'\n\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\tid: {$objectId},\n\t\t\t\t\t\t\tname: '" . CUtil::JSEscape($name) . "'\n\t\t\t\t\t\t});"); } if (!$isStorageCurrentUser && (!isset($sharedObjectIds[$object->getRealObjectId()]) || $sharedObjectIds[$object->getRealObjectId()]['TO_ENTITY'] != Sharing::CODE_USER . $this->getUser()->getId())) { $actions[] = array("PSEUDO_NAME" => "connect", "ICONCLASS" => "connect", "TEXT" => Loc::getMessage('DISK_FOLDER_LIST_ACT_CONNECT'), "ONCLICK" => "BX.Disk['FolderListClass_{$this->componentId}'].connectObjectToDisk({\n\t\t\t\t\t\t\tobject: {\n\t\t\t\t\t\t\t\tid: {$objectId},\n\t\t\t\t\t\t\t\tname: '" . CUtil::JSEscape($name) . "',\n\t\t\t\t\t\t\t\tisFolder: " . ($isFolder ? 'true' : 'false') . "\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});"); } if (!$isFolder) { $actions[] = array("ICONCLASS" => "show", "TEXT" => Loc::getMessage('DISK_FOLDER_LIST_ACT_GET_EXT_LINK'), "ONCLICK" => "BX.Disk['FolderListClass_{$this->componentId}'].getExternalLink({$objectId});"); $downloadLink = $urlManager->getUrlForShowFile($object, array(), true); $actions[] = array("ICONCLASS" => "show", 'PSEUDO_NAME' => 'internal_link', 'PSEUDO_VALUE' => $downloadLink, "TEXT" => Loc::getMessage('DISK_FOLDER_LIST_ACT_COPY_INTERNAL_LINK'), "ONCLICK" => "BX.Disk['FolderListClass_{$this->componentId}'].getInternalLink('{$downloadLink}');"); $actions[] = array("ICONCLASS" => "history", "TEXT" => Loc::getMessage('DISK_FOLDER_LIST_ACT_SHOW_HISTORY'), "ONCLICK" => "jsUtils.Redirect(arguments, '" . $exportData['OPEN_URL'] . "#tab-history')"); } } if ($object->canRename($securityContext)) { $actions[] = array("TEXT" => Loc::getMessage('DISK_FOLDER_LIST_ACT_RENAME'), "ONCLICK" => "BX.Disk['FolderListClass_{$this->componentId}'].renameInline({$objectId})"); } if ((!empty($sharedObjectIds[$objectId]) || $object->isLink()) && $object->canRead($securityContext)) { $tileActions['SHARE_INFO'] = array("ICONCLASS" => "show", "TEXT" => Loc::getMessage('DISK_FOLDER_LIST_DETAIL_SHARE_INFO'), "ONCLICK" => "BX.Disk['FolderListClass_{$this->componentId}'].showShareInfoSmallView({\n\t\t\t\t\t\tobject: {\n\t\t\t\t\t\t\tid: {$objectId},\n\t\t\t\t\t\t\tname: '{$name}',\n\t\t\t\t\t\t\tisFolder: " . ($isFolder ? 'true' : 'false') . "\n\t\t\t\t\t\t }\n\t\t\t\t\t})"); } $columnsBizProc = array('BIZPROC' => ''); $bizprocIcon = array('BIZPROC' => ''); if ($this->arParams['STATUS_BIZPROC'] && !$isFolder) { list($actions, $columnsBizProc, $bizprocIcon) = $this->getBizProcData($object, $securityContext, $actions, $columnsBizProc, $bizprocIcon, $exportData); } if ($object->canDelete($securityContext)) { if ($object->isLink()) { $actions[] = array("PSEUDO_NAME" => "detach", "ICONCLASS" => "detach", "TEXT" => Loc::getMessage('DISK_FOLDER_LIST_DETACH_BUTTON'), "ONCLICK" => "BX.Disk['FolderListClass_{$this->componentId}'].openConfirmDetach({\n\t\t\t\t\t\t\t\tobject: {\n\t\t\t\t\t\t\t\t\tid: {$objectId},\n\t\t\t\t\t\t\t\t\tname: '{$name}',\n\t\t\t\t\t\t\t\t\tisFolder: " . ($isFolder ? 'true' : 'false') . "\n\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t})"); } elseif ($object->getCode() !== Folder::CODE_FOR_UPLOADED_FILES) { $actions[] = array("PSEUDO_NAME" => "delete", "ICONCLASS" => "delete", "TEXT" => Loc::getMessage('DISK_FOLDER_LIST_ACT_MARK_DELETED'), "ONCLICK" => "BX.Disk['FolderListClass_{$this->componentId}'].openConfirmDelete({\n\t\t\t\t\t\t\t\tobject: {\n\t\t\t\t\t\t\t\t\tid: {$objectId},\n\t\t\t\t\t\t\t\t\tname: '{$name}',\n\t\t\t\t\t\t\t\t\tisFolder: " . ($isFolder ? 'true' : 'false') . "\n\t\t\t\t\t\t\t\t },\n\t\t\t\t\t\t\t\tcanDelete: {$object->canDelete($securityContext)}\n\t\t\t\t\t\t\t})"); } } $iconClass = Ui\Icon::getIconClassByObject($object, !empty($sharedObjectIds[$objectId])); $dataAttributesForViewer = ''; if ($isFolder) { $dataAttributesForViewer = Ui\Viewer::getAttributesByObject($object); if ($grid['MODE'] === 'tile') { $exportData['VIEWER_ATTRS'] = $dataAttributesForViewer; $dataAttributesForViewer = ''; } $nameSpecialChars = htmlspecialcharsbx($name); $columnName = "\n\t\t\t\t\t<table class=\"bx-disk-object-name\"><tr>\n\t\t\t\t\t\t\t<td style=\"width: 45px;\"><div data-object-id=\"{$objectId}\" class=\"draggable bx-file-icon-container-small {$iconClass}\"></div></td>\n\t\t\t\t\t\t\t<td><a class=\"bx-disk-folder-title\" id=\"disk_obj_{$objectId}\" href=\"{$exportData['OPEN_URL']}\" {$dataAttributesForViewer}>{$nameSpecialChars}</a></td>\n\t\t\t\t\t</tr></table>\n\t\t\t\t"; } else { $externalId = ''; if ($isDesktopDiskInstall && $isStorageCurrentUser) { $externalId = "st{$this->storage->getId()}|{$this->storage->getRootObjectId()}|f{$objectId}"; } $dataAttributesForViewer = Ui\Viewer::getAttributesByObject($object, array('canUpdate' => $object->canUpdate($securityContext), 'relativePath' => $relativePath . '/' . $name, 'externalId' => $externalId)); if ($grid['MODE'] === 'tile') { $exportData['VIEWER_ATTRS'] = $dataAttributesForViewer; $dataAttributesForViewer = ''; } $nameSpecialChars = htmlspecialcharsbx($name); $columnName = "\n\t\t\t\t\t<table class=\"bx-disk-object-name\"><tr>\n\t\t\t\t\t\t<td style=\"width: 45px;\"><div data-object-id=\"{$objectId}\" class=\"draggable bx-file-icon-container-small {$iconClass}\"></div></td>\n\t\t\t\t\t\t<td><a class=\"bx-disk-folder-title\" id=\"disk_obj_{$objectId}\" href=\"{$exportData['OPEN_URL']}\" {$dataAttributesForViewer}>{$nameSpecialChars}</a></td>\n\t\t\t\t\t\t<td>{$bizprocIcon['BIZPROC']}</td>\n\t\t\t\t\t</tr></table>\n\t\t\t\t"; } $createdByLink = \CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_USER'], array("user_id" => $object->getCreatedBy())); $timestampCreate = $object->getCreateTime()->toUserTime()->getTimestamp(); $timestampUpdate = $object->getUpdateTime()->toUserTime()->getTimestamp(); $columns = array('CREATE_TIME' => $nowTime - $timestampCreate > 158400 ? formatDate($fullFormatWithoutSec, $timestampCreate, $nowTime) : formatDate('x', $timestampCreate, $nowTime), 'UPDATE_TIME' => $nowTime - $timestampCreate > 158400 ? formatDate($fullFormatWithoutSec, $timestampUpdate, $nowTime) : formatDate('x', $timestampUpdate, $nowTime), 'NAME' => $columnName, 'FORMATTED_SIZE' => $isFolder ? '' : CFile::formatSize($object->getSize()), 'CREATE_USER' => "\n\t\t\t\t\t<div class=\"bx-disk-user-link\"><a target='_blank' href=\"{$createdByLink}\" id=\"\">" . htmlspecialcharsbx($object->getCreateUser()->getFormattedName()) . "</a></div>\n\t\t\t\t"); if ($this->arParams['STATUS_BIZPROC']) { $columns['BIZPROC'] = $columnsBizProc["BIZPROC"]; } $exportData['ICON_CLASS'] = $iconClass; if ($grid['MODE'] === 'tile') { $exportData['IS_IMAGE'] = $isFolder ? false : \Bitrix\Disk\TypeFile::isImage($object); if ($exportData['IS_IMAGE']) { $exportData['SRC_IMAGE'] = $urlManager->getUrlForShowFile($object, array('exact' => 'Y', 'width' => 64, 'height' => 64)); } $exportData['UPDATE_TIME'] = $columns['UPDATE_TIME']; } $exportData['IS_SHARED'] = !empty($sharedObjectIds[$objectId]); $exportData['IS_LINK'] = $object->isLink(); $tildaExportData = array(); foreach ($exportData as $exportName => $exportValue) { $tildaExportData['~' . $exportName] = $exportValue; } unset($exportRow); $rows[] = array('data' => array_merge($exportData, $tildaExportData), 'columns' => $columns, 'actions' => $actions, 'tileActions' => $tileActions, 'TYPE' => $exportData['TYPE'], 'NAME' => $exportData['NAME'], 'UPDATE_TIME' => $object->getUpdateTime()->getTimestamp(), 'SIZE' => $isFolder ? 0 : $object->getSize()); } unset($object); if (!$needPagination) { Collection::sortByColumn($rows, $sortingColumns); } $grid['HEADERS'] = array(array('id' => 'ID', 'name' => 'ID', 'sort' => isset($possibleColumnForSorting['ID']) ? 'ID' : false, 'default' => false), array('id' => 'NAME', 'name' => Loc::getMessage('DISK_FOLDER_LIST_COLUMN_NAME'), 'sort' => isset($possibleColumnForSorting['NAME']) ? 'NAME' : false, 'default' => true, 'editable' => array('size' => 45)), array('id' => 'CREATE_TIME', 'name' => Loc::getMessage('DISK_FOLDER_LIST_COLUMN_CREATE_TIME'), 'sort' => isset($possibleColumnForSorting['CREATE_TIME']) ? 'CREATE_TIME' : false, 'default' => false), array('id' => 'UPDATE_TIME', 'name' => Loc::getMessage('DISK_FOLDER_LIST_COLUMN_UPDATE_TIME'), 'sort' => isset($possibleColumnForSorting['UPDATE_TIME']) ? 'UPDATE_TIME' : false, 'default' => true), array('id' => 'CREATE_USER', 'name' => Loc::getMessage('DISK_FOLDER_LIST_COLUMN_CREATE_USER'), 'sort' => isset($possibleColumnForSorting['CREATE_USER']) ? 'CREATE_USER' : false, 'default' => false), array('id' => 'FORMATTED_SIZE', 'name' => Loc::getMessage('DISK_FOLDER_LIST_COLUMN_FORMATTED_SIZE'), 'sort' => isset($possibleColumnForSorting['FORMATTED_SIZE']) ? 'FORMATTED_SIZE' : false, 'default' => true)); if ($this->arParams['STATUS_BIZPROC']) { $grid['HEADERS'][] = array('id' => 'BIZPROC', 'name' => Loc::getMessage('DISK_FOLDER_LIST_COLUMN_BIZPROC'), 'default' => false); } $grid['DATA_FOR_PAGINATION'] = array('ENABLED' => $needPagination); if ($needPagination) { $grid['DATA_FOR_PAGINATION']['SHOW_NEXT_PAGE'] = $needShowNextPagePagination; $grid['DATA_FOR_PAGINATION']['CURRENT_PAGE'] = $pageNumber; } $grid['COLUMN_FOR_SORTING'] = $possibleColumnForSorting; $grid['ROWS'] = $rows; $grid['ROWS_COUNT'] = count($rows); $grid['FOOTER'] = array(); if (isModuleInstalled('bitrix24')) { list($freeSpace, $diskSize) = $this->getDiskSpace(); $freeSpace = CFile::formatSize($freeSpace); $diskSize = CFile::formatSize($diskSize); $grid['FOOTER'] = array(array('custom_html' => ' <td class="tar" style="width: 100%;">' . Loc::getMessage('DISK_FOLDER_LIST_B24_LABEL_DISK_SPACE', array('#FREE_SPACE#' => '<span>' . $freeSpace, '#DISK_SIZE#' => $diskSize . '</span>')) . '</span></td> '), array('custom_html' => ' <td class="tar"><a class="bx-disk-mp-link-addhdd" href="' . Loc::getMessage('DISK_FOLDER_LIST_B24_URL_DISK_SPACE') . '" target="_blank">+ <span>' . Loc::getMessage('DISK_FOLDER_LIST_B24_APPEND_DISK_SPACE') . '</span></a></td> ')); } return $grid; }
$arItem["SORT"] = $arSetItemsDefaultID[$arItem["ID"]]; $arResult["SET_ITEMS"]["DEFAULT"][] = $arItem; if ($arParams['CONVERT_CURRENCY'] == 'Y') { $arResult["SET_ITEMS"]["PRICE"] += $arItem["PRICE_DISCOUNT_VALUE"]; $arResult["SET_ITEMS"]["OLD_PRICE"] += $arItem["PRICE_VALUE"]; $arResult["SET_ITEMS"]["PRICE_DISCOUNT_DIFFERENCE"] += $arItem["PRICE_DISCOUNT_DIFFERENCE_VALUE"]; } } else { if ($arItem['CATALOG_AVAILABLE'] == 'Y') { $arItem["SORT"] = $arSetItemsOtherID[$arItem["ID"]]; $arResult["SET_ITEMS"]["OTHER"][] = $arItem; } } } Type\Collection::sortByColumn($arResult["SET_ITEMS"]["DEFAULT"], array('SORT' => SORT_ASC)); Type\Collection::sortByColumn($arResult["SET_ITEMS"]["OTHER"], array('SORT' => SORT_ASC)); if ($arParams['CONVERT_CURRENCY'] == 'N') { //convert all prices to main element currency foreach ($arResult["SET_ITEMS"]["DEFAULT"] as $key => $arItem) { $arResult["SET_ITEMS"]["DEFAULT"][$key]["PRICE_CONVERT_DISCOUNT_VALUE"] = CCurrencyRates::ConvertCurrency($arItem['PRICE_DISCOUNT_VALUE'], $arItem["PRICE_CURRENCY"], $arResult["ELEMENT"]["PRICE_CURRENCY"]); $arResult["SET_ITEMS"]["PRICE"] += $arResult["SET_ITEMS"]["DEFAULT"][$key]["PRICE_CONVERT_DISCOUNT_VALUE"]; $arResult["SET_ITEMS"]["DEFAULT"][$key]["PRICE_CONVERT_VALUE"] = CCurrencyRates::ConvertCurrency($arItem["PRICE_VALUE"], $arItem["PRICE_CURRENCY"], $arResult["ELEMENT"]["PRICE_CURRENCY"]); $arResult["SET_ITEMS"]["OLD_PRICE"] += $arResult["SET_ITEMS"]["DEFAULT"][$key]["PRICE_CONVERT_VALUE"]; $arResult["SET_ITEMS"]["DEFAULT"][$key]["PRICE_CONVERT_DISCOUNT_DIFFERENCE_VALUE"] = CCurrencyRates::ConvertCurrency($arItem["PRICE_DISCOUNT_DIFFERENCE_VALUE"], $arItem["PRICE_CURRENCY"], $arResult["ELEMENT"]["PRICE_CURRENCY"]); $arResult["SET_ITEMS"]["PRICE_DISCOUNT_DIFFERENCE"] += $arResult["SET_ITEMS"]["DEFAULT"][$key]["PRICE_CONVERT_DISCOUNT_DIFFERENCE_VALUE"]; } foreach ($arResult["SET_ITEMS"]["OTHER"] as $key => $arItem) { $arResult["SET_ITEMS"]["OTHER"][$key]["PRICE_CONVERT_DISCOUNT_VALUE"] = CCurrencyRates::ConvertCurrency($arItem['PRICE_DISCOUNT_VALUE'], $arItem["PRICE_CURRENCY"], $arResult["ELEMENT"]["PRICE_CURRENCY"]); $arResult["SET_ITEMS"]["OTHER"][$key]["PRICE_CONVERT_VALUE"] = CCurrencyRates::ConvertCurrency($arItem["PRICE_VALUE"], $arItem["PRICE_CURRENCY"], $arResult["ELEMENT"]["PRICE_CURRENCY"]); $arResult["SET_ITEMS"]["OTHER"][$key]["PRICE_CONVERT_DISCOUNT_DIFFERENCE_VALUE"] = CCurrencyRates::ConvertCurrency($arItem["PRICE_DISCOUNT_DIFFERENCE_VALUE"], $arItem["PRICE_CURRENCY"], $arResult["ELEMENT"]["PRICE_CURRENCY"]); }
/** * Get ancestors objects of $objectId. * PARENT_ID not really! Be careful :) * @param $objectId * @param int $orderDepthLevel SORT_ASC | SORT_DESC * @throws \Bitrix\Main\ArgumentOutOfRangeException * @throws \Bitrix\Main\ArgumentException * @throws \Exception * @return array */ public static function getAncestors($objectId, $orderDepthLevel = SORT_ASC) { $objectId = (int) $objectId; $objectPaths = static::getList(array('select' => array('ID', 'PARENT_ID', 'OBJECT_ID', 'DEPTH_LEVEL'), 'filter' => array('OBJECT_ID' => $objectId, '!PARENT_ID' => $objectId)))->fetchAll(); Collection::sortByColumn($objectPaths, array('DEPTH_LEVEL' => $orderDepthLevel)); return $objectPaths; }
<tr> <td width="40%">ID:</td> <td width="60%"><?php echo 0 < intval($arProperty['ID']) ? $arProperty['ID'] : GetMessage("BT_ADM_IEP_PROP_NEW"); ?> </td> </tr> <tr> <td width="40%"><?php echo GetMessage('BT_ADM_IEP_PROPERTY_TYPE'); ?> </td> <td width="60%"> <?php $arUserTypeList = CIBlockProperty::GetUserType(); \Bitrix\Main\Type\Collection::sortByColumn($arUserTypeList, array('DESCRIPTION' => SORT_STRING)); $boolUserPropExist = !empty($arUserTypeList); ?> <select name="PROPERTY_PROPERTY_TYPE" onchange="reloadForm();"> <?php if ($boolUserPropExist) { ?> <optgroup label="<?php echo GetMessage('BT_ADM_IEP_PROPERTY_BASE_TYPE_GROUP'); ?> "><?php } ?> <option value="S" <?php if ($PROPERTY_TYPE == "S") { echo " selected";
/** * Load applied discount list * * @param int $order Order id. * @param bool $extendedMode Get full information by discount. * @param array $basketList Correspondence between basket ids and basket codes. * @param array $basketData Basket data. * @return Result */ public static function loadResultFromDatabase($order, $extendedMode = false, $basketList = array(), $basketData = array()) { if (self::$init === false) { self::init(); } $result = new Result(); $translate = !empty($basketList) && is_array($basketList); $extendedMode = $extendedMode === true; $order = (int) $order; if ($order <= 0) { $result->addError(new Main\Entity\EntityError(Loc::getMessage('SALE_ORDER_DISCOUNT_BAD_ORDER_ID'), self::ERROR_ID)); return $result; } $resultData = array('BASKET' => array(), 'ORDER' => array(), 'DISCOUNT_LIST' => array(), 'DISCOUNT_MODULES' => array(), 'COUPON_LIST' => array(), 'DATA' => array()); $orderDiscountIndex = 0; $orderDiscountLink = array(); $discountList = array(); $discountSort = array(); $couponList = array(); $couponIterator = Internals\OrderCouponsTable::getList(array('select' => array('*'), 'filter' => array('=ORDER_ID' => $order), 'order' => array('ID' => 'ASC'))); while ($coupon = $couponIterator->fetch()) { $coupon['ID'] = (int) $coupon['ID']; $coupon['ORDER_ID'] = (int) $coupon['ORDER_ID']; $coupon['ORDER_DISCOUNT_ID'] = (int) $coupon['ORDER_DISCOUNT_ID']; $resultData['COUPON_LIST'][$coupon['COUPON']] = $coupon; $couponList[$coupon['ID']] = $coupon['COUPON']; } unset($coupon, $couponIterator); $ruleIterator = Internals\OrderRulesTable::getList(array('select' => array('*', 'RULE_DESCR' => 'DESCR.DESCR', 'RULE_DESCR_ID' => 'DESCR.ID'), 'filter' => array('=ORDER_ID' => $order), 'order' => array('ID' => 'ASC'))); while ($rule = $ruleIterator->fetch()) { $rule['ID'] = (int) $rule['ID']; $rule['ORDER_DISCOUNT_ID'] = (int) $rule['ORDER_DISCOUNT_ID']; $rule['ORDER_COUPON_ID'] = (int) $rule['COUPON_ID']; if ($rule['ORDER_COUPON_ID'] > 0) { if (!isset($couponList[$rule['COUPON_ID']])) { $result->addError(new Main\Entity\EntityError(Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_RULE_COUPON_NOT_FOUND', array('#ID#' => $rule['ID'], '#COUPON_ID#' => $rule['COUPON_ID'])))); } else { $rule['COUPON_ID'] = $couponList[$rule['ORDER_COUPON_ID']]; } } $rule['RULE_DESCR_ID'] = (int) $rule['RULE_DESCR_ID']; if ($rule['MODULE_ID'] == 'sale') { $discountId = (int) $rule['ORDER_DISCOUNT_ID']; if (!isset($orderDiscountLink[$discountId])) { $resultData['ORDER'][$orderDiscountIndex] = array('ORDER_ID' => $rule['ORDER_ID'], 'DISCOUNT_ID' => $rule['ORDER_DISCOUNT_ID'], 'ORDER_COUPON_ID' => $rule['ORDER_COUPON_ID'], 'COUPON_ID' => '', 'RESULT' => array()); if ($rule['ORDER_COUPON_ID'] > 0) { $resultData['ORDER'][$orderDiscountIndex]['COUPON_ID'] = $rule['COUPON_ID']; } $orderDiscountLink[$discountId] =& $resultData['ORDER'][$orderDiscountIndex]; $orderDiscountIndex++; } $ruleItem = array('RULE_ID' => $rule['ID'], 'APPLY' => $rule['APPLY'], 'RULE_DESCR_ID' => $rule['RULE_DESCR_ID']); if (!empty($rule['RULE_DESCR']) && is_array($rule['RULE_DESCR'])) { $ruleItem['DESCR_DATA'] = $rule['RULE_DESCR']; $ruleItem['DESCR'] = self::formatArrayDescription($rule['RULE_DESCR']); $ruleItem['DESCR_ID'] = $rule['RULE_DESCR_ID']; } switch ($rule['ENTITY_TYPE']) { case Internals\OrderRulesTable::ENTITY_TYPE_BASKET: if (!isset($orderDiscountLink[$discountId]['RESULT']['BASKET'])) { $orderDiscountLink[$discountId]['RESULT']['BASKET'] = array(); } $rule['ENTITY_ID'] = (int) $rule['ENTITY_ID']; $ruleItem['BASKET_ID'] = $rule['ENTITY_ID']; $index = $translate ? $basketList[$rule['ENTITY_ID']] : $rule['ENTITY_ID']; if (!empty($basketData[$index])) { $ruleItem['MODULE'] = $basketData[$index]['MODULE']; $ruleItem['PRODUCT_ID'] = $basketData[$index]['PRODUCT_ID']; } $orderDiscountLink[$discountId]['RESULT']['BASKET'][$index] = $ruleItem; break; case Internals\OrderRulesTable::ENTITY_TYPE_DELIVERY: if (!isset($orderDiscountLink[$discountId]['RESULT']['DELIVERY'])) { $orderDiscountLink[$discountId]['RESULT']['DELIVERY'] = array(); } $rule['ENTITY_ID'] = (int) $rule['ENTITY_ID']; $ruleItem['DELIVERY_ID'] = $rule['ENTITY_ID'] > 0 ? $rule['ENTITY_ID'] : (string) $rule['ENTITY_VALUE']; $orderDiscountLink[$discountId]['RESULT']['DELIVERY'] = $ruleItem; break; } unset($ruleItem, $discountId); } else { if ($rule['ENTITY_TYPE'] != Internals\OrderRulesTable::ENTITY_TYPE_BASKET) { continue; } $rule['ENTITY_ID'] = (int) $rule['ENTITY_ID']; if ($rule['ENTITY_ID'] <= 0) { continue; } $index = $translate ? $basketList[$rule['ENTITY_ID']] : $rule['ENTITY_ID']; if (!isset($resultData['BASKET'][$index])) { $resultData['BASKET'][$index] = array(); } $ruleResult = array('BASKET_ID' => $rule['ENTITY_ID'], 'RULE_ID' => $rule['ID'], 'ORDER_ID' => $rule['ORDER_ID'], 'DISCOUNT_ID' => $rule['ORDER_DISCOUNT_ID'], 'ORDER_COUPON_ID' => $rule['ORDER_COUPON_ID'], 'COUPON_ID' => '', 'RESULT' => array('APPLY' => $rule['APPLY']), 'RULE_DESCR_ID' => $rule['RULE_DESCR_ID']); if ($rule['ORDER_COUPON_ID'] > 0) { $ruleResult['COUPON_ID'] = $rule['COUPON_ID']; } if (!empty($basketData[$index])) { $ruleResult['MODULE'] = $basketData[$index]['MODULE']; $ruleResult['PRODUCT_ID'] = $basketData[$index]['PRODUCT_ID']; } if (!empty($rule['RULE_DESCR']) && is_array($rule['RULE_DESCR'])) { $ruleResult['RESULT']['DESCR_DATA'] = $rule['RULE_DESCR']; $ruleResult['RESULT']['DESCR'] = self::formatArrayDescription($rule['RULE_DESCR']); $ruleResult['DESCR_ID'] = $rule['RULE_DESCR_ID']; } $resultData['BASKET'][$index][] = $ruleResult; unset($ruleResult); } $discountList[$rule['ORDER_DISCOUNT_ID']] = true; if (!isset($discountSort[$rule['ORDER_DISCOUNT_ID']])) { $discountSort[$rule['ORDER_DISCOUNT_ID']] = $rule['ID']; } } unset($rule, $ruleIterator); unset($couponList); if (!empty($discountList)) { $discountSelect = $extendedMode ? array('*') : array('ID', 'NAME', 'MODULE_ID', 'DISCOUNT_ID', 'USE_COUPONS'); $discountIterator = Internals\OrderDiscountTable::getList(array('select' => $discountSelect, 'filter' => array('@ID' => array_keys($discountList)))); while ($discount = $discountIterator->fetch()) { $discount['ID'] = (int) $discount['ID']; $discount['ORDER_DISCOUNT_ID'] = $discount['ID']; $discount['RULE_SORT'] = $discountSort[$discount['ID']]; if ($discount['MODULE_ID'] == 'sale') { $discount['EDIT_PAGE_URL'] = self::getEditUrl(array('ID' => $discount['DISCOUNT_ID'])); } else { $discount['EDIT_PAGE_URL'] = ''; if (!empty(self::$discountProviders[$discount['MODULE_ID']]['getEditUrl'])) { $discount['EDIT_PAGE_URL'] = call_user_func_array(self::$discountProviders[$discount['MODULE_ID']]['getEditUrl'], array(array('ID' => $discount['DISCOUNT_ID'], 'MODULE_ID' => $discount['MODULE_ID']))); } } $resultData['DISCOUNT_LIST'][$discount['ID']] = $discount; } unset($discount, $discountIterator, $discountSelect); if (!empty($resultData['DISCOUNT_LIST'])) { Main\Type\Collection::sortByColumn($resultData['DISCOUNT_LIST'], 'RULE_SORT', '', null, true); foreach ($resultData['DISCOUNT_LIST'] as &$discount) { unset($discount['RULE_SORT']); } unset($discount); } $modulesIterator = Internals\OrderModulesTable::getList(array('select' => array('MODULE_ID', 'ORDER_DISCOUNT_ID'), 'filter' => array('@ORDER_DISCOUNT_ID' => array_keys($discountList)))); while ($module = $modulesIterator->fetch()) { $orderDiscountId = (int) $module['ORDER_DISCOUNT_ID']; if (!isset($resultData['DISCOUNT_MODULES'][$orderDiscountId])) { $resultData['DISCOUNT_MODULES'][$orderDiscountId] = array(); } $resultData['DISCOUNT_MODULES'][$orderDiscountId][] = $module['MODULE_ID']; } unset($module, $modulesIterator); } unset($discountList); $dataIterator = Internals\OrderDiscountDataTable::getList(array('select' => array('*'), 'filter' => array('=ORDER_ID' => $order, '@ENTITY_TYPE' => array(Internals\OrderDiscountDataTable::ENTITY_TYPE_BASKET, Internals\OrderDiscountDataTable::ENTITY_TYPE_DELIVERY)))); while ($data = $dataIterator->fetch()) { if ($data['ENTITY_TYPE'] == Internals\OrderDiscountDataTable::ENTITY_TYPE_BASKET) { if (!isset($resultData['DATA']['BASKET'])) { $resultData['DATA']['BASKET'] = array(); } $data['ENTITY_ID'] = (int) $data['ENTITY_ID']; $index = $translate ? $basketList[$data['ENTITY_ID']] : $data['ENTITY_ID']; $resultData['DATA']['BASKET'][$index] = $data['ENTITY_DATA']; } else { } } unset($data, $dataIterator); $result->addData($resultData); unset($resultData); return $result; }