403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/catalog/admin/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/catalog/admin/cat_store_document_list.php
<?php

use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Catalog;
use Bitrix\Catalog\Access\ActionDictionary;
use Bitrix\Catalog\Access\AccessController;

require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/catalog/prolog.php");
global $APPLICATION;
global $DB;
global $USER;

Loc::loadMessages(__FILE__);

/** @global CAdminPage $adminPage */
global $adminPage;
/** @global CAdminSidePanelHelper $adminSidePanelHelper */
global $adminSidePanelHelper;

$publicMode = $adminPage->publicMode;
$selfFolderUrl = $adminPage->getSelfFolderUrl();

Loader::includeModule('catalog');
if (!AccessController::getCurrent()->check(ActionDictionary::ACTION_STORE_VIEW))
{
	$APPLICATION->AuthForm(Loc::getMessage('ACCESS_DENIED'));
}

if (
	!$publicMode
	&& Loader::includeModule('sale')
	&& Catalog\v2\Contractor\Provider\Manager::isActiveProviderExists()
)
{
	$APPLICATION->SetTitle(Loc::getMessage("CAT_DOCS_MSGVER_1"));
	require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
	$APPLICATION->IncludeComponent("bitrix:sale.admin.page.stub", "");
	require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
	die();
}

if($ex = $APPLICATION->GetException())
{
	require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");

	$strError = $ex->GetString();
	ShowError($strError);

	require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
	die();
}

$sTableID = "b_catalog_store_docs";

$oSort = new CAdminUiSorting($sTableID, "DATE_MODIFY", "DESC");
$lAdmin = new CAdminUiList($sTableID, $oSort);

$by = mb_strtoupper($oSort->getField());
$order = mb_strtoupper($oSort->getOrder());

$errorMessage = "";

$ID = (int)($_REQUEST['ID'] ?? 0);

$userId = $USER->GetID();

/** For a given contractor ID, issues generated title.
 * @param $contractorId
 * @return int
 */
function getContractorTitle($contractorId)
{
	static $dbContractors = '';
	static $arContractors = array();
	$contractorId = $contractorTitle = intval($contractorId);

	if($dbContractors === '')
	{
		$dbContractors = CCatalogContractor::GetList(array());
		while($arContractor = $dbContractors -> Fetch())
			$arContractors[] = $arContractor;
	}

	foreach($arContractors as $arContractor)
	{
		if($arContractor["ID"] == $contractorId)
		{
			$contractorTitle = ($arContractor["PERSON_TYPE"] == CONTRACTOR_INDIVIDUAL) ? $arContractor["PERSON_NAME"] : $arContractor["COMPANY"]." (".$arContractor["PERSON_NAME"].")";
		}
	}
	return $contractorTitle;
}

/** For a given site ID, issues generated site title.
 * @param string|null $siteId
 * @return string
 */

function getSiteTitle(?string $siteId): string
{
	static $arSitesShop = null;

	$siteId = (string)$siteId;
	$siteTitle = $siteId;

	if ($arSitesShop === null)
	{
		$arSitesShop = [];
		$rsSites = CSite::GetList("id", "asc", ["ACTIVE" => "Y"]);
		while($arSite = $rsSites->GetNext())
		{
			$arSitesShop[] = [
				"ID" => $arSite["ID"],
				"NAME" => $arSite["NAME"],
			];
		}
		unset($rsSites);
	}

	foreach($arSitesShop as $arSite)
	{
		if($arSite["ID"] === $siteId)
		{
			$siteTitle = $arSite["NAME"]." (".$arSite["ID"].")";
		}
	}

	return $siteTitle;
}

$arSiteMenu = array();

$listDocType = Catalog\StoreDocumentTable::getTypeList(true);
foreach ($listDocType as $type => $title)
{
	$addUrl = $selfFolderUrl."cat_store_document_edit.php?lang=".LANGUAGE_ID."&DOCUMENT_TYPE=".$type;
	$addUrl = $adminSidePanelHelper->editUrlToPublicPage($addUrl);
	if ($publicMode)
	{
		$action = "BX.adminSidePanel.onOpenPage('".$addUrl."');";
	}
	else
	{
		$action = "window.location = '".$addUrl."';";
	}
	$arSiteMenu[] = array(
		"TEXT" => $title,
		"ACTION" => $action
	);
}

