%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/bitrix/www/bitrix/components/bitrix/lists.element.attached.crm/
Upload File :
Create Path :
Current File : /home/bitrix/www/bitrix/components/bitrix/lists.element.attached.crm/class.php

<? if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();

use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\SystemException;
use Bitrix\Lists\Field;

class ListsElementAttachedCrmComponent extends CBitrixComponent
{
	protected $singleMode = false;

	protected $entityIdWithPrefix;
	protected $gridAction;

	protected $listPropertyIdWithoutPrefix = array();
	protected $listElementData = array();
	protected $listElementEditPermission = array();

	protected $iblockId = 0;
	protected $listIblockId = array();
	protected $listIblockName = array();
	protected $listIblockElementId = array();
	protected $listIblockElementTemplateUrl = array();
	protected $listIblockSocnetGroupId = array();
	protected $listFields = array();
	protected $listFieldsValue = array();
	protected $listObject = array();
	protected $listIblockPermission = array();

	protected $properties = array();
	protected $selectedFields = array();

	protected $prefixGridId = 'lists_attached_crm_';
	protected $listGridId = array();
	protected $listGridOptions = array();
	protected $navigationGrid = array();
	protected $headerGrids = array();

	protected $rowGrids = array();
	protected $groupActionsGrids = array();

	protected $entityData = array();

	public function onIncludeComponentLang()
	{
		$this->includeComponentLang(basename(__FILE__));
		Loc::loadMessages(__FILE__);
	}

	protected function checkModules()
	{
		if(!Loader::includeModule('lists'))
		{
			throw new SystemException(Loc::getMessage('LEAC_MODULE_NOT_INSTALLED', array('MODULE_ID' => 'lists')));
		}
		if(!Loader::includeModule('crm'))
		{
			throw new SystemException(Loc::getMessage('LEAC_MODULE_NOT_INSTALLED', array('MODULE_ID' => 'crm')));
		}
	}

	public function onPrepareComponentParams($params)
	{
		if(!empty($_REQUEST['gridId']))
		{
			$params['GRID_ID'] = $_REQUEST['gridId'];
			if(!empty($_REQUEST['action_button_'.$_REQUEST['gridId']]))
				$params['ACTION'] = $_REQUEST['action_button_'.$_REQUEST['gridId']];
			if(!empty($_REQUEST['ID']))
				$params['ID_FOR_DELETE'] = (is_array($_REQUEST['ID'])) ? $_REQUEST['ID'] : array($_REQUEST['ID']);
		}
		if(!empty($_REQUEST['entityId']))
			$params['ENTITY_ID'] = $_REQUEST['entityId'];
		if(!empty($_REQUEST['entityType']))
			$params['ENTITY_TYPE'] = $_REQUEST['entityType'];
		
		return $params;
	}

	public function executeComponent()
	{
		try
		{
			$this->checkModules();
			$this->fillParams();

			$this->checkGridAction();

			$this->getElementIdByEntityId();

			$this->createListElementIdByPermission();

			$this->setGridId();
			$this->getGridOptions();

			$this->setSelectedFields();
			$this->getListElement();

			$this->setGridGroupActions();

			$this->getEntityData();

			$this->formatResult();
			$this->includeComponentTemplate();
		}
		catch (SystemException $exception)
		{
			ShowError($exception->getMessage());
		}
	}

