예제 #1
1
 protected function getElementFields($iblockId, $elementId)
 {
     $totalResult = array();
     $list = new CList($iblockId);
     $listFields = $list->getFields();
     foreach ($listFields as $fieldId => $field) {
         $totalResult[$fieldId] = $field;
     }
     $elementQuery = CIBlockElement::getList(array(), array("IBLOCK_ID" => $iblockId, "=ID" => $elementId), false, false, array('*'));
     $elementObject = $elementQuery->getNextElement();
     $elementNewData = $elementObject->getFields();
     if (is_array($elementNewData)) {
         foreach ($elementNewData as $fieldId => $fieldValue) {
             if (!$list->is_field($fieldId)) {
                 continue;
             }
             if (isset($totalResult[$fieldId]["NAME"])) {
                 $totalResult[$fieldId]["VALUE"] = $fieldValue;
             }
         }
     }
     $query = \CIblockElement::getPropertyValues($iblockId, array('ID' => $elementId));
     if ($propertyValues = $query->fetch()) {
         foreach ($propertyValues as $id => $values) {
             if ($id == "IBLOCK_ELEMENT_ID") {
                 continue;
             }
             $fieldId = "PROPERTY_" . $id;
             $totalResult[$fieldId]["VALUE"] = $values;
         }
     }
     return $totalResult;
 }
예제 #2
0
 /**
  * @return array
  */
 protected function getList()
 {
     if ($this->_list !== null) {
         return $this->_list;
     }
     $cache = $this->getCache();
     $cId = get_class($this) . '_list';
     if (!$cache || ($this->_list = $cache->get($cId)) === false) {
         $this->_list = [];
         $res = \CIblockElement::GetList(['SORT' => 'ASC', 'NAME' => 'ASC'], $this->filter, false, false, $this->select);
         $iblocksIds = [];
         while ($ob = $res->Fetch()) {
             $arItem = [];
             foreach ($this->select as $field) {
                 if (isset($ob[$field])) {
                     $arItem[$field] = $ob[$field];
                 } elseif (isset($ob[$field . '_VALUE'])) {
                     $arItem[$field] = $ob[$field . '_VALUE'];
                 }
             }
             $this->_list[$ob['ID']] = $arItem;
         }
         if ($cache) {
             $cache->set($cId, $this->_list, $this->cacheTime);
         }
     }
     return $this->_list;
 }
예제 #3
0
 protected function addElement($arElement)
 {
     $this->prepareElementFields($arElement, true);
     if (strlen($arElement['CODE']) > 0) {
         $arSelect = array("ID");
         $arFilter = array("IBLOCK_ID" => $arElement['IBLOCK_ID'], "CODE" => $arElement['CODE']);
         $res = \CIBlockElement::GetList(array(), $arFilter, false, array("nPageSize" => 1), $arSelect);
         if ($ob = $res->GetNextElement()) {
             $arFields = $ob->GetFields();
             //TODO: Обновлять свойства элемента
             $el = new \CIblockElement();
             if ($el->Update($arFields['ID'], $arElement)) {
                 $this->addMessage('Элемент ' . $arElement['CODE'] . ' обновлен.');
             } else {
                 $this->addMessage($el->LAST_ERROR);
             }
             unset($el);
             return $arFields['ID'];
         }
     }
     $el = new \CIblockElement();
     if ($iNewId = $el->Add($arElement)) {
         $this->addMessage('Новый элемент ' . $iNewId . ' добавлен.', true);
     } else {
         $this->addMessage($el->LAST_ERROR);
     }
     unset($el);
     return $iNewId;
 }