$aContext = array(
	array(
		"TEXT" => Loc::getMessage("CAT_DOC_ADD_MSGVER_1"),
		"ICON" => "btn_new",
		"TITLE" =>  Loc::getMessage("CAT_DOC_ADD_TITLE_MSGVER_1"),
		"DISABLE" => true,
		"MENU" => $arSiteMenu
	),
);

$lAdmin->setContextSettings(array("pagePath" => $selfFolderUrl."cat_store_document_list.php"));
$lAdmin->AddAdminContextMenu($aContext);

$listSite = array();
$sitesQueryObject = CSite::getList("sort", "asc", array("ACTIVE" => "Y"));
while ($site = $sitesQueryObject->fetch())
{
	$listSite[$site["LID"]] = "[".$site["LID"]."] ".$site["NAME"];
}
$listContractors = array();
$dbContractors = CCatalogContractor::getList(array());
while($arContractorRes = $dbContractors->fetch())
{
	$listContractors[$arContractorRes["ID"]] = getContractorTitle($arContractorRes["ID"]);
}

$statusList = Catalog\StoreDocumentTable::getStatusList();
$filterFields = [
	[
		"id" => "ID",
		"name" => "ID",
		"filterable" => "",
		"quickSearch" => ""
	],
	[
		"id" => "SITE_ID",
		"name" => Loc::getMessage("CAT_DOC_SITE_ID"),
		"type" => "list",
		"items" => $listSite,
		"filterable" => "",
		"default" => true
	],
	[
		"id" => "DOC_TYPE",
		"name" => Loc::getMessage("CAT_DOC_TYPE_MSGVER_1"),
		"type" => "list",
		"items" => $listDocType,
		"filterable" => ""
	],
	[
		"id" => "DATE_DOCUMENT",
		"name" => Loc::getMessage("CAT_DOC_DATE"),
		"type" => "date",
		"filterable" => ""
	],
	[
		"id" => "CONTRACTOR_ID",
		"name" => Loc::getMessage("CAT_DOC_CONTRACTOR"),
		"type" => "list",
		"items" => $listContractors,
		"filterable" => ""
	],
	[
		"id" => "STATUS",
		"name" => Loc::getMessage("CAT_DOC_STATUS"),
		"type" => "list",
		"items" => Catalog\StoreDocumentTable::getStatusList(),
		"filterable" => "",
	],
	[
		"id" => "PRODUCT",
		"name" => Loc::getMessage('CAT_DOC_PRODUCT'),
		"type" => "custom_entity",
		"selector" => ["type" => "product"],
	],
];

$arFilter = [];

$lAdmin->AddFilter($filterFields, $arFilter);
if (isset($arFilter['STATUS']))
{
	$statusFilter = Catalog\StoreDocumentTable::getOrmFilterByStatus($arFilter['STATUS']);
	unset($arFilter['STATUS']);
	if (!empty($statusFilter))
	{
		$arFilter = array_merge(
			$arFilter,
			$statusFilter
		);
	}
	unset($statusFilter);
}

$docsOrder = match ($by)
{
	'STATUS' => [
		'STATUS' => $order,
		'WAS_CANCELLED' => $order,
		'ID' => 'DESC',
	],
	default => [
		$by => $order,
		'ID' => 'DESC',
	],
};

