<?php defined('SYSPATH') or die('No direct script access.'); /** * Class Model_Student */ class Model_Student extends Model_Container { protected function getRawData($id) { $sql = 'CALL `Student_GetInfo`(:id)'; $info = DB::query(Database::SELECT, $sql) ->param(':id', $id)->execute(); if ($info->count() == 0) throw new InvalidArgumentException('Student not found'); return $info[0]; } /** * Create new student in db, based on $data. */ protected function create() { // todo: implement later throw new BadMethodCallException('Method is not implemented yet!'); } /** @return Model_Discipline[] */ public function getDisciplines($semesterID = null) { $semesterID = $semesterID ? $semesterID : User::instance()->SemesterID; $sql = 'CALL `GetDisciplinesForStudent`(:id, :semesterID)'; $query = DB::query(Database::SELECT, $sql) ->param(':id', $this->ID) ->param(':semesterID', $semesterID) ->execute(); $list = []; foreach ($query as $data) $list[] = new Model_Discipline($data, true); return $list; } public function getTeachers($loadAll = false, $semesterID = null) { // todo: don't load the full data at the Controller_Student_Index $semesterID = $semesterID ? $semesterID : User::instance()->SemesterID; $sql = 'CALL `GetTeachersListForStudent`(:id, :semester)'; $result = DB::query(Database::SELECT, $sql) ->param(':id', $this->ID) ->param(':semester', $semesterID) ->execute(); $list = []; foreach ($result as $row) { $names =& $list[$row['DisciplineID']]; $names = explode(';', $row['FullNameList']); // todo: remove aggregation } return $list; } // todo implementation public function update() { throw new BadMethodCallException('Method is not implemented yet!'); } /** * @see students_groups.IsStudyLeave * @deprecated cause it's not implemented yet * @return boolean true, if the student is on leave */ public function inAcademicLeave() { throw new BadMethodCallException('Method is not implemented yet!'); } /** * Send the student to an academic leave. * @return $this; */ public function toAcademicLeave($semesterID = null) { $semesterID = $semesterID ? $semesterID : User::instance()->SemesterID; $sql = 'CALL `ControlStudentGroup`(:id, -1, true, :semesterID)'; DB::query(Database::SELECT, $sql) ->param(':id', $this->ID) ->param(':semesterID', $semesterID) ->execute(); return $this; } /** * Cancel the student's leave. * @param $group int group id * @return $this; */ public function returnFromAcademicLeave($group, $semesterID = null) { $semesterID = $semesterID ? $semesterID : User::instance()->SemesterID;; $sql = 'CALL `ControlStudentGroup`(:id, :group, false, :semesterID)'; DB::query(Database::SELECT, $sql) ->param(':id', $this->ID) ->param(':group', (int) $group) ->param(':semesterID', $semesterID) ->execute(); return $this; } }