Last active
May 16, 2022 16:09
-
-
Save hackimov/51b0f54a4e1baf9bac64eee88bab71b2 to your computer and use it in GitHub Desktop.
Main Ui Grid + Cform Result
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); | |
# указываем ID формы с которой будем работать | |
$FORM_ID = 23; | |
global $APPLICATION; | |
# подключаем стили | |
//require_once("css_include.php"); | |
\CJSCore::init("sidepanel"); | |
# указываем заголовок страницы | |
$APPLICATION->SetTitle("Анкеты соискателей"); | |
# указываем ссылки на объекты классы которых будем использовать | |
use \Bitrix\Iblock\PropertyEnumerationTable; | |
use Bitrix\Main\Grid\Options as GridOptions; | |
use Bitrix\Main\UI\PageNavigation; | |
# массив групп, которые в которых нужно проверить доступность пользователя | |
# 1 Пользователи с Админкой, 8 Отдел кадров, 9 Руководство | |
$arGroupAvalaible = array(1,8,9); | |
# массив групп, в которых состоит пользователь | |
$arGroups = CUser::GetUserGroup($USER->GetID()); | |
# далее проверяем, если пользователь вошёл хотя бы в одну из групп, то позволяем ему что-либо делать | |
$result_intersect = array_intersect($arGroupAvalaible, $arGroups); | |
if(!empty($result_intersect)) | |
{ | |
?> | |
<!-- это важная таблица! --> | |
<!-- <div class="page-header"> --> | |
<!-- <div class="pagetitle-wrap "> --> | |
<!-- тут находится фоновый див --> | |
<!-- <div class="back"> --> | |
<? | |
# подключим стили битрикса | |
Bitrix\Main\Page\Asset::getInstance()->addCss('/bitrix/css/main/grid/webform-button.css'); | |
Bitrix\Main\Page\Asset::getInstance()->addCss('/bitrix/js/intranet/intranet-common.css'); | |
# подключим модуль Сform | |
CModule::IncludeModule('form'); | |
############################################################################## | |
######################### ОБРАБОТКА УДАЛЕНИЯ ############################ | |
############################################################################## | |
# проверяем приходит ли реквест операции и ID и id | |
if(isset($_REQUEST["op"]) && $_REQUEST["id"]) | |
{ # проверяем если к нам пришла операция делет | |
if ($_REQUEST["op"] === "delete") | |
{ | |
CFormResult::Delete($_REQUEST["id"], "N"); | |
} | |
} | |
############################################################################## | |
############################################################################## | |
############################################################################## | |
# тут мы указываем название нашего грида | |
$list_id = 'example_list'; | |
# создаём объект с настройками для грида | |
$grid_options = new GridOptions($list_id); | |
# указываем сортировку грида по полям | |
$sort = $grid_options->GetSorting(['sort' => ['DATE_CREATE' => 'DESC'], 'vars' => ['by' => 'by', 'order' => 'order']]); | |
# получаем параметры навигации для грида | |
$nav_params = $grid_options->GetNavParams(); | |
#создаем объект навигации | |
$nav = new PageNavigation($list_id); | |
# отключаем кнопку все записи | |
$nav->allowAllRecords(true) | |
# устанавливаем размер страницы | |
->setPageSize($nav_params['nPageSize']) | |
->initFromUri(); | |
# указываем гриду сколько записей у него есть | |
$nav->setRecordCount($rowcount); | |
# в массиве $nav_params['nPageSize'] хранится кол-во выводимых строк на странице | |
$nav->setPageSize($nav_params['nPageSize']); | |
$nav_params['iNumPage'] = $nav->getCurrentPage(); | |
# фильтр по направлению сортировки для гетлиста | |
foreach ($sort["sort"] as $key=>$value) | |
{ | |
$string = $key; | |
$string = mb_strtolower($string); | |
$by = "s_$string"; | |
$order = $value; | |
} | |
# тут задаем параметры фильтра для грида | |
$ui_filter = [ | |
['id' => 'DATE_CREATE', 'name' => 'Дата создания', 'type'=>'date', 'default' => true], | |
['id' => 'STATUS_TITLE', 'name' => 'Статус заявки', 'type'=>'list', 'default' => true, 'items' => | |
[ | |
'' => 'Любой', | |
'89' => 'Заявка не обработана', | |
'90' => 'Отказ, созвонились с кандидатом', | |
'91' => 'Назначено собеседование', | |
'92' => 'Собеседование проведено, соискатель в состоянии ожидания ответа', | |
'93' => 'Кандидат рассмотрен отделом кадров (отказ)', | |
'94' => 'Не дозвонились до соискателя', | |
'95' => 'Отказ, устаревшая заявка', | |
'96' => 'Встреча, передача тестового задания', | |
'97' => 'Отказ, соискатель не интересен', | |
'98' => 'Тестовое задание отправлено по электронной почте', | |
'99' => 'Соискатель не явился на собеседование', | |
'100' => 'Встреча, передача данных в отдел кадров', | |
'101' => 'Сотрудник в штате компании', | |
'102' => 'Связаться позже', | |
'103' => 'Заявка на рассмотрении', | |
'104' => 'Предложена другая вакансия', | |
'105' => 'На стажировке', | |
'106' => 'На рассмотрении' | |
], | |
'params' => ['multiple' => 'Y']], | |
['id' => 'LASTNAME', 'name' => 'Фамилия', 'type'=>'text', 'default' => true], | |
['id' => 'NAME', 'name' => 'Имя', 'type'=>'text', 'default' => true], | |
['id' => 'FATHERNAME', 'name' => 'Отчество', 'type'=>'text', 'default' => true], | |
['id' => 'PhoneSOIS', 'name' => 'Телефон', 'type'=>'text', 'default' => true], | |
['id' => 'emailSOIS', 'name' => 'Е-маил', 'type'=>'text', 'default' => true], | |
['id' => 'BirthdaySOIS', 'name' => 'Дата Рождения', 'type'=>'date', 'default' => true], | |
['id' => 'gender', 'name' => 'Пол', 'type'=>'list', 'default' => true, 'items' => ['male' => 'Мужской', 'female' => 'Женский']], | |
['id' => 'selectedVacancieSOIS', 'name' => 'Выбранная вакансия', 'type'=>'text', 'default' => true], | |
['id' => 'TypeeduSOIS', 'name' => 'Образование', 'type'=>'list', 'default' => true, 'items' => ['Школа' => 'Школа', 'Колледж или ПТУ' => 'Колледж или ПТУ', 'Незаконченное высшее' => 'Незаконченное высшее', 'Высшее - бакалавр' => 'Высшее - бакалавр', 'Полное высшее или магистратура' => 'Полное высшее или магистратура', ]], | |
]; | |
# с этого момента запускается отложенное действие | |
$this->SetViewTarget("inside_pagetitle", 100); #inside_pagetitle #pagetitle?> | |
<div class="pagetitle-container pagetitle-flexible-space job-filter"> | |
<? | |
$APPLICATION->IncludeComponent('bitrix:main.ui.filter', '', [ | |
'FILTER_ID' => $list_id, | |
'GRID_ID' => $list_id, | |
'FILTER' => $ui_filter, | |
'ENABLE_LIVE_SEARCH' => false, | |
'ENABLE_LABEL' => true | |
]); | |
?> | |
</div> | |
<? | |
# тут заканчивается отложенное действие | |
$this->EndViewTarget(); | |
$filterOption = new Bitrix\Main\UI\Filter\Options($list_id); | |
$filterData = $filterOption->getFilter([]); | |
foreach ($filterData as $k => $v) | |
{ | |
$filter_grid[$k] = $v; | |
$str_find = "%".$filterData['FIND']."%"; | |
} | |
# формируем сам фильтр | |
$filter_UI["FIELDS"] = $filter_grid; | |
############## формируем фильтр по статусам ############## | |
# удаляем пустые элементы массива если такие есть | |
$new_noempty_arr = array_diff($filter_UI["FIELDS"]["STATUS_TITLE"], array('', NULL, false)); | |
# запихиваем массив со статусами непосредственно в фильтр | |
$filter["STATUS_ID"] = implode("|", $new_noempty_arr); | |
########################################################## | |
# чистим массив | |
unset($filter["FIELDS"]["PRESET_ID"]); | |
unset($filter["FIELDS"]["FILTER_ID"]); | |
unset($filter["FIELDS"]["FILTER_APPLIED"]); | |
unset($filter["FIELDS"]["FIND"]); | |
unset($filter["FIELDS"]["DATE_CREATE_datesel"]); | |
unset($filter["FIELDS"]["BirthdaySOIS_datesel"]); | |
# тут мы фильтруем по диапазону дат создания | |
$filter["DATE_CREATE_1"] = $filter_UI["FIELDS"]["DATE_CREATE_from"]; | |
$filter["DATE_CREATE_2"] = $filter_UI["FIELDS"]["DATE_CREATE_to"]; | |
unset($filter_UI["FIELDS"]["DATE_CREATE_from"]); | |
unset($filter_UI["FIELDS"]["DATE_CREATE_to"]); | |
# закончили фильтрацию и почистили за собой массив | |
if(!empty($filterData['FIND'])) | |
{ | |
$filter_UI["FIELDS"]["LASTNAME"] = $str_find; | |
} | |
# тут мы делаем фильтрацию по точным совпадениям значений | |
$arFields[] = [ | |
"CODE" => "LastnameSOIS", | |
"FILTER_TYPE" => "text", | |
"PARAMETER_NAME" => "USER", | |
"VALUE" => $filter_UI["FIELDS"]["LASTNAME"], | |
"EXACT_MATCH" => "N" | |
]; | |
$arFields[] = [ | |
"CODE" => "NameSOIS", | |
"FILTER_TYPE" => "text", | |
"PARAMETER_NAME" => "USER", | |
"VALUE" => $filter_UI["FIELDS"]["NAME"], | |
"EXACT_MATCH" => "N" | |
]; | |
$arFields[] = [ | |
"CODE" => "2nameSOIS", | |
"FILTER_TYPE" => "text", | |
"PARAMETER_NAME" => "USER", | |
"VALUE" => $filter_UI["FIELDS"]["FATHERNAME"], | |
"EXACT_MATCH" => "N" | |
]; | |
$arFields[] = [ | |
"CODE" => "PhoneSOIS", | |
"FILTER_TYPE" => "text", | |
"PARAMETER_NAME" => "USER", | |
"VALUE" => $filter_UI["FIELDS"]["PhoneSOIS"], | |
"EXACT_MATCH" => "N" | |
]; | |
$arFields[] = [ | |
"CODE" => "emailSOIS", | |
"FILTER_TYPE" => "text", | |
"PARAMETER_NAME" => "USER", | |
"VALUE" => $filter_UI["FIELDS"]["emailSOIS"], | |
"EXACT_MATCH" => "N" | |
]; | |
$arFields[] = [ | |
"CODE" => "selectedVacancieSOIS", | |
"FILTER_TYPE" => "text", | |
"PARAMETER_NAME" => "USER", | |
"VALUE" => $filter_UI["FIELDS"]["selectedVacancieSOIS"], | |
"EXACT_MATCH" => "N" | |
]; | |
# тут фильтрация по полу | |
$arFields[] = [ | |
"CODE" => "gender", | |
"FILTER_TYPE" => "text", | |
"PARAMETER_NAME" => "ANSWER_VALUE", | |
"VALUE" => $filter_UI["FIELDS"]["gender"], | |
"EXACT_MATCH" => "Y" | |
]; | |
# тут фильтрация по образованию | |
$arFields[] = [ | |
"CODE" => "TypeeduSOIS", | |
"FILTER_TYPE" => "text", | |
"PARAMETER_NAME" => "ANSWER_TEXT", | |
"VALUE" => $filter_UI["FIELDS"]["TypeeduSOIS"], | |
"EXACT_MATCH" => "N" | |
]; | |
# тут поля фильтрации по интервалам дат рождения | |
$arFields[] = [ | |
"CODE" => "BirthdaySOIS", | |
"FILTER_TYPE" => "date", | |
"PARAMETER_NAME" => "USER", | |
"VALUE" => $filter_UI["FIELDS"]["BirthdaySOIS_from"], | |
"PART" => "1" | |
]; | |
$arFields[] = [ | |
"CODE" => "BirthdaySOIS", | |
"FILTER_TYPE" => "date", | |
"PARAMETER_NAME" => "USER", | |
"VALUE" => $filter_UI["FIELDS"]["BirthdaySOIS_to"], | |
"PART" => "2" | |
]; | |
# закончили фильтрацию по интервалам дат | |
# присвоили сформировали фильтр и присвоили его куда надо | |
$filter["FIELDS"] = $arFields; | |
############################################################################## | |
####### хитрый блок пагинации (получение строк по состоянию текущей) ######### | |
############################################################################## | |
# делаем гетлист и запихиваем все существующие ID в $arID | |
$formResult = CFormResult::GetList($FORM_ID,$by, $order, $filter, $is_filter,"Y"); | |
while ($arIDRes = $formResult->Fetch()) | |
{ | |
$arID[] = $arIDRes['ID']; | |
} | |
$rowcount = count($arID); | |
$nav->setRecordCount($rowcount); | |
# кол-во строк отображаемых в выводе | |
$row_count = $nav_params['nPageSize']; | |
# получаем номер текуей страницы | |
$current_page = $nav_params['iNumPage']; | |
$current_page = $current_page - 1; | |
# умножаем кол-во выводимых на странице записей на кол-во страниц | |
# получаем номер строки старта фильтра | |
$start_rows = $row_count * $current_page; | |
# получаем номер строки конца фильтра | |
$end_rows = $start_rows + $row_count; | |
# запихиваем нужные нам строки из общего массива, в массив строк страницы | |
for ($i = $start_rows; $i <= $end_rows; $i++) { | |
$arPagination[] = $arID[$i];; | |
} | |
# делаем понятный для формы фильтр по ID | |
$id_filter = implode("|", $arPagination); | |
# Формируем фильтр | |
$filter["ID"] = "$id_filter"; | |
############################################################################## | |
############################################################################## | |
############################################################################## | |
# тут вывод даных на страницу | |
$columns = []; | |
$columns[] = ['id' => 'ID', 'name' => 'ID', 'sort' => 'ID', 'default' => true]; | |
$columns[] = ['id' => 'LASTNAME', 'name' => 'Фамилия', 'sort' => 'LASTNAME', 'default' => true]; | |
$columns[] = ['id' => 'NAME', 'name' => 'Имя', 'sort' => 'NAME', 'default' => true]; | |
$columns[] = ['id' => 'FATHERNAME', 'name' => 'Отчество', 'sort' => 'FATHERNAME', 'default' => true]; | |
$columns[] = ['id' => 'STATUS_TITLE', 'name' => 'Статус заявки', 'sort' => 'STATUS_TITLE', 'default' => true]; | |
$columns[] = ['id' => 'DATE_CREATE', 'name' => 'Создано', 'sort' => 'DATE_CREATE', 'default' => true]; | |
$columns[] = ['id' => 'TypeeduSOIS', 'name' => 'Образование', 'sort' => 'TypeeduSOIS', 'default' => true]; | |
$columns[] = ['id' => 'BirthdaySOIS', 'name' => 'Дата Рождения', 'sort' => 'BirthdaySOIS', 'default' => true]; | |
$columns[] = ['id' => 'PhoneSOIS', 'name' => 'Телефон', 'sort' => 'PhoneSOIS', 'default' => true]; | |
$columns[] = ['id' => 'emailSOIS', 'name' => 'Е-маил', 'sort' => 'emailSOIS', 'default' => true]; | |
$columns[] = ['id' => 'NameeduSOIS', 'name' => 'Учебное заведение, год окончания, специальность:', 'sort' => 'NameeduSOIS', 'default' => true]; | |
$columns[] = ['id' => 'profeduSOIS', 'name' => 'Профессиональные знания', 'sort' => 'profeduSOIS', 'default' => true]; | |
$columns[] = ['id' => 'departmentSOIS', 'name' => 'В каких сферах деятельности Вы хотели бы работать:', 'sort' => 'departmentSOIS', 'default' => true]; | |
$columns[] = ['id' => 'lostlevelSOIS', 'name' => 'Должностные обязанности', 'sort' => 'lostlevelSOIS', 'default' => true]; | |
$columns[] = ['id' => 'priceSOIS', 'name' => 'Желаемый минимальный уровень зарплаты', 'sort' => 'priceSOIS', 'default' => true]; | |
# получение списка записей | |
$rsResults = CFormResult::GetList($FORM_ID, $by, $order, $filter, $is_filter,"Y", $row_count); | |
while ($arResult = $rsResults->Fetch()) | |
{ | |
# получим данные по всем вопросам | |
$arAnswer = CFormResult::GetDataByID($arResult['ID'],array(),$null,$null); | |
//echo"<pre>";print_r($arAnswer);echo"</pre>"; | |
/* | |
$rsAnswer = CFormAnswer::GetByID(159); | |
$arrAnswer = $rsAnswer->Fetch(); | |
//echo "<pre>"; print_r($arrAnswer); echo "</pre"; | |
$plassmass = ["ID" => "153", "FIELD_PARAM" => "checked class=\"inputradio\""]; | |
//$data = CForm::GetCheckBoxValue("TypeeduSOIS", false, false); | |
$arAnswerr = array("ID" => 153,); | |
$arrVALUES = CFormResult::GetDataByIDForHTML($arResult['ID'], "N"); | |
$value = CForm::GetRadioValue($QUESTION_SID, $arAnswerr, $arrVALUES); | |
*/ | |
/* | |
CForm::GetResultAnswerArray($arResult['ID'],array &columns,array &answers, array &answers2 = array(),array filter = array(), | |
) | |
*/ | |
//echo "<pre>"; print_r($value); echo "</pre"; | |
$list[] = [ | |
'data' => [ | |
"ID" => $arResult['ID'], | |
"LASTNAME" => $arAnswer["LastnameSOIS"][0]["USER_TEXT"], | |
"NAME" => $arAnswer["NameSOIS"][0]["USER_TEXT"], | |
"FATHERNAME" => $arAnswer["2nameSOIS"][0]["USER_TEXT"], | |
"STATUS_TITLE" => $arResult['STATUS_TITLE'], | |
"DATE_CREATE" => $arResult['DATE_CREATE'], | |
"TypeeduSOIS" => $arAnswer['TypeeduSOIS'][0]["ANSWER_TEXT"], | |
"BirthdaySOIS" => $arAnswer["BirthdaySOIS"][0]["USER_TEXT"], | |
"PhoneSOIS" => $arAnswer["PhoneSOIS"][0]["USER_TEXT"], | |
"emailSOIS" => $arAnswer["emailSOIS"][0]["USER_TEXT"], | |
"NameeduSOIS" => $arAnswer["NameeduSOIS"][0]["USER_TEXT"], | |
"profeduSOIS" => $arAnswer["profeduSOIS"][0]["USER_TEXT"], | |
"departmentSOIS" => $arAnswer["departmentSOIS"][0]["ANSWER_TEXT"], | |
"lostlevelSOIS" => $arAnswer["lostlevelSOIS"][0]["USER_TEXT"], | |
"priceSOIS" => $arAnswer["priceSOIS"][0]["USER_TEXT"], | |
], | |
'actions' => [ | |
[ | |
'text' => 'Просмотреть', | |
'default' => true, | |
'onclick' => 'BX.SidePanel.Instance.open("/job/detail.php?RESULT_ID='.$arResult['ID'].'")' | |
], | |
[ | |
'text' => 'Изменить', | |
'default' => true, | |
'onclick' => 'BX.SidePanel.Instance.open("/job/seeker_edit.php?RESULT_ID='.$arResult['ID'].'")' | |
], | |
/*[ | |
'text' => 'Распечатать', | |
'default' => true, | |
'onclick' => 'location.href="word.php?WORD_ID='.$arResult['ID'].'"' | |
],*/ | |
[ | |
'text' => 'Удалить', | |
'default' => true, | |
'onclick' => 'if(confirm("Точно?")){document.location.href="?op=delete&id='.$arResult['ID'].'"}' | |
] | |
] | |
]; | |
} | |
?> | |
<?php | |
$APPLICATION->IncludeComponent( | |
"bitrix:main.ui.grid", | |
".default", | |
array( | |
"GRID_ID" => $list_id, | |
"COLUMNS" => $columns, | |
"ROWS" => $list, | |
"SHOW_ROW_CHECKBOXES" => false, | |
"NAV_OBJECT" => $nav, | |
"AJAX_MODE" => "Y", | |
"AJAX_ID" => \CAjax::getComponentID("bitrix:main.ui.grid",".default",""), | |
"PAGE_SIZES" => array( | |
["NAME" => "100","VALUE"=>"100"], | |
["NAME" => "75","VALUE"=>"75"], | |
["NAME" => "50","VALUE"=>"50"], | |
["NAME" => "25","VALUE"=>"25"], | |
), | |
"AJAX_OPTION_JUMP" => "N", | |
"SHOW_CHECK_ALL_CHECKBOXES" => false, | |
"SHOW_ROW_ACTIONS_MENU" => true, | |
"SHOW_GRID_SETTINGS_MENU" => true, | |
"SHOW_NAVIGATION_PANEL" => true, | |
"SHOW_PAGINATION" => true, | |
"SHOW_SELECTED_COUNTER" => false, | |
"SHOW_TOTAL_COUNTER" => true, | |
"TOTAL_ROWS_COUNT" => $rowcount, | |
"SHOW_PAGESIZE" => true, | |
"SHOW_ACTION_PANEL" => true, | |
"ALLOW_COLUMNS_SORT" => true, | |
"ALLOW_COLUMNS_RESIZE" => true, | |
"ALLOW_HORIZONTAL_SCROLL" => true, | |
"ALLOW_SORT" => true, | |
"ALLOW_PIN_HEADER" => true, | |
"AJAX_OPTION_HISTORY" => "N", | |
"COMPONENT_TEMPLATE" => ".default", | |
"COMPOSITE_FRAME_MODE" => "A", | |
"COMPOSITE_FRAME_TYPE" => "DYNAMIC_WITH_STUB", | |
), | |
false | |
); | |
?> | |
<?}else{?> | |
<p style="color:#ff0000"> | |
<br> | |
Доступ Зарещен! | |
</p> | |
<?}?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment