Skip to content
Snippets Groups Projects
Map.php 9.37 KiB
Newer Older
<?php defined('SYSPATH') || die('No direct script access.');
class Model_Map extends Model
    public $discipline;


    private function __construct(Model_Discipline $discipline) {
        $this->discipline = $discipline;
    }

    public static function of(Model_Discipline $discipline) {
        return new self($discipline);
    }

    public function addModuleBonus($teacherID) {
        $sql = 'SELECT `AddModuleBonus`(:teacher, :discipline) AS `Num`';
        return DB::query(Database::SELECT, $sql)
            ->param(':teacher', $teacherID)
            ->param(':discipline', $this->discipline->ID)
xamgore's avatar
xamgore committed
            ->execute()->get('Num');
    public function deleteModuleBonus($teacherID) {
        $sql = 'SELECT `DeleteModuleBonus`(:teacher, :discipline) AS `Num`';
        return DB::query(Database::SELECT, $sql)
            ->param(':teacher', $teacherID)
            ->param(':discipline', $this->discipline->ID)
xamgore's avatar
xamgore committed
            ->execute()->get('Num');
    /** @return int ID of created module, -2 if map is locked or teacher is not author */
    public function addModule($teacherID, $title = '') {
        $sql = 'SELECT `AddModule`(:teacher, :discipline, :title) AS `Num`';
        return DB::query(Database::SELECT, $sql)
            ->parameters([
                ':teacher'    => $teacherID,
                ':discipline' => $this->discipline->ID,
                ':title'      => $title,
xamgore's avatar
xamgore committed
            ])->execute()->get('Num');
    /** @return int ID of created submodule, -2 if map is locked */
    public static function addSubmodule($teacherID, $moduleID, $controlType = 'current', $maxRate = 0, $title = '',
                                        $description = '') {
        $sql = 'SELECT `AddSubmodule`(:teacher, :moduleID, :maxRate, :title, :desc, :control) AS `Num`';
        return DB::query(Database::SELECT, $sql)
            ->parameters([
                ':teacher'  => $teacherID,
                ':moduleID' => $moduleID,
                ':maxRate'  => $maxRate,
                ':title'    => $title,
                ':desc'     => $description,
                ':control'  => ($controlType === 'current') || ($controlType === 'CurrentControl') ? 'CurrentControl'
                    : 'LandmarkControl',
xamgore's avatar
xamgore committed
            ])->execute()->get('Num');
    /** @return bool true, if err occurred */
    public static function deleteModule($teacherID, $moduleID) {
        $sql = 'SELECT `DeleteModule`(:teacher, :module) AS `Num`';
        return (bool) DB::query(Database::SELECT, $sql)
            ->param(':teacher', $teacherID)
            ->param(':module', $moduleID)
            ->execute()->get('Num');
    }

    /** @return bool true, if err occurred */
    public static function deleteSubmodule($teacherID, $submoduleID) {
        $sql = 'SELECT `DeleteSubmodule`(:teacher, :submodule) AS `Num`';
        return (bool) DB::query(Database::SELECT, $sql)
            ->parameters([
                ':teacher'   => $teacherID,
                ':submodule' => $submoduleID,
xamgore's avatar
xamgore committed
            ])->execute()->get('Num');
    /** @return bool true, if err occurred */
    public static function setModuleName($teacherID, $moduleID, $name) {
        $sql = 'SELECT `ChangeModuleName`(:teacher, :module, :name) AS `Num`';
        $result = DB::query(Database::SELECT, $sql)
            ->parameters([
                ':teacher' => $teacherID,
                ':module'  => $moduleID,
                ':name'    => $name,
            ])->execute();

        return $result->get('Num') < 0;
    }

    /** @return bool true, if err occurred */
    public static function setSubmoduleName($teacherID, $submoduleID, $name) {
        $sql = 'SELECT `ChangeSubmoduleName`(:teacher, :submodule, :name) AS `Num`';
        return DB::query(Database::SELECT, $sql)
            ->parameters([
                ':teacher'   => $teacherID,
                ':submodule' => $submoduleID,
                ':name'      => $name,
            ])->execute()->get('Num') < 0;
    /** return @bool true, if err occurred */
    public static function swapModules($teacherID, $moduleID1, $moduleID2) {
        $sql = 'SELECT `SwapModuleOrder`(:teacher, :moduleID1, :moduleID2) AS `Num`';
        return (bool) DB::query(Database::SELECT, $sql)
            ->parameters([
                ':teacher'   => $teacherID,
                ':moduleID1' => $moduleID1,
                ':moduleID2' => $moduleID2,
xamgore's avatar
xamgore committed
            ])->execute()->get('Num');
    /** return @bool true, if err occurred */
    public static function swapSubmodules($teacherID, $submoduleID1, $submoduleID2) {
        $sql = 'SELECT `SwapSubmoduleOrder`(:teacher, :submodule1, :submodule2) AS `Num`';
        return (bool) DB::query(Database::SELECT, $sql)
            ->parameters([
                ':teacher'    => $teacherID,
                ':submodule1' => $submoduleID1,
                ':submodule2' => $submoduleID2,
xamgore's avatar
xamgore committed
            ])->execute()->get('Num');
    public static function setSubmoduleMaxAndControl($teacherID, $submoduleID, $maxRate, $controlType) {
        $sql = 'SELECT `ChangeSubmoduleMaxAndControl`(:teacher, :submodule, :maxRate, :control) AS `Num`';
        return DB::query(Database::SELECT, $sql)
            ->parameters([
                ':teacher'   => $teacherID,
                ':submodule' => $submoduleID,
                ':maxRate'   => $maxRate,
                ':control'   => $controlType === 'current' ? 'CurrentControl' : 'LandmarkControl',
xamgore's avatar
xamgore committed
            ])->execute()->get('Num');
    public function changeDisciplineSubject($teacherID, $subjectID) {
        $sql = 'SELECT `ChangeDisciplineSubject`(:teacher, :discipline, :subject) AS `Num`';
        return DB::query(Database::SELECT, $sql)
            ->parameters([
                ':teacher'    => $teacherID,
                ':discipline' => $this->discipline->ID,
                ':subject'    => $subjectID,
xamgore's avatar
xamgore committed
            ])->execute()->get('Num');
    public function changeDisciplineControl($teacherID, $control) {
        $sql = 'SELECT `ChangeDisciplineControl`(:teacher, :discipline, :control) AS `Num`';
        return DB::query(Database::SELECT, $sql)
            ->parameters([
                ':teacher'    => $teacherID,
                ':discipline' => $this->discipline->ID,
                ':control'    => $control,
xamgore's avatar
xamgore committed
            ])->execute()->get('Num');
    public function changeDisciplineHours($teacherID, $hours, $type) {
        $sql = 'SELECT `ChangeDisciplineHours`(:teacher, :discipline, :hours, :type) AS `Num`';
        return DB::query(Database::SELECT, $sql)
            ->parameters([
                ':teacher'    => $teacherID,
                ':discipline' => $this->discipline->ID,
                ':hours'      => $hours,
                ':type'       => $type,
xamgore's avatar
xamgore committed
            ])->execute()->get('Num');
    public function bindGroup($teacherID, $groupID) {
        $sql = 'SELECT `BindGroup`(:teacher, :discipline, :group) AS `Num`';
        return DB::query(Database::SELECT, $sql)
            ->parameters([
                ':teacher'    => $teacherID,
                ':discipline' => $this->discipline->ID,
                ':group'      => $groupID,
xamgore's avatar
xamgore committed
            ])->execute()->get('Num');
    /**
     * Get the disciplines's roadmap (учебная карта).
     * @param $discipline int discipline id
     * @return Database_Result select from <tt>view_roadmap</tt> table
     */
    public static function getRoadmap($discipline, $type) {
        $sql = 'CALL `GetRoadmap`(:discipline, :type)';
        return DB::query(Database::SELECT, $sql)
            ->param(':discipline', $discipline)
            ->param(':type', $type)
            ->execute();
    }

    public function getModules($type) {
xamgore's avatar
xamgore committed
        $sql = 'CALL `Discipline_GetModules`(:discipline, :type)';

        return DB::query(Database::SELECT, $sql)
            ->param(':discipline', $this->discipline->ID)
xamgore's avatar
xamgore committed
            ->param(':type', $type)->execute()
            ->groupByUniqueKey('ID');
    }

    public function getSubmodules($type) {
        $sql = 'CALL `Discipline_GetSubmodules`(:discipline, :type)';
        return DB::query(Database::SELECT, $sql)
            ->param(':discipline', $this->discipline->ID)
xamgore's avatar
xamgore committed
            ->param(':type', $type)->execute()
            ->groupByUniqueKey('ID');
    public function unbindGroup($teacherID, $groupID) {
        $sql = 'SELECT `UnbindGroup`(:teacher, :discipline, :group) AS `Num`';
        return DB::query(Database::SELECT, $sql)
            ->parameters([
                ':teacher'    => $teacherID,
                ':discipline' => $this->discipline->ID,
                ':group'      => $groupID,
xamgore's avatar
xamgore committed
            ])->execute()->get('Num');
    public function bindStudent($teacherID, $studentID) {
        $sql = 'SELECT `BindStudent`(:teacher, :discipline, :student) AS `Num`';
        return DB::query(Database::SELECT, $sql)
            ->parameters([
                ':teacher'    => $teacherID,
                ':discipline' => $this->discipline->ID,
                ':student'    => $studentID,
xamgore's avatar
xamgore committed
            ])->execute()->get('Num');
    public function unbindStudent($teacherID, $studentID) {
        $sql = 'SELECT `UnbindStudent`(:teacher, :discipline, :student) AS `Num`';
        return DB::query(Database::SELECT, $sql)
            ->parameters([
                ':teacher'    => $teacherID,
                ':discipline' => $this->discipline->ID,
                ':student'    => $studentID,
xamgore's avatar
xamgore committed
            ])->execute()->get('Num');