Разработка:storages/cstreams
Плагин | |
Название | cstreams |
Тип | storages |
Содержание
- 1 Таблица в базе данных
- 2 Дополнительные методы:
- 2.1 insert($dataobject, $id = NULL, $quiet=false)
- 2.2 delete($id,$quiet=false)
- 2.3 update($dataobject, $id = NULL, $quiet=false)
- 2.4 get_teacher_cstream($id, $status = "active")
- 2.5 get_department_cstream($id, $status = "active")
- 2.6 get_age_cstream($id, $status = "active")
- 2.7 get_programmitem_cstream($id, $status = "active")
- 2.8 get_agroup_cstream($id)
- 2.9 get_agroup_agenum_cstreams($agroupid, $ageid)
- 2.10 get_agroup_status_cstreams($agroupid, $status)
- 2.11 get_numberof_cstreams($select)
- 2.12 get_prog_age_cstreams($pitemid, $ageid, $status=null)
- 2.13 get_programm_age_cstreams($programmid, $ageid = null, $agenum = null, $dpid = null)
- 2.14 get_listing($limitfrom, $limitnum, $conds=null, $countonly=false)
- 2.15 get_select_listing($inputconds)
- 3 Планы:
- 4 События
Таблица в базе данных
cstreams - учебный поток. Представляет учебный процесс, идущий по учебной дисциплине/предмету в течение одного учебного периоду с конкретным преподавателем, одним или несколькими учащимися или группой.
Подробный формат полей в таблице:
- ageid - учебный период в таблице ages
- programmitemid - дисциплина в таблице programmitems
- teacherid - id преподавателя в таблице persons . После создания поля appointmentid стало ненужным. Все старые обращения к этому полю будут переделаны на обращения к appointmentid, при создании новых обращений они должны обращаться к appointmentid. После переработки старых методов данное поле удалиться.
- departmentid - подразделение, которому принадлежит учебный процесс в таблице departments
- appointmentid - id назначения на должность в таблице appointments .
- mdlgroup - id группы moodle, соответствующей учебному потоку
- eduweeks - количество учебных недель/циклов (каждая соответствует одному циклу в расписании) продолжительности курса, по-умолчанию берется из programmitems, если там не указано - из ages. Нужны для подсчета часов при составлении расписания.
- begindate - дата и время, когда учебный процесс был впервые переведен в состояние "идет обучение" по UTC
- enddate - дата и время окончания по UTC, когда учебный процесс был в последний раз выведен из состояния "идет обучение"
- status - список статусов указан в одноименном плагине рабочих процессов cstreams
- hours - часов всего
- hoursweek - часов в неделю
- name - имя предмето-потока
- hoursweekdistance - количество часов в неделю дистанционно
Дополнительные методы:
insert($dataobject, $id = NULL, $quiet=false)
Вставляет запись в таблицу плагина.
Аргументы:
- dataobject(object) - данные для записи в таблицу.
- $id = NULL
- quiet(bool) - генерировать или нет события, по умолчанию - нет(false).
Возвращаемые значения:
- (int) - id вставленной записи.
- (bool) - false, если операция не удалась.
delete($id,$quiet=false)
Удаляет запись из таблицы плагина с указанным id.
Аргументы:
- id(int) - id записи в этой таблице .
- quiet(bool) - генерировать или нет события, по умолчанию - нет(false).
Возвращаемые значения:
- (bool) - true, если запись удалена или ее нет, false - в остальных случаях.
update($dataobject, $id = NULL, $quiet=false)
Обновляет запись в таблице плагина данными из объекта. Отсутствующие в объекте записи не изменяются. Если id передан, то обновляется запись с переданным id. Если id не передан обновляется запись с id, который передан в объекте.
Аргументы:
- dataobject(object) - данные, которыми надо заменить запись в таблице.
- id(int) - id обновляемой записи в этой таблице.
- quiet(bool) - не генерировать событий.
Возвращаемые значения:
- (bool) - true, если обновление прошло успешно, и false - во всех остальных случаях.
get_teacher_cstream($id, $status = "active")
Получает список учебных процессов у данного преподавателя.
Аргументы:
- $id(int) - id преподавателя в таблице persons .
- $status(string) - статус потока, по умолчанию - идет(active).
Возвращаемые значения:
- (array) - массив процессов.
- (bool) - false, если процессы не найдены.
Структура работы:
- формируем SQL-запрос и возвращаем список процессов:
- если указывается статус - процессы с указанным статусом,
- если статус указывается null - процессы с любым статусом,
- если статус не указывается - процессы со статусом active.
get_department_cstream($id, $status = "active")
Получает список учебных процессов у данного подразделения.
Аргументы:
- $id(int) - id подразделения в таблице departments .
- $status(string) - статус потока, по умолчанию - идет(active).
Возвращаемые значения:
- (array) - массив процессов.
- (bool) - false, если процессы не найдены.
Структура работы:
- формируем SQL-запрос и возвращаем список процессов:
- если указывается статус - процессы с указанным статусом,
- если статус указывается null - процессы с любым статусом,
- если статус не указывается - процессы со статусом active.
get_age_cstream($id, $status = "active")
Получает список учебных процессов для данного учебного периода.
Аргументы:
- $id(int) - id учебного периода в таблице ages .
- $status(string) - статус потока, по умолчанию - идет(active).
Возвращаемые значения:
- (array) - массив процессов.
- (bool) - false, если процессы не найдены.
Структура работы:
- формируем SQL-запрос и возвращаем список процессов:
- если указывается статус - процессы с указанным статусом,
- если статус указывается null - процессы с любым статусом,
- если статус не указывается - процессы со статусом active.
get_programmitem_cstream($id, $status = "active")
Получает список учебных процессов по данной дисциплине.
Аргументы:
- $id(int) - id дисциплины в таблице programmitems .
- $status(string) - статус потока, по умолчанию - идет(active).
Возвращаемые значения:
- (array) - массив процессов.
- (bool) - false, если процессы не найдены.
Структура работы:
- формируем SQL-запрос и возвращаем список процессов:
- если указывается статус - процессы с указанным статусом,
- если статус указывается null - процессы с любым статусом,
- если статус не указывается - процессы со статусом active.
get_agroup_cstream($id)
Получает список учебных процессов для академической группы.
Аргументы:
- $id(int) - id академической группы в таблице agroups .
Возвращаемые значения:
- (array) - массив процессов.
- (bool) - false, если процессы не найдены.
get_agroup_agenum_cstreams($agroupid, $ageid)
Получить Список программ по академической группе, и периоду.
Аргументы:
- $agroupid(int) - id академической группы в таблице agroups .
- $ageid(int) - id учебного периода в таблице ages .
Возвращаемые значения:
- (array) - массив записей из этой таблицы, если они есть.
- (bool) - false, если ничего не нашлось.
get_agroup_status_cstreams($agroupid, $status)
Получить Список программ по академической группе, и статусу.
Аргументы:
- $agroupid(int) - id академической группы в таблице agroups .
- $status(string) - статус потока.
Возвращаемые значения:
- (array) - массив записей из таблицы cstreams если они есть.
- (bool) - false, если ничегг не нашлось.
get_numberof_cstreams($select)
Возвращает количество потоков.
Аргументы:
- $select(string) - критерии отбора записей.
Возвращаемые значения:
- (int) - количество найденных записей.
get_prog_age_cstreams($pitemid, $ageid, $status=null)
Получить список учебных потоков, допустимых учебной программой и текущим периодом
Аргументы:
- $programmid(object) - id учебной программы в таблице programms .
- $ageid(object) - id периода в таблице ages .
- $status(string) - статус учебного потока.
Возвращаемые значения:
- (array) - массив записей из базы.
- (bool) - false, если произошла ошибка.
get_programm_age_cstreams($programmid, $ageid = null, $agenum = null, $dpid = null)
Получает все учебные потоки программы.
Аргументы:
- $programmid(int) - id учебной программы в таблице programms .
- $ageid(int) - id периода в таблице ages , по умолчанию нет.
- $agenum - номер паралели в таблице programmitems , по умолчанию нет(null).
- $dpid - id подразделения в таблице departments , по умолчанию - нет(null).
Возвращаемые значения:
- (array) - массив потоков.
- (bool) - false, если потоки не найдены.
get_listing($limitfrom, $limitnum, $conds=null, $countonly=false)
Возвращает список учебных потоков по заданным критериям.
Аргументы:
- $limitfrom(int) - начиная с какой записи просматривается фрагмент списка записей.
- $limitnum(int) - сколько записей нужно извлечь из базы.
- $conds(object) - объект со списком свойств, по которым будет происходить поиск, по умолчанию - нет(null),
- $countonly(object) - вернуть список записей по указанным условиям или только их количество, по умолчанию - список(false),
Возвращаемые значения:
- (array) - массив записей из базы.
- (bool) - false, в случае ошибки.
get_select_listing($inputconds)
Возвращает фрагмент sql-запроса после слова WHERE.
Аргументы:
- $inputconds(object) - список полей с условиями запроса в формате "поле_БД->значение".
Возвращаемые значения:
- (string).
/** Получить id всех периодов, в течение которых проходит обучение выбранной группы * * @return array|bool - индексированный массив с уникальными значениями id периодов всех потоков или false * если ничего не найдено * @param int $agroupid - id академической группы в таблице agroups */ public function get_agroup_ageids($agroupid) { $result = array(); // получаем массив всех потоков академической группы $agcstreams = $this->get_agroup_cstream($agroupid); // получаем все id периодов if ( ! $agcstreams ) {// не найдено ни одного потока return false; } foreach ( $agcstreams as $agcstream ) {// перебираем все элементы массива, и вытаскиваем только id $result[] = $agcstream->ageid; } // оставляем только уникальные значения $result = array_unique($result); // сортируем массив по возрастанию sort($result); return $result; } /** Создать учебные потоки для группы * * @return * @param int $agroupid - id акадкмическуой группы (класса) в таблице agroups * @param int $ageid - id учебного периода в таблице ages * @param int $departmentid - id учебного подразделения в таблице departments * @param int $datebegin - дата начала обучения в формате unixtime * */ public function create_cstreams_for_agroup($agroupid, $ageid, $departmentid, $datebegin, $enddate=null) { if ( ! $agroup = $this->dof->storage('agroups')->get($agroupid) ) {// не удалось получить академичеескую группу return false; } if ( ! $programm = $this->dof->storage('programms')->get($agroup->programmid) ) {// не удалось получить учебную программу return false; } if ( ! $programmitems = $this->dof->storage('programmitems')->get_pitems_list ($programm->id, $agroup->agenum, 'deleted') ) {// нет потоков, некого подписывать - но считаем, что мы свою работы все равно сделали return true; } $result = true; // если в программе есть предметы на этот период - создадим для них подписки foreach ( $programmitems as $pitem ) { $cslink=false; if ( $cstreams = $this->get_list_filter('ageid',$ageid,'programmitemid',$pitem->id, 'status', array('plan', 'active', 'suspend')) ) {// если уже есть такой поток foreach ( $cstreams as $cstream ) {// и на него подписана группа if ( $this->dof->storage('cstreamlinks')->get_filter('cstreamid',$cstream->id,'agroupid',$agroupid) ) {// поток не создаем $cslink=true; } } } if ( ! $cslink ) {// нету связи создаем поток и привязываем $cstream = new object(); $cstream->ageid = $ageid; $cstream->programmitemid = $pitem->id; // откуда брать id учителя? $cstream->teacherid = 0; $cstream->departmentid = $departmentid; $cstream->mdlgroup = null; $cstream->eduweeks = $this->dof->storage('ages')->get_field($ageid,'eduweeks'); if ( $pitem->eduweeks ) {// или из предмета, если указано там $cstream->eduweeks = $pitem->eduweeks; } $cstream->begindate = $datebegin; $cstream->enddate = $datebegin + $pitem->maxduration; if ( $enddate ) {// дата окончания указана принудительно $cstream->enddate = $enddate; } $cstream->status = 'plan'; // создаем подписку предмета на программу в текущем периоде if ( $id = $this->insert($cstream) ) {// удалось вставить запись в базу if ( $this->dof->storage('cstreamlinks')-> is_exists_filter('cstreamid', $id, 'agroupid', $agroupid) ) {// если запись для такого потока и такой группы существует - не создаем такую запись еще раз continue; } // запомним, если что-то пошло не так $result = $result AND (bool)$this->dof->storage('cstreamlinks')-> enrol_agroup_on_cstream($agroupid, $id); }else {// во время вставки произошла ошибка $result = $result AND false; } } } // возвращаем результат return $result; } /** Создать подписку на программу в учебном периоде для выбранной параллели * * @return bool * @param int $programmid - id учебной программы в таблице programms * @param int $ageid - id учебного периода в таблице ages * @param int $agenum - номер параллели, для которой создается подписка * @param int $departmentid - id учебного подразделения в таблице departments * @param int $datebegin - дата начала обучения в формате unixtime */ public function create_cstreams_for_programm($programmid, $ageid, $agenum, $departmentid, $datebegin, $enddate=null) { $result = true; if ( ! $programm = $this->dof->storage('programms')->get($programmid) ) {// не удалось получить учебную программу return false; } if ( ! $programmitems = $this->dof->storage('programmitems')->get_pitems_list($programmid, $agenum, 'deleted') ) {// нет потоков, некого подписывать - но считаем, что мы свою работы все равно сделали return true; } // если в программе есть предметы на этот период - создадим для них подписки foreach ( $programmitems as $pitem ) { $cstream = new object(); $cstream->ageid = $ageid; $cstream->programmitemid = $pitem->id; // откуда брать id учителя? $cstream->teacherid = 0; $cstream->departmentid = $departmentid; $cstream->mdlgroup = null; $cstream->eduweeks = $this->dof->storage('ages')->get_field($ageid,'eduweeks'); if ( $pitem->eduweeks ) {// или из предмета, если указано там $cstream->eduweeks = $pitem->eduweeks; } $cstream->begindate = $datebegin; $cstream->enddate = $datebegin + $pitem->maxduration; if ( $enddate ) {// дата окончания указана принудительно $cstream->enddate = $enddate; } $cstream->status = 'plan'; // создаем подписку предмета на программу в текущем периоде $result = $result AND (bool)$this->insert($cstream); } return $result; } /** Подписать группу на список потоков * * @return * @param int $agroupid- id группы в таблице agroups * @param int $ageid - id учебного периода в таблице ages * * @todo выяснить, нужно ли реализовать возможность подписки группы не по определененому периоду, * а для всех периодов? */ public function enrol_agroup_on_cstreams($agroupid, $ageid) { $return = true; if ( ! $agroup = $this->dof->storage('agroups')->get($agroupid) ) {// не удалось получить академичеескую группу return false; } // @todo нужно ли указывать agenum? if ( ! $programmitems = $this->dof->storage('programmitems')->get_pitems_list($agroup->programmid, $agroup->agenum) ) {// в программе группы нет предметов для текущего периода return true; } foreach ( $programmitems as $pitem ) {// подписываем группу на все потоки $cstreams = $this->get_prog_age_cstreams($pitem->id, $ageid); foreach ($cstreams as $cstream ) {// создаем подписку группы на учебный поток if ( $this->dof->storage('cstreamlinks')-> is_exists_filter('cstreamid', $cstream->id, 'agroupid', $agroupid) ) {// если запись для такого потока и такой группы существует - не создаем такую запись еще раз continue; } // запомним, если что-то пошло не так $return = $return AND (bool)$this->dof->storage('cstreamlinks')-> enrol_agroup_on_cstream($agroupid, $cstream->id); } } return $return; } /** Переводит поток в статус "завершен" * @param int $id - id потока * @return bool true - если поток удачно завершен и * false в остальных случаях */ public function set_status_complete($id) { if ( ! is_int_string($id) ) {// входные данные неверного формата return false; } if ( ! $obj = $this->get($id) )
{// объект не найден return false; }
if ( $obj->status == 'completed' )
{// поток уже завершен return true; }
if ( $obj->status == 'plan' OR $obj->status == 'canceled' OR $obj->status == 'suspend')
{// поток запланирован, приостановлен или отменен - его нельзя завершить return false; } $rez = true; // дата окончания действия подписки $obj->enddate = time(); if ( ! $this->update($obj,$id) ) {// не удалось обновить запись БД return false; } // переместить в статс "неудачно завершены" if ( $cpassed = $this->dof->storage('cpassed')->get_list_filter('cstreamid',$id, 'status',array('plan','active','suspend')) ) {// если есть незавершенные подписки на дисциплину сменим им статус foreach($cpassed as $cpass) {// переведем каждую в статус неуспешно завершена $rez = $rez & $this->dof->storage('cpassed')->set_final_grade($cpass->id); } } if ( $rez ) {// если все в порядке - меняем статус потока return $this->dof->workflow('cstreams')->change($id,'completed'); } return $rez;
}
/** Возвращает список потоков по параметрам * @param int $programmitemid - id дисциплины * @param int $teacherid - id учителя * @param bool $mycstrems - показать ли потоки текущего пользователя * @param bool $completecstrems - показать ли завершенные потоки * @return array */ public function get_cstreams_on_parametres($programmitemid, $teacherid = 0, $mycstrems = false, $completecstrems = false) { // составляем условие // предмет обязателен $select = ' programmitemid = '.$programmitemid; if ( $teacherid ) {// если указан учитель выведем только для него $select .= ' AND teacherid = '.$teacherid; }elseif ( $mycstrems ) {// если учителя нет, но надо показать потоки текущего пользователя if ( $teacherid = $this->dof->storage('persons')->get_by_moodleid_id() ) {// если только он есть в БД $select .= ' AND teacherid = '.$teacherid; } } if ( $completecstrems ) {// скахзано что надо вывести завершенные потоки вместе с активными $select .= ' AND status IN (\'active\',\'completed\')'; }else {// выведем только активные $select .= ' AND status = \'active\; } // возвращаем найденные потоки return $this->dof->storage('cstreams')->get_list_select($select); } /** Возвращает короткое имя потока * @return string */ public function get_short_name($cstreamid) { if ( ! $cstream = $this->get($cstreamid) ) { return false; } $pitem = stripslashes_recursive($this->dof->storage('programmitems')->get_field($cstream->programmitemid, 'name')); $teacher = stripslashes_recursive($this->dof->storage('persons')->get_fullname($cstream->teacherid)); $cstreamname = $pitem; if ( $teacher ) {// если есть учитель - добавим его $cstreamname .= ', '.$teacher; } $cstreamname .= ' ['.$cstream->id.']'; return $cstreamname; } /** Подписать учеников на поток * * @return bool * @param object $cstream - объект из таблицы cstreams * @param object $programmsbcids - массив, состоящий из id подписок на программы в таблице programmsbcs */ public function enrol_students_on_cstream($cstream, $programmsbcids) { if ( ! is_object($cstream) OR ! is_array($programmsbcids) ) {// неправильный формат данных return false; } foreach ( $programmsbcids as $programmsbcid ) {// перебираем все подписки на программу и отписываем каждого ученика $result = & $this->enrol_student_on_cstream($cstream, $programmsbcid); } return $result; } /** Исключить учеников из потока * * @return bool * @param object $cstream - объект из таблицы cstreams * @param array $programmsbcids - массив, состоящий из id подписок на программы в таблице programmsbcs */ public function unenrol_students_from_cstream($cstream, $programmsbcids) { if ( ! is_object($cstream) OR ! is_array($programmsbcids) ) {// неправильный формат данных return false; } $result = true; foreach ( $programmsbcids as $programmsbcid ) {// перебираем все подписки на программу и отписываем каждого ученика $result = & $this->unenrol_student_from_cstream($cstream, $programmsbcid); } return $result; } /** Подписать одного ученика на поток * * @return bool * @param object $cstream - объект из таблицы cstreams * @param int $programmsbcid - id подписки ученика на программу в таблице programmsbcs * * @todo проверить, не подписан ли уже ученик на этот поток * @todo добавить полную проверку объекта $cpassed, если к тому времени не введем функции безопасной вставки */ public function enrol_student_on_cstream($cstream, $programmsbcid) { $programmsbcid = intval($programmsbcid); if ( ! is_object($cstream) OR ! $programmsbc = $this->dof->storage('programmsbcs')->get($programmsbcid) ) {// неправильный формат данных return false; } if ( ! $studentid = $this->dof->storage('programmsbcs')->get_studentid_by_programmsbc($programmsbcid) ) {// не нашли id ученика - это ошибка // @todo поймать здесь исключение которое будет генерироваться функцией get_studentid_by_programmitem return false; } if ( ! $programmitem = $this->dof->storage('programmitems')->get($cstream->programmitemid) ) {// предмет потока на который подписывается ученик не найден // @todo сгенерировать исключение и записать это событие в лог, когда станет возможно return false; } // создаем объект для будущей подписки на предмет $cpassed = new object; $cpassed->cstreamid = $cstream->id; $cpassed->programmsbcid = $programmsbcid; $cpassed->programmitemid = $cstream->programmitemid; $cpassed->studentid = $studentid; $cpassed->agroupid = $programmsbc->agroupid; $cpassed->gradelevel = $programmitem->gradelevel; $cpassed->ageid = $cstream->ageid; // @todo с типом синхронизации разобраться когда станет окончательно ясно как обавлять обычные cpassed //$cpassed->typesync = 0; // @todo добавить сюда сведения о часах из дисциплины, когда эти поля появятся в таблице cpassed // Устанавливаем статус прошлой подписки в положение "неуспешно завершен" // @todo в будущем проверять результат выполнения этой функции и записывать его в лог // когда это станет возможно if ( $repeatid = $this->set_previos_cpassed_to_failed($cstream, $programmsbcid) ) {// если ученик пересдавал предмет в этом потоке - то запомним это $cpassed->repeatid = $repeatid; } // вставляем новую запись в таблицу cpassed, тем самым подписывая ученика на поток if ( ! $newid = $this->dof->storage('cpassed')->insert($cpassed) ) {// не удалось создать новую запись return false; } // после создания установим подписке нужный статус: return $this->set_new_status_to_cpassed($newid, $cstream); } /** Устанавливает предыдущие подписки в статус "неуспешно завершено" если они были * * @return bool * @param object $cstream - учебный поток, объект из таблицы cstreams * @param object $programmsbcid - id подписки на программу в таблице programmsbcs * * @todo различать случаи ошибок и случаи когда просто нет предыдущей записи в cpassed */ private function set_previos_cpassed_to_failed($cstream, $programmsbcid) { $select = 'programmsbcid = '.$programmsbcid. ' AND cstreamid = '.$cstream->id. " AND repeatid IS NULL AND status != 'canceled' "; $cpass = $this->dof->storage('cpassed')->get_list_select($select); if ( $cpass AND is_array($cpass) ) {// если нашли запись - то она единственная $cpass = current($cpass); }else
{// подписка не найдена - все нормально, ничего не надо делать return false; }
// найдем наследника
$successorid = $this->dof->storage('cpassed')->get_last_successor($cpass->id);
if ( ! $successorid ) {// нет наследника - все нормально return false; } // устанавливаем предыдущие подписки в статус "отменен" или "неуспешно завершен", если они есть, // используя для этого функцию выставления итоговых оценок // @todo проверить результат работы этой функции и записать в лог возможные ошибки, если они возникнут $this->dof->storage('cpassed')->set_final_grade($successorid); return $successorid; } /** установить статус новой созданной подписки в зависимости от статуса потока неа который она создается * * @return bool * @param int $id - id подписки на поток в таблице cpassed * @param object $cstream - объект из таблицы cstreams. Поток на который была произведена запись */ private function set_new_status_to_cpassed($id, $cstream) { switch ( $cstream->status ) {// в зависимости от статуса потока меняем статус подписки case 'active': return $this->dof->workflow('cpassed')->change($id, 'active'); break; case 'suspend': return $this->dof->workflow('cpassed')->change($id, 'suspend'); break; // подписка уже в нужном статусе case 'plan': return true; break; // неизвестный или недопустимый статус потока default: return false; } } /** Подписать одного ученика на поток. * * @return bool * @param object $cstream - объект из таблицы cstreams * @param int $programmsbcid - id подписки ученика на программу в таблице programmsbcs * * @todo перенести эту функцию в storage/cstreams */ public function unenrol_student_from_cstream($cstream, $programmsbcid) { $programmsbcid = intval($programmsbcid); if ( ! is_object($cstream) OR ! $programmsbcid ) {// неправильный формат данных return false; } if ( ! $cpassed = $this->dof->storage('cpassed')-> get_list_filter('cstreamid', $cstream->id, 'programmsbcid', $programmsbcid, 'status', array('plan', 'active', 'suspend')) ) {// не нашли ни одной подписки, значит ученик уже отписан return true; } $result = true; foreach ( $cpassed as $cpitem ) {// отписываем всех учеников от потока, устанавливая подпискам статус "отменен" // @todo выяснить какой статус устанавливать: "отменен" или "успешно завершен" $result = & $this->dof->workflow('cpassed')->change($cpitem->id, 'canceled'); } return $result; } /** Получить id программы, к которой привязан указанный поток * * @return int|bool - id программы, которой принадлежит поток или false в случае ошибки * @param int $cstreamid - id потока в таблице cstreams */ private function get_cstream_programmid($cstreamid) { if ( ! $this->get($cstreamid) ) { return false; } // получаем id программы из предмета, по которому проходит этот поток return $this->dof->storage('programmitems')->get_field($cstreamid->programmitemid, 'programmid'); } /** Сохраняет имя предмето-потока в БД * @param int $cstreamid - id предмето-поток * @return bool true - если запись прошла успешно или false */ public function get_cstreamname($eventcode, $mixedvar, $cstream = false) { //узнаем с объектами из каких таблиц мы имеем дело'; //и найдем cstreamid if ( $cstream ) {//пришли данные из таблицы cstream if ( $eventcode == 'delete' AND isset($mixedvar['old']->id) ) {//это удаление- старый объект обязательно должен быть $oldid = $mixedvar['old']->id; }elseif ( $eventcode == 'insert' AND isset($mixedvar['new']->id) ) {//это вставка - новая запись всегда должна быть $newid = $mixedvar['new']->id; }elseif ( $eventcode == 'update' AND isset($mixedvar['old']->id) AND isset($mixedvar['new']->id) ) {//это обновление - оба объекта должны быть $newid = $mixedvar['new']->id; $oldid = $mixedvar['old']->id; }else {//но это не так return false; } }else {//пришли данные из других таблиц'; if ( $eventcode == 'delete' AND isset($mixedvar['old']->cstreamid) ) {//это удаление - старый объект обязательно должен быть $oldid = $mixedvar['old']->cstreamid; }elseif ( $eventcode == 'insert' AND isset($mixedvar['new']->cstreamid) ) {//это вставка - новая запись всегда должна быть $newid = $mixedvar['new']->cstreamid; }elseif ( $eventcode == 'update' AND isset($mixedvar['old']->cstreamid) AND isset($mixedvar['new']->id) ) {//это обновление - оба объекта должны быть $newid = $mixedvar['new']->cstreamid; $oldid = $mixedvar['old']->cstreamid; }else {//но это не так return false; } } //путь к файлу с методами формирования имени файла $path = $this->dof->plugin_path('storage','cstreams','/cfg/namestream.php'); if ( ! file_exists($path) ) {//если файла нет - сообщим об этом return false; } //файл есть - подключаем файл include_once($path); //создаем объект для генерации имени $csname = new block_dof_storage_cstreams_namecstream; switch ( $eventcode ) { case 'insert': { return $csname->save_cstream_name($newid); } case 'update': { $old = $csname->save_cstream_name($oldid); $new = $csname->save_cstream_name($newid); return ($old AND $new); } case 'delete': { return $csname->save_cstream_name($oldid); } } return false; }
Планы:
Дополнительные методы:
- Получить список учебных процессов для данного ученика с учетом персональной подписки и академических групп (второй параметр - статус, по умолчанию - "идет").
События
В этом разделе описан список всех событий, которые генерируются, перехватываются и обрабатываются этим плагином.
Перехватываемые события
Тип плагина | Код плагина | Код события | Доп. данные | Пояснение |
---|---|---|---|---|
Этот плагин не перехватывает никаких событий |
Генерируемые события
Тип плагина | Код плагина | Код события | Доп. данные | Пояснение |
---|---|---|---|---|
storage | cstreams | insert | Массив, содержащий в поле "new" объект с данными для вставки в таблицу.
Пример: array('new' => $dataobject) |
Генерируется каждый раз при вставке новой записи в таблицу cstreams. |
storage | cstreams | update | Массив, содержащий в поле "new" обновленный объект, и в поле "old" объект со старыми данными, до обновления записи.
Пример: array('old' => $dataobject_old, 'new' => $dataobject_new) |
Генерируется каждый раз при обновлении записи в таблице cstreams. |
storage | cstreams | delete | Массив, содержащий в поле "old" объект с данными, которые удаляются из таблицы
Пример: array('old' => $dataobject) |
Генерируется каждый раз при удалении записи из таблицы cstreams. |
storage | cstreams | changestatus | Массив, содержащий id учебного потока
Пример: array('cstreamid'=>$id) |
Событие посылается при изменении статуса учебного потока на "активный" (active) |