<?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) ->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) ->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, ])->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', ])->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, ])->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, ])->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, ])->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', ])->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, ])->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, ])->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, ])->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, ])->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) { $sql = 'CALL `Discipline_GetModules`(:discipline, :type)'; return DB::query(Database::SELECT, $sql) ->param(':discipline', $this->discipline->ID) ->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) ->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, ])->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, ])->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, ])->execute()->get('Num'); } }