Your IP : 18.118.0.175


Current Path : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/components/bitrix/lists.user.processes/
Upload File :
Current File : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/components/bitrix/lists.user.processes/class.php

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

use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;

Loc::loadMessages(__FILE__);

class ListsSelectElementComponent extends CBitrixComponent
{
	public function onPrepareComponentParams($arParams)
	{
		$arParams['ERROR'] = array();
		if (!Loader::includeModule('lists'))
		{
			$arParams['ERROR'][] = Loc::getMessage('CC_BLL_MODULE_NOT_INSTALLED');
			return $arParams;
		}
		if(!Loader::includeModule('bizproc') || !CBPRuntime::isFeatureEnabled())
		{
			$arParams['ERROR'][] = Loc::getMessage('CC_BLL_BIZPROC_MODULE_NOT_INSTALLED');
			return $arParams;
		}
		global $USER;
		$arParams['LIST_PERM'] = CListPermissions::CheckAccess(
			$USER,
			COption::GetOptionString("lists", "livefeed_iblock_type_id"),
			false
		);
		if($arParams['LIST_PERM'] < 0)
		{
			switch($arParams['LIST_PERM'])
			{
				case CListPermissions::WRONG_IBLOCK_TYPE:
					$arParams['ERROR'][] = Loc::getMessage("CC_BLL_WRONG_IBLOCK_TYPE");
					break;
				case CListPermissions::WRONG_IBLOCK:
					$arParams['ERROR'][] = Loc::getMessage("CC_BLL_WRONG_IBLOCK");
					break;
				case CListPermissions::LISTS_FOR_SONET_GROUP_DISABLED:
					$arParams['ERROR'][] = Loc::getMessage("CC_BLL_LISTS_FOR_SONET_GROUP_DISABLED");
					break;
				default:
					$arParams['ERROR'][] = Loc::getMessage("CC_BLL_UNKNOWN_ERROR");
					break;
			}
		}
		elseif($arParams['LIST_PERM'] <= CListPermissions::ACCESS_DENIED)
		{
			$arParams['ERROR'][] = Loc::getMessage("CC_BLL_ACCESS_DENIED");
		}

		$arParams['IBLOCK_TYPE_ID'] = COption::GetOptionString("lists", "livefeed_iblock_type_id");

		return $arParams;
	}

