Skip to content
Snippets Groups Projects
Subject.php 3.42 KiB
Newer Older
<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Student_Subject extends Controller_Environment_Student
xamgore's avatar
xamgore committed
{
    public function action_show() {
        $id = $this->request->param('id');
xamgore's avatar
xamgore committed
        $discipline = Model_Discipline::load($id);
        $rates = Model_Rating::getRates($id, $this->user->StudentID);
xamgore's avatar
xamgore committed
        $map = self::generateDisciplineMapFrom($rates);
        
        $this->twig->set([
            'Discipline'    => $discipline,
            'Teachers'      => self::getTeachersListOf($discipline),
xamgore's avatar
xamgore committed
            'DisciplineMap' => $map['Modules'],
            'Submodules'    => $map['Submodules'],
            'Semester'      => Model_Semesters::load($discipline->SemesterID),
        ])->set_filename(static::STUDENT . 'subject');
xamgore's avatar
xamgore committed

    private static function &getTeachersListOf(Model_Discipline $discipline) {
        $teachers = $discipline->getTeachers()->as_array();
xamgore's avatar
xamgore committed

        foreach ($teachers as &$t) {
            $name = [ $t['LastName'], $t['FirstName'], $t['SecondName'] ];
            $t['Name'] = trim(implode($name, ' '));

        return $teachers;
xamgore's avatar
xamgore committed
    }

    private static function generateDisciplineMapFrom(Database_Result $rates) {
xamgore's avatar
xamgore committed
        $disMap = [];              # not sure, what it is about :(
        $examRate = 0;             # completely legacy code, baby
xamgore's avatar
xamgore committed
        $extraRate = 0;
        $examMaxRate = 0;
        $disMap['Extra']['Rate'] = 0;
xamgore's avatar
xamgore committed
        $submodules = [];
xamgore's avatar
xamgore committed

        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':
xamgore's avatar
xamgore committed
                    $disMap['Bonus'] = $row['SubmoduleID'];
xamgore's avatar
xamgore committed

xamgore's avatar
xamgore committed
                    $submodules[$row['SubmoduleID']] = [
xamgore's avatar
xamgore committed
                        'Description' => $row['Description'],
xamgore's avatar
xamgore committed
                        'Rate'        => $row['Rate'],
                        'MaxRate'     => $row['MaxRate'],
xamgore's avatar
xamgore committed
                        'Date'        => $row['Date'],
xamgore's avatar
xamgore committed
                    ];
xamgore's avatar
xamgore committed
                    break;

                case 'extra':
                    $extraRate += (int)$row['Rate'];

                    $disMap['Extra']['Description'] = $row['Description'];
                    $disMap['Extra']['Rate'] += (int)$row['Rate'];
                    break;

                default:
xamgore's avatar
xamgore committed
                    $id = $row['ModuleID'];
                    $module =& $disMap['Modules'][$id];
xamgore's avatar
xamgore committed

xamgore's avatar
xamgore committed
                    $module['Title'] = $row['ModuleName'];
                    $module['Submodules'][] = $row['SubmoduleID'];
xamgore's avatar
xamgore committed

xamgore's avatar
xamgore committed
                    $submodules[$row['SubmoduleID']] = [
xamgore's avatar
xamgore committed
                        'Date'        => $row['Date'],
                        'Title'       => $row['SubmoduleName'],
                        'Description' => $row['SubmoduleDescription'],
xamgore's avatar
xamgore committed
                        'Rate'        => $row['Rate'],
                        'MaxRate'     => $row['MaxRate'],
                    ];
xamgore's avatar
xamgore committed
            }
        }

        $disMap['ExamRate'] = (int)$examRate;
        $disMap['ExamMaxRate'] = (int)$examMaxRate;
        $disMap['ExtraRate'] = (int)$extraRate;

xamgore's avatar
xamgore committed
        return ['Modules' => $disMap, 'Submodules' => $submodules];
xamgore's avatar
xamgore committed
    }