	protected function fillParams()
	{
		if(empty($this->arParams['ENTITY_ID']) || empty($this->arParams['ENTITY_TYPE']))
		{
			throw new SystemException(Loc::getMessage('LEAC_ERROR_REQUIRED_PARAMETER'));
		}
		$this->entityIdWithPrefix = \CCrmOwnerTypeAbbr::resolveByTypeID(
				$this->arParams['ENTITY_TYPE']).'_'.$this->arParams['ENTITY_ID'];

		$this->arParams['ENTITY_TYPE_NAME'] = \CCrmOwnerTypeAbbr::resolveName(\CCrmOwnerTypeAbbr::resolveByTypeID(
			$this->arParams['ENTITY_TYPE']));

		if(!empty($this->arParams['IBLOCK_ID']))
		{
			$this->iblockId = intval($this->arParams['IBLOCK_ID']);
			$this->singleMode = true;
		}

		if(!empty($this->arParams['GRID_ID']))
		{
			$this->iblockId = intval(str_replace($this->prefixGridId, '', $this->arParams['GRID_ID']));

			if(!empty($this->arParams['ACTION']))
				$this->gridAction = $this->arParams['ACTION'];
		}

		$this->arParams['RAND_STRING'] = $this->randString();
		$this->arParams['JS_OBJECT'] = 'ListsElementAttachedCrm_'.$this->arParams['RAND_STRING'];

		if(!empty($this->arParams['LIST_ELEMENT_DATA']))
			$this->listElementData = $this->arParams['LIST_ELEMENT_DATA'];
	}

	protected function checkGridAction()
	{
		if(!empty($this->gridAction) && method_exists($this, 'performGridAction'.$this->gridAction))
		{
			$actionMethod = 'performGridAction'.$this->gridAction;
			$this->$actionMethod();
		}
	}

	protected function performGridActionDelete()
	{
		if(empty($this->arParams['ID_FOR_DELETE'])
			|| !$this->checkDeletePermission($this->iblockId,$this->arParams['ID_FOR_DELETE']))
			return;

		$newPropertyValues = array();
		$propertyValues = $this->getPropertyValues(
			$this->iblockId, array('ID' => $this->arParams['ID_FOR_DELETE'], 'SHOW_NEW' => 'Y'), array());
		foreach($propertyValues as $propertyData)
		{
			if(!isset($propertyData['IBLOCK_ELEMENT_ID']))
				continue;

			$elementId = $propertyData['IBLOCK_ELEMENT_ID'];
			foreach($propertyData as $propertyId => $propertyValue)
			{
				if($propertyId == 'IBLOCK_ELEMENT_ID')
					continue;
				if(is_array($propertyValue))
				{
					$keyForDelete = array_search($this->entityIdWithPrefix, $propertyValue);
					if($keyForDelete !== false)
					{
						unset($propertyValue[$keyForDelete]);
						$newPropertyValues[$elementId][$propertyId] = $propertyValue;
					}
					$keyForDelete = array_search($this->arParams['ENTITY_ID'], $propertyValue);
					if($keyForDelete !== false)
					{
						unset($propertyValue[$keyForDelete]);
						$newPropertyValues[$elementId][$propertyId] = $propertyValue;
					}
				}
				else
				{
					if($propertyValue == $this->entityIdWithPrefix)
					{
						$newPropertyValues[$elementId][$propertyId] = false;
					}
					elseif($propertyValue == $this->arParams['ENTITY_ID'])
					{
						$newPropertyValues[$elementId][$propertyId] = false;
					}
				}
			}
		}

		foreach($newPropertyValues as $elementId => $listPropertyData)
		{
			foreach($listPropertyData as $propertyId => $propertyValues)
			{
				$propertyObject = Bitrix\Iblock\PropertyTable::getList(array(
					'select' => array('USER_TYPE'),
					'filter' => array('IBLOCK_ID'=> $this->iblockId, 'ID' => $propertyId)
				));
				if($property = $propertyObject->fetch())
				{
					if($property['USER_TYPE'] == Bitrix\Crm\Integration\IBlockElementProperty::USER_TYPE)
						CIBlockElement::setPropertyValues($elementId, $this->iblockId, $propertyValues, $propertyId);
				}
			}
		}
	}

