From 1ec1caa46b9574246f8bcd12292bc160853b4552 Mon Sep 17 00:00:00 2001
From: xamgore <xamgore@ya.ru>
Date: Fri, 30 Oct 2015 02:10:29 +0300
Subject: [PATCH] Refactor exam & extra fields

---
 .../classes/Controller/Student/Subject.php    | 43 ++++++++--------
 .../application/views/student/subject.twig    | 51 ++++++++-----------
 2 files changed, 40 insertions(+), 54 deletions(-)

diff --git a/~dev_rating/application/classes/Controller/Student/Subject.php b/~dev_rating/application/classes/Controller/Student/Subject.php
index 3ed45fc98..906ef03af 100644
--- a/~dev_rating/application/classes/Controller/Student/Subject.php
+++ b/~dev_rating/application/classes/Controller/Student/Subject.php
@@ -31,30 +31,26 @@ class Controller_Student_Subject extends Controller_Environment_Student
 
     private static function generateDisciplineMapFrom(Database_Result $rates) {
         $disMap = [];              # not sure, what it is about :(
-        $examRate = 0;             # completely legacy code, baby
-        $extraRate = 0;
-        $examMaxRate = 0;
-        $disMap['Extra']['Rate'] = 0;
+        $extraRate = 0;            # completely legacy code, baby
         $submodules = [];
+        $modules = [];
 
         foreach ($rates as $row) {
             switch ($row['ModuleType']) {
                 case 'exam':
-                    $examRate += $row['Rate'];
-                    $examMaxRate += (int)$row['MaxRate'];
+                    $disMap['Exam'] = $row['SubmoduleID'];
 
-                    $disMap['Exam'] = array(
-                        'Rate'    => (int)$row['Rate'],
-                        'MaxRate' => (int)$row['MaxRate'],
+                    $submodules[$row['SubmoduleID']] = [
+                        'Rate'    => $row['Rate'],
+                        'MaxRate' => $row['MaxRate'],
                         'Date'    => $row['Date'],
-                    );
+                    ];
                     break;
 
                 case 'bonus':
                     $disMap['Bonus'] = $row['SubmoduleID'];
 
                     $submodules[$row['SubmoduleID']] = [
-                        'Description' => $row['Description'],
                         'Rate'        => $row['Rate'],
                         'MaxRate'     => $row['MaxRate'],
                         'Date'        => $row['Date'],
@@ -62,33 +58,34 @@ class Controller_Student_Subject extends Controller_Environment_Student
                     break;
 
                 case 'extra':
-                    $extraRate += (int)$row['Rate'];
-
-                    $disMap['Extra']['Description'] = $row['Description'];
-                    $disMap['Extra']['Rate'] += (int)$row['Rate'];
+                    $submodules[$row['SubmoduleID']] = [
+                        'Rate'        => $row['Rate'],
+                        'MaxRate'     => $row['MaxRate'],
+                        'Date'        => $row['Date'],
+                    ];
                     break;
 
                 default:
-                    $id = $row['ModuleID'];
-                    $module =& $disMap['Modules'][$id];
-
+                    $module =& $modules[$row['ModuleID']];
                     $module['Title'] = $row['ModuleName'];
                     $module['Submodules'][] = $row['SubmoduleID'];
 
                     $submodules[$row['SubmoduleID']] = [
                         'Date'        => $row['Date'],
                         'Title'       => $row['SubmoduleName'],
-                        'Description' => $row['SubmoduleDescription'],
                         'Rate'        => $row['Rate'],
                         'MaxRate'     => $row['MaxRate'],
                     ];
             }
         }
 
-        $disMap['ExamRate'] = (int)$examRate;
-        $disMap['ExamMaxRate'] = (int)$examMaxRate;
-        $disMap['ExtraRate'] = (int)$extraRate;
+        foreach ($submodules as &$s) {
+            if ($s['ModuleType'] === 'Extra')
+                $extraRate += $s['Rate'];
+        }
+
+        $disMap['Modules'] = $modules;
 
-        return ['Modules' => $disMap, 'Submodules' => $submodules];
+        return ['Modules' => $disMap, 'Submodules' => $submodules, 'ExtraRate' => $extraRate];
     }
 }
diff --git a/~dev_rating/application/views/student/subject.twig b/~dev_rating/application/views/student/subject.twig
index 67c20b9c9..05d444092 100644
--- a/~dev_rating/application/views/student/subject.twig
+++ b/~dev_rating/application/views/student/subject.twig
@@ -126,17 +126,17 @@
     {% if Discipline.Type == 'exam' %}
     <h3 class="blockTitle">Допуск к экзамену</h3>
     <div class="blockMargin">
-        {% set Admission = 38 - (SemesterRate + DisciplineMap.Extra.Rate) %}
+        {% set Admission = 38 - (SemesterRate + DisciplineMap.ExtraRate) %}
         {% if Admission > 0 %}
             Для допуска к экзамену Вам необходимо получить еще {{ Admission }} {{ Rus.NumEnding(Admission, ['балл', 'балла', 'баллов']) }}.
         {% else %}
             Поздравляем, заработанных Вами баллов достаточно для получения допуска к экзамену!
         {% endif %}
-        {% if ExtraRate %}
+        {% if DisciplineMap.ExtraRate %}
             <div class="blockMargin">
                 <div class="submoduleBlock topBorder">
                     <div class="submoduleTitle">Добор баллов</div>
-                    <div class="submoduleRate">{{ DisciplineMap.Extra.Rate }}</div>
+                    <div class="submoduleRate">{{ DisciplineMap.ExtraRate }}</div>
                     <div class="submodulePercent">&nbsp;</div>
                     <div class="submoduleDate">—</div>
                 </div>