$arID = $lAdmin->GroupAction();
if (!empty($arID) && is_array($arID))
{
	if ($lAdmin->IsGroupActionToAll())
	{
		$arID = array();
		$filteredProduct = 0;
		if (isset($arFilter['PRODUCT']))
		{
			$filteredProduct = (int)$arFilter['PRODUCT'];
			unset($arFilter['PRODUCT']);
		}
		$query = Catalog\StoreDocumentTable::query()
			->setFilter($arFilter)
			->setSelect(['ID']);
		if ($filteredProduct > 0)
		{
			$query->withProduct($filteredProduct);
		}
		while($arResult = $query->fetch())
		{
			$arID[] = $arResult['ID'];
		}
	}

	$action = $lAdmin->GetAction();
	$blockedList = array();
	$arID = array_filter($arID);
	if (!empty($arID))
	{
		if (
			$action === 'delete'
			|| $action === 'conduct'
			|| $action === 'cancellation'
		)
		{
			$filteredID = array();
			$subFilter = array('=ID' => $arID, 'STATUS' => ($_REQUEST['action'] == 'cancellation' ? 'Y' : 'N'));
			$docsIterator = CCatalogDocs::getList(array(), $subFilter, false, false, array('ID'));
			while ($oneDoc = $docsIterator->Fetch())
			{
				$key = array_search($oneDoc['ID'], $arID);
				if ($key !== false)
					unset($arID[$key]);
				$filteredID[] = (int)$oneDoc['ID'];
			}
			if (!empty($arID))
				$blockedList = $arID;
			$arID = $filteredID;
		}
	}

	if (!empty($arID))
	{
		foreach($arID as $ID)
		{
			switch($action)
			{
				case "delete":
					@set_time_limit(0);
					$DB->StartTransaction();
					if (!CCatalogDocs::delete($ID))
					{
						$DB->Rollback();

						if($ex = $APPLICATION->GetException())
							$lAdmin->AddGroupError($ex->GetString(), $ID);
						else
							$lAdmin->AddGroupError(Loc::getMessage("ERROR_DELETING_TYPE"), $ID);
					}
					else
					{
						$DB->Commit();
					}
					break;
				case "conduct":
					$DB->StartTransaction();
					$result = CCatalogDocs::conductDocument($ID, $userId);
					if($result)
						$DB->Commit();
					else
						$DB->Rollback();

					if($ex = $APPLICATION->GetException())
					{
						$strError = $ex->GetString();
						if(!empty($result) && is_array($result))
						{
							$strError .= CCatalogStoreControlUtil::showErrorProduct($result);
						}
						$lAdmin->AddGroupError($strError, $ID);
					}
					break;
				case "cancellation":
					$DB->StartTransaction();
					$result = CCatalogDocs::cancellationDocument($ID, $userId);
					if($result)
						$DB->Commit();
					else
						$DB->Rollback();

					if($ex = $APPLICATION->GetException())
					{
						$strError = $ex->GetString();
						if(!empty($result) && is_array($result))
						{
							$strError .= CCatalogStoreControlUtil::showErrorProduct($result);
						}
						$lAdmin->AddGroupError($strError, $ID);
					}
					break;
				case "copy":
					$arResult = array();
					$DB->StartTransaction();
					$dbDocument = CCatalogDocs::getList(array(), array("ID" => $ID), false, false, array("DOC_TYPE", "SITE_ID", "CONTRACTOR_ID", "CURRENCY", "TOTAL", "RESPONSIBLE_ID"));
					if($arDocument = $dbDocument->Fetch())
					{
						foreach($arDocument as $key => $value)
						{
							$arResult[$key] = $value;
						}
						$arResult["DATE_DOCUMENT"] = 'now';
						$arResult["CREATED_BY"] = $arResult["MODIFIED_BY"] = $USER->GetID();
						if (empty($arResult["RESPONSIBLE_ID"]))
						{
							$arResult["RESPONSIBLE_ID"] = $USER->GetID();
						}
						$dbDocumentElement = CCatalogStoreDocsElement::getList(
							array('ID' => 'ASC'),
							array("DOC_ID" => $ID),
							false,
							false,
							array("ID", "STORE_FROM", "STORE_TO", "ELEMENT_ID", "AMOUNT", "PURCHASING_PRICE", "IS_MULTIPLY_BARCODE")
						);
						while($arDocumentElement = $dbDocumentElement->Fetch())
						{
							$arElement = array();
							foreach($arDocumentElement as $key => $value)
							{
								if ($key == 'ID')
									continue;
								$arElement[$key] = $value;
							}
							if($arDocumentElement['IS_MULTIPLY_BARCODE'] == 'N')
							{
								$dbDocumentElementBarcode = CCatalogStoreDocsBarcode::getList(array(), array("DOC_ELEMENT_ID" => $arDocumentElement["ID"]), false, false, array("BARCODE"));
								while($arDocumentElementBarcode = $dbDocumentElementBarcode->Fetch())
								{
									$arElement["BARCODE"][] = $arDocumentElementBarcode["BARCODE"];
								}
							}

							$arResult["ELEMENT"][] = $arElement;
						}
					}
					$result = CCatalogDocs::add($arResult);
					if($result)
						$DB->Commit();
					else
						$DB->Rollback();

					if($ex = $APPLICATION->GetException())
					{
						$strError = $ex->GetString();
						$lAdmin->AddGroupError($strError, $ID);
					}
					break;
			}
		}
	}
	if (!empty($blockedList))
	{
		$strError = '';
		switch($action)
		{
			case 'delete':
				$strError = Loc::getMessage('CAT_DOC_GROUP_ERR_DELETE');
				break;
			case 'conduct':
				$strError = Loc::getMessage('CAT_DOC_GROUP_ERR_CONDUCT');
				break;
			case 'cancellation':
				$strError = Loc::getMessage('CAT_DOC_GROUP_ERR_CANCEL');
				break;
		}
		foreach ($blockedList as &$ID)
		{
			$lAdmin->AddGroupError(str_replace('#ID#', $ID, $strError), $ID);
		}
		unset($ID, $strError);
	}
	unset($blockedList);

	if ($lAdmin->hasGroupErrors())
	{
		$adminSidePanelHelper->sendJsonErrorResponse($lAdmin->getGroupErrors());
	}
	else
	{
		$adminSidePanelHelper->sendSuccessResponse();
	}
}