	protected function checkDeletePermission($iblockId, array $listElementId)
	{
		$iblockObject = Bitrix\Iblock\IblockTable::getList(array(
			'select' => array('IBLOCK_TYPE_ID', 'SOCNET_GROUP_ID'),
			'filter' => array('=ACTIVE' => 'Y', '=ID' => $iblockId)
		));
		if(!$iblock = $iblockObject->fetch())
			return false;

		global $USER;
		foreach($listElementId as $elementId)
		{
			$listsPerm = CListPermissions::checkAccess(
				$USER,
				$iblock['IBLOCK_TYPE_ID'],
				$iblockId,
				$iblock['SOCNET_GROUP_ID']
			);
			if($listsPerm < 0)
				return false;

			$isSocnetGroupClosed = false;
			if(intval($iblock['SOCNET_GROUP_ID']) > 0 && Loader::includeModule('socialnetwork'))
			{
				$sonetGroup = CSocNetGroup::getByID($iblock['SOCNET_GROUP_ID']);
				if (is_array($sonetGroup) && $sonetGroup['CLOSED'] == 'Y'
					&& !CSocNetUser::isCurrentUserModuleAdmin()
					&& ($sonetGroup['OWNER_ID'] != $USER->getID()
						|| COption::getOptionString('socialnetwork', 'work_with_closed_groups', 'N') != 'Y'))
				{
					$isSocnetGroupClosed = true;
				}
			}
			if(!$isSocnetGroupClosed && ($listsPerm >= CListPermissions::CAN_WRITE ||
				CIBlockElementRights::userHasRightTo($iblockId, $elementId, 'element_delete')))
			{
				return true;
			}
			else
			{
				return false;
			}
		}

		return true;
	}

	protected function getElementIdByEntityId()
	{
		$filter = array(
			'=ACTIVE' => 'Y',
			'=USER_TYPE' => Bitrix\Crm\Integration\IBlockElementProperty::USER_TYPE,
		);
		if($this->iblockId)
			$filter['=IBLOCK_ID'] = $this->iblockId;

		$listProperty = array();
		$propertyObject = Bitrix\Iblock\PropertyTable::getList(array(
			'select' => array('ID', 'IBLOCK_ID', 'USER_TYPE_SETTINGS'),
			'filter' => $filter
		));
		while($property = $propertyObject->fetch())
		{
			$property['USER_TYPE_SETTINGS'] = unserialize($property['USER_TYPE_SETTINGS']);
			if(is_array($property['USER_TYPE_SETTINGS']))
			{
				if(array_key_exists('VISIBLE', $property['USER_TYPE_SETTINGS']))
					unset($property['USER_TYPE_SETTINGS']['VISIBLE']);
				$tmpArray = array_filter($property['USER_TYPE_SETTINGS'], function($mark){
					return $mark == "Y";
				});
				if(count($tmpArray) == 1)
					$this->listPropertyIdWithoutPrefix[] = $property['ID'];
				if ($property['USER_TYPE_SETTINGS'][$this->arParams['ENTITY_TYPE_NAME']] == 'Y')
				{
					if(!is_array($listProperty[$property['IBLOCK_ID']]))
						$listProperty[$property['IBLOCK_ID']] = array();
					$listProperty[$property['IBLOCK_ID']][] = $property['ID'];
				}
			}
		}

		foreach($listProperty as $iblockId => $listPropertyId)
		{
			$iblockObject = Bitrix\Iblock\IblockTable::getList(array(
				'select' => array('NAME', 'IBLOCK_TYPE_ID', 'SOCNET_GROUP_ID'),
				'filter' => array('=ACTIVE' => 'Y', '=ID' => $iblockId)
			));
			if(!$iblock = $iblockObject->fetch())
				continue;

			$this->listIblockId[] = $iblockId;
			$this->listIblockSocnetGroupId[$iblockId] = $iblock['SOCNET_GROUP_ID'];
			$this->listIblockName[$iblockId] = $iblock['NAME'];
			$this->listElementData[$iblock['IBLOCK_TYPE_ID']][$iblockId] = array();

			$propertyValues = $this->getPropertyValues($iblockId, array(), array('ID' => $listPropertyId));
			foreach($propertyValues as $propertyValue)
			{
				foreach($listPropertyId as $propertyId)
				{
					if(!array_key_exists($propertyId, $propertyValue))
						continue;

					if(is_array($propertyValue[$propertyId]))
					{
						if(in_array($this->entityIdWithPrefix, $propertyValue[$propertyId]))
						{
							$this->listElementData[$iblock['IBLOCK_TYPE_ID']][$iblockId][] =
								intval($propertyValue['IBLOCK_ELEMENT_ID']);
						}
						elseif(in_array($propertyId, $this->listPropertyIdWithoutPrefix)
							&& in_array($this->arParams['ENTITY_ID'], $propertyValue[$propertyId]))
						{
							$this->listElementData[$iblock['IBLOCK_TYPE_ID']][$iblockId][] =
								intval($propertyValue['IBLOCK_ELEMENT_ID']);
						}
					}
					else
					{
						if($this->entityIdWithPrefix == $propertyValue[$propertyId])
						{
							$this->listElementData[$iblock['IBLOCK_TYPE_ID']][$iblockId][] =
								intval($propertyValue['IBLOCK_ELEMENT_ID']);
						}
						elseif(in_array($propertyId, $this->listPropertyIdWithoutPrefix)
							&& $propertyValue[$propertyId] == $this->arParams['ENTITY_ID'])
						{
							$this->listElementData[$iblock['IBLOCK_TYPE_ID']][$iblockId][] =
								intval($propertyValue['IBLOCK_ELEMENT_ID']);
						}
					}
				}
			}
		}
	}

