Newer
Older
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Teacher_Rating extends Controller_UserEnvi {
Антон Шалимов
committed
Cookie::set('fD', 'true'); // Ставим кук fD, чтоб иметь возможность скачать отчет TODO
$this->model_rating = new Model_Teacher_Rating;
$this->model_discipline = new Model_Teacher_Map;
Антон Шалимов
committed
// Получить из кука SGID выбранную ранее группу для данной дисциплины
private function getStudyGroupID_ForFilter($id)
Антон Шалимов
committed
$SG_array = json_decode(Cookie::get('SGID', null), true);
if ($SG_array !== null)
Антон Шалимов
committed
if (array_key_exists($id, $SG_array))
return $SG_array[$id];
Антон Шалимов
committed
// Настройки дисциплины и выбранная группа(для фильтра)
private function getDisciplineInformation($id) {
$temp = $this->model_discipline->getDisciplineInfoByID($id);
$disciplineInfo['ExamType'] = $temp[0]['ExamType'];
$disciplineInfo['ID'] = $id;
Антон Шалимов
committed
$disciplineInfo['StudyGroupID_Filter'] = $this->getStudyGroupID_ForFilter($id);
return $disciplineInfo;
}
// Страница оценивания в течение семестра
$id = $this->request->param('id');
Антон Шалимов
committed
// Шапка таблицы: структура УКД (модули и мероприятия)
$structure = $this->model_rating->GetMapForDiscipline($this->UserInfo['TeacherID'], $id);
throw HTTP_Exception::factory (404, "Для дисциплины с ID $id не создана УКД или такой дисциплины не существует!");
Антон Шалимов
committed
$maxRate = 0; $i = 0; $temp_moduleID = 0;
Антон Шалимов
committed
if($row['ModuleID'] != $temp_moduleID)
Антон Шалимов
committed
$i++; // todo
$temp_moduleID = $row['ModuleID'];
if ($i == 1)
Антон Шалимов
committed
$twig->SubjectName = $row['SubjectName'];
if(!isset($structureHandled[$i]['SubmodulesCount']))
$structureHandled[$i]['SubmodulesCount'] = 0;
$structureHandled[$i]['MaxRate'] = 0;
$j = $structureHandled[$i]['SubmodulesCount'] += 1;
$structureHandled[$i]['MaxRate'] += (int) $row['MaxRate'];
$structureHandled[$i]['ModuleTitle'] = $row['ModuleName'];
$structureHandled[$i]['ModuleType'] = $row['ModuleType'];
$twig->examSubmoduleID = $row['SubmoduleID'];
$structureHandled[$i][$j]['SubmoduleID'] = $row['SubmoduleID'];
$structureHandled[$i][$j]['Title'] = $row['SubModuleName'];
//$structureHandled[$i][$j]['Description'] = $row['SubmoduleDescription']; // Описание
$structureHandled[$i][$j]['MaxRate'] = (int) $row['MaxRate'];
$maxRate += $row['MaxRate'];
if ($row['ModuleType'] == "exam" || $row['ModuleType'] == "extra") {
$structureHandled[$i][$j]['SubmoduleID'] = -1;
}
$structureHandled['ModulesCount'] = $i;
$structureHandled['MaxRate'] = (int) $maxRate;
// end Шапка таблицы
// Студенты и их баллы
Антон Шалимов
committed
$students = $this->model_rating->GetStudentsForRating($this->UserInfo['TeacherID'], $id);
$rateHandled = array();
$groupsHandled = array();
$i_g = 0; $i_s = 0; $curGroup = 0;
foreach($students as $row) {
Антон Шалимов
committed
if ($curGroup !== $row['GroupID'])
{
$curGroup = $row['GroupID'];
$i_g++;
$rateHandled[$i_g]['GroupID'] = $row['GroupID'];
$rateHandled[$i_g]['GroupNum'] = $row['GroupNum']; // № группы
$rateHandled[$i_g]['GradeNum'] = $row['GradeNum']; // № курса
$rateHandled[$i_g]['isAttached'] = $row['isAttached']; // #1
if ($row['Degree'] == 'bachelor')
$rateHandled[$i_g]['GradeTitle'] = $row['GradeNum'].' курс';
if ($row['Degree'] == 'specialist')
$rateHandled[$i_g]['GradeTitle'] = $row['GradeNum'].' курс';
if ($row['Degree'] == 'master')
$rateHandled[$i_g]['GradeTitle'] = 'Магистратура, '.$row['GradeNum'].' год';
$groupsHandled[$curGroup] = $rateHandled[$i_g]['GradeTitle']." ".$row['GroupNum']." группа";
}
Антон Шалимов
committed
Антон Шалимов
committed
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
$curStudent = array();
$i_s++;
$curStudent['ID'] = $row['ID'];
$curStudent['Last'] = $row['Last'];
$curStudent['First'] = $row['First'];
$curStudent['Second'] = $row['Second'];
$curStudent['isAttached'] = $row['isAttached']; // #1
// Баллы студента
$rates = $this->model_rating->getMapForStudent($row['ID'], $id);
$i_r = 0;
$curStudent['RateResult'] = 0;
foreach($rates as $r) {
$i_r++;
$curStudent['Rates'][$i_r]['Rate'] = $r['Rate'];
$curStudent['RateResult'] += $r['Rate'];
if ($r['ModuleType'] == 'exam')
$curStudent['Rates'][$i_r]['SubmoduleID'] = -1;
else if ($r['ModuleType'] == 'extra')
$curStudent['Rates'][$i_r]['SubmoduleID'] = -2;
else
$curStudent['Rates'][$i_r]['SubmoduleID'] = $r['SubmoduleID'];
$curStudent['Rates'][$i_r]['Type'] = $r['ModuleType'];
}
$rateHandled[$i_g]['Students'][$i_s] = $curStudent;
/*
$i_s++;
$rateHandled[$i_g]['Students'][$i_s]['ID'] = $row['ID'];
$rateHandled[$i_g]['Students'][$i_s]['Last'] = $row['Last'];
$rateHandled[$i_g]['Students'][$i_s]['First'] = $row['First'];
$rateHandled[$i_g]['Students'][$i_s]['Second'] = $row['Second'];
$rateHandled[$i_g]['Students'][$i_s]['isAttached'] = $row['isAttached']; // #1
Антон Шалимов
committed
$rate = $this->model_rating->getMapForStudent($row['ID'], $id);
$i_r = 0;
$rateHandled[$i_g]['Students'][$i_s]['RateResult'] = 0;
foreach($rate as $r) {
$i_r++;
$rateHandled[$i_g]['Students'][$i_s]['Rates'][$i_r]['Rate'] = $r['Rate'];
$rateHandled[$i_g]['Students'][$i_s]['RateResult'] += $r['Rate'];
$rateHandled[$i_g]['Students'][$i_s]['Rates'][$i_r]['SubmoduleID'] = -1;
else if ($r['ModuleType'] == 'extra')
$rateHandled[$i_g]['Students'][$i_s]['Rates'][$i_r]['SubmoduleID'] = -2;
else
$rateHandled[$i_g]['Students'][$i_s]['Rates'][$i_r]['SubmoduleID'] = $r['SubmoduleID'];
Антон Шалимов
committed
*/
}
Антон Шалимов
committed
// На вывод
$twig->headerRate = $structureHandled;
$twig->rateTable = $rateHandled;
$twig->groups = $groupsHandled;
Антон Шалимов
committed
$twig->disciplineInfo = $this->getDisciplineInformation($id);
$twig->disciplineInfo_JSON = json_encode($twig->disciplineInfo);
Антон Шалимов
committed
// Страница оценивания в сессию
{
$twig = Twig::factory('teacher/exam');
$twig->User = $this->UserInfo;
$id = $this->request->param('id');
Антон Шалимов
committed
$structure = $this->model_rating->GetMapForDisciplineExam($this->UserInfo['TeacherID'], $id);
$disciplineInfo = $this->getDisciplineInformation($id);
if($structure->count() == 0)
throw HTTP_Exception::factory (404, "Страница не найдена");
$structureHandled = array();
Антон Шалимов
committed
$maxRate = 0; $i = 0; $temp_moduleID = 0; $try_1 = 0; // try = 1 - экзамен, = 2, 3 - пересдачи
Антон Шалимов
committed
if($row['ModuleID'] != $temp_moduleID)
Антон Шалимов
committed
++$i; // todo
$temp_moduleID = $row['ModuleID'];
Антон Шалимов
committed
$twig->SubjectName = $row['SubjectName'];
if(!isset($structureHandled[$i]['SubmodulesCount']))
{
$structureHandled[$i]['SubmodulesCount'] = 0;
$structureHandled[$i]['MaxRate'] = 0;
}
$j = $structureHandled[$i]['SubmodulesCount'] += 1;
$structureHandled[$i]['MaxRate'] += (int) $row['MaxRate'];
$structureHandled[$i]['ModuleTitle'] = $row['ModuleName'];
$structureHandled[$i]['ModuleType'] = $row['ModuleType'];
if ($row['ModuleType'] == "exam")
$twig->examSubmoduleID = $row['SubmoduleID'];
$structureHandled[$i][$j]['SubmoduleID'] = $row['SubmoduleID'];
$structureHandled[$i][$j]['Title'] = 'Добор баллов';
if ($try === 0)
$structureHandled[$i][$j]['Title'] = 'Основная сдача';
else
$structureHandled[$i][$j]['Title'] = 'Пересдача '.$try;
$try++;
//$structureHandled[$i][$j]['Description'] = $row['SubmoduleDescription']; // Описание
$structureHandled[$i][$j]['MaxRate'] = (int) $row['MaxRate'];
}
$structureHandled['ModulesCount'] = $i;
$structureHandled['MaxRate'] = (int) $maxRate;
// end Шапка таблицы
// Студенты и их баллы по экзамену
Антон Шалимов
committed
$students = $this->model_rating->GetStudentsForRating($this->UserInfo['TeacherID'], $id);
if ($curGroupID !== $row['GroupID']) {
$curGroupID = $row['GroupID'];
$i_g++;
$rateHandled[$i_g]['GroupID'] = $row['GroupID'];
$rateHandled[$i_g]['GroupNum'] = $row['GroupNum']; // № группы
$rateHandled[$i_g]['GradeNum'] = $row['GradeNum']; // № курса
$rateHandled[$i_g]['isAttached'] = $row['isAttached']; // #1
if ($row['Degree'] == 'bachelor')
$rateHandled[$i_g]['GradeTitle'] = $row['GradeNum'].' курс';
if ($row['Degree'] == 'specialist')
$rateHandled[$i_g]['GradeTitle'] = $row['GradeNum'].' курс';
if ($row['Degree'] == 'master')
$rateHandled[$i_g]['GradeTitle'] = 'Магистратура, '.$row['GradeNum'].' год';
$groupsHandled[$curGroupID] = $rateHandled[$i_g]['GradeTitle']." ".$row['GroupNum']." группа";
Антон Шалимов
committed
// Студенты
$curStudent['ID'] = $row['ID'];
$curStudent['Last'] = $row['Last'];
$curStudent['First'] = $row['First'];
$curStudent['Second'] = $row['Second'];
$curStudent['isAttached'] = $row['isAttached']; // #1
Антон Шалимов
committed
$rate = $this->model_rating->getMapForStudentExam($row['ID'], $id);
$curStudent['RateSemesterResult'] = 0;
if (($r['ModuleType'] == 'exam') or ($r['ModuleType'] == 'extra')) {
$curStudent['Rates'][$i_r] = array();
$curStudent['Rates'][$i_r]['SubmoduleID'] = $r['SubmoduleID'];
$curStudent['Rates'][$i_r]['Rate'] = $r['Rate'];
$curStudent['Rates'][$i_r]['ModuleType'] = $r['ModuleType'];
}
switch ($r['ModuleType'])
{
case 'regular':
$curStudent['RateSemesterResult'] += $r['Rate'];
break;
case 'exam':
if (!is_null($r['Rate'])) {
if ($lastExam >= 0) {
$curStudent['Rates'][$lastExam]['Block'] = 'True';
}
$lastExam = $i_r;
} else {
if ($lastNilExam < 0) {
$lastNilExam = $i_r;
} else {
$curStudent['Rates'][$i_r]['Block'] = 'True';
}
}
break;
case 'bonus':
$curStudent['Bonus'] = $r['Rate'];
break;
case 'extra':
if (!is_null($r['Rate'])) {
if ($lastExtra >= 0) {
$curStudent['Rates'][$lastExtra]['Block'] = 'True';
}
$lastExtra = $i_r;
} else {
if ($lastNilExtra < 0) {
$lastNilExtra = $i_r;
} else {
$curStudent['Rates'][$i_r]['Block'] = 'True';
}
break;
default:
throw HTTP_Exception::factory (500, "Некорректный тип модуля!");
}
Антон Шалимов
committed
$total = $this->model_rating->GetStudentRate($row['ID'], $id);
$total = $total[0]['Num'];
if (is_null($total)) $total = 0;
$curStudent['RateResult'] += $curStudent['Rates'][$lastExam]['Rate'];
$bottomLimit = 0;
$topLimit = ($disciplineInfo['ExamType'] == 'exam') ? 38 : 60;
if ($curStudent['RateSemesterResult'] >= $bottomLimit &&
$curStudent['RateSemesterResult'] < $topLimit) // студент задолженик
$max_extra_rate = $topLimit - $curStudent['RateSemesterResult'];
$curStudent['Rates'][$lastExtra]['MaxRate'] = $max_extra_rate;
$curStudent['Rates'][$lastNilExtra]['MaxRate'] = $max_extra_rate;
Антон Шалимов
committed
// На вывод
$twig->headerRate = $structureHandled;
$twig->rateTable = $rateHandled;
$twig->groups = $groupsHandled;
Антон Шалимов
committed
$twig->disciplineInfo_JSON = json_encode($twig->disciplineInfo);