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

class Model_Group extends Model
{
    private $ID;

    public function getID() {
        return $this->ID;
    }

    public static function with($id) {
        $g = new self();
        $g->ID = (int) $id;
        return $g;
    }

    public static function findOrCreate($gradeID, $groupNum, $specialization, $facultyID, $year, $form) {
        $sql = 'SELECT * FROM CreateGroup(:gradeID, :groupNum, :specialization, :facultyID, :year, :form) AS "ID"';
        $id = DB::query(Database::SELECT, $sql)
            ->param(':gradeID', $gradeID)
            ->param(':groupNum', (int)$groupNum)
            ->param(':specialization', $specialization)
            ->param(':facultyID', $facultyID)
            ->param(':form', $form)
            ->execute()->get('ID');
        if ($id <= 0) {
            return null;
        }
        return Model_Group::with((int)$id);
    }

    public static function find($gradeID, $groupNum, $formID, $facultyID) {
        $sql = 'SELECT * FROM FindGroup(:gradeID, :groupNum, :facultyID, :form ) AS "ID"';
        $id = DB::query(Database::SELECT, $sql)
            ->param(':gradeID', $gradeID)
            ->param(':groupNum', (int)$groupNum)
            ->param(':facultyID', $facultyID)
            ->param(':form', $formID)
            ->execute()->get('ID');
        if ($id <= 0) {
            return null;
        }
        return $id;
    }

xamgore's avatar
xamgore committed
    /** @return Model_Discipline[] */
    public function getDisciplines($lazy = true, $semesterID = null, $showglobal = false) {
xamgore's avatar
xamgore committed
        $semesterID = $semesterID ?: User::instance()->SemesterID;
        $sql = 'SELECT * FROM GetDisciplinesForGroup(:id, :semesterID, :showglobal)';
xamgore's avatar
xamgore committed
        $query = DB::query(Database::SELECT, $sql)
            ->param(':id', $this->ID)
            ->param(':semesterID', $semesterID)
            ->param(':showglobal', $showglobal)
            ->execute();
xamgore's avatar
xamgore committed

        $list = [];
        foreach ($query as $data)
            $list[] = new Model_Discipline($data, true, $lazy);

        return $list;
    public function getDisciplinesForExport($semesterID = null) {
        $semesterID = $semesterID ?: User::instance()->SemesterID;
        $sql = 'SELECT * FROM GetDisciplinesForExport(:id, :semesterID)';
        $query = DB::query(Database::SELECT, $sql)
            ->param(':id', $this->ID)
            ->param(':semesterID', $semesterID)
            ->execute()->as_array();
        $query = Arr::groupByUniqueKey('ID', $query);
        forEach($query as &$discipline) {
            $discipline["lastExportDate"] = $this->getDisciplineFormExportDate($discipline["ID"], $semesterID);
            $discipline["lastExportError"] = $this->getDisciplineFormExportError($discipline["ID"], $semesterID);
            $discipline["isOutdated"] = $this->isDisciplineFormOutdated($discipline["ID"], $semesterID);

    public function getDisciplineFormExportDate($disciplineID, $semesterID = null) {
        $semesterID = $semesterID ?: User::instance()->SemesterID;
        $sql = 'SELECT * FROM GetFormExportDate(:disciplineID, :id, :semesterID) as "Date"';
        $date = DB::query(Database::SELECT, $sql)
            ->param(':disciplineID', $disciplineID)
            ->param(':id', $this->ID)
            ->param(':semesterID', $semesterID)
            ->execute()->get('Date');
        return $date;
    }

    public function getDisciplineFormExportError($disciplineID, $semesterID = null) {
        $semesterID = $semesterID ?: User::instance()->SemesterID;
        $sql = 'SELECT * FROM IsFormExportFailed(:disciplineID, :id, :semesterID) as "Error"';
        $error = DB::query(Database::SELECT, $sql)
            ->param(':disciplineID', $disciplineID)
            ->param(':id', $this->ID)
            ->param(':semesterID', $semesterID)
            ->execute()->get('Error');
        return $error;
    }

    public function isDisciplineFormOutdated($disciplineID, $semesterID = null) {
        $semesterID = $semesterID ?: User::instance()->SemesterID;
        $sql = 'SELECT * FROM IsFormOutdated(:disciplineID, :id, :semesterID) as "Count"';
        $newGradesCount = DB::query(Database::SELECT, $sql)
            ->param(':disciplineID', $disciplineID)
            ->param(':id', $this->ID)
            ->param(':semesterID', $semesterID)
            ->execute()->get('Count');
        if ($newGradesCount === 0) {
            return false;
        }  else {
            return true;
        }
    }