$headers = [];

$headers[] = [
	'id' => 'ID',
	'content' => 'ID',
	'sort' => 'ID',
	'default' => true,
];
$headers[] = [
	"id" => "DOC_TYPE",
	"content" => Loc::getMessage("CAT_DOC_TYPE_MSGVER_1"),
	"sort" => "DOC_TYPE",
	"default" => true,
];
$headers[] = [
	'id' => 'TITLE',
	'content' => Loc::getMessage('CAT_DOC_TITLE'),
	'sort' => 'TITLE',
	'default' => true,
];
$headers[] = [
	"id" => "STATUS",
	"content" => Loc::getMessage("CAT_DOC_STATUS"),
	"sort" => "STATUS",
	"default" => true,
];
$headers[] = [
	'id' => 'DOC_NUMBER',
	'content' => Loc::getMessage('CAT_DOC_DOC_NUMBER'),
	'sort' => 'DOC_NUMBER',
	'default' => true,
];
$headers[] = [
	"id" => "DATE_DOCUMENT",
	"content" => Loc::getMessage("CAT_DOC_DATE_DOCUMENT_EXT"),
	"sort" => "DATE_DOCUMENT",
	"default" => true,
];
$headers[] = [
	'id' => 'ITEMS_ORDER_DATE',
	'content' => Loc::getMessage('CAT_DOC_ITEMS_ORDER_DATE'),
	'sort' => 'ITEMS_ORDER_DATE',
	'default' => false,
];
$headers[] = [
	'id' => 'ITEMS_RECEIVED_DATE',
	'content' => Loc::getMessage('CAT_DOC_ITEMS_RECEIVED_DATE'),
	'sort' => 'ITEMS_RECEIVED_DATE',
	'default' => false,
];
$headers[] = [
	"id" => "CREATED_BY",
	"content" => Loc::getMessage("CAT_DOC_CREATOR"),
	"sort" => "CREATED_BY",
	"default" => true,
];
$headers[] = [
	"id" => "DATE_CREATE",
	"content" => Loc::getMessage("CAT_DOC_DATE_CREATE"),
	"sort" => "DATE_CREATE",
	"default" => false,
];
$headers[] = [
	"id" => "MODIFIED_BY",
	"content" => Loc::getMessage("CAT_DOC_MODIFIER"),
	"sort" => "MODIFIED_BY",
	"default" => true,
];
$headers[] = [
	"id" => "DATE_MODIFY",
	"content" => Loc::getMessage("CAT_DOC_DATE_MODIFY"),
	"sort" => "DATE_MODIFY",
	"default" => true,
];
$headers[] = [
	'id' => 'RESPONSIBLE_ID',
	'content' => Loc::getMessage('CAT_DOC_RESPONSIBLE_ID'),
	'sort' => 'RESPONSIBLE_ID',
	'default' => false,
];
$headers[] = [
	"id" => "CONTRACTOR_ID",
	"content" => Loc::getMessage("CAT_DOC_CONTRACTOR"),
	"sort" => "CONTRACTOR_ID",
	"default" => true,
];
$headers[] = [
	"id" => "SITE_ID",
	"content" => Loc::getMessage("CAT_DOC_SITE_ID"),
	"sort" => "SITE_ID",
	"default" => true,
];
$headers[] = [
	"id" => "CURRENCY",
	"content" => Loc::getMessage("CAT_DOC_CURRENCY"),
	"sort" => "CURRENCY",
	"default" => true,
];
$headers[] = [
	"id" => "TOTAL",
	"content" => Loc::getMessage("CAT_DOC_TOTAL"),
	"default" => true,
];
$headers[] = [
	"id" => "COMMENTARY",
	"content" => Loc::getMessage("CAT_DOC_COMMENT"),
	"default" => false,
];