	protected function createListElementIdByPermission()
	{
		if(empty($this->listElementData))
			return;

		global $USER;

		foreach($this->listElementData as $iblockTypeId => $iblock)
		{
			foreach($iblock as $iblockId => $listElementId)
			{
				$listsPerm = CListPermissions::checkAccess(
					$USER,
					$iblockTypeId,
					$iblockId,
					$this->listIblockSocnetGroupId[$iblockId]
				);
				if($listsPerm < 0)
					continue;

				$isSocnetGroupClosed = false;
				if(intval($this->listIblockSocnetGroupId[$iblockId]) > 0 && Loader::includeModule('socialnetwork'))
				{
					$sonetGroup = CSocNetGroup::getByID($this->listIblockSocnetGroupId[$iblockId]);
					if (is_array($sonetGroup) && $sonetGroup['CLOSED'] == 'Y'
						&& !CSocNetUser::isCurrentUserModuleAdmin()
						&& ($sonetGroup['OWNER_ID'] != $USER->getID()
							|| COption::getOptionString('socialnetwork', 'work_with_closed_groups', 'N') != 'Y'))
					{
						$isSocnetGroupClosed = true;
					}
				}

				$this->listIblockPermission[$iblockId]['EDIT'] = !$isSocnetGroupClosed &&
					($listsPerm >= CListPermissions::IS_ADMIN ||
						CIBlockRights::userHasRightTo($iblockId, $iblockId, 'iblock_edit'));

				$this->listIblockPermission[$iblockId]['ADD_ELEMENT'] = !$isSocnetGroupClosed &&
					($listsPerm > CListPermissions::CAN_READ ||
						CIBlockSectionRights::userHasRightTo($iblockId, 0, 'section_element_bind'));

				$this->listIblockPermission[$iblockId]['READ'] = !$isSocnetGroupClosed &&
					($listsPerm > CListPermissions::CAN_READ ||
						CIBlockSectionRights::userHasRightTo($iblockId, 0, 'element_read'));

				foreach($listElementId as $elementKey => $elementId)
				{
					if($listsPerm < CListPermissions::CAN_READ
						&& !CIBlockElementRights::userHasRightTo($iblockId, $elementId, 'element_read'))
						continue;
					
					$this->listIblockElementId[$iblockId][] = $elementId;

					if(!$isSocnetGroupClosed && ($listsPerm >= CListPermissions::CAN_WRITE ||
						CIBlockElementRights::userHasRightTo($iblockId, $elementId, 'element_edit')))
					{
						$this->listElementEditPermission[$elementId] = CListPermissions::CAN_WRITE;
					}
				}
			}
		}
	}

