%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/components/bitrix/lists.element.edit/ |
Current File : /home/bitrix/www/bitrix/components/bitrix/lists.element.edit/ajax.php |
<?php use Bitrix\Lists\Internals\Error\Error; use Bitrix\Main\Localization\Loc; use Bitrix\Main\Loader; use Bitrix\Lists\Internals\Controller; require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php'); if (!Loader::IncludeModule('lists') || !\Bitrix\Main\Application::getInstance()->getContext() ->getRequest()->getQuery('action')) { return; } Loc::loadMessages(__FILE__); class ListsElementEditAjaxController extends Controller { /** @var int */ protected $iblockId; protected $elementId; protected $socnetGroupId = 0; protected $sectionId = 0; /** @var string */ protected $iblockTypeId; protected $listPerm; protected function listOfActions() { return array( 'completeWorkflow' => array( 'method' => array('POST'), ), 'isConstantsTuned' => array( 'method' => array('POST'), ), 'fillConstants' => array( 'method' => array('POST'), ), 'getListAdmin' => array( 'method' => array('POST'), ), 'notifyAdmin' => array( 'method' => array('POST'), ), ); } protected function processActionCompleteWorkflow() { $this->checkRequiredPostParams( array('workflowId', 'iblockTypeId', 'elementId', 'iblockId', 'sectionId', 'socnetGroupId', 'action') ); $this->fillDataForCheckPermission(); $this->checkPermission(); if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $workflowId = $this->request->getPost('workflowId'); $this->elementId = $this->request->getPost('elementId'); $listError = CLists::completeWorkflow( $workflowId, $this->iblockTypeId, $this->elementId, $this->iblockId, $this->request->getPost('action') ); if(!empty($listError)) { $this->errorCollection->add(array(new Error($listError))); } if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $this->sendJsonSuccessResponse(array('message' => Loc::getMessage('LISTS_MESSAGE_SUCCESS'))); } protected function processActionIsConstantsTuned() { $this->checkRequiredPostParams(array('iblockId', 'iblockTypeId', 'socnetGroupId', 'sectionId')); if(!Loader::includeModule('bizproc') || !CBPRuntime::isFeatureEnabled()) { $this->errorCollection->add( array(new Error(Loc::getMessage('LISTS_CONNECTION_MODULE_BIZPROC'))) ); } if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $this->fillDataForCheckPermission(); $templateData = $this->getTemplatesIdList(); if(empty($templateData)) { $this->errorCollection->add( array(new Error(Loc::getMessage('LISTS_NOT_BIZPROC_TEMPLATE_NEW'))) ); } $this->checkPermission(); if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $admin = true; if($this->listPerm < CListPermissions::IS_ADMIN && !CIBlockRights::UserHasRightTo($this->iblockId, $this->iblockId, 'iblock_edit')) $admin = false; $isConstantsTuned = true; foreach($templateData as $templateId => $template) { if(!CBPWorkflowTemplateLoader::isConstantsTuned($templateId)) $isConstantsTuned = false; } if($isConstantsTuned) { $this->sendJsonSuccessResponse(array( 'templateData' => $templateData, )); } else { $this->sendJsonSuccessResponse(array( 'admin' => $admin, 'templateData' => $templateData, )); } } protected function getTemplatesIdList() { if(!Loader::includeModule('bizproc') || !CBPRuntime::isFeatureEnabled() || empty($this->iblockTypeId) || empty($this->iblockId)) { return array(); } $documentType = BizprocDocument::generateDocumentComplexType($this->iblockTypeId, $this->iblockId); $templates = array_merge( \CBPWorkflowTemplateLoader::SearchTemplatesByDocumentType($documentType, CBPDocumentEventType::Create), \CBPWorkflowTemplateLoader::SearchTemplatesByDocumentType($documentType, CBPDocumentEventType::Edit) ); $templateData = array(); foreach($templates as $template) { $templateData[$template['ID']]['ID'] = $template['ID']; $templateData[$template['ID']]['NAME'] = $template['NAME']; } return $templateData; } protected function processActionFillConstants() { $this->checkRequiredPostParams(array('iblockId', 'listTemplateId')); if(!Loader::includeModule('bizproc') || !CBPRuntime::isFeatureEnabled()) { $this->errorCollection->add( array(new Error(Loc::getMessage('LISTS_CONNECTION_MODULE_BIZPROC'))) ); } if($this->errorCollection->hasErrors()) { $errorObject = array_shift($this->errorCollection->toArray()); ShowError($errorObject->getMessage()); return; } $this->iblockId = intval($this->request->getPost('iblockId')); if(!CIBlockRights::UserHasRightTo($this->iblockId, $this->iblockId, 'iblock_edit')) { ShowError(Loc::getMessage('LISTS_ACCESS_DENIED')); return; } $listTemplateId = $this->request->getPost('listTemplateId'); $html = ''; if(!empty($listTemplateId) && is_array($listTemplateId)) { foreach($listTemplateId as $templateData) { $html .= '<span class="bx-lists-popup-header">'.htmlspecialcharsbx($templateData['NAME']).'</span>'; ob_start(); $this->getApplication()->includeComponent( 'bitrix:bizproc.workflow.setconstants', '', Array( 'ID' => $templateData['ID'], 'POPUP' => 'Y' ) ); $html .= ob_get_contents(); ob_end_clean(); $html .= '<hr class="bx-lists-popup-separator">'; } } if(empty($html)) { $this->errorCollection->add( array(new Error(Loc::getMessage('LISTS_NOT_BIZPROC_TEMPLATE_NEW'))) ); } if($this->errorCollection->hasErrors()) { $errorObject = array_shift($this->errorCollection->toArray()); ShowError($errorObject->getMessage()); return; } echo $html; } protected function processActionGetListAdmin() { $this->checkRequiredPostParams(array('iblockId', 'iblockTypeId', 'socnetGroupId', 'sectionId')); if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $this->fillDataForCheckPermission(); $this->checkPermission(); if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $rightObject = new CIBlockRights($this->iblockId); $rights = $rightObject->getRights(); $rightsList = $rightObject->getRightsList(false); $idRight = array_search('iblock_full', $rightsList); $listUser = array(); $nameTemplate = CSite::GetNameFormat(false); foreach($rights as $right) { $res = strpos($right['GROUP_CODE'], 'U'); if($right['TASK_ID'] == $idRight && $res === 0) { $userId = substr($right['GROUP_CODE'], 1); $users = CUser::GetList($by="id", $order="asc", array('ID' => $userId), array('FIELDS' => array('ID', 'PERSONAL_PHOTO', 'NAME', 'LAST_NAME')) ); $user = $users->fetch(); $file['src'] = ''; if ($user) { $file = \CFile::ResizeImageGet( $user['PERSONAL_PHOTO'], array('width' => 58, 'height' => 58), \BX_RESIZE_IMAGE_EXACT, false ); } $listUser[$userId]['id'] = $userId; $listUser[$userId]['img'] = $file['src']; $listUser[$userId]['name'] = CUser::FormatName($nameTemplate, $user, false); } } $users = CUser::getList(($b = 'ID'), ($o = 'ASC'), array('GROUPS_ID' => 1, 'ACTIVE' => 'Y'), array('FIELDS' => array('ID', 'PERSONAL_PHOTO', 'NAME', 'LAST_NAME')) ); while ($user = $users->fetch()) { $file = \CFile::ResizeImageGet( $user['PERSONAL_PHOTO'], array('width' => 58, 'height' => 58), \BX_RESIZE_IMAGE_EXACT, false ); $listUser[$user['ID']]['id'] = $user['ID']; $listUser[$user['ID']]['img'] = $file['src']; $listUser[$user['ID']]['name'] = CUser::FormatName($nameTemplate, $user, false); } $listUser= array_values($listUser); $this->sendJsonSuccessResponse(array( 'listAdmin' => $listUser )); } protected function processActionNotifyAdmin() { $this->checkRequiredPostParams( array('userId', 'iblockId', 'iblockTypeId', 'socnetGroupId', 'sectionId', 'elementUrl') ); if(!Loader::includeModule('im')) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_CONNECTION_MODULE_IM')))); } if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $this->fillDataForCheckPermission(); $this->checkPermission(); if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $userIdFrom = intval($this->getUser()->getID()); $userIdTo = intval($this->request->getPost('userId')); $messageFields = array( 'TO_USER_ID' => $userIdTo, 'FROM_USER_ID' => $userIdFrom, 'NOTIFY_TYPE' => IM_NOTIFY_FROM, 'NOTIFY_MODULE' => 'lists', 'NOTIFY_TAG' => 'LISTS|NOTIFY_ADMIN|'.$userIdTo.'|'.$userIdFrom, 'NOTIFY_MESSAGE' => Loc::getMessage( 'LISTS_NOTIFY_MESSAGE', array('#URL#' => $this->request->getPost('elementUrl'))) ); $messageId = CIMNotify::Add($messageFields); if($messageId) { $this->sendJsonSuccessResponse( array('message' => Loc::getMessage('LISTS_NOTIFY_SUCCESS')) ); } else { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_NOTIFY_ERROR')))); $this->sendJsonErrorResponse(); } } protected function fillDataForCheckPermission() { $this->iblockId = intval($this->request->getPost('iblockId')); $this->iblockTypeId = $this->request->getPost('iblockTypeId'); $this->socnetGroupId = intval($this->request->getPost('socnetGroupId')); $this->sectionId = $this->request->getPost('sectionId'); } protected function checkPermission() { $this->listPerm = CListPermissions::checkAccess( $this->getUser(), $this->iblockTypeId, $this->iblockId, $this->socnetGroupId ); if($this->listPerm < 0) { switch($this->listPerm) { case CListPermissions::WRONG_IBLOCK_TYPE: $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_WRONG_IBLOCK_TYPE')))); break; case CListPermissions::WRONG_IBLOCK: $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_WRONG_IBLOCK')))); break; case CListPermissions::LISTS_FOR_SONET_GROUP_DISABLED: $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_FOR_SONET_GROUP_DISABLED')))); break; default: $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_UNKNOWN_ERROR')))); break; } } elseif( $this->listPerm < CListPermissions::CAN_READ && !( CIBlockRights::UserHasRightTo($this->iblockId, $this->iblockId, "element_read") || CIBlockSectionRights::UserHasRightTo($this->iblockId, $this->sectionId, "section_element_bind") ) ) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_ACCESS_DENIED')))); } } } $controller = new ListsElementEditAjaxController(); $controller ->setActionName(\Bitrix\Main\Application::getInstance()->getContext()->getRequest()->getQuery('action')) ->exec();