$lAdmin->AddHeaders($headers);

$arSelectFieldsMap = [];
foreach ($headers as $item)
{
	$arSelectFieldsMap[$item['id']] = false;
}
unset($item, $headers);

$arSelectFields = $lAdmin->GetVisibleHeaderColumns();

$arSelectFieldsMap = array_merge($arSelectFieldsMap, array_fill_keys($arSelectFields, true));

if (in_array('TOTAL', $arSelectFields))
{
	$arSelectFields[] = 'CURRENCY';
}
if (in_array('TITLE', $arSelectFields))
{
	$arSelectFields[] = 'DATE_CREATE';
}
$arReqFileds = [
	'ID',
	'STATUS',
	'WAS_CANCELLED',
];
$arSelectFields = array_unique(array_merge($arSelectFields, $arReqFileds));

$arUserList = array();
$strNameFormat = CSite::GetNameFormat(true);
$arRows = array();

$showCancel = false;
$showConduct = false;
$showDelete = false;

$filteredProduct = 0;
if (isset($arFilter['PRODUCT']))
{
	$filteredProduct = (int)$arFilter['PRODUCT'];
	unset($arFilter['PRODUCT']);
}

$dbResultList = $query = Catalog\StoreDocumentTable::query()
	->setFilter($arFilter)
	->setOrder($docsOrder)
	->setSelect($arSelectFields);
if ($filteredProduct)
{
	$query->withProduct($filteredProduct);
}
$dbResultList = $dbResultList->exec();
$dbResultList = new CAdminUiResult($dbResultList, $sTableID);
$dbResultList->NavStart();
$lAdmin->SetNavigationParams($dbResultList, array("BASE_LINK" => $selfFolderUrl."cat_store_document_list.php"));