예제 #4
0
 function WF_SetMove($NEW_ID, $OLD_ID = 0)
 {
     if (CModule::IncludeModule("workflow")) {
         $err_mess = "FILE: " . __FILE__ . "<br>LINE: ";
         global $DB, $USER;
         $USER_ID = is_object($USER) ? intval($USER->GetID()) : 0;
         $NEW = "Y";
         $OLD_ID = intval($OLD_ID);
         $NEW_ID = intval($NEW_ID);
         if ($OLD_ID > 0) {
             $old = $DB->Query("SELECT WF_STATUS_ID FROM b_iblock_element WHERE ID = " . $OLD_ID, false, $err_mess . __LINE__);
             if ($old_r = $old->Fetch()) {
                 $NEW = "N";
             }
         }
         CTimeZone::Disable();
         $new = CIBlockElement::GetByID($NEW_ID);
         CTimeZone::Enable();
         if ($new_r = $new->Fetch()) {
             $NEW_STATUS_ID = intval($new_r["WF_STATUS_ID"]);
             $OLD_STATUS_ID = intval($old_r["WF_STATUS_ID"]);
             $PARENT_ID = intval($new_r["WF_PARENT_ELEMENT_ID"]);
             CTimeZone::Disable();
             $parent = CIBlockElement::GetByID($PARENT_ID);
             CTimeZone::Enable();
             if ($parent_r = $parent->Fetch()) {
                 $arFields = array("TIMESTAMP_X" => $DB->GetNowFunction(), "IBLOCK_ELEMENT_ID" => $PARENT_ID, "OLD_STATUS_ID" => $OLD_STATUS_ID, "STATUS_ID" => $NEW_STATUS_ID, "USER_ID" => $USER_ID);
                 $DB->Insert("b_workflow_move", $arFields, $err_mess . __LINE__);
                 if ($NEW_STATUS_ID != $OLD_STATUS_ID) {
                     // Get creator Email
                     $strSql = "SELECT EMAIL FROM b_user WHERE ID = " . intval($parent_r["CREATED_BY"]);
                     $rs = $DB->Query($strSql, false, $err_mess . __LINE__);
                     if ($ar = $rs->Fetch()) {
                         $parent_r["CREATED_BY_EMAIL"] = $ar["EMAIL"];
                     } else {
                         $parent_r["CREATED_BY_EMAIL"] = "";
                     }
                     // gather email of the workflow admins
                     $WORKFLOW_ADMIN_GROUP_ID = intval(COption::GetOptionString("workflow", "WORKFLOW_ADMIN_GROUP_ID"));
                     $strSql = "\n\t\t\t\t\t\t\tSELECT U.ID, U.EMAIL\n\t\t\t\t\t\t\tFROM b_user U, b_user_group UG\n\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\tUG.GROUP_ID=" . $WORKFLOW_ADMIN_GROUP_ID . "\n\t\t\t\t\t\t\t\tAND U.ID = UG.USER_ID\n\t\t\t\t\t\t\t\tAND U.ACTIVE='Y'\n\t\t\t\t\t\t";
                     $rs = $DB->Query($strSql, false, $err_mess . __LINE__);
                     $arAdmin = array();
                     while ($ar = $rs->Fetch()) {
                         $arAdmin[$ar["ID"]] = $ar["EMAIL"];
                     }
                     // gather email for BCC
                     $arBCC = array();
                     // gather all who changed doc in its current status
                     $strSql = "\n\t\t\t\t\t\t\tSELECT U.EMAIL\n\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\tb_workflow_move WM\n\t\t\t\t\t\t\t\tINNER JOIN b_user U on U.ID = WM.USER_ID\n\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\tIBLOCK_ELEMENT_ID = " . $PARENT_ID . "\n\t\t\t\t\t\t\t\tAND OLD_STATUS_ID = " . $NEW_STATUS_ID . "\n\t\t\t\t\t\t";
                     $rs = $DB->Query($strSql, false, $err_mess . __LINE__);
                     while ($ar = $rs->Fetch()) {
                         $arBCC[$ar["EMAIL"]] = $ar["EMAIL"];
                     }
                     // gather all editors
                     // in case status have notifier flag
                     //First those who have write permissions on iblock
                     $strSql = "\n\t\t\t\t\t\t\tSELECT U.EMAIL\n\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\tb_workflow_status S\n\t\t\t\t\t\t\t\tINNER JOIN b_workflow_status2group SG on SG.STATUS_ID = S.ID\n\t\t\t\t\t\t\t\tINNER JOIN b_iblock_group IG on IG.GROUP_ID = SG.GROUP_ID\n\t\t\t\t\t\t\t\tINNER JOIN b_user_group UG on UG.GROUP_ID = IG.GROUP_ID\n\t\t\t\t\t\t\t\tINNER JOIN b_user U on U.ID = UG.USER_ID\n\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\tS.ID = " . $NEW_STATUS_ID . "\n\t\t\t\t\t\t\t\tAND S.NOTIFY = 'Y'\n\t\t\t\t\t\t\t\tAND IG.IBLOCK_ID = " . intval($new_r["IBLOCK_ID"]) . "\n\t\t\t\t\t\t\t\tAND IG.PERMISSION >= 'U'\n\t\t\t\t\t\t\t\tAND SG.PERMISSION_TYPE = '2'\n\t\t\t\t\t\t\t\tAND U.ACTIVE = 'Y'\n\t\t\t\t\t\t";
                     $rs = $DB->Query($strSql, false, $err_mess . __LINE__);
                     while ($ar = $rs->Fetch()) {
                         $arBCC[$ar["EMAIL"]] = $ar["EMAIL"];
                     }
                     //Second admins if they in PERMISSION_TYPE = 2 list
                     //because they have all the rights
                     $strSql = "\n\t\t\t\t\t\t\tSELECT U.EMAIL\n\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\tb_workflow_status S\n\t\t\t\t\t\t\t\tINNER JOIN b_workflow_status2group SG on SG.STATUS_ID = S.ID\n\t\t\t\t\t\t\t\tINNER JOIN b_user_group UG on UG.GROUP_ID = SG.GROUP_ID\n\t\t\t\t\t\t\t\tINNER JOIN b_user U on U.ID = UG.USER_ID\n\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\tS.ID = " . $NEW_STATUS_ID . "\n\t\t\t\t\t\t\t\tAND S.NOTIFY = 'Y'\n\t\t\t\t\t\t\t\tAND SG.GROUP_ID = 1\n\t\t\t\t\t\t\t\tAND SG.PERMISSION_TYPE = '2'\n\t\t\t\t\t\t\t\tAND U.ACTIVE = 'Y'\n\t\t\t\t\t\t";
                     $rs = $DB->Query($strSql, false, $err_mess . __LINE__);
                     while ($ar = $rs->Fetch()) {
                         $arBCC[$ar["EMAIL"]] = $ar["EMAIL"];
                     }
                     $iblock_r = CIBlock::GetArrayByID($new_r["IBLOCK_ID"]);
                     $iblock_r["LID"] = array();
                     $rsIBlockSite = $DB->Query("SELECT SITE_ID FROM b_iblock_site WHERE IBLOCK_ID= " . intval($new_r["IBLOCK_ID"]));
                     while ($arIBlockSite = $rsIBlockSite->Fetch()) {
                         $iblock_r["LID"][] = $arIBlockSite["SITE_ID"];
                     }
                     if (array_key_exists($new_r["MODIFIED_BY"], $arAdmin)) {
                         $new_r["USER_NAME"] .= " (Admin)";
                     }
                     // it is not new doc
                     if ($NEW != "Y") {
                         if (array_key_exists($parent_r["CREATED_BY"], $arAdmin)) {
                             $parent_r["CREATED_USER_NAME"] .= " (Admin)";
                         }
                         // send change notification
                         $arEventFields = array("ID" => $PARENT_ID, "IBLOCK_ID" => $new_r["IBLOCK_ID"], "IBLOCK_TYPE" => $iblock_r["IBLOCK_TYPE_ID"], "ADMIN_EMAIL" => implode(",", $arAdmin), "BCC" => implode(",", $arBCC), "PREV_STATUS_ID" => $OLD_STATUS_ID, "PREV_STATUS_TITLE" => CIblockElement::WF_GetStatusTitle($OLD_STATUS_ID), "STATUS_ID" => $NEW_STATUS_ID, "STATUS_TITLE" => CIblockElement::WF_GetStatusTitle($NEW_STATUS_ID), "DATE_CREATE" => $parent_r["DATE_CREATE"], "CREATED_BY_ID" => $parent_r["CREATED_BY"], "CREATED_BY_NAME" => $parent_r["CREATED_USER_NAME"], "CREATED_BY_EMAIL" => $parent_r["CREATED_BY_EMAIL"], "DATE_MODIFY" => $new_r["TIMESTAMP_X"], "MODIFIED_BY_ID" => $new_r["MODIFIED_BY"], "MODIFIED_BY_NAME" => $new_r["USER_NAME"], "NAME" => $new_r["NAME"], "SECTION_ID" => $new_r["IBLOCK_SECTION_ID"], "PREVIEW_HTML" => $new_r["PREVIEW_TEXT_TYPE"] == "html" ? $new_r["PREVIEW_TEXT"] : TxtToHtml($new_r["PREVIEW_TEXT"]), "PREVIEW_TEXT" => $new_r["PREVIEW_TEXT_TYPE"] == "text" ? $new_r["PREVIEW_TEXT"] : HtmlToTxt($new_r["PREVIEW_TEXT"]), "PREVIEW" => $new_r["PREVIEW_TEXT"], "PREVIEW_TYPE" => $new_r["PREVIEW_TEXT_TYPE"], "DETAIL_HTML" => $new_r["DETAIL_TEXT_TYPE"] == "html" ? $new_r["DETAIL_TEXT"] : TxtToHtml($new_r["DETAIL_TEXT"]), "DETAIL_TEXT" => $new_r["DETAIL_TEXT_TYPE"] == "text" ? $new_r["DETAIL_TEXT"] : HtmlToTxt($new_r["DETAIL_TEXT"]), "DETAIL" => $new_r["DETAIL_TEXT"], "DETAIL_TYPE" => $new_r["DETAIL_TEXT_TYPE"], "COMMENTS" => $new_r["WF_COMMENTS"]);
                         CEvent::Send("WF_IBLOCK_STATUS_CHANGE", $iblock_r["LID"], $arEventFields);
                     } else {
                         // it was new one
                         $arEventFields = array("ID" => $PARENT_ID, "IBLOCK_ID" => $new_r["IBLOCK_ID"], "IBLOCK_TYPE" => $iblock_r["IBLOCK_TYPE_ID"], "ADMIN_EMAIL" => implode(",", $arAdmin), "BCC" => implode(",", $arBCC), "STATUS_ID" => $NEW_STATUS_ID, "STATUS_TITLE" => CIblockElement::WF_GetStatusTitle($NEW_STATUS_ID), "DATE_CREATE" => $parent_r["DATE_CREATE"], "CREATED_BY_ID" => $parent_r["CREATED_BY"], "CREATED_BY_NAME" => $parent_r["CREATED_USER_NAME"], "CREATED_BY_EMAIL" => $parent_r["CREATED_BY_EMAIL"], "NAME" => $new_r["NAME"], "PREVIEW_HTML" => $new_r["PREVIEW_TEXT_TYPE"] == "html" ? $new_r["PREVIEW_TEXT"] : TxtToHtml($new_r["PREVIEW_TEXT"]), "PREVIEW_TEXT" => $new_r["PREVIEW_TEXT_TYPE"] == "text" ? $new_r["PREVIEW_TEXT"] : HtmlToTxt($new_r["PREVIEW_TEXT"]), "PREVIEW" => $new_r["PREVIEW_TEXT"], "PREVIEW_TYPE" => $new_r["PREVIEW_TEXT_TYPE"], "SECTION_ID" => $new_r["IBLOCK_SECTION_ID"], "DETAIL_HTML" => $new_r["DETAIL_TEXT_TYPE"] == "html" ? $new_r["DETAIL_TEXT"] : TxtToHtml($new_r["DETAIL_TEXT"]), "DETAIL_TEXT" => $new_r["DETAIL_TEXT_TYPE"] == "text" ? $new_r["DETAIL_TEXT"] : HtmlToTxt($new_r["DETAIL_TEXT"]), "DETAIL" => $new_r["DETAIL_TEXT"], "DETAIL_TYPE" => $new_r["DETAIL_TEXT_TYPE"], "COMMENTS" => $new_r["WF_COMMENTS"]);
                         CEvent::Send("WF_NEW_IBLOCK_ELEMENT", $iblock_r["LID"], $arEventFields);
                     }
                 }
             }
         }
     }
 }
