diff --git a/~dev_rating/application/classes/Controller/Student/Subject.php b/~dev_rating/application/classes/Controller/Student/Subject.php index d95e98ed28051a2cc88c69a07f4524249c5b92f4..7e70d47ccd551b45a623ea9008a1f8b423df7c29 100644 --- a/~dev_rating/application/classes/Controller/Student/Subject.php +++ b/~dev_rating/application/classes/Controller/Student/Subject.php @@ -7,10 +7,13 @@ class Controller_Student_Subject extends Controller_Environment_Student $discipline = Model_Discipline::load($id); $rates = Model_Rating::getRates($id, $this->user->StudentID); + $map = self::generateDisciplineMapFrom($rates); + $this->twig->set([ 'Discipline' => $discipline, 'Teachers' => self::getTeachersListOf($discipline), - 'DisciplineMap' => self::generateDisciplineMapFrom($rates), + 'DisciplineMap' => $map['Modules'], + 'Submodules' => $map['Submodules'], 'Semester' => Model_Semesters::load($discipline->SemesterID), ])->set_filename(static::STUDENT . 'subject'); } @@ -27,17 +30,14 @@ class Controller_Student_Subject extends Controller_Environment_Student } private static function generateDisciplineMapFrom(Database_Result $rates) { - $id = 0; # not sure, what it is about :( - $sRate = 0; # completely legacy code, baby - $sMaxRate = 0; + $disMap = []; # not sure, what it is about :( + $examRate = 0; # completely legacy code, baby $extraRate = 0; $bonusRate = 0; $bonusMaxRate = 0; - $examRate = 0; $examMaxRate = 0; - $disMap = array(); - $modulesCount = 0; $disMap['Extra']['Rate'] = 0; + $submodules = []; foreach ($rates as $row) { switch ($row['ModuleType']) { @@ -72,46 +72,28 @@ class Controller_Student_Subject extends Controller_Environment_Student break; default: - $sRate += (int)$row['Rate']; - $sMaxRate += (int)$row['MaxRate']; + $id = $row['ModuleID']; + $module =& $disMap['Modules'][$id]; - if ($row['ModuleID'] != $id) { - $id = $row['ModuleID']; - $modulesCount++; - } + $module['Title'] = $row['ModuleName']; + $module['Submodules'][] = $row['SubmoduleID']; - $module =& $disMap['Modules'][$modulesCount]; - - if (!isset($module['SubmodulesCount'])) { - $module['Rate'] = 0; - $module['MaxRate'] = 0; - $module['SubmodulesCount'] = 0; - } - - $module['Title'] = $row['ModuleName']; - $module['Rate'] += (int)$row['Rate']; - $module['MaxRate'] += (int)$row['MaxRate']; - $module['SubmodulesCount']++; - - $module['Submodules'][] = array( + $submodules[$row['SubmoduleID']] = [ 'Date' => $row['Date'], 'Title' => $row['SubmoduleName'], 'Description' => $row['SubmoduleDescription'], - 'Rate' => (int)$row['Rate'], - 'MaxRate' => (int)$row['MaxRate'], - ); + 'Rate' => $row['Rate'], + 'MaxRate' => $row['MaxRate'], + ]; } } - $disMap['ModulesCount'] = $modulesCount; - $disMap['SemesterRate'] = (int)$sRate; - $disMap['SemesterMaxRate'] = (int)$sMaxRate; $disMap['ExamRate'] = (int)$examRate; $disMap['ExamMaxRate'] = (int)$examMaxRate; $disMap['BonusRate'] = (int)$bonusRate; $disMap['BonusMaxRate'] = (int)$bonusMaxRate; $disMap['ExtraRate'] = (int)$extraRate; - return $disMap; + return ['Modules' => $disMap, 'Submodules' => $submodules]; } -} \ No newline at end of file +} diff --git a/~dev_rating/application/views/student/subject.twig b/~dev_rating/application/views/student/subject.twig index 2b50c6a2e679f8578d2782c022877dd8d1f373d3..8e0a0b3665cb12181b5a54d219f0d56fdedd9f80 100644 --- a/~dev_rating/application/views/student/subject.twig +++ b/~dev_rating/application/views/student/subject.twig @@ -63,22 +63,18 @@ {% set SecondConjuction = ' Рё' %} {% endif %} {% endif %} - - {% if Discipline.Lectures %} - {{ Discipline.Lectures }} - {{ Rus.NumEnding(Discipline.Lectures, ['час', 'часа', 'часов']) }} - теории{{ FirstConjuction }} - {% endif %} - {% if Discipline.Practice %} - {{ Discipline.Practice }} - {{ Rus.NumEnding(Discipline.Practice, ['час', 'часа', 'часов']) }} - практики{{ SecondConjuction }} - {% endif %} - {% if Discipline.Labs %} - {{ Discipline.Labs }} - {{ Rus.NumEnding(Discipline.Labs, ['час', 'часа', 'часов']) }} - лабораторных занятий - {% endif %} + + {% set Hours = [ + { Type: 'Lectures', Text: 'теории' ~ FirstConjuction }, + { Type: 'Practice', Text: 'практики' ~ SecondConjuction }, + { Type: 'Labs', Text: 'лабораторных занятий' } + ] %} + + {% for Hour in Hours if Discipline[Hour.Type] %} + {{ Discipline[Hour.Type] }} + {{ Rus.NumEnding(Discipline[Hour.Type], ['час', 'часа', 'часов']) }} + {{ Hour.Text }} + {% endfor %} </div> </div> @@ -86,44 +82,51 @@ <h3 class="blockTitle">Баллы Р·Р° семестр</h3> + {% set SemesterRate = 0 %} + {% set SemesterMaxRate = 0 %} + <div class="blockMargin"> {% for Module in DisciplineMap.Modules %} + {% set ModuleRate = 0 %} + {% set ModuleMaxRate = 0 %} + <div class="tableTitle Module"> {{ Module.Title|default('Модуль ' ~ loop.index) }} </div> - {% for Submodule in Module.Submodules %} + {% for SubmoduleID in Module.Submodules %} + {% set Submodule = Submodules[SubmoduleID] %} <div class="submoduleBlock"> - <div class="submoduleTitle">{{ Submodule.Title|default('Мероприятие ' ~ loop.index) }}</div> + <div class="submoduleTitle"> + {{ Submodule.Title|default('Мероприятие ' ~ loop.index) }} + </div> <div class="submoduleRate"> - {{ Submodule.Rate }} / {{ Submodule.MaxRate }} + {{ +Submodule.Rate }} / {{ +Submodule.MaxRate }} + {% set ModuleRate = ModuleRate + Submodule.Rate %} </div> <div class="submodulePercent"> - {% if Submodule.MaxRate <= 0 %} - — - {% else %} - {{ (Submodule.Rate * 100) // Submodule.MaxRate }} % - {% endif %} + {{ Submodule.MaxRate ? (Submodule.Rate * 100) // Submodule.MaxRate ~ ' %' : '—' }} + {% set ModuleMaxRate = ModuleMaxRate + Submodule.MaxRate %} </div> <div class="submoduleDate"> - {% if Submodule.Date != 0 %} - {{ Submodule.Date|date('d.m.Y') }} - {% else %} - — - {% endif %} + {{ Submodule.Date ? Submodule.Date|date('d.m.Y') : '—' }} </div> </div> + {% if loop.last %} <div class="moduleResult"> - Ртого Р·Р° модуль: {{ Module.Rate }} / {{ Module.MaxRate }} + Ртого Р·Р° модуль: {{ ModuleRate }} / {{ ModuleMaxRate }} + {% set SemesterRate = SemesterRate + ModuleRate %} + {% set SemesterMaxRate = SemesterMaxRate + ModuleMaxRate %} </div> {% endif %} {% endfor %} {% endfor %} </div> + {% if Discipline.Type == 'exam' %} <h3 class="blockTitle">Допуск Рє экзамену</h3> <div class="blockMargin"> - {% set Admission = 38 - (DisciplineMap.SemesterRate + DisciplineMap.Extra.Rate) %} + {% set Admission = 38 - (SemesterRate + DisciplineMap.Extra.Rate) %} {% if Admission > 0 %} Для РґРѕРїСѓСЃРєР° Рє экзамену Вам необходимо получить еще {{ Admission }} {{ Rus.NumEnding(Admission, ['балл', 'балла', 'баллов']) }}. {% else %} @@ -142,7 +145,7 @@ </div> <div class="Middle totalRate"> - Промежуточный итог: {{ DisciplineMap.SemesterRate + DisciplineMap.ExtraRate }} / {{ DisciplineMap.SemesterMaxRate }} + Промежуточный итог: {{ SemesterRate + DisciplineMap.ExtraRate }} / {{ SemesterMaxRate }} </div> <h3 class="blockTitle">Ркзамен</h3> @@ -188,17 +191,14 @@ </div> <div class="Final totalRate"> - {% set Rating = DisciplineMap.SemesterRate + DisciplineMap.Extra.Rate + DisciplineMap.Bonus.Rate + DisciplineMap.Exam.Rate %} - {% if Rating > 100 %} - {% set Rating = 100 %} - {% endif %} - Ртоговый рейтинг: {{ Rating }} / 100 + {% set Rating = SemesterRate + DisciplineMap.Extra.Rate + DisciplineMap.Bonus.Rate + DisciplineMap.Exam.Rate %} + Ртоговый рейтинг: {{ min(Rating, 100) }} / 100 </div> {% elseif Discipline.Type == 'credit' %} <h3 class="blockTitle">Зачет</h3> <div class="blockMargin"> - {% set Admission = 60 - (DisciplineMap.SemesterRate + DisciplineMap.Extra.Rate) %} + {% set Admission = 60 - (SemesterRate + DisciplineMap.Extra.Rate) %} {% if Admission > 0 %} Для получения зачета необходимо набрать ещё {{ Admission }} {{ Rus.NumEnding(Admission, ['балл', 'балла', 'баллов']) }}. {% else %} @@ -241,11 +241,8 @@ </div> <div class="Final totalRate"> - {% set Rating = DisciplineMap.SemesterRate + DisciplineMap.Extra.Rate + DisciplineMap.Bonus.Rate %} - {% if Rating > 100 %} - {% set Rating = 100 %} - {% endif %} - Ртоговый рейтинг: {{ Rating }} / 100 + {% set Rating = SemesterRate + DisciplineMap.Extra.Rate + DisciplineMap.Bonus.Rate %} + Ртоговый рейтинг: {{ min(Rating, 100) }} / 100 </div> {% endif %} -{% endblock %} \ No newline at end of file +{% endblock %}