$arUserID = [];
while($arRes = $dbResultList->Fetch())
{
	$arRes['ID'] = (int)$arRes['ID'];
	if($arSelectFieldsMap['CREATED_BY'])
	{
		$arRes['CREATED_BY'] = (int)$arRes['CREATED_BY'];
		if($arRes['CREATED_BY'] > 0)
			$arUserID[$arRes['CREATED_BY']] = true;
	}
	if($arSelectFieldsMap['MODIFIED_BY'])
	{
		$arRes['MODIFIED_BY'] = (int)$arRes['MODIFIED_BY'];
		if($arRes['MODIFIED_BY'] > 0)
			$arUserID[$arRes['MODIFIED_BY']] = true;
	}

	$bAllowForEdit = true;
	$strForAction = "EDIT";

	if ($arRes['STATUS'] === 'Y')
	{
		$arRes['COMPILE_STATUS'] = Catalog\StoreDocumentTable::STATUS_CONDUCTED;
		$strForAction = "VIEW";
		$bAllowForEdit = false;
		$showCancel = true;
	}
	else
	{
		$arRes['COMPILE_STATUS'] = $arRes['WAS_CANCELLED'] === 'Y'
			? Catalog\StoreDocumentTable::STATUS_CANCELLED
			: Catalog\StoreDocumentTable::STATUS_DRAFT
		;
		$showConduct = true;
		$showDelete = true;
	}

	$arRows[$arRes['ID']] = $row = &$lAdmin->AddRow($arRes['ID'], $arRes, $selfFolderUrl."cat_store_document_edit.php?ID=".$arRes['ID']."&lang=".LANGUAGE_ID);
	$row->AddField("ID", $arRes['ID']);
	if($arSelectFieldsMap['DOC_TYPE'])
		$row->AddViewField('DOC_TYPE', $listDocType[$arRes['DOC_TYPE']]);
	if ($arSelectFieldsMap['STATUS'])
	{
		$row->AddViewField('STATUS', $statusList[$arRes['COMPILE_STATUS']]);
	}
	if ($arSelectFieldsMap['TITLE'])
	{
		$title = $arRes['TITLE'];
		$title .= '<div>' . Loc::getMessage(
			'CAT_DOC_TITLE_DOCUMENT_DATE',
			[
				'#DATE#' => FormatDateFromDB($arRes['DATE_CREATE'], 'SHORT'),
			]
		) . '</div>';
		$row->AddViewField('TITLE', $title);
	}
	if($arSelectFieldsMap['DATE_DOCUMENT'])
		$row->AddCalendarField('DATE_DOCUMENT', false);
	if($arSelectFieldsMap['DATE_CREATE'])
		$row->AddCalendarField('DATE_CREATE', false);
	if($arSelectFieldsMap['DATE_MODIFY'])
		$row->AddCalendarField('DATE_MODIFY', false);
	if($arSelectFieldsMap['CONTRACTOR_ID'])
	{
		$contractorTitle = '';
		if(0 < intval($arRes['CONTRACTOR_ID']))
		{
			$contractorEditUrl = $selfFolderUrl.'cat_contractor_edit.php?lang='.LANGUAGE_ID.'&ID='. $arRes['CONTRACTOR_ID'];
			$contractorEditUrl = $adminSidePanelHelper->editUrlToPublicPage($contractorEditUrl);
			$contractorTitle = '<a href="'.$contractorEditUrl.'">'.htmlspecialcharsbx(getContractorTitle($arRes['CONTRACTOR_ID'])).'</a>';
		}
		$row->AddViewField("CONTRACTOR_ID", $contractorTitle);
	}
	if($arSelectFieldsMap['SITE_ID'])
	{
		$row->AddViewField("SITE_ID", getSiteTitle($arRes['SITE_ID']));
	}

	if($arSelectFieldsMap['TOTAL'])
	{
		$f_TOTAL = ($arRes['CURRENCY']) ? CCurrencyLang::CurrencyFormat(
			doubleval($arRes['TOTAL']), $arRes['CURRENCY'], false) : '';

		$row->AddViewField("TOTAL", $f_TOTAL);
	}

	if($arSelectFieldsMap['COMMENTARY'])
	{
		$row->AddViewField("COMMENTARY", htmlspecialcharsbx($arRes["COMMENTARY"]));
	}


	$arActions = array();
	$editUrl = $selfFolderUrl."cat_store_document_edit.php?lang=".LANGUAGE_ID."&ID=".$arRes['ID'];
	$editUrl = $adminSidePanelHelper->editUrlToPublicPage($editUrl);
	$arActions[] = array(
		"ICON" => "edit",
		"TEXT" => Loc::getMessage("CAT_DOC_".$strForAction),
		"LINK" => $editUrl,
		"DEFAULT" => true
	);

	if ($bAllowForEdit)
	{
		$arActions[] = array(
			"ICON" => "pack",
			"TEXT" => Loc::getMessage("CAT_DOC_CONDUCT"),
			"ACTION" => $lAdmin->ActionDoGroup($arRes['ID'], "conduct")
		);
		$arActions[] = array(
			"ICON" => "copy",
			"TEXT" => Loc::getMessage("CAT_DOC_COPY"),
			"ACTION" => $lAdmin->ActionDoGroup($arRes['ID'], "copy")
		);
		$arActions[] = array(
			"ICON" => "delete",
			"TEXT" => Loc::getMessage("CAT_DOC_DELETE"),
			"ACTION" => "if(confirm('".CUtil::JSEscape(Loc::getMessage('CAT_DOC_DELETE_CONFIRM'))."')) ".
				$lAdmin->ActionDoGroup($arRes['ID'], "delete")
		);
	}
	else
	{
		$arActions[] = array(
			"ICON" => "unpack",
			"TEXT" => Loc::getMessage("CAT_DOC_CANCELLATION"),
			"ACTION" => $lAdmin->ActionDoGroup($arRes['ID'], "cancellation")
		);
		$arActions[] = array(
			"ICON" => "copy",
			"TEXT" => Loc::getMessage("CAT_DOC_COPY"),
			"ACTION" => $lAdmin->ActionDoGroup($arRes['ID'], "copy")
		);
	}

	$row->AddActions($arActions);
}
if(isset($row))
	unset($row);