예제 #5
0
 function CleanUpHistory()
 {
     $err_mess = CWorkflow::err_mess() . "<br>Function: CleanUpHistory<br>Line: ";
     global $DB;
     $HISTORY_DAYS = intval(COption::GetOptionString("workflow", "HISTORY_DAYS", "-1"));
     if ($HISTORY_DAYS >= 0) {
         $strSql = "\n\t\t\t\tDELETE FROM b_workflow_log\n\t\t\t\tWHERE\n\t\t\t\t\tto_days(now())-to_days(TIMESTAMP_X)>={$HISTORY_DAYS}\n\t\t\t\t";
         $DB->Query($strSql, false, $err_mess . __LINE__);
     }
     if (CModule::IncludeModule("iblock")) {
         CIblockElement::WF_CleanUpHistory();
     }
 }
예제 #6
0
$arEditLinkParams = array(
	"find_section_section" => intval($find_section_section)
);
if ($bAutocomplete)
{
	$arEditLinkParams['lookup'] = $strLookup;
}

$tabControl->Begin(array(
	"FORM_ACTION" => "/bitrix/admin/".CIBlock::GetAdminElementEditLink($IBLOCK_ID, null, $arEditLinkParams)
));

$tabControl->BeginNextFormTab();
	if($ID > 0 && !$bCopy)
	{
		$p = CIblockElement::GetByID($ID);
		$pr = $p->ExtractFields("prn_");
	}
	else
	{
		$pr = array();
	}
