portal.mkgtu.ru/common/modules/student/components/academicPlan/views/academicPlan.php

254 lines
12 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use common\models\User;
use common\modules\student\components\academicPlan\models;
use kartik\grid\GridView;
use kartik\widgets\Alert;
use kartik\widgets\DepDrop;
use yii\data\ArrayDataProvider;
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
use yii\helpers\Url;
use yii\widgets\Pjax;
$this->registerJs(
<<<JS
/**
* Данный кусочек скрипта предназначен для замены кнопки "сабмит". При нажатии на кнопку
* "Показать" из формы выше собирается POST запрос на отправку в "/student/academicplan",
* как будто это настоящая кнопка "сабмит". Эот всё ради не перегрузки "DepDrop".
*/
$(document).on('click', 'button#_academic_plan_button', function() {
var data = $("form#_academic_plan_form").serializeArray();
$.pjax({
data : data,
push : true,
type : 'POST',
replace : false,
timeout : 10000,
"scrollTo" : false,
url : '/student/academicplan',
container : '#_academic_table'
});
return false;
});
/**
* Этот скрипт выполняет тоже, что и выше с "псевдов сабмит", отличие только в том что
* он добавляет атрибут "sort" в отправляемый POST запрос. Это необходимо потому что
* встроенный запрос на сортировку конфликтует с запросом от формы, в результате чего
* при выборе НЕЕРВОГО элемента из "DepDrop" и нажатие на сортировку, таблица перегружается
* и отрисовывается уже таблица соответствующая ПЕРВОМУ элементу из "DepDrop". Эту
* проблему можно решить двумя способами:
* 1) отправлять форму используя GET;
* 2) и тот что приведён ниже.
*/
$(document).on('click', 'th a', function() {
var data = $("form#_academic_plan_form").serializeArray();
var buffer = $(this);
var value = buffer[0].text; /** Определяем какой именно был выбран столбец. */
if (buffer[0].classList.value == "asc") {
value = "-" + value; /** Если тип сортировки "A-Z", то передаём атрибут для инверсии */
}
data.push({ name: "sort", value: value });
$.pjax({
data : data,
push : true,
type : 'POST',
replace : false,
timeout : 10000,
"scrollTo" : false,
url : '/student/academicplan',
container : '#_academic_table'
});
return false;
});
JS
, yii\web\View::POS_END);
$this->title = Yii::$app->name;
echo Alert::widget([
'type' => Alert::TYPE_INFO,
'title' => '<strong>Информация</strong>: ',
'titleOptions' => ['icon' => 'info-sign'],
'body' => 'Для отображения данных укажите параметры поиска и нажмите кнопку "Показать"'
]);
?>
<div class="site-index">
<div class="body-content" id="body-content-id">
<h3>Учебные планы</h3>
<div class="plan-container">
<?php if (!empty($plans) && !empty($semesters)) : ?>
<div class="plan-header">
<?php echo Html::beginForm(Url::toRoute(['student/academicplan']), 'post', ['id' => '_academic_plan_form']); ?>
<div class="row">
<div class="col-12">
<div class="row">
<div class="col-12 col-sm-4 col-md-3 col-lg-2">
<?php if (Yii::$app->user->identity->isInRole(User::ROLE_STUDENT)) {
echo Html::tag('label', 'Учебный план:', ['for' => 'plan_plan']);
} elseif (Yii::$app->user->identity->isInRole(User::ROLE_TEACHER)) {
echo Html::tag('label', 'Место работы:', ['for' => 'plan_plan']);
} ?>
</div>
<div class="col-12 col-sm-8 col-md-9 col-lg-10">
<?php echo Html::dropDownList(
'plan_plan',
$plan_id,
ArrayHelper::map($plans, 'id', 'name'),
['class' => 'form-control form-group', 'id' => 'plan_id']
); ?>
</div>
</div>
</div>
<div class="col-12 mb-3">
<div class="row">
<div class="col-12 col-sm-4 col-md-3 col-lg-2">
<label for="plan_plan">Семестр:</label>
</div>
<div class="col-12 col-sm-8 col-md-9 col-lg-10">
<?php echo DepDrop::widget([
'value' => $semester_id,
'name' => 'plan_semester',
'class' => 'form-control form-group',
'type' => DepDrop::TYPE_SELECT2,
'data' => ArrayHelper::map($semesters, 'id', 'name'),
'options' => ['id' => 'semester_id', 'placeholder' => 'Выберите семестр'],
'select2Options' => ['pluginOptions' => ['allowClear' => false, 'multiple' => false]],
'pluginOptions' => [
'initialize' => true,
'depends' => ['plan_id'],
'loadingText' => 'Загрузка ...',
'placeholder' => 'Выберите семестр',
'dropdownParent' => '#body-content-id',
'url' => Url::to(['/student/semesters']),
],
]); ?>
</div>
</div>
</div>
<div class="col-12">
<?php echo Html::button('Показать', ['class' => 'btn btn-primary', 'id' => '_academic_plan_button']); ?>
</div>
</div>
<?php echo Html::endForm(); ?>
</div>
<?php else : ?>
<?php if (!empty($plans)) {
$role = 'данного элемента';
if (Yii::$app->user->identity->isInRole(User::ROLE_STUDENT)) {
$role = 'учебного плана';
} elseif (Yii::$app->user->identity->isInRole(User::ROLE_TEACHER)) {
$role = 'места работы';
}
echo Html::tag(
'div',
"Для {$role} записей не обнаружено.",
['class' => 'alert alert-info', 'role' => 'alert']
);
} elseif (!empty($semesters)) {
echo Html::tag(
'div',
'Для семестра записей не обнаружено.',
['class' => 'alert alert-info', 'role' => 'alert']
);
} ?>
<?php endif; ?>
<div class="row">
<div class="col-12 disciplines-container">
<?php if (isset($disciplines) && $disciplines) {
$loads = ['Предмет'];
$loads = array_merge($loads, models\Discipline::getLoads($disciplines));
$tableArray = [];
$disc_name = '';
$row['Предмет'] = '';
foreach ($loads as $load) {
$row[$load] = '';
}
$empty_row = $row;
foreach ($disciplines as $discipline) {
if ($disc_name != $discipline->name && $disc_name != '') {
$tableArray[] = $row;
$row = $empty_row;
}
$row['Единица измерения'] = $discipline->unit;
if ($row['Предмет'] == '') {
$row['Предмет'] = $discipline->name;
}
foreach ($loads as $load) {
if ($discipline->load == $load) {
$row[$load] = $discipline->getInfo();
}
}
$disc_name = $discipline->name;
}
$tableArray[] = $row;
$loads[] = 'Единица измерения';
$dataProvider = new ArrayDataProvider([
'allModels' => $tableArray,
'sort' => [
'attributes' => $loads
]
]);
$columns = [];
foreach ($loads as $load) {
$columns[] = [
'label' => $load,
'attribute' => $load,
'contentOptions' => ($load == 'Предмет') ? ['id' => '_academic_table-left', 'class' => 'col-sm-4'] : []
];
}
Pjax::begin([
'options' => ['id' => '_academic_table'],
'timeout' => false,
'enablePushState' => false,
'clientOptions' => ['method' => 'POST']
]);
echo Html::beginTag('div', ['class' => 'table-responsive']);
echo GridView::widget([
'hover' => true,
'headerContainer' => ['class' => 'thead-light'],
'tableOptions' => ['class' => 'table-sm'],
'striped' => false,
'summary' => false,
'pager' => [
'firstPageLabel' => '<<',
'prevPageLabel' => '<',
'nextPageLabel' => '>',
'lastPageLabel' => '>>',
],
'columns' => $columns,
'layout' => '{items}{pager}',
'dataProvider' => $dataProvider,
'options' => ['align' => 'left', 'id' => '_academic_table']
]);
echo Html::endTag('div');
Pjax::end();
} else {
Pjax::begin([
'options' => ['id' => '_academic_table'],
'timeout' => false,
'enablePushState' => false,
'clientOptions' => ['method' => 'POST']
]);
echo Html::tag(
'div',
'Для заданных параметров данные не могут быть предоставлены.',
['class' => 'alert alert-info', 'role' => 'alert']
);
Pjax::end();
} ?>
</div>
</div>
</div>
</div>
</div>