	protected function setGridId()
	{
		if(empty($this->listIblockId))
			return;

		foreach($this->listIblockId as $iblockId)
			$this->listGridId[$iblockId] = $this->prefixGridId.$iblockId;
	}

	protected function getGridOptions()
	{
		if(empty($this->listGridId))
			return;

		foreach($this->listGridId as $iblockId => $gridId)
		{
			$gridOptions = new Bitrix\Main\Grid\Options($gridId);
			$this->listGridOptions[$iblockId]['gridOptionsObject'] = $gridOptions;
			$this->listGridOptions[$iblockId]['visibleColumns'] = $gridOptions->getVisibleColumns();
			$this->listGridOptions[$iblockId]['sorting'] = $gridOptions->getSorting(array(
				'sort' => array('NAME' => 'ASC')));
			$this->listGridOptions[$iblockId]['navParams'] = $gridOptions->getNavParams();
		}
	}

	protected function setSelectedFields()
	{
		if(empty($this->listIblockId))
			return;

		foreach($this->listIblockId as $iblockId)
		{
			$this->listObject[$iblockId] = new CList($iblockId);
			$this->listFields[$iblockId] = $this->listObject[$iblockId]->getFields();

			$this->listIblockElementTemplateUrl[$iblockId] = $this->listObject[$iblockId]->getUrlByIblockId($iblockId);

			$this->headerGrids[$iblockId][] = array(
				'id' => 'ID',
				'name' => 'ID',
				'default' => false,
				'sort' => 'ID'
			);

			$visibleColumns = $this->listGridOptions[$iblockId]['visibleColumns'];
			$this->selectedFields[$iblockId] = array('ID', 'IBLOCK_ID');
			foreach($this->listFields[$iblockId] as $fieldId => $field)
			{
				if(empty($visibleColumns) || in_array($fieldId, $visibleColumns))
				{
					if(substr($fieldId, 0, 9) == 'PROPERTY_')
						$this->properties[$iblockId][] = $fieldId;
					else
						$this->selectedFields[$iblockId][] = $fieldId;

					if($fieldId == 'CREATED_BY')
						$this->selectedFields[$iblockId][] = 'CREATED_USER_NAME';

					if($fieldId == 'MODIFIED_BY')
						$this->selectedFields[$iblockId][] = 'USER_NAME';
				}

				$this->setHeaderGrid($iblockId, $fieldId, $field);
			}
		}
	}

	protected function getListElement()
	{
		if(empty($this->listIblockElementId))
			return;

		foreach($this->listIblockElementId as $iblockId => $listElementId)
		{
			$queryObject = CIBlockElement::getList(
				$this->listGridOptions[$iblockId]['sorting']['sort'],
				array('=ACTIVE' => 'Y', '=ID' => $listElementId),
				false,
				$this->listGridOptions[$iblockId]['navParams'],
				$this->selectedFields[$iblockId]
			);
			while($elementObject = $queryObject->getNextElement())
			{
				$element = $elementObject->getFields();
				if(!is_array($element))
					continue;

				if(!is_array($this->listFieldsValue[$element['ID']]))
					$this->listFieldsValue[$element['ID']] = array();

				foreach($element as $fieldId => $fieldValue)
				{
					$this->listFieldsValue[$element['ID']][$fieldId] = $fieldValue;
				}

				if(!empty($this->properties[$iblockId]))
				{
					$propertyValues = $this->getPropertyValues($iblockId,
						array('ID' => $element['ID'], 'SHOW_NEW' => 'Y'));
					foreach(current($propertyValues) as $propertyId => $propertyValue)
					{
						if($propertyId == 'IBLOCK_ELEMENT_ID')
							continue;
						$this->listFieldsValue[$element['ID']]['PROPERTY_'.$propertyId] = $propertyValue;
					}
				}

				$this->setRowGrid($iblockId, $element['ID']);
			}
			$this->setNavigationGrid($iblockId, $queryObject);
		}
	}