$tabControl->AddCheckBoxField("ACTIVE", GetMessage("IBLOCK_FIELD_ACTIVE").":", false, array("Y","N"), $str_ACTIVE=="Y");
$tabControl->BeginCustomField("ACTIVE_FROM", GetMessage("IBLOCK_FIELD_ACTIVE_PERIOD_FROM"), $arIBlock["FIELDS"]["ACTIVE_FROM"]["IS_REQUIRED"] === "Y");
?>
	<tr id="tr_ACTIVE_FROM">
		<td><?echo $tabControl->GetCustomLabelHTML()?>:</td>
		<td><?echo CAdminCalendar::CalendarDate("ACTIVE_FROM", $str_ACTIVE_FROM, 19, true)?></td>
	</tr>
<?
$tabControl->EndCustomField("ACTIVE_FROM", '<input type="hidden" id="ACTIVE_FROM" name="ACTIVE_FROM" value="'.$str_ACTIVE_FROM.'">');
}
$IBLOCK_ID = intval($IBLOCK_ID);
$ELEMENT_ID = intval($ELEMENT_ID);
$find_section_section = intval($find_section_section);
$iblock = CIBlock::GetByID($IBLOCK_ID);
if ($arIBlock = $iblock->Fetch()) {
    if (!CIBlockRights::UserHasRightTo($IBLOCK_ID, $IBLOCK_ID, "iblock_admin_display")) {
        $APPLICATION->SetTitle(GetMessage("IBLOCK_ADM_HISTORY_TITLE", array("#ID#" => $ELEMENT_ID)));
        require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php";
        echo ShowError(GetMessage("IBLOCK_ADM_HISTORY_BAD_IBLOCK"));
        require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php";
        die;
    }
}
$LAST_ID = CIBlockElement::WF_GetLast($ELEMENT_ID);
$z = CIblockElement::GetByID($LAST_ID);
if (!($zr = $z->Fetch())) {
    $APPLICATION->SetTitle(GetMessage("IBLOCK_ADM_HISTORY_TITLE", array("#ID#" => $ELEMENT_ID)));
    require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php";
    ?>
<a href="/bitrix/admin/iblock_admin.php?type=<?php 
    echo htmlspecialcharsbx($type);
    ?>
&amp;lang=<?php 
    echo LANG;
    ?>
"><?php 
    echo htmlspecialcharsex($arIBTYPE["NAME"]);
    ?>
</a> - <a href="<?php 
    echo htmlspecialcharsbx(CIBlock::GetAdminElementListLink($IBLOCK_ID, array()));
예제 #8
0
 public static function convertToDB($property, $value)
 {
     $listId = self::prepareValue($value);
     if (empty($property['ELEMENT_ID'])) {
         $value['VALUE'] = implode(',', $listId);
         return $value;
     }
     global $USER;
     if ($USER instanceof \CUser && $USER->getId()) {
         $userId = $USER->getId();
     } else {
         $userId = SystemUser::SYSTEM_USER_ID;
     }
     if (isset($value['DESCRIPTION']) && $value['DESCRIPTION'] == 'workflow') {
         $workFlow = true;
     } else {
         $workFlow = false;
     }
     $value['VALUE'] = array();
     $userFieldManager = Driver::getInstance()->getUserFieldManager();
     list($connectorClass, $moduleId) = $userFieldManager->getConnectorDataByEntityType("iblock_element");
     foreach ($listId as $id) {
         list($type, $realId) = FileUserType::detectType($id);
         if ($type == FileUserType::TYPE_NEW_OBJECT) {
             $errorCollection = new ErrorCollection();
             $fileModel = File::loadById($realId, array('STORAGE'));
             if (!$fileModel) {
                 continue;
             }
             if ($workFlow) {
                 $canUpdate = true;
             } else {
                 $securityContext = $fileModel->getStorage()->getSecurityContext($userId);
                 if (!$fileModel->canRead($securityContext)) {
                     continue;
                 }
                 $canUpdate = $fileModel->canUpdate($securityContext);
             }
             $attachedModel = AttachedObject::add(array('MODULE_ID' => $moduleId, 'OBJECT_ID' => $fileModel->getId(), 'ENTITY_ID' => $property['ELEMENT_ID'], 'ENTITY_TYPE' => $connectorClass, 'IS_EDITABLE' => (int) $canUpdate, 'ALLOW_EDIT' => (int) ($canUpdate && (int) Application::getInstance()->getContext()->getRequest()->getPost('DISK_FILE_' . $property['IBLOCK_ID'] . '_DISK_ATTACHED_OBJECT_ALLOW_EDIT')), 'CREATED_BY' => $userId), $errorCollection);
             if (!$attachedModel || $errorCollection->hasErrors()) {
                 continue;
             }
             $value['VALUE'][] = $attachedModel->getId();
         } else {
             $value['VALUE'][] = $realId;
         }
     }
     $query = \CIblockElement::getPropertyValues($property['IBLOCK_ID'], array('ID' => $property['ELEMENT_ID']));
     $oldPropertyValues = array();
     if ($propertyValues = $query->fetch()) {
         if (is_array($propertyValues[$property['ID']]) && !empty($propertyValues[$property['ID']])) {
             $oldValues = current($propertyValues[$property['ID']]);
         } else {
             $oldValues = $propertyValues[$property['ID']];
         }
         if (!empty($oldValues)) {
             $oldPropertyValues = explode(',', $oldValues);
         }
     }
     $attachedIdForDelete = array_diff($oldPropertyValues, $value['VALUE']);
     if (!empty($attachedIdForDelete)) {
         foreach ($attachedIdForDelete as $idAttached) {
             list($type, $realId) = FileUserType::detectType($idAttached);
             if ($type == FileUserType::TYPE_ALREADY_ATTACHED) {
                 $attachedModel = AttachedObject::loadById($realId);
                 if (!$attachedModel) {
                     continue;
                 }
                 if ($userFieldManager->belongsToEntity($attachedModel, "iblock_element", $property['ELEMENT_ID'])) {
                     $attachedModel->delete();
                 }
             }
         }
     }
     $value['VALUE'] = implode(',', $value['VALUE']);
     return $value;
 }
예제 #9
0
 $viewCount = 0;
 while ($arViews = $dbViewsList->Fetch()) {
     $arViewsData[$viewCount] = $arViews;
     $elementID = (int) $arViews["PRODUCT_ID"];
     if (!isset($mapViewByProduct[$elementID])) {
         $mapViewByProduct[$elementID] = array();
     }
     $mapViewByProduct[$elementID][] = $viewCount;
     $arProductId[$arViews["PRODUCT_ID"]] = $arViews["PRODUCT_ID"];
     $arCatalogProductId[] = $arViews["PRODUCT_ID"];
     $viewCount++;
 }
 unset($arViews, $dbViewsList, $viewCount);
 // Get product name
 if (!empty($arCatalogProductId)) {
     $elementIterator = CIblockElement::GetList(array(), array("ID" => $arCatalogProductId), false, false, array('ID', 'IBLOCK_ID', 'DETAIL_PAGE_URL'));
     while ($element = $elementIterator->GetNext()) {
         $elementID = (int) $element['ID'];
         if (isset($mapViewByProduct[$elementID]) && !empty($mapViewByProduct[$elementID])) {
             foreach ($mapViewByProduct[$elementID] as &$viewCount) {
                 $arViewsData[$viewCount]['DETAIL_PAGE_URL'] = $element['~DETAIL_PAGE_URL'];
             }
             unset($viewCount);
         }
     }
     unset($element, $elementIterator);
 }
 // collect iblock info about all products in the static class member. Will be used in the CSaleProduct::GetProductSku
 if (!empty($arProductId)) {
     CSaleProduct::GetProductListIblockInfo($arProductId);
 }