if($arSelectFieldsMap['CREATED_BY'] || $arSelectFieldsMap['MODIFIED_BY'])
{
	if(!empty($arUserID))
	{
		$rsUsers = CUser::GetList(
			'ID',
			'ASC',
			array('ID' => implode(' | ', array_keys($arUserID))),
			array('FIELDS' => array('ID', 'LOGIN', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'EMAIL'))
		);
		while($arOneUser = $rsUsers->Fetch())
		{
			$arOneUser['ID'] = (int)$arOneUser['ID'];
			$urlToUser = $selfFolderUrl."user_edit.php?lang=".LANGUAGE_ID."&ID=".$arOneUser["ID"];
			if ($publicMode)
			{
				$urlToUser = $selfFolderUrl."sale_buyers_profile.php?USER_ID=".$arOneUser["ID"]."&lang=".LANGUAGE_ID;
				$urlToUser = $adminSidePanelHelper->editUrlToPublicPage($urlToUser);
			}
			$arUserList[$arOneUser['ID']] = '<a href="'.$urlToUser.'">'.CUser::FormatName($strNameFormat, $arOneUser).'</a>';
		}
	}
	foreach($arRows as &$row)
	{
		if($arSelectFieldsMap['CREATED_BY'])
		{
			$strCreatedBy = '';
			if($row->arRes['CREATED_BY'] > 0 && isset($arUserList[$row->arRes['CREATED_BY']]))
			{
				$strCreatedBy = $arUserList[$row->arRes['CREATED_BY']];
			}
			$row->AddViewField("CREATED_BY", $strCreatedBy);
		}
		if($arSelectFieldsMap['MODIFIED_BY'])
		{
			$strModifiedBy = '';
			if($row->arRes['MODIFIED_BY'] > 0 && isset($arUserList[$row->arRes['MODIFIED_BY']]))
			{
				$strModifiedBy = $arUserList[$row->arRes['MODIFIED_BY']];
			}
			$row->AddViewField("MODIFIED_BY", $strModifiedBy);
		}
	}
	if(isset($row))
		unset($row);
}

$actionList = array();
if ($showConduct)
	$actionList['conduct'] = Loc::getMessage('CAT_DOC_CONDUCT');
if ($showCancel)
	$actionList['cancellation'] = Loc::getMessage('CAT_DOC_CANCELLATION');
$actionList['copy'] = Loc::getMessage('CAT_DOC_COPY');
if ($showDelete)
	$actionList['delete'] = Loc::getMessage('MAIN_ADMIN_LIST_DELETE');
$lAdmin->AddGroupActionTable($actionList);

$lAdmin->CheckListMode();

$APPLICATION->SetTitle(Loc::getMessage("CAT_DOCS_MSGVER_1"));
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");

$lAdmin->DisplayFilter($filterFields);
$lAdmin->DisplayList();
if($errorMessage <> '')
	CAdminMessage::ShowMessage($errorMessage);

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");

Youez - 2016 - github.com/yon3zu
LinuXploit