	protected function setRowGrid($iblockId, $elementId)
	{
		if(empty($this->listFields))
			return;

		$columns = array(
			'ID' => intval($elementId)
		);

		$downloadFileUrl = '/bitrix/components/bitrix/lists.element.attached.crm/lazyload.ajax.php?&site='.SITE_ID.'&'.
			bitrix_sessid_get().'&list_id=#list_id#&element_id=#element_id#&field_id=#field_id#&file_id=#file_id#';

		foreach($this->listFields[$iblockId] as $fieldId => $field)
		{
			$valueKey = (substr($fieldId, 0, 9) == "PROPERTY_") ? $fieldId : "~".$fieldId;
			$field["ELEMENT_ID"] = $elementId;
			$field["FIELD_ID"] = $fieldId;
			$field['VALUE'] = $this->listFieldsValue[$elementId][$valueKey];
			$field["DOWNLOAD_FILE_URL"] = $downloadFileUrl;
			$columns[$fieldId] = Field::renderField($field);
		}

		$this->rowGrids[$iblockId][] = array(
			'id' => $elementId,
			'columns' => $columns,
			'actions' => $this->createRowActions($iblockId, $elementId),
		);
	}

	protected function setGridGroupActions()
	{
		$snippet = new Bitrix\Main\Grid\Panel\Snippet();
		foreach($this->listIblockId as $iblockId)
		{
			if(!$this->listIblockPermission[$iblockId]['EDIT'])
				continue;

			$this->groupActionsGrids[$iblockId] = array(
				'GROUPS' => array(
					array(
						'ITEMS' => array(
							$snippet->getRemoveButton(),
						)
					)
				)
			);
		}
	}

	protected function getEntityData()
	{
		$entityId = $this->arParams['ENTITY_ID'];
		$this->entityData = \CCrmEntitySelectorHelper::prepareEntityInfo($this->arParams['ENTITY_TYPE_NAME'], $entityId, array(
			'ENTITY_EDITOR_FORMAT' => true,
			'REQUIRE_REQUISITE_DATA' => false,
			'REQUIRE_MULTIFIELDS' => false,
			'NAME_TEMPLATE' => \Bitrix\Crm\Format\PersonNameFormatter::getFormat()
		));
		$this->entityData['defaultValue'] = $this->entityIdWithPrefix;
	}

	protected function formatResult()
	{
		$this->arResult['SINGLE_MODE'] = $this->singleMode;
		$this->arResult['IBLOCK_ID'] = $this->iblockId;
		$this->arResult['LIST_ELEMENT_TEMPLATE_URL'] = $this->listIblockElementTemplateUrl;
		$this->arResult['IBLOCK_PERMISSION'] = $this->listIblockPermission;

		$this->arResult['BUTTON_NAME_ELEMENT_ADD'] = CIBlock::getArrayByID($this->iblockId, 'ELEMENT_ADD');

		$this->arResult['RAND_STRING'] = $this->arParams['RAND_STRING'];
		$this->arResult['JS_OBJECT'] = $this->arParams['JS_OBJECT'];

		$this->arResult['ENTITY_ID'] = $this->arParams['ENTITY_ID'];
		$this->arResult['ENTITY_TYPE'] = $this->arParams['ENTITY_TYPE'];

		$this->arResult['LIST_IBLOCK_NAME'] = $this->listIblockName;

		$this->arResult['GRID_PREFIX_ID'] = $this->prefixGridId;
		$this->arResult['GRID_ID'] = $this->listGridId;
		$this->arResult['GRID_NAVIGATION'] = $this->navigationGrid;
		$this->arResult['GRID_HEADERS'] = $this->headerGrids;
		$this->arResult['GRID_ROWS'] = $this->rowGrids;
		$this->arResult['GRID_GROUP_ACTIONS'] = $this->groupActionsGrids;

		if(!empty($this->listFields[$this->iblockId]))
		{
			$this->arResult['FIELDS_FOR_SET_VALUE'] = array();
			foreach($this->listFields[$this->iblockId] as $fieldId => $fieldData)
			{
				if($fieldData['TYPE'] == 'S:ECrm' &&
					$fieldData['USER_TYPE_SETTINGS'][$this->arParams['ENTITY_TYPE_NAME']] == "Y")
				{
					$this->arResult['FIELDS_FOR_SET_VALUE'][$fieldId] = $this->entityData;
				}
			}
		}
	}