@@ -149,6 +149,7 @@
     </div>
         
     {% set Bonus = Submodules[DisciplineMap.Bonus] %}
+    {% set Exam = Submodules[DisciplineMap.Exam] %}
         
     <h3 class="blockTitle">Экзамен</h3>
     <div class="blockMargin">
@@ -162,59 +163,52 @@
                 {{ +Bonus.Rate }} / {{ +Bonus.MaxRate }}
             </div>
             <div class="submodulePercent">
-                {% if Bonus.MaxRate == 0 %} 0 {% else %} {{ (Bonus.Rate * 100) // Bonus.MaxRate }} %
-                {% endif %}
+                {{ +Bonus.MaxRate ? (Bonus.Rate * 100) // Bonus.MaxRate : 0 }} %
             </div>
             <div class="submoduleDate">
-                {% if Bonus.Date != 0 %}
-                    {{ Bonus.Date|date('d.m.Y') }}
-                {% else %}
-                    —
-                {% endif %}
+                {{ Bonus.Date ? Bonus.Date|date('d.m.Y') : '—' }}
             </div>
         </div>
         {% endif %}
-        {% if DisciplineMap.Exam is not empty %}
+        {% if Exam is not empty %}
             <div class="submoduleBlock">
                 <div class="submoduleTitle">Экзамен по курсу &laquo;{{ Discipline.SubjectName|default('—') }}&raquo;</div>
-                <div class="submoduleRate">{{ DisciplineMap.Exam.Rate }} / {{ DisciplineMap.Exam.MaxRate }}</div>
+                <div class="submoduleRate">
+                    {{ +Exam.Rate }} / {{ +Exam.MaxRate }}
+                </div>
                 <div class="submodulePercent">
-                    {% if DisciplineMap.Exam.MaxRate == 0 %} 0 {% else %} {{ (DisciplineMap.Exam.Rate  * 100) // DisciplineMap.Exam.MaxRate }} % {% endif %}
+                    {{ +Exam.MaxRate ? (Exam.Rate * 100) // Exam.MaxRate : 0 }} %
                 </div>
                 <div class="submoduleDate">
-                    {% if DisciplineMap.Exam.Date != 0 %}
-                        {{ DisciplineMap.Exam.Date|date('d.m.Y') }}
-                    {% else %}
-                        —
-                    {% endif %}
+                    {{ Exam.Date ? Exam.Date|date('d.m.Y') : '—' }}
                 </div>
             </div>
         {% endif %}
     </div>
 
     <div class="Final totalRate">
-        {% set Rating = SemesterRate + DisciplineMap.Extra.Rate + Bonus.Rate + DisciplineMap.Exam.Rate %}
+        {% set Rating = SemesterRate + DisciplineMap.ExtraRate + Bonus.Rate + Exam.Rate %}
         Итоговый рейтинг: {{ min(Rating, 100) }} / 100
     </div>
 
     {% elseif Discipline.Type == 'credit' %}
         <h3 class="blockTitle">Зачет</h3>
         <div class="blockMargin">
-            {% set Admission = 60 - (SemesterRate + DisciplineMap.Extra.Rate) %}
+            {% set Admission = 60 - (SemesterRate + DisciplineMap.ExtraRate) %}
             {% if Admission > 0 %}
                 Для получения зачета необходимо набрать ещё {{ Admission }} {{ Rus.NumEnding(Admission, ['балл', 'балла', 'баллов']) }}.
             {% else %}
                 Поздравляем, Вы получили зачет по курсу &laquo;{{ Discipline.SubjectName|default('—') }}&raquo;!
             {% endif %}
-            {% if ExtraRate or not Admission or Bonus is not empty %}
+            {% if DisciplineMap.ExtraRate or not Admission or Bonus is not empty %}
             <div class="tableTitle Extra">
                 Зачет по курсу &laquo;{{ Discipline.SubjectName|default('—') }}&raquo;
             </div>
-            {% if ExtraRate or not Admission %}
+            {% if DisciplineMap.ExtraRate or not Admission %}
                 <div class="blockMargin">
                     <div class="submoduleBlock topBorder">
                         <div class="submoduleTitle">Добор баллов</div>
-                        <div class="submoduleRate">{{ DisciplineMap.Extra.Rate }}</div>
+                        <div class="submoduleRate">{{ DisciplineMap.ExtraRate }}</div>
                         <div class="submodulePercent">&nbsp;</div>
                         <div class="submoduleDate">—</div>
                     </div>
@@ -227,15 +221,10 @@
                         {{ +Bonus.Rate }} / {{ +Bonus.MaxRate }}
                     </div>
                     <div class="submodulePercent">
-                        {% if Bonus.MaxRate == 0 %} 0 {% else %} {{ (Bonus.Rate * 100) // Bonus.MaxRate }} %
-                        {% endif %}
+                        {{ +Bonus.MaxRate ? (Bonus.Rate * 100) // Bonus.MaxRate : 0 }} %
                     </div>
                     <div class="submoduleDate">
-                        {% if Bonus.Date != 0 %}
-                            {{ Bonus.Date|date('d.m.Y') }}
-                        {% else %}
-                            —
-                        {% endif %}
+                        {{ Bonus.Date ? Bonus.Date|date('d.m.Y') : '—' }}
                     </div>
                 </div>
             {% endif %}
@@ -243,7 +232,7 @@
         </div>
 
         <div class="Final totalRate">
-            {% set Rating = SemesterRate + DisciplineMap.Extra.Rate + Bonus.Rate %}
+            {% set Rating = SemesterRate + DisciplineMap.ExtraRate + Bonus.Rate %}
             Итоговый рейтинг: {{ min(Rating, 100) }} / 100
         </div>
     {% endif %}
-- 
GitLab