<?php defined('SYSPATH') or die('No direct script access.'); class Controller_Student_Subject extends Controller_Environment_Student { public function action_show() { $id = $this->request->param('id'); $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' => $map['Modules'], 'Submodules' => $map['Submodules'], 'Semester' => Model_Semesters::load($discipline->SemesterID), ])->set_filename(static::STUDENT . 'subject'); } private static function &getTeachersListOf(Model_Discipline $discipline) { $teachers = $discipline->getTeachers()->as_array(); foreach ($teachers as &$t) { $name = [ $t['LastName'], $t['FirstName'], $t['SecondName'] ]; $t['Name'] = trim(implode($name, ' ')); } return $teachers; } 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; $submodules = []; foreach ($rates as $row) { switch ($row['ModuleType']) { case 'exam': $examRate += $row['Rate']; $examMaxRate += (int)$row['MaxRate']; $disMap['Exam'] = array( 'Rate' => (int)$row['Rate'], 'MaxRate' => (int)$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'], ]; break; case 'extra': $extraRate += (int)$row['Rate']; $disMap['Extra']['Description'] = $row['Description']; $disMap['Extra']['Rate'] += (int)$row['Rate']; break; default: $id = $row['ModuleID']; $module =& $disMap['Modules'][$id]; $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; return ['Modules' => $disMap, 'Submodules' => $submodules]; } }