	protected function setHeaderGrid($iblockId, $fieldId, $field)
	{
		$this->headerGrids[$iblockId][] = array(
			'id' => $fieldId,
			'name' => $field['NAME'],
			'default' => true,
			'sort' => ($field['MULTIPLE'] == 'Y') ? '' : $fieldId,
		);
	}

	protected function setNavigationGrid($iblockId, CIBlockResult $navObject)
	{
		$this->navigationGrid[$iblockId]['TOTAL_ROWS_COUNT'] = $navObject->NavRecordCount;
		$this->navigationGrid[$iblockId]['ENABLE_NEXT_PAGE'] = ($navObject->PAGEN < $navObject->NavPageCount);
		$this->navigationGrid[$iblockId]['PAGE_SIZES'] = array(
			array('NAME' => '5', 'VALUE' => '5'),
			array('NAME' => '10', 'VALUE' => '10'),
			array('NAME' => '20', 'VALUE' => '20'),
			array('NAME' => '50', 'VALUE' => '50'),
			array('NAME' => '100', 'VALUE' => '100'),
			array('NAME' => '200', 'VALUE' => '200'),
			array('NAME' => '500', 'VALUE' => '500')
		);
		$dummy = null;
		$this->navigationGrid[$iblockId]['NAV_STRING'] = $navObject->getPageNavStringEx(
			$dummy, '', 'grid', true, null, $this->listGridOptions[$iblockId]['navParams']);
	}

	protected function createRowActions($iblockId, $elementId)
	{
		$actions = array();

		$url = str_replace(
			array('#list_id#', '#section_id#', '#element_id#', '#group_id#'),
			array($iblockId, 0, $elementId, $this->listIblockSocnetGroupId[$iblockId]),
			$this->listIblockElementTemplateUrl[$iblockId]
		);

		$canEdit = (array_key_exists($elementId, $this->listElementEditPermission)
			&& $this->listElementEditPermission[$elementId] == CListPermissions::CAN_WRITE);

		$actions[] = array(
			'text' => $canEdit ? Loc::getMessage('LEAC_GRID_ACTION_ELEMENT_EDIT')
				: Loc::getMessage('LEAC_GRID_ACTION_ELEMENT_SHOW'),
			'title' => Loc::getMessage('LEAC_GRID_ACTION_ELEMENT_SHOW_TITLE'),
			'onclick' => 'BX.Lists["'.$this->arParams['JS_OBJECT'].'"].showElement("'.
				$this->listGridId[$iblockId].'", "'.$elementId.'", "'.$url.'");'
		);
		if($canEdit)
		{
			$actions[] = array(
				'text' => Loc::getMessage('LEAC_GRID_ACTION_ELEMENT_UNBIND_DEL'),
				'title' => Loc::getMessage('LEAC_GRID_ACTION_ELEMENT_UNBIND_TITLE_DEL'),
				'onclick' => 'BX.Lists["'.$this->arParams['JS_OBJECT'].'"].unBind("'.
					$this->listGridId[$iblockId].'", "'.$elementId.'");'
			);
		}

		return $actions;
	}

	protected function getPropertyValues($iblockId, $elementFilter = array(), $propertyFilter = array())
	{
		$values = array();

		$propertyValuesObject = \CIblockElement::getPropertyValues($iblockId, $elementFilter, false, $propertyFilter);
		while($propertyValues = $propertyValuesObject->fetch())
			$values[] = $propertyValues;

		return $values;
	}
}

Zerion Mini Shell 1.0