%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/components/bitrix/lists.live.feed/ |
Current File : //home/bitrix/www/bitrix/components/bitrix/lists.live.feed/ajax.php |
<?php use Bitrix\Lists\Internals\Error\Error; use Bitrix\Main\Localization\Loc; use Bitrix\Main\Loader; use Bitrix\Lists\Internals\Controller; use Bitrix\Main\Text\HtmlFilter; define('STOP_STATISTICS', true); define('BX_SECURITY_SHOW_MESSAGE', true); 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 LiveFeedAjaxController extends Controller { /** @var array */ protected $lists = array(); protected $formOprions = array(); /** @var string */ protected $iblockTypeId = 'bitrix_processes'; protected $listPerm; protected $formId; protected $randomString; protected $iblockDescription; protected $iblockCode; /** @var int */ protected $socnetGroupId = 0; protected $iblockId; protected function listOfActions() { return array( 'getList' => array( 'method' => array('POST'), ), 'setDelegateResponsible' => array( 'method' => array('POST'), ), 'setResponsible' => array( 'method' => array('POST'), ), 'getBizprocTemplateId' => array( 'method' => array('POST'), ), 'createSettingsDropdown' => array( 'method' => array('POST'), ), 'checkPermissions' => array( 'method' => array('POST'), ), 'isConstantsTuned' => array( 'method' => array('POST'), ), 'checkDelegateResponsible' => array( 'method' => array('POST'), ), 'checkDataElementCreation' => array( 'method' => array('POST'), ), 'getListAdmin' => array( 'method' => array('POST'), ), 'notifyAdmin' => array( 'method' => array('POST'), ), ); } protected function processActionGetList() { if(!CLists::isFeatureEnabled()) { ShowError(Loc::getMessage('LISTS_SEAC_ACCESS_DENIED')); return; } $this->checkRequiredPostParams(array('iblockId', 'randomString')); if($this->errorCollection->hasErrors()) { $errorObject = array_shift($this->errorCollection->toArray()); ShowError($errorObject->getMessage()); return; } $this->iblockId = intval($this->request->getPost('iblockId')); $this->iblockDescription = $this->request->getPost('iblockDescription'); $this->iblockCode = $this->request->getPost('iblockCode'); $this->socnetGroupId = intval($this->request->getPost('socnetGroupId')); $this->iblockTypeId = COption::GetOptionString("lists", "livefeed_iblock_type_id"); $this->checkPermissionElement(); if($this->errorCollection->hasErrors()) { $errorObject = array_shift($this->errorCollection->toArray()); ShowError($errorObject->getMessage()); return; } $this->formId = 'lists_element_add_'.$this->iblockId; $this->randomString = htmlspecialcharsbx($this->request->getPost('randomString')); $this->getListData(); $this->createPreparedFields(); if(Loader::includeModule('bizproc') && CBPRuntime::isFeatureEnabled()) $this->getBizprocData(); $this->createHtml(); } protected function processActionSetDelegateResponsible() { $this->checkRequiredPostParams(array('iblockId')); if(!Loader::includeModule('iblock')) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_CONNECTION_MODULE_IBLOCK')))); } $this->iblockId = intval($this->request->getPost('iblockId')); $this->iblockTypeId = COption::GetOptionString("lists", "livefeed_iblock_type_id"); $this->checkPermission(); if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $selectUsers = $this->request->getPost('selectUsers'); $rightObject = new CIBlockRights($this->iblockId); $rights = $rightObject->getRights(); $rightsList = $rightObject->getRightsList(false); $idRight = array_search('iblock_full', $rightsList); foreach($rights as $keyRight => $right) { $res = strpos($right['GROUP_CODE'], 'U'); if($res === 0) { $arraySearch = array_search($right['GROUP_CODE'], $selectUsers); if($right['TASK_ID'] == $idRight) { if(!empty($selectUsers)) { if($arraySearch || $arraySearch == 0) unset($rights[$keyRight]); } else unset($rights[$keyRight]); } else { if(!empty($selectUsers)) { if($arraySearch || $arraySearch == 0) unset($rights[$keyRight]); } } } } if(!empty($selectUsers)) { foreach($selectUsers as $keySelect => $idUser) { $rights['n'.$keySelect] = array('GROUP_CODE' => $idUser, 'TASK_ID' => $idRight); } } $rightObject->setRights($rights); $this->sendJsonSuccessResponse(array( 'message' => Loc::getMessage('LISTS_SEAC_MESSAGE_DELEGATE_RESPONSIBLE') )); } /** * Displays a form to fill constants * return html */ protected function processActionSetResponsible() { $this->checkRequiredPostParams(array('iblockId', 'randomString')); if(!Loader::includeModule('bizproc') || !CBPRuntime::isFeatureEnabled()) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_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_SEAC_ACCESS_DENIED')); return; } $html = ''; $templateId = intval($this->request->getPost('templateId')); if(!empty($templateId)) { $documentType = BizprocDocument::generateDocumentComplexType( COption::GetOptionString("lists", "livefeed_iblock_type_id"), $this->iblockId ); $templateLoader = CBPWorkflowTemplateLoader::GetLoader(); $templateQuery = $templateLoader->getTemplatesList( array('ID' => 'DESC'), array('DOCUMENT_TYPE' => $documentType, 'ID' => $templateId), false, false, array('ID', 'NAME') ); if($template = $templateQuery->fetch()) { $html .= $this->createHtmlSetConstants($template['ID'], $template['NAME']); } } else { $this->randomString = htmlspecialcharsbx($this->request->getPost('randomString')); $templateData = $this->getTemplatesIdList($this->iblockId); if(empty($templateData)) { $html = ''; } elseif(count($templateData) > 1) { $html .= '<p>'.Loc::getMessage("LISTS_SET_RESPONSIBLE_POPUP_DESCRIPTION").'</p>'; foreach($templateData as $templateId => $templateName) { $url = 'javascript:BX.Lists[\'LiveFeedClass_'.$this->randomString.'\'].setResponsible(\''.$templateId.'\');'; $html .= '<a href="'.$url.'"><div class="bx-lists-designer-item">'.htmlspecialcharsbx($templateName).'</div></a>'; } } else { foreach($templateData as $templateId => $templateName) { $html .= $this->createHtmlSetConstants($templateId, $templateName); } } } 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; $this->end(); } protected function createHtmlSetConstants($templateId, $templateName) { $html = ''; $html .= '<span class="bx-lists-template-name">'.htmlspecialcharsbx($templateName).'</span>'; ob_start(); $this->getApplication()->includeComponent( 'bitrix:bizproc.workflow.setconstants', '', Array('ID' => $templateId, 'POPUP' => 'Y') ); $html .= ob_get_contents(); ob_end_clean(); $html .= '<hr class="bx-lists-constants-form-hr">'; return $html; } protected function processActionIsConstantsTuned() { $this->checkRequiredPostParams(array('iblockId')); if(!Loader::includeModule('bizproc') || !CBPRuntime::isFeatureEnabled()) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_CONNECTION_MODULE_BIZPROC')))); } if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $this->iblockId = intval($this->request->getPost('iblockId')); $this->checkPermissionElement(); if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $templateData = $this->getTemplatesIdList($this->iblockId); if(empty($templateData)) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_NOT_BIZPROC_TEMPLATE_NEW')))); } 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 => $templateName) { if(!CBPWorkflowTemplateLoader::isConstantsTuned($templateId)) $isConstantsTuned = false; } if($isConstantsTuned) { $this->sendJsonSuccessResponse(array( 'templateData' => $templateData, )); } else { $this->sendJsonSuccessResponse(array( 'admin' => $admin, 'templateData' => $templateData, )); } } /** * @param $iblockId * @return array */ protected function getTemplatesIdList($iblockId) { if(!Loader::includeModule('bizproc') || !CBPRuntime::isFeatureEnabled()) { return array(); } $documentType = BizprocDocument::generateDocumentComplexType( COption::GetOptionString("lists", "livefeed_iblock_type_id"), $iblockId ); $templateLoader = CBPWorkflowTemplateLoader::GetLoader(); $templateQuery = $templateLoader->getTemplatesList( array('ID' => 'DESC'), array('DOCUMENT_TYPE' => $documentType, 'AUTO_EXECUTE' => CBPDocumentEventType::Create), false, false, array('ID', 'NAME') ); $templateData = array(); while($template = $templateQuery->fetch()) { $templateData[$template['ID']] = $template['NAME']; } return $templateData; } protected function processActionGetListAdmin() { $this->checkRequiredPostParams(array('iblockId')); if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $this->iblockId = intval($this->request->getPost('iblockId')); $this->iblockTypeId = COption::GetOptionString("lists", "livefeed_iblock_type_id"); $this->checkPermissionElement(); 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')); if(!Loader::includeModule('im')) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_CONNECTION_MODULE_IM')))); } if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $this->iblockId = intval($this->request->getPost('iblockId')); $this->iblockTypeId = COption::GetOptionString("lists", "livefeed_iblock_type_id"); $siteId = SITE_ID; if($this->request->getPost('siteId')) $siteId = $this->request->getPost('siteId'); $siteDir = SITE_DIR; if($this->request->getPost('siteId')) $siteDir = $this->request->getPost('siteDir'); $this->checkPermissionElement(); if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $userIdFrom = intval($this->getUser()->getID()); $userIdTo = intval($this->request->getPost('userId')); $iblockName = $this->request->getPost('iblockName'); $urlForAdmin = COption::GetOptionString('socialnetwork', 'user_page', '/company/personal/', $siteId); $urlForAdmin = $urlForAdmin.'log/?bp_setting='.$this->iblockId; $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_SEAC_NOTIFY_MESSAGE', array('#NAME_PROCESSES#' => $iblockName, '#URL#' => $urlForAdmin)) ); $messageId = CIMNotify::Add($messageFields); if($messageId) { $this->sendJsonSuccessResponse( array('message' => Loc::getMessage('LISTS_SEAC_NOTIFY_SUCCESS')) ); } else { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_NOTIFY_ERROR')))); $this->sendJsonErrorResponse(); } } protected function processActionGetBizprocTemplateId() { $this->checkRequiredPostParams(array('iblockId')); if(!Loader::includeModule('bizproc') || !CBPRuntime::isFeatureEnabled()) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_CONNECTION_MODULE_BIZPROC')))); } if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $this->iblockId = intval($this->request->getPost('iblockId')); $this->checkPermission(); if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $documentType = BizprocDocument::generateDocumentComplexType(COption::GetOptionString("lists", "livefeed_iblock_type_id"), $this->iblockId); $templateLoader = CBPWorkflowTemplateLoader::GetLoader(); $templateQuery = $templateLoader->getTemplatesList( array('ID' => 'DESC'), array('DOCUMENT_TYPE' => $documentType, 'AUTO_EXECUTE' => CBPDocumentEventType::Create), false, false, array('ID', 'NAME') ); $isAvailable = false; $templateData = array(); while($template = $templateQuery->fetch()) { $isAvailable = true; $templateData[$template['ID']]['ID'] = $template['ID']; $templateData[$template['ID']]['NAME'] = $template['NAME']; } if(!$isAvailable) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_NOT_BIZPROC_TEMPLATE_NEW')))); } if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $manyTemplate = false; if(count($templateData) > 1) { $manyTemplate = true; } $this->sendJsonSuccessResponse(array( 'templateData' => $templateData, 'manyTemplate' => $manyTemplate )); } protected function processActionCheckPermissions() { $this->checkRequiredPostParams(array('iblockId')); if(!Loader::includeModule('bizproc') || !CBPRuntime::isFeatureEnabled()) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_CONNECTION_MODULE_BIZPROC')))); } if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $this->iblockId = intval($this->request->getPost('iblockId')); $this->checkPermission(); if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $this->sendJsonSuccessResponse(array()); } protected function processActionCreateSettingsDropdown() { $this->checkRequiredPostParams(array('iblockId', 'randomString')); if(!Loader::includeModule('bizproc') || !CBPRuntime::isFeatureEnabled()) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_CONNECTION_MODULE_BIZPROC')))); } if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $this->iblockId = intval($this->request->getPost('iblockId')); $this->randomString = htmlspecialcharsbx($this->request->getPost('randomString')); $this->iblockTypeId = COption::GetOptionString("lists", "livefeed_iblock_type_id"); $this->checkPermissionElement(); if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $settingsDropdown = array(); $settingsDropdown[] = array( 'text' => Loc::getMessage('LISTS_SEAC_SELECT_RESPONSIBILITY_NEW'), 'title' => Loc::getMessage('LISTS_SEAC_SELECT_RESPONSIBILITY_NEW'), 'href' => "javascript:BX.Lists['LiveFeedClass_{$this->randomString}'].setResponsible();", ); $settingsDropdown[] = array( 'text' => Loc::getMessage('LISTS_SEAC_DELEGATE_RESPONSIBLE_NEW'), 'title' => Loc::getMessage('LISTS_SEAC_DELEGATE_RESPONSIBLE_NEW'), 'href' => "javascript:BX.Lists['LiveFeedClass_{$this->randomString}'].setDelegateResponsible();", ); $settingsDropdown[] = array( 'text' => Loc::getMessage('LISTS_SEAC_DESIGNER_BP_NEW'), 'title' => Loc::getMessage('LISTS_SEAC_DESIGNER_BP_NEW'), 'href' => "javascript:BX.Lists['LiveFeedClass_{$this->randomString}'].jumpProcessDesigner();", ); $settingsDropdown[] = array( 'text' => Loc::getMessage('LISTS_SEAC_SETTING_LIST_NEW'), 'title' => Loc::getMessage('LISTS_SEAC_SETTING_LIST_NEW'), 'href' => "javascript:BX.Lists['LiveFeedClass_{$this->randomString}'].jumpSettingProcess();", ); $this->sendJsonSuccessResponse(array( 'settingsDropdown' => $settingsDropdown, )); } protected function processActionCheckDelegateResponsible() { $this->checkRequiredPostParams(array('iblockId')); if(!Loader::includeModule('iblock')) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_CONNECTION_MODULE_IBLOCK')))); } $this->iblockId = intval($this->request->getPost('iblockId')); $this->iblockTypeId = COption::GetOptionString('lists', 'livefeed_iblock_type_id'); $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); $count = 0; foreach($rights as $right) { $res = strpos($right['GROUP_CODE'], 'U'); if($right['TASK_ID'] == $idRight && $res === 0) { $userId = substr($right['GROUP_CODE'], 1); $userGroups = CUser::getUserGroup($userId); if(!in_array(1, $userGroups)) { $userQuery = CUser::getList( $by = 'ID', $order = 'ASC', array('ID' => $userId), array('FIELDS' => array('ID' ,'LOGIN', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'TITLE', 'EMAIL') ) ); if ($user = $userQuery->fetch()) { $listUser[$count]['id'] = $right['GROUP_CODE']; $listUser[$count]['name'] = CUser::formatName($nameTemplate, $user, false); } } } $count++; } $this->sendJsonSuccessResponse(array( 'listUser' => $listUser )); } protected function unEscape($data) { global $APPLICATION; if(is_array($data)) { $res = array(); foreach($data as $k => $v) { $k = $APPLICATION->ConvertCharset(\CHTTP::urnDecode($k), "UTF-8", LANG_CHARSET); $res[$k] = $this->unEscape($v); } } else { $res = $APPLICATION->ConvertCharset(\CHTTP::urnDecode($data), "UTF-8", LANG_CHARSET); } return $res; } protected function processActionCheckDataElementCreation() { if($_POST["save"] != "Y" && $_POST["changePostFormTab"] != "lists" && !check_bitrix_sessid()) $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_CONNECTION_MODULE_IBLOCK')))); if(!Loader::IncludeModule('bizproc') || !CBPRuntime::isFeatureEnabled()) $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_CONNECTION_MODULE_BIZPROC')))); if(!Loader::includeModule('iblock')) $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_CONNECTION_MODULE_IBLOCK')))); $this->iblockId = intval($this->request->getPost('IBLOCK_ID')); $this->iblockTypeId = COption::GetOptionString("lists", "livefeed_iblock_type_id"); $this->checkPermissionElement(); if($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $documentType = BizprocDocument::generateDocumentComplexType(COption::GetOptionString("lists", "livefeed_iblock_type_id"), $this->iblockId); $templateIdString = $_POST['TEMPLATE_ID']; $templateData = explode(',', $templateIdString); if(!empty($templateData)) { if(CModule::IncludeModule('bizproc') && CBPRuntime::isFeatureEnabled()) { $isConstantsTuned = true; foreach($templateData as $templateId) { if(!empty($templateId)) { if(!CBPWorkflowTemplateLoader::isConstantsTuned($templateId)) $isConstantsTuned = false; } } if(!$isConstantsTuned) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_IS_CONSTANTS_TUNED_NEW')))); $this->sendJsonErrorResponse(); } } } else { if(CModule::IncludeModule("bizproc") && CBPRuntime::isFeatureEnabled()) { $templateData = $this->getTemplatesIdList($this->iblockId); if(!empty($templateData)) { $isConstantsTuned = true; foreach($templateData as $templateId => $templateName) { if(!CBPWorkflowTemplateLoader::isConstantsTuned($templateId)) $isConstantsTuned = false; } if(!$isConstantsTuned) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_IS_CONSTANTS_TUNED_NEW')))); $this->sendJsonErrorResponse(); } } else { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_NOT_BIZPROC_TEMPLATE_NEW')))); $this->sendJsonErrorResponse(); } } } $list = new CList($this->iblockId); $fields = $list->getFields(); $elementData = array( "IBLOCK_ID" => $this->iblockId, "NAME" => $_POST["NAME"], ); $props = array(); foreach($fields as $fieldId => $field) { if($fieldId == "PREVIEW_PICTURE" || $fieldId == "DETAIL_PICTURE") { $elementData[$fieldId] = $_FILES[$fieldId]; if(isset($_POST[$fieldId."_del"]) && $_POST[$fieldId."_del"]=="Y") $elementData[$fieldId]["del"] = "Y"; } elseif($fieldId == "PREVIEW_TEXT" || $fieldId == "DETAIL_TEXT") { if( isset($field["SETTINGS"]) && is_array($field["SETTINGS"]) && $field["SETTINGS"]["USE_EDITOR"] == "Y" ) $elementData[$fieldId."_TYPE"] = "html"; else $elementData[$fieldId."_TYPE"] = "text"; $elementData[$fieldId] = $_POST[$fieldId]; } elseif($fieldId == 'ACTIVE_FROM' || $fieldId == 'ACTIVE_TO') { $elementData[$fieldId] = array_shift($_POST[$fieldId]); } elseif($list->is_field($fieldId)) { $elementData[$fieldId] = $_POST[$fieldId]; } elseif($field["PROPERTY_TYPE"] == "F") { if(isset($_POST[$fieldId."_del"])) $deleteArray = $_POST[$fieldId."_del"]; else $deleteArray = array(); $props[$field["ID"]] = array(); $files = $this->unEscape($_FILES); if(isset($files[$fieldId]) && is_array($files[$fieldId])) { CFile::ConvertFilesToPost($files[$fieldId], $props[$field["ID"]]); foreach($props[$field["ID"]] as $fileId => $file) { if( isset($deleteArray[$fileId]) && ( (!is_array($deleteArray[$fileId]) && $deleteArray[$fileId]=="Y") || (is_array($deleteArray[$fileId]) && $deleteArray[$fileId]["VALUE"]=="Y") ) ) { if(isset($props[$field["ID"]][$fileId]["VALUE"])) $props[$field["ID"]][$fileId]["VALUE"]["del"] = "Y"; else $props[$field["ID"]][$fileId]["del"] = "Y"; } } } } elseif($field["PROPERTY_TYPE"] == "N") { if(is_array($_POST[$fieldId]) && !array_key_exists("VALUE", $_POST[$fieldId])) { $props[$field["ID"]] = array(); foreach($_POST[$fieldId] as $key=>$value) { if(is_array($value)) { if(strlen($value["VALUE"])) { $value = str_replace(" ", "", str_replace(",", ".", $value["VALUE"])); if (!is_numeric($value)) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_IS_VALIDATE_FIELD_ERROR', array('#NAME#'=>$field['NAME']))))); $this->sendJsonErrorResponse(); } $props[$field["ID"]][$key] = doubleval($value); } } else { if(strlen($value)) { $value = str_replace(" ", "", str_replace(",", ".", $value)); if (!is_numeric($value)) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_IS_VALIDATE_FIELD_ERROR', array('#NAME#'=>$field['NAME']))))); $this->sendJsonErrorResponse(); } $props[$field["ID"]][$key] = doubleval($value); } } } } else { if(is_array($_POST[$fieldId])) { if(strlen($_POST[$fieldId]["VALUE"])) { $value = str_replace(" ", "", str_replace(",", ".", $_POST[$fieldId]["VALUE"])); if (!is_numeric($value)) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_IS_VALIDATE_FIELD_ERROR', array('#NAME#'=>$field['NAME']))))); $this->sendJsonErrorResponse(); } $props[$field["ID"]] = doubleval($value); } } else { if(strlen($_POST[$fieldId])) { $value = str_replace(" ", "", str_replace(",", ".", $_POST[$fieldId])); if (!is_numeric($value)) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_IS_VALIDATE_FIELD_ERROR', array('#NAME#'=>$field['NAME']))))); $this->sendJsonErrorResponse(); } $props[$field["ID"]] = doubleval($value); } } } } else { $props[$field["ID"]] = $_POST[$fieldId]; } } $elementData["MODIFIED_BY"] = $this->getUser()->getID(); unset($elementData["TIMESTAMP_X"]); if(!empty($props)) { $elementData["PROPERTY_VALUES"] = $props; } $documentStates = CBPDocument::GetDocumentStates($documentType, null); $userId = $this->getUser()->getId(); $write = CBPDocument::CanUserOperateDocumentType( CBPCanUserOperateOperation::WriteDocument, $userId, $documentType, array('AllUserGroups' => array(), 'DocumentStates' => $documentStates) ); if(!$write) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_IS_ACCESS_DENIED_STATUS')))); $this->sendJsonErrorResponse(); } $bizprocParametersValues = array(); $stringError = ''; foreach ($documentStates as $documentState) { if(strlen($documentState["ID"]) <= 0) { $errors = array(); $bizprocParametersValues[$documentState['TEMPLATE_ID']] = CBPDocument::StartWorkflowParametersValidate( $documentState['TEMPLATE_ID'], $documentState['TEMPLATE_PARAMETERS'], $documentType, $errors ); foreach($errors as $e) $stringError .= $e['message'].'<br />'; } } if(!empty($stringError)) { $this->errorCollection->add(array(new Error($stringError))); $this->sendJsonErrorResponse(); } $objectElement = new CIBlockElement; $idElement = $objectElement->Add($elementData, false, true, true); if($idElement) { $bizProcWorkflowId = array(); foreach($documentStates as $documentState) { if(strlen($documentState["ID"]) <= 0) { $errorsTmp = array(); $bizProcWorkflowId[$documentState['TEMPLATE_ID']] = CBPDocument::StartWorkflow( $documentState['TEMPLATE_ID'], array('lists', 'BizprocDocument', $idElement), array_merge($bizprocParametersValues[$documentState['TEMPLATE_ID']], array('TargetUser' => 'user_'.intval($this->getUser()->getID()))), $errorsTmp ); } } /*if(!empty($errorsTmp)) { $documentStates = null; CBPDocument::AddDocumentToHistory( array('lists','BizprocDocument',$idElement), $elementData['NAME'], $this->getUser()->getID() ); }*/ } else { $this->errorCollection->add(array(new Error($objectElement->LAST_ERROR))); $this->sendJsonErrorResponse(); } $this->sendJsonSuccessResponse(array()); } 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_SEAC_WRONG_IBLOCK_TYPE')))); break; case CListPermissions::WRONG_IBLOCK: $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_WRONG_IBLOCK')))); break; case CListPermissions::LISTS_FOR_SONET_GROUP_DISABLED: $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_LISTS_FOR_SONET_GROUP_DISABLED')))); break; default: $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_UNKNOWN_ERROR')))); break; } } elseif($this->listPerm < CListPermissions::IS_ADMIN && !CIBlockRights::UserHasRightTo($this->iblockId, $this->iblockId, 'iblock_edit')) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_ACCESS_DENIED')))); } } protected function checkPermissionElement() { $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_SEAC_WRONG_IBLOCK_TYPE')))); break; case CListPermissions::WRONG_IBLOCK: $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_WRONG_IBLOCK')))); break; case CListPermissions::LISTS_FOR_SONET_GROUP_DISABLED: $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_LISTS_FOR_SONET_GROUP_DISABLED')))); break; default: $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_UNKNOWN_ERROR')))); break; } } elseif(($this->listPerm < CListPermissions::CAN_READ && !CIBlockSectionRights::UserHasRightTo($this->iblockId, 0, 'section_element_bind'))) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_SEAC_ACCESS_DENIED')))); } } protected function getListData() { $list = new CList($this->iblockId); $this->lists['FIELDS'] = $list->getFields(); $this->lists['SELECT'] = array('ID', 'IBLOCK_ID', 'NAME', 'IBLOCK_SECTION_ID', 'CREATED_BY', 'BP_PUBLISHED'); $this->lists['DATA'] = array(); $this->lists['DATA']['NAME'] = Loc::getMessage('LISTS_SEAC_FIELD_NAME_DEFAULT'); $this->lists['DATA']['IBLOCK_SECTION_ID'] = ''; foreach($this->lists['FIELDS'] as $fieldId => $field) { $this->lists['FIELDS'][$fieldId]['NAME'] = htmlspecialcharsbx($this->lists['FIELDS'][$fieldId]['NAME']); if($list->is_field($fieldId)) { if($fieldId == 'ACTIVE_FROM' || $fieldId == 'PREVIEW_PICTURE' || $fieldId == 'DETAIL_PICTURE') { if($field['DEFAULT_VALUE'] === '=now') $this->lists['DATA'][$fieldId] = ConvertTimeStamp(time()+CTimeZone::GetOffset(), 'FULL'); elseif($field['DEFAULT_VALUE'] === '=today') $this->lists['DATA'][$fieldId] = ConvertTimeStamp(time()+CTimeZone::GetOffset(), 'SHORT'); else $this->lists['DATA'][$fieldId] = ''; } else { $this->lists['DATA'][$fieldId] = $field['DEFAULT_VALUE']; } $this->lists['SELECT'][] = $fieldId; } elseif(is_array($field['PROPERTY_USER_TYPE']) && array_key_exists('GetPublicEditHTML', $field['PROPERTY_USER_TYPE'])) { $this->lists['DATA'][$fieldId] = array( 'n0' => array( 'VALUE' => $field['DEFAULT_VALUE'], 'DESCRIPTION' => '', ) ); } elseif($field['PROPERTY_TYPE'] == 'L') { $this->lists['DATA'][$fieldId] = array(); $propEnums = CIBlockProperty::getPropertyEnum($field['ID']); while($enum = $propEnums->fetch()) if($enum['DEF'] == 'Y') $this->lists['DATA'][$fieldId][] =$enum['ID']; } elseif($field['PROPERTY_TYPE'] == 'F') { $this->lists['DATA'][$fieldId] = array( 'n0' => array('VALUE' => $field['DEFAULT_VALUE'], 'DESCRIPTION' => ''), ); } elseif($field['PROPERTY_TYPE'] == 'G' || $field['PROPERTY_TYPE'] == 'E') { $this->lists['DATA'][$fieldId] = array($field['DEFAULT_VALUE']); } else { $this->lists['DATA'][$fieldId] = array( 'n0' => array('VALUE' => $field['DEFAULT_VALUE'], 'DESCRIPTION' => ''), ); if($field['MULTIPLE'] == 'Y') { if(is_array($field['DEFAULT_VALUE']) || strlen($field['DEFAULT_VALUE'])) $this->lists['DATA'][$fieldId]['n1'] = array('VALUE' => '', 'DESCRIPTION' => ''); } } if($fieldId == 'CREATED_BY') $this->lists['SELECT'][] = 'CREATED_USER_NAME'; if($fieldId == 'MODIFIED_BY') $this->lists['SELECT'][] = 'USER_NAME'; } } /** * @return array */ protected function createFormData() { foreach($this->lists['DATA'] as $key => $value) { $this->lists['FORM_DATA'][$key] = $value; if(is_array($value)) { foreach($value as $key1 => $value1) { if(is_array($value1)) { foreach($value1 as $key2 => $value2) if(!is_array($value2)) $value[$key1][$key2] = htmlspecialcharsbx($value2); } else { $value[$key1] = htmlspecialcharsbx($value1); } } $this->lists['FORM_DATA'][$key] = $value; } else { $this->lists['FORM_DATA'][$key] = htmlspecialcharsbx($value); } } } protected function getElementFields() { $elements = CIBlockElement::getList( array(), array( 'IBLOCK_ID' => $this->iblockId, "=ID" => $this->lists['ELEMENT_ID'], ), false, false, $this->lists['SELECT'] ); $element = $elements->getNextElement(); if(is_object($element)) $this->lists['ELEMENT_FIELDS'] = $element->getFields(); else $this->lists['ELEMENT_FIELDS'] = array(); } protected function createPreparedFields() { $this->lists['PREPARED_FIELDS'] = array(); $this->lists['ELEMENT_ID'] = 0; $this->createFormData(); $this->getElementFields(); $this->getApplication()->showAjaxHead(); foreach($this->lists['FIELDS'] as $fieldId => $field) { if($fieldId == 'ACTIVE_FROM' || $fieldId == 'ACTIVE_TO') { $this->lists['PREPARED_FIELDS'][$fieldId] = array( 'id' => $fieldId.'['.$this->iblockId.']', 'name' => $field['NAME'], 'required' => $field['IS_REQUIRED']=='Y'? true: false, 'type' => 'date', 'value' => $this->lists['FORM_DATA'][$fieldId] ); } elseif($fieldId == 'PREVIEW_PICTURE' || $fieldId == 'DETAIL_PICTURE') { $this->lists['PREPARED_FIELDS'][$fieldId] = array( 'id' => $fieldId, 'name' => $field['NAME'], 'required' => $field['IS_REQUIRED']=='Y'? true: false, 'type' => 'file' ); } elseif($fieldId == 'PREVIEW_TEXT' || $fieldId == 'DETAIL_TEXT') { if($field['SETTINGS']['USE_EDITOR'] == 'Y') { $params = array( 'width' => '100%', 'height' => '200px', 'iblockId' => $this->iblockId ); $match = array(); if(preg_match('/\s*(\d+)\s*(px|%|)/', $field['SETTINGS']['WIDTH'], $match) && ($match[1] > 0)) { $params['width'] = $match[1].$match[2]; } if(preg_match('/\s*(\d+)\s*(px|%|)/', $field['SETTINGS']['HEIGHT'], $match) && ($match[1] > 0)) { $params['height'] = $match[1].$match[2]; } $html = $this->connectionHtmlEditor($fieldId, $fieldId, $params, $this->lists['FORM_DATA'][$fieldId]); $this->lists['PREPARED_FIELDS'][$fieldId] = array( 'id'=>$fieldId, 'name'=>$field['NAME'], 'required'=>$field['IS_REQUIRED']=='Y'? true: false, 'type' => 'custom', 'value' => $html, ); } else { $params = array( 'style' => '', ); if(preg_match('/\s*(\d+)\s*(px|%|)/', $field['SETTINGS']['WIDTH'], $match) && ($match[1] > 0)) { if($match[2] == '') $params['cols'] = $match[1]; else $params['style'] .= 'width:'.$match[1].$match[2].';'; } if(preg_match('/\s*(\d+)\s*(px|%|)/', $field['SETTINGS']['HEIGHT'], $match) && ($match[1] > 0)) { if($match[2] == "") $params['rows'] = $match[1]; else $params['style'] .= 'height:'.$match[1].$match[2].';'; } $this->lists['PREPARED_FIELDS'][$fieldId] = array( 'id'=>$fieldId, 'name'=>$field['NAME'], 'required'=>$field['IS_REQUIRED']=='Y'? true: false, 'type' => 'textarea', 'params' => $params, ); } } elseif($fieldId == "DATE_CREATE" || $fieldId == "TIMESTAMP_X") { if($this->lists['ELEMENT_FIELDS'][$fieldId]) $this->lists['PREPARED_FIELDS'][$fieldId] = array( "id"=>$fieldId, "name"=>$field["NAME"], "required"=>$field["IS_REQUIRED"]=="Y"? true: false, "type" => "custom", "value" => $this->lists['ELEMENT_FIELDS'][$fieldId], ); } elseif($fieldId == "CREATED_BY") { if($this->lists['ELEMENT_FIELDS']["CREATED_BY"]) $this->lists['PREPARED_FIELDS'][$fieldId] = array( "id"=>$fieldId, "name"=>$field["NAME"], "required"=>$field["IS_REQUIRED"]=="Y"? true: false, "type" => "custom", "value" => "[".$this->lists['ELEMENT_FIELDS']["CREATED_BY"]."] ".$this->lists['ELEMENT_FIELDS']["CREATED_USER_NAME"], ); } elseif($fieldId == "MODIFIED_BY") { if($this->lists['ELEMENT_FIELDS']["MODIFIED_BY"]) $this->lists['PREPARED_FIELDS'][$fieldId] = array( "id"=>$fieldId, "name"=>$field["NAME"], "required"=>$field["IS_REQUIRED"]=="Y"? true: false, "type" => "custom", "value" => "[".$this->lists['ELEMENT_FIELDS']["MODIFIED_BY"]."] ".$this->lists['ELEMENT_FIELDS']["USER_NAME"], ); } elseif( is_array($field["PROPERTY_USER_TYPE"]) && array_key_exists("GetPublicEditHTMLMulty", $field["PROPERTY_USER_TYPE"]) && $field["MULTIPLE"] == "Y" && $field["PROPERTY_TYPE"] != "E" ) { $html = call_user_func_array($field["PROPERTY_USER_TYPE"]["GetPublicEditHTMLMulty"], array( $field, $this->lists['FORM_DATA'][$fieldId], array( "VALUE"=>$fieldId, "DESCRIPTION"=>'', "FORM_NAME"=>$this->formId, "MODE"=>"FORM_FILL", ), )); $this->lists['PREPARED_FIELDS'][$fieldId] = array( "id"=>$fieldId, "name"=>$field["NAME"], "required"=>$field["IS_REQUIRED"]=="Y"? true: false, "type"=>"custom", "value"=>$html, ); } elseif(is_array($field["PROPERTY_USER_TYPE"]) && array_key_exists("GetPublicEditHTML", $field["PROPERTY_USER_TYPE"])) { $params = array( 'width' => '100%', 'height' => '200px', 'iblockId' => '' ); $listTypeNotMultiple = array('S:DiskFile', 'S:ECrm'); if($field["MULTIPLE"] == "Y" && !in_array($field["TYPE"], $listTypeNotMultiple)) { $checkHtml = false; $html = '<table id="tbl'.$fieldId.'">'; foreach($this->lists['FORM_DATA'][$fieldId] as $key => $value) { if($field["TYPE"] == "S:HTML") { $checkHtml = true; $fieldIdForHtml = 'id_'.$fieldId.'__'.$key.'_'; $fieldNameForHtml = $fieldId."[".$key."][VALUE][TEXT]"; $html .= '<tr><td><input type="hidden" name="'.$fieldId.'['.HtmlFilter::encode($key). '][VALUE][TYPE]" value="html">' .$this->connectionHtmlEditor($fieldIdForHtml, $fieldNameForHtml, $params, is_array($value['VALUE']) ? $value['VALUE']['TEXT']: '').'</td></tr>'; } elseif($field['TYPE'] == 'S:DateTime') { $html .= '<tr><td> <input class="bx-lists-input-calendar" type="text" name="'.$fieldId.'['. HtmlFilter::encode($key).'][VALUE]" onclick="BX.calendar({node: this.parentNode, field: this, bTime: true, bHideTime: false});" value="'.$value['VALUE'].'"> <span class="bx-lists-calendar-icon" onclick="BX.calendar({node:this, field:\''.$fieldId.'['.HtmlFilter::encode($key).'][VALUE]\', form: \'\', bTime: true, bHideTime: false});" onmouseover="BX.addClass(this, \'calendar-icon-hover\');" onmouseout="BX.removeClass(this, \'calendar-icon-hover\');" border="0"></span> </td></tr>'; } elseif($field['TYPE'] == 'S:Date') { $html .= '<tr><td> <input class="bx-lists-input-calendar" type="text" name="'.$fieldId.'['.HtmlFilter::encode($key).'][VALUE]" onclick="BX.calendar({node: this.parentNode, field: this, bTime: false, bHideTime: false});" value="'.$value['VALUE'].'"> <span class="bx-lists-calendar-icon" onclick="BX.calendar({node:this, field:\''.$fieldId.'['.HtmlFilter::encode($key).'][VALUE]\', form: \'\', bTime: false, bHideTime: false});" onmouseover="BX.addClass(this, \'calendar-icon-hover\');" onmouseout="BX.removeClass(this, \'calendar-icon-hover\');" border="0"></span> </td></tr>'; } elseif($field['TYPE'] == 'E:EList') { $html .= '<tr><td><span class="bx-bp-select">'.call_user_func_array($field["PROPERTY_USER_TYPE"]["GetPublicEditHTML"], array( $field, $value, array( "VALUE"=>$fieldId."[".$key."][VALUE]", "DESCRIPTION"=>'', "FORM_NAME"=>$this->formId, "MODE"=>"FORM_FILL", "COPY"=>false, ), )).'</span></td></tr>'; } else { $html .= '<tr><td>'.call_user_func_array($field["PROPERTY_USER_TYPE"]["GetPublicEditHTML"], array( $field, $value, array( "VALUE"=>$fieldId."[".$key."][VALUE]", "DESCRIPTION"=>'', "FORM_NAME"=>$this->formId, "MODE"=>"FORM_FILL", "COPY"=>false, ), )).'</td></tr>'; } } $html .= '</table>'; if($checkHtml) $html .= '<span class="bx-lists-input-add-button"><input type="button" onclick="BX.Lists[\'LiveFeedClass_'.$this->randomString.'\'].createAdditionalHtmlEditor(\'tbl'.$fieldId.'\', \''.$fieldId.'\', \''.$this->formId.'\');" value="'.Loc::getMessage("LISTS_SEAC_ADD_BUTTON").'"></span>'; else { $regExp = '/'.$fieldId.'\[(n)([0-9]*)\]|data-id=".+?"/g'; $html .= '<span class="bx-lists-input-add-button"><input type="button" onclick="BX.Lists.addNewTableRow(\'tbl'.$fieldId.'\', 1, '.htmlspecialcharsbx($regExp).', 2)" value="'.Loc::getMessage("LISTS_SEAC_ADD_BUTTON").'"></span>'; } $this->lists['PREPARED_FIELDS'][$fieldId] = array( "id"=>$fieldId, "name"=>$field["NAME"], "required"=>$field["IS_REQUIRED"]=="Y"? true: false, "type"=>"custom", "value"=>$html, ); } else { $html = ''; foreach($this->lists['FORM_DATA'][$fieldId] as $key => $value) { if($field["TYPE"] == "S:HTML") { $fieldNameForHtml = $fieldId."[".$key."][VALUE][TEXT]"; $html = $this->connectionHtmlEditor($fieldId, $fieldNameForHtml, $params, is_array($value['VALUE']) ? $value['VALUE']['TEXT']: ''); $html .= '<input type="hidden" name="'.$fieldId.'['.$key.'][VALUE][TYPE]" value="html">'; } elseif($field['TYPE'] == 'S:DateTime') { $html = ' <input class="bx-lists-input-calendar" type="text" name="'.$fieldId.'[n0][VALUE]" onclick="BX.calendar({node: this.parentNode, field: this, bTime: true, bHideTime: false});" value="'.$value['VALUE'].'"> <span class="bx-lists-calendar-icon" onclick="BX.calendar({node:this, field:\''.$fieldId.'[n0][VALUE]\', form: \'\', bTime: true, bHideTime: false});" onmouseover="BX.addClass(this, \'calendar-icon-hover\');" onmouseout="BX.removeClass(this, \'calendar-icon-hover\');" border="0"></span> '; } elseif($field['TYPE'] == 'S:Date') { $html = ' <input class="bx-lists-input-calendar" type="text" name="'.$fieldId.'[n0][VALUE]" onclick="BX.calendar({node: this.parentNode, field: this, bTime: false, bHideTime: false});" value="'.$value['VALUE'].'"> <span class="bx-lists-calendar-icon" onclick="BX.calendar({node:this, field:\''.$fieldId.'[n0][VALUE]\', form: \'\', bTime: false, bHideTime: false});" onmouseover="BX.addClass(this, \'calendar-icon-hover\');" onmouseout="BX.removeClass(this, \'calendar-icon-hover\');" border="0"></span> '; } elseif($field['TYPE'] == 'E:EList') { $html = '<span class="bx-bp-select">'.call_user_func_array($field['PROPERTY_USER_TYPE']['GetPublicEditHTML'], array( $field, $value, array( 'VALUE' => $fieldId.'['.$key.'][VALUE]', 'DESCRIPTION' => '', 'FORM_NAME' => $this->formId, 'MODE' => 'FORM_FILL', 'COPY' => false, ), )).'</span>'; } else { if($field['TYPE'] == 'S:ECrm') { Bitrix\Main\Page\Asset::getInstance()->addCss('/bitrix/js/crm/css/crm.css'); Bitrix\Main\Page\Asset::getInstance()->addJs('/bitrix/js/crm/crm.js'); } $html = call_user_func_array($field['PROPERTY_USER_TYPE']['GetPublicEditHTML'], array( $field, $value, array( 'VALUE' => $fieldId.'['.$key.'][VALUE]', 'DESCRIPTION' => '', 'FORM_NAME' => $this->formId, 'MODE' => 'FORM_FILL', 'COPY' => false, ), )); } break; } $this->lists['PREPARED_FIELDS'][$fieldId] = array( 'id' => $fieldId, 'name' => $field['NAME'], 'required' => $field['IS_REQUIRED']=='Y'? true: false, 'type' => 'custom', 'value' => $html, ); } } elseif($field["PROPERTY_TYPE"] == "N") { $html = ''; if($field["MULTIPLE"] == "Y") { $html = '<table id="tbl'.$fieldId.'">'; foreach($this->lists['FORM_DATA'][$fieldId] as $key => $value) $html .= '<tr><td><input type="text" name="'.$fieldId.'['.HtmlFilter::encode($key).'][VALUE]" value="'.$value["VALUE"].'"></td></tr>'; $html .= '</table>'; $html .= '<span class="bx-lists-input-add-button"><input type="button" onclick="javascript:BX.Lists.addNewTableRow(\'tbl'.$fieldId.'\', 1, /'.$fieldId.'\[(n)([0-9]*)\]/g, 2)" value="'.Loc::getMessage("LISTS_SEAC_ADD_BUTTON").'"></span>'; } else { foreach($this->lists['FORM_DATA'][$fieldId] as $key => $value) $html = '<input type="text" name="'.$fieldId.'['.HtmlFilter::encode($key).'][VALUE]" value="'.$value["VALUE"].'">'; } $this->lists['PREPARED_FIELDS'][$fieldId] = array( "id"=>$fieldId, "name"=>$field["NAME"], "required"=>$field["IS_REQUIRED"]=="Y"? true: false, "type"=>"custom", "value"=>$html, ); } elseif($field["PROPERTY_TYPE"] == "S") { $html = ''; if($field["MULTIPLE"] == "Y") { $html = '<table id="tbl'.$fieldId.'">'; if ($field["ROW_COUNT"] > 1) { foreach($this->lists['FORM_DATA'][$fieldId] as $key => $value) { $html .= '<tr><td><textarea name="'.$fieldId.'['.HtmlFilter::encode($key).'][VALUE]" rows="'.intval($field["ROW_COUNT"]).'" cols="'.intval($field["COL_COUNT"]).'">'.$value["VALUE"].'</textarea></td></tr>'; } } else { foreach($this->lists['FORM_DATA'][$fieldId] as $key => $value) { $html .= '<tr><td><input type="text" name="'.$fieldId.'['.HtmlFilter::encode($key).'][VALUE]" value="'.$value["VALUE"].'"></td></tr>'; } } $html .= '</table>'; $html .= '<span class="bx-lists-input-add-button"><input type="button" onclick="javascript:BX.Lists.addNewTableRow(\'tbl'.$fieldId.'\', 1, /'.$fieldId.'\[(n)([0-9]*)\]/g, 2)" value="'.Loc::getMessage("LISTS_SEAC_ADD_BUTTON").'"></span>'; } else { if ($field["ROW_COUNT"] > 1) { foreach($this->lists['FORM_DATA'][$fieldId] as $key => $value) { $html = '<textarea name="'.$fieldId.'['.HtmlFilter::encode($key).'][VALUE]" rows="'.intval($field["ROW_COUNT"]).'" cols="'.intval($field["COL_COUNT"]).'">'.$value["VALUE"].'</textarea>'; } } else { foreach($this->lists['FORM_DATA'][$fieldId] as $key => $value) { $html = '<input type="text" name="'.$fieldId.'['.HtmlFilter::encode($key).'][VALUE]" value="'.$value["VALUE"].'" size="'.intval($field["COL_COUNT"]).'">'; } } } $this->lists['PREPARED_FIELDS'][$fieldId] = array( "id"=>$fieldId, "name"=>$field["NAME"], "required"=>$field["IS_REQUIRED"]=="Y"? true: false, "type"=>"custom", "value"=>$html, ); } elseif($field["PROPERTY_TYPE"] == "L") { $items = array("" => Loc::getMessage("LISTS_SEAC_NO_VALUE")); $propEnums = CIBlockProperty::getPropertyEnum($field["ID"]); while($enum = $propEnums->fetch()) $items[$enum["ID"]] = $enum["VALUE"]; if($field["MULTIPLE"] == "Y") { $this->lists['PREPARED_FIELDS'][$fieldId] = array( "id"=>$fieldId.'[]', "name"=>$field["NAME"], "required"=>$field["IS_REQUIRED"]=="Y"? true: false, "type"=>'list', "items"=>$items, "value"=>$this->lists['FORM_DATA'][$fieldId], "params" => array("size"=>5, "multiple"=>"multiple"), ); } else { $this->lists['PREPARED_FIELDS'][$fieldId] = array( "id"=>$fieldId, "name"=>$field["NAME"], "required"=>$field["IS_REQUIRED"]=="Y"? true: false, "type"=>'list', "items"=>$items, "value"=>$this->lists['FORM_DATA'][$fieldId], ); } } elseif($field['PROPERTY_TYPE'] == 'F') { $html = ' <script> var wrappers = document.getElementsByClassName("bx-lists-input-file"); for (var i = 0; i < wrappers.length; i++) { var inputs = wrappers[i].getElementsByTagName("input"); for (var j = 0; j < inputs.length; j++) { inputs[j].onchange = getName; } } function getName () { var str = this.value, i; if (str.lastIndexOf("\\\")) { i = str.lastIndexOf("\\\")+1; } else { i = str.lastIndexOf("\\\")+1; } str = str.slice(i); var uploaded = this.parentNode.parentNode.getElementsByClassName("fileformlabel")[0]; uploaded.innerHTML = str; } </script> '; if($field['MULTIPLE'] == 'Y') { $html .= '<table id="tbl'.$fieldId.'">'; foreach($this->lists['FORM_DATA'][$fieldId] as $key => $value) { $html .= '<tr><td><span class="file-wrapper"><span class="bx-lists-input-file"> <span class="webform-small-button bx-lists-small-button">'.Loc::getMessage('LISTS_SEAC_FILE_ADD') .'</span>'; $html .= $this->connectionFile($fieldId, $key, $value, $field['PROPERTY_TYPE']); $html .= '</span><span class="fileformlabel bx-lists-input-file-name"></span></span></td></tr>'; } $html .= '</table>'; $html .= ' <span class="bx-lists-input-add-button"> <input type="button" onclick="javascript:BX.Lists[\'LiveFeedClass_'.$this->randomString.'\'].addNewFileTableRow(\'tbl'.$fieldId.'\', 1, /'.$fieldId.'\[(n)([0-9]*)\]/g, 2); BX.Lists[\'LiveFeedClass_'.$this->randomString.'\'].getNameInputFile();" value="'.Loc::getMessage("LISTS_SEAC_ADD_BUTTON").'"> </span>'; $this->lists['PREPARED_FIELDS'][$fieldId] = array( "id"=>$fieldId, "name"=>$field["NAME"], "required"=>$field["IS_REQUIRED"]=="Y"? true: false, "type"=>"custom", "value"=>$html, ); } else { foreach($this->lists['FORM_DATA'][$fieldId] as $key => $value) { $html .= '<span class="file-wrapper"><span class="bx-lists-input-file"> <span class="webform-small-button bx-lists-small-button">'.Loc::getMessage('LISTS_SEAC_FILE_ADD') .'</span>'; $html .= $this->connectionFile($fieldId, $key, $value, $field['PROPERTY_TYPE']); $html .= '</span><span class="fileformlabel bx-lists-input-file-name"></span></span>'; $this->lists['PREPARED_FIELDS'][$fieldId] = array( "id" => $fieldId.'['.$key.'][VALUE]', "name" => $field["NAME"], "required" => $field["IS_REQUIRED"]=="Y"? true: false, "type" => "file", "value" => $html, ); } } } elseif($field["PROPERTY_TYPE"] == "G") { if($field["IS_REQUIRED"]=="Y") $items = array(); else $items = array("" => Loc::getMessage("LISTS_SEAC_NO_VALUE")); $rsSections = CIBlockSection::GetTreeList(Array("IBLOCK_ID" => $field["LINK_IBLOCK_ID"])); while($res = $rsSections->GetNext()) $items[$res["ID"]] = str_repeat(" . ", $res["DEPTH_LEVEL"]).$res["NAME"]; if($field["MULTIPLE"] == "Y") $params = array("size"=>4, "multiple"=>"multiple"); else $params = array(); $this->lists['PREPARED_FIELDS'][$fieldId] = array( "id"=>$fieldId.'[]', "name"=>$field["NAME"], "required"=>$field["IS_REQUIRED"]=="Y"? true: false, "type"=>'list', "items"=>$items, "value"=>$this->lists['FORM_DATA'][$fieldId], "params" => $params, ); } elseif($field["PROPERTY_TYPE"] == "E") { if(!is_array($this->lists['FORM_DATA'][$fieldId])) $this->lists['FORM_DATA'][$fieldId] = array($this->lists['FORM_DATA'][$fieldId]); $currentElements = array(); foreach($this->lists['FORM_DATA'][$fieldId] as $listElementId) { if($listElementId) { $currentElements[] = $listElementId; } } $randomGenerator = new Bitrix\Main\Type\RandomSequence($fieldId); $randString = strtolower($randomGenerator->randString(6)); $html = ''; global $APPLICATION; ob_start(); $APPLICATION->includeComponent('bitrix:iblock.element.selector', '', array( 'SELECTOR_ID' => $randString, 'INPUT_NAME' => $fieldId, 'IBLOCK_ID' => $field["LINK_IBLOCK_ID"], 'MULTIPLE' => $field["MULTIPLE"], 'CURRENT_ELEMENTS_ID' => $currentElements, 'POPUP' => 'Y', 'PANEL_SELECTED_VALUES' => 'Y' ), null, array('HIDE_ICONS' => 'Y') ); $html .= ob_get_contents(); ob_end_clean(); $this->lists['PREPARED_FIELDS'][$fieldId] = array( "id"=>$fieldId, "name"=>$field["NAME"], "required"=>$field["IS_REQUIRED"]=="Y"? true: false, "type"=>'custom', "value"=>$html, ); } elseif($field["MULTIPLE"] == "Y") { $html = '<table id="tbl'.$fieldId.'"><tr><td>'; foreach($this->lists['FORM_DATA'][$fieldId] as $key => $value) $html .= '<tr><td><input type="text" name="'.$fieldId.'['.HtmlFilter::encode($key).'][VALUE]" value="'.$value["VALUE"].'"></td></tr>'; $html .= '</td></tr></table>'; $html .= ' <span class="bx-lists-input-add-button"> <input type="button" onclick="javascript:BX.Lists.addNewTableRow(\'tbl'.$fieldId.'\', 1, /'.$fieldId.'\[(n)([0-9]*)\]/g, 2)" value="'.Loc::getMessage("LISTS_SEAC_ADD_BUTTON").'"> </span>'; $this->lists['PREPARED_FIELDS'][$fieldId] = array( "id"=>$fieldId, "name"=>$field["NAME"], "required"=>$field["IS_REQUIRED"]=="Y"? true: false, "type"=>"custom", "value"=>$html, ); } elseif(is_array($this->lists['FORM_DATA'][$fieldId]) && array_key_exists("VALUE", $this->lists['FORM_DATA'][$fieldId])) { $this->lists['PREPARED_FIELDS'][$fieldId] = array( "id"=>$fieldId.'[VALUE]', "name"=>$field["NAME"], "required"=>$field["IS_REQUIRED"]=="Y"? true: false, "type" => "text", "value" => $this->lists['FORM_DATA'][$fieldId]["VALUE"], ); } else { $this->lists['PREPARED_FIELDS'][$fieldId] = array( "id"=>$fieldId, "name"=>$field["NAME"], "required"=>$field["IS_REQUIRED"]=="Y"? true: false, "type" => "text", ); } if(!($fieldId == 'DATE_CREATE' || $fieldId == 'TIMESTAMP_X' || $fieldId == 'CREATED_BY' || $fieldId == 'MODIFIED_BY')) { if(isset($field['SETTINGS']['SHOW_ADD_FORM'])) { $this->lists['PREPARED_FIELDS'][$fieldId]['show'] = $field['SETTINGS']['SHOW_ADD_FORM'] == 'Y' ? 'Y' : 'N'; } else { $this->lists['PREPARED_FIELDS'][$fieldId]['show'] = 'Y'; } } } } protected function getBizprocData() { $userId = $this->getUser()->getID(); $currentUserGroups = $this->getUser()->getUserGroupArray(); if(!$this->lists['ELEMENT_FIELDS'] || $this->lists['ELEMENT_FIELDS']['CREATED_BY'] == $userId) $currentUserGroups[] = 'Author'; $documentType = 'iblock_'.$this->iblockId; CBPDocument::addShowParameterInit('lists', 'only_users', $documentType); $this->lists['BIZPROC_FIELDS'] = array(); $bizprocIndex = 0; $documentStates = CBPDocument::getDocumentStates(array('lists', 'BizprocDocument', $documentType), null); $runtime = CBPRuntime::getRuntime(); $runtime->startRuntime(); $documentService = $runtime->getService('DocumentService'); foreach ($documentStates as $documentState) { $bizprocIndex++; $viewWorkflow = CBPDocument::CanUserOperateDocumentType( CBPCanUserOperateOperation::StartWorkflow, $userId, array('lists', 'BizprocDocument', $documentType), array('sectionId'=> 0, 'AllUserGroups' => $currentUserGroups, 'DocumentStates' => $documentStates, 'WorkflowId' => $documentState['ID'] > 0 ? $documentState['ID'] : $documentState['TEMPLATE_ID']) ); if($viewWorkflow) { $templateId = intval($documentState['TEMPLATE_ID']); $templateName = $documentState['TEMPLATE_NAME']; $workflowParameters = $documentState['TEMPLATE_PARAMETERS']; if(!is_array($workflowParameters)) $workflowParameters = array(); if(strlen($documentState["ID"]) <= 0 && $templateId > 0) { $parametersValues = array(); $keys = array_keys($workflowParameters); foreach ($keys as $key) { $value = $workflowParameters[$key]["Default"]; if (!is_array($value)) { $parametersValues[$key] = $value; } else { $keys1 = array_keys($value); foreach ($keys1 as $key1) { $parametersValues[$key][$key1] = $value[$key1]; } } } foreach ($workflowParameters as $parameterKey => $arParameter) { $parameterKeyExt = "bizproc".$templateId."_".$parameterKey; $html = $documentService->GetFieldInputControl( array('lists', 'BizprocDocument', $documentType), $arParameter, array("Form" => "start_workflow_form1", "Field" => $parameterKeyExt), $parametersValues[$parameterKey], false, true ); $this->lists['BIZPROC_FIELDS'][$parameterKeyExt.$bizprocIndex] = array( "id" => $parameterKeyExt.$bizprocIndex, "required" => $arParameter["Required"], "name" => $arParameter["Name"], "title" => $arParameter["Description"], "type" => "custom", "realType" => $arParameter["Type"], "value" => $html, 'show' => 'Y', 'templateName' => $templateName, 'templateId' => $templateId ); } } } } } protected function connectionFile($fieldId, $key, $value, $type) { if($type == 'F') $fieldId = $fieldId.'['.$key.'][VALUE]'; $obFile = new CListFile( $this->iblockId, $this->lists['ELEMENT_FIELDS']["IBLOCK_SECTION_ID"], $this->lists['ELEMENT_ID'], $fieldId, $value["VALUE"] ); $obFile->SetSocnetGroup($this->socnetGroupId); $obFileControl = new CListFileControl($obFile, $fieldId); return $obFileControl->getHTML(array( 'max_size' => 102400, 'max_width' => 150, 'max_height' => 150, 'url_template' => '', 'a_title' => Loc::getMessage("LISTS_SEAC_ENLARGE"), 'download_text' => Loc::getMessage("LISTS_SEAC_DOWNLOAD"), )); } protected function connectionHtmlEditor($fieldId, $fieldNameForHtml, $params, $content) { $html = ''; if (Loader::includeModule('fileman')) { ob_start(); $editor = new CHTMLEditor; $res = array( 'name' => $fieldNameForHtml, 'inputName' => $fieldNameForHtml, 'id' => $fieldId.$params['iblockId'], 'width' => $params['width'], 'height' => $params['height'], 'content' => $content, 'useFileDialogs' => false, 'minBodyWidth' => 350, 'normalBodyWidth' => 555, 'bAllowPhp' => false, 'limitPhpAccess' => false, 'showTaskbars' => false, 'showNodeNavi' => false, 'beforeUnloadHandlerAllowed' => true, 'askBeforeUnloadPage' => false, 'bbCode' => false, 'siteId' => SITE_ID, 'autoResize' => true, 'autoResizeOffset' => 40, 'saveOnBlur' => true, 'actionUrl' => '/bitrix/tools/html_editor_action.php', 'setFocusAfterShow' => false, 'controlsMap' => array( array('id' => 'Bold', 'compact' => true, 'sort' => 80), array('id' => 'Italic', 'compact' => true, 'sort' => 90), array('id' => 'Underline', 'compact' => true, 'sort' => 100), array('id' => 'Strikeout', 'compact' => true, 'sort' => 110), array('id' => 'RemoveFormat', 'compact' => true, 'sort' => 120), array('id' => 'Color', 'compact' => true, 'sort' => 130), array('id' => 'FontSelector', 'compact' => false, 'sort' => 135), array('id' => 'FontSize', 'compact' => false, 'sort' => 140), array('separator' => true, 'compact' => false, 'sort' => 145), array('id' => 'OrderedList', 'compact' => true, 'sort' => 150), array('id' => 'UnorderedList', 'compact' => true, 'sort' => 160), array('id' => 'AlignList', 'compact' => false, 'sort' => 190), array('separator' => true, 'compact' => false, 'sort' => 200), array('id' => 'InsertLink', 'compact' => true, 'sort' => 210), array('id' => 'InsertImage', 'compact' => false, 'sort' => 220), array('id' => 'InsertVideo', 'compact' => true, 'sort' => 230), array('id' => 'InsertTable', 'compact' => false, 'sort' => 250), array('separator' => true, 'compact' => false, 'sort' => 290), array('id' => 'Fullscreen', 'compact' => false, 'sort' => 310), array('id' => 'More', 'compact' => true, 'sort' => 400) ), ); $editor->show($res); $html = ob_get_contents(); ob_end_clean(); } return $html; } protected function createHtml() { if(empty($this->lists['PREPARED_FIELDS'])) return; switch ($this->iblockCode) { case 'bitrix_outgoing_doc': $blueDudeCode = 2216841; break; case 'bitrix_cash': $blueDudeCode = 2216531; break; case 'bitrix_trip': $blueDudeCode = 2216791; break; case 'bitrix_invoice': $blueDudeCode = 2215233; break; case 'bitrix_holiday': $blueDudeCode = 2216341; break; default: $blueDudeCode = 0; break; } $manyParameters = false; if(!empty($this->lists['BIZPROC_FIELDS'])) { $title = Loc::getMessage('LISTS_IS_BIZPROC_PARAMETERS'); if(count($this->lists['BIZPROC_FIELDS']) > 1) { $title = Loc::getMessage('LISTS_BIZPROC_PARAMETERS'); $manyParameters = true; } } $data = array_merge($this->lists['PREPARED_FIELDS'], $this->lists['BIZPROC_FIELDS']); $listTemplateId = array(); $bizprocTitle = true; ?> <div class="bx-lists-iblock-description"> <?= nl2br(htmlspecialcharsbx($this->iblockDescription)) ?> <? if(!empty($blueDudeCode)): ?> <br><br> <a style="cursor:pointer;" onclick='BX.Helper.show("redirect=detail&code=<?=$blueDudeCode ?>");'> <?= Loc::getMessage('LISTS_IS_DESRIPTION_DETAIL') ?> </a> <? endif ?> </div> <div class="bx-lists-block-errors" id="bx-lists-block-errors" style="display:none;"></div> <table class="bx-lists-table-content"> <? foreach($data as $fieldId => $field): ?> <? if(preg_match('/^bizproc/', $fieldId)): ?> <? if($bizprocTitle): ?> <? $bizprocTitle = false ?> <tr><td colspan="2" style="visibility: hidden"></td></tr> <tr> <td colspan="2" class="bx-lists-bizproc-parameters-title"><?= $title ?></td> </tr> <? endif ?> <? if($manyParameters && empty($listTemplateId[$field['templateId']])): ?> <tr><td colspan="2" style="visibility: hidden"></td></tr> <tr class="bx-lists-bp-parameters-template"> <td colspan="2"><?= $field["templateName"] ?></td> </tr> <? $listTemplateId[$field['templateId']] = true; ?> <? endif ?> <? endif ?> <? $customHtml = (isset($field['value'])? $field['value'] : $this->lists['FORM_DATA'][$field['id']]); $params = ''; if(is_array($field['params']) && $field['type'] <> 'file') { foreach($field['params'] as $p => $v) $params .= ' '.$p.'="'.$v.'"'; } $required = $field['required'] ? '<span class="bx-lists-required">*</span>' : ''; $style = $field['show'] == 'Y' ? '' : 'style="display:none;"'; if($field['type'] == 'file'): ?> <script> var wrappers = document.getElementsByClassName('bx-lists-input-file'); for (var i = 0; i < wrappers.length; i++) { var inputs = wrappers[i].getElementsByTagName('input'); for (var j = 0; j < inputs.length; j++) { inputs[j].onchange = getName; } } function getName () { var str = this.value, i; if (str.lastIndexOf('\\')) { i = str.lastIndexOf('\\')+1; } else { i = str.lastIndexOf('/')+1; } str = str.slice(i); var uploaded = this.parentNode.parentNode.getElementsByClassName('fileformlabel')[0]; uploaded.innerHTML = str; } </script> <? endif; ?> <tr <?= $style ?>> <td class="bx-lists-table-first-td"> <?=htmlspecialcharsbx($field['name'])?>: <?= $required ?> </td> <? switch($field['type']): case 'label': case 'custom': ?><td><? $spanOne = ''; $spanTwo = ''; if (!empty($field["realType"])) { switch ($field["realType"]) { case "select": case "internalselect": case "E:EList": case "bool": $spanOne = '<span class="bx-bp-select">'; $spanTwo = '</span>'; break; } } echo $spanOne.$customHtml.$spanTwo; ?></td><? break; case 'checkbox': ?> <td> <input type="hidden" name="<?=$field['id']?>" value="N"> <input type="checkbox" name="<?=$field['id']?>" value="Y" <?=($customHtml == "Y"? ' checked':'')?><?=HtmlFilter::encode($params)?>> </td> <? break; case 'textarea': ?> <td> <textarea name="<?=$field['id']?>"<?=HtmlFilter::encode($params)?>><?=$customHtml?></textarea> </td> <? break; case 'list': $class = ''; if(!empty($params)) { $class = 'bx-bp-select-linking'; $spanOne = ''; $spanTwo = ''; } else { $spanOne = '<span class="bx-bp-select">'; $spanTwo = '</span>'; } ?><td> <?= $spanOne ?> <select name="<?=$field['id']?>"<?=HtmlFilter::encode($params)?> class="<?= $class ?>"> <? if(is_array($field['items'])): if(!is_array($customHtml)) $customHtml = array($customHtml); foreach($field['items'] as $k=>$v):?> <option value="<?=htmlspecialcharsbx($k)?>" <?=(in_array($k, $customHtml)? ' selected':'')?>> <?=htmlspecialcharsbx($v)?></option> <? endforeach; ?> </select> <?= $spanTwo ?> </td> <? endif; break; case 'file': ?> <td> <span class="file-wrapper"> <span class="bx-lists-input-file"> <span class="webform-small-button bx-lists-small-button"> <?= Loc::getMessage('LISTS_SEAC_FILE_ADD') ?></span> <input name="<?= $field['id'] ?>" size="<?= HtmlFilter::encode($field['params']['size']) ?>" type="file"> </span> <span class="fileformlabel bx-lists-input-file-name"></span> </span> </td> <? break; case 'date': ?> <td> <input class="bx-lists-input-calendar" value="<?=$customHtml?>" type="text" name="<?= $field['id'] ?>" onclick="BX.calendar({node: this.parentNode, field: this, bTime: true, bHideTime: false});"> <span class="bx-lists-calendar-icon" onclick="BX.calendar({node:this, field:'<?= $field['id'] ?>', form: '', bTime: true, bHideTime: false});" onmouseover="BX.addClass(this, 'calendar-icon-hover');" onmouseout="BX.removeClass(this, 'calendar-icon-hover');" border="0"></span> </td> <? break; default: ?> <td> <input type="text" name="<?=$field['id']?>" value="<?=$customHtml?>"<?=HtmlFilter::encode($params)?>> </td> <? break; endswitch; ?> </tr> <? endforeach ?> </table> <? } } $controller = new LiveFeedAjaxController(); $controller ->setActionName(\Bitrix\Main\Application::getInstance()->getContext()->getRequest()->getQuery('action')) ->exec();