	public function executeComponent()
	{
		if($this->arParams['SET_TITLE'] == 'Y')
			$this->getApplication()->setTitle(Loc::getMessage('CC_BLL_TITLE'));

		if(!empty($this->arParams['ERROR']))
		{
			ShowError(array_shift($this->arParams['ERROR']));
			return;
		}

		$this->arResult['USER_ID'] = $this->arParams['USER_ID'];
		$this->arResult['GRID_ID'] = 'lists_processes';
		$this->arResult['FILTER_ID'] = 'lists_processes';

		$selectFields = array('ID', 'IBLOCK_TYPE_ID', 'IBLOCK_ID', 'NAME');

		$gridOptions = new CGridOptions($this->arResult['GRID_ID']);
		$gridSort = $gridOptions->getSorting(array('sort' => array('ID' => 'desc')));

		$this->arResult['HEADERS'] = array(
			array(
				"id" => "ID",
				"name" => "ID",
				"default" => false,
				"sort" => "ID"
			),
			array(
				'id' => 'DOCUMENT_NAME',
				'name' => Loc::getMessage('CC_BLL_DOCUMENT_NAME'),
				'default' => true, 'sort' => 'DOCUMENT_NAME'
			),
			array(
				'id' => 'COMMENTS',
				'name' => Loc::getMessage('CC_BLL_COMMENTS'),
				'default' => true,
				'sort' => '',
				'hideName' => true,
				'iconCls' => 'bp-comments-icon'
			),
			array(
				'id' => 'WORKFLOW_PROGRESS',
				'name' => Loc::getMessage('CC_BLL_WORKFLOW_PROGRESS'),
				'default' => true,
				'sort' => ''
			),
			array(
				'id' => 'WORKFLOW_STATE',
				'name' => Loc::getMessage('CC_BLL_WORKFLOW_STATE'),
				'default' => true,
				'sort' => ''
			),
		);

		$this->arResult['FILTER'] = array(
			array(
				"id" => "NAME",
				"name" => Loc::getMessage("BPATL_NAME"),
				"type" => "string",
				'default' => true
			),
			array(
				'id' => 'TIMESTAMP_X',
				'name' => Loc::getMessage('CC_BLL_MODIFIED'),
				'type' => 'date',
				'default' => true
			),
			array(
				'id' => 'DATE_CREATE',
				'name' => Loc::getMessage('CC_BLL_CREATED'),
				'type' => 'date',
				'default' => true
			),
		);
		$filterOption = new Bitrix\Main\UI\Filter\Options($this->arResult['FILTER_ID']);
		$filterData = $filterOption->getFilter($this->arResult['FILTER']);
		foreach($filterData as $key => $value)
		{
			if(empty($value))
				continue;

			if(mb_substr($key, -5) == "_from")
			{
				$op = ">=";
				$new_key = mb_substr($key, 0, -5);
			}
			elseif(mb_substr($key, -3) == "_to")
			{
				$op = "<=";
				$new_key = mb_substr($key, 0, -3);
				$newKey = mb_substr($key, 0, -3);

				if(in_array($newKey, array("TIMESTAMP_X", 'DATE_CREATE')))
				{
					global $DB;
					$dateFormat = $DB->dateFormatToPHP(Csite::getDateFormat());
					$dateParse = date_parse_from_format($dateFormat, $value);
					if(!mb_strlen($dateParse["hour"]) && !mb_strlen($dateParse["minute"]) && !mb_strlen($dateParse["second"]))
					{
						$timeFormat = $DB->dateFormatToPHP(CSite::getTimeFormat());
						$value .= " ".date($timeFormat, mktime(23, 59, 59, 0, 0, 0));
					}
				}
			}
			elseif($key == "NAME")
			{
				$op = "?";
				$new_key = $key;
			}
			else
			{
				$op = "";
				$new_key = $key;
			}

			$filter[$op.$new_key] = $value;

			if($key == "FIND")
			{
				$op = "?";
				$filter[$op."SEARCHABLE_CONTENT"] = $value;
			}
		}

		$this->arResult['SORT'] = $gridSort['sort'];

		$useComments = (bool)CModule::includeModule("forum");
		$workflows = array();
		$this->arResult['DATA'] = array();
		$this->arResult["COMMENTS_COUNT"] = array();

		$filter['CREATED_BY'] = $this->arParams['USER_ID'];
		$iblockTypeId = COption::GetOptionString("lists", "livefeed_iblock_type_id");
		$filter['IBLOCK_TYPE'] = $iblockTypeId;
		$filter['CHECK_PERMISSIONS'] = ($this->arParams['LIST_PERM'] >= CListPermissions::CAN_READ ? "N": "Y");
		$elementObject = CIBlockElement::getList(
			$gridSort['sort'],
			$filter,
			false,
			$gridOptions->getNavParams(),
			$selectFields
		);
		$documentStates = true;
		$path = rtrim(SITE_DIR, '/');
		while($element = $elementObject->fetch())
		{
			$documentStates = CBPDocument::GetDocumentStates(
				BizprocDocument::generateDocumentComplexType($iblockTypeId, $element['IBLOCK_ID']),
				BizprocDocument::getDocumentComplexId($iblockTypeId, $element['ID'])
			);

			if(!empty($documentStates))
			{
				foreach($documentStates as $documentState)
				{
					if(empty($documentState['ID']))
						continue;

					$this->arResult['DATA'][$documentState['ID']]['ID'] = $element['ID'];
					$this->arResult['DATA'][$documentState['ID']]['DOCUMENT_NAME'] = $element['NAME'];
					$this->arResult['DATA'][$documentState['ID']]['DOCUMENT_URL'] = $path.COption::GetOptionString('lists', 'livefeed_url').'?livefeed=y&list_id='.$element["IBLOCK_ID"].'&element_id='.$element['ID'];
					$this->arResult['DATA'][$documentState['ID']]['DOCUMENT_STATE'] = true;
					$this->arResult['DATA'][$documentState['ID']]['WORKFLOW_ID'] = $documentState['ID'];
					$this->arResult['DATA'][$documentState['ID']]["WORKFLOW_NAME"] = $documentState["TEMPLATE_NAME"];
					$this->arResult['DATA'][$documentState['ID']]["WORKFLOW_STATE"] = $documentState["STATE_TITLE"];
					$this->arResult['DATA'][$documentState['ID']]["WORKFLOW_STARTED"] = FormatDateFromDB($documentState["STARTED_FORMATTED"]);
					$this->arResult['DATA'][$documentState['ID']]["WORKFLOW_STARTED_BY"] = "";
					if (intval($documentState["STARTED_BY"]) > 0)
					{
						$dbUserTmp = CUser::getByID($documentState["STARTED_BY"]);
						$arUserTmp = $dbUserTmp->fetch();
						$this->arResult['DATA'][$documentState['ID']]["WORKFLOW_STARTED_BY"] = CUser::FormatName($this->arParams["NAME_TEMPLATE"], $arUserTmp, true);
						$this->arResult['DATA'][$documentState['ID']]["WORKFLOW_STARTED_BY"] .= " [".$documentState["STARTED_BY"]."]";
					}

					$this->arResult['DATA'][$documentState['ID']]['MODULE_ID'] = $documentState["DOCUMENT_ID"][0];
					$this->arResult['DATA'][$documentState['ID']]['ENTITY'] = $documentState["DOCUMENT_ID"][1];
					$this->arResult['DATA'][$documentState['ID']]['DOCUMENT_ID'] = $documentState["DOCUMENT_ID"][2];
				}
			}
		}

		foreach ($this->arResult['DATA'] as $data)
		{
			if($documentStates)
			{
				if ($useComments)
					$workflows[] = 'WF_'.$data['WORKFLOW_ID'];
			}

			$actions = array();
			if ($data["DOCUMENT_URL"] <> '')
				$actions[] = array('ICONCLASS'=>'', 'DEFAULT' => true, 'TEXT'=>Loc::getMessage('CC_BLL_C_DOCUMENT'),
					'ONCLICK'=>'window.open("'.$data["DOCUMENT_URL"].'");');
			$this->arResult['RECORDS'][] = array('data' => $data, 'actions' => $actions);
		}

		if ($useComments && $documentStates)
		{
			$workflows = array_unique($workflows);
			if ($workflows)
			{
				$iterator = CForumTopic::getList(array(), array("@XML_ID" => $workflows));
				while ($row = $iterator->fetch())
				{
					$this->arResult["COMMENTS_COUNT"][$row['XML_ID']] = $row['POSTS'];
				}
			}
		}

		$this->arResult['COUNTERS'] = array('all' => 0);

		$this->arResult["NAV_OBJECT"] = $elementObject;
		$componentObject = null;
		$this->arResult["GRID_ENABLE_NEXT_PAGE"] = ($elementObject->PAGEN < $elementObject->NavPageCount);
		$this->arResult["NAV_STRING"] = $elementObject->getPageNavStringEx(
			$componentObject, "", "grid", false, null, $gridOptions->getNavParams());
		$this->arResult["GRID_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")
		);

		$this->includeComponentTemplate();
	}

	protected function getApplication()
	{
		global $APPLICATION;
		return $APPLICATION;
	}

	protected function getUser()
	{
		global $USER;
		return $USER;
	}
}