<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://docs.deansoffice.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nickkang</id>
		<title>DOF - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://docs.deansoffice.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nickkang"/>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Nickkang"/>
		<updated>2026-04-12T15:59:49Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.2</generator>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:storages/pridepends&amp;diff=2242</id>
		<title>Разработка:storages/pridepends</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:storages/pridepends&amp;diff=2242"/>
				<updated>2011-04-26T09:57:21Z</updated>
		
		<summary type="html">&lt;p&gt;Nickkang: Новая страница: «{{Infobox_Plugin | name = pridepends | type = storages }}  ===Таблица в базе данных=== ''pridepends'' - содержит записи зависи...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = pridepends&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Таблица в базе данных===&lt;br /&gt;
''pridepends'' - содержит записи зависимостей дисциплин друг от друга с указанием характера зависимости (по коду типа зависимости запускается заранее созданый метод)&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
&lt;br /&gt;
* programmitemid - дисциплина в таблице [[Разработка:storages/programmitems | programmitems ]]. Здесь указывается дисциплина, для которой будет указываться зависимость. Т.е. эта дисциплина будет завистеть от того, что указано в следующих полях.&lt;br /&gt;
* type - тип зависимости, строковое поле. По содержащемуся здесь коду при проверке зависимости запускатеся соответствующий метод&lt;br /&gt;
* value - параметр зависимости, строковое поле. В частности поле может содержать id дисциплины, которая будет выступать зависимостью.&lt;br /&gt;
&lt;br /&gt;
===Дополнительные методы:===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''get_cfg($key=null)''' ====&lt;br /&gt;
&lt;br /&gt;
Позволяет обращаться к конфигурационному файлу данного плагина.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* string[optional] $key=null Ключ в массиве, т.е. искомый параметр. Если параметр не передан, то возвращается весь массив.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* Параметр или null (если конфигурационный файл не найден или если параметр не найден в файле или если он найден и его значение null, это стоит учитывать)&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
* Для работы требуется переменная класса для хранения массива параметров из файла, т.е. обращение в файл производится только при первой попытке.&lt;br /&gt;
* Ищет конфигурационный файл (в соответствии с логикой работы dof - $this-&amp;gt;dof-&amp;gt;plugin_path($this-&amp;gt;type(),$this-&amp;gt;code(),'/cfg/cfg.php'))&lt;br /&gt;
* Возвращает значение по ключу (если ключ не указан, то возвращает весь массив параметров из файла). к примеру return @$mas['a'], т.е. если нет значения, то не генерируется ошибка, а возвращается null.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_pridepends( $psbcid, $targetpritemid )'''====&lt;br /&gt;
&lt;br /&gt;
Метод возвращает список невыполненных предусловий, которые должны быть выполенны для записи на переданную параметром дисциплину.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* int $targetpritemid id [[Разработка:storages/programmitems | дисциплины ]]&lt;br /&gt;
* int $psbcid id [[Разработка:storages/programmsbcs | подписки на программу ]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* Массив объектов с полями: &lt;br /&gt;
** тип зависимости&lt;br /&gt;
** текст ошибки&lt;br /&gt;
** параметр невыполненного предусловия.&lt;br /&gt;
''Структура работы''&lt;br /&gt;
* взять список по $targetpritemid&lt;br /&gt;
* для каждой записи вызвать метод, код которого указан в поле type в таблице зависимостей&lt;br /&gt;
* этот метод смотрит пройдена ли дисц, если да, то вернет true, иначе false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_list_by_id( $id )'''====&lt;br /&gt;
&lt;br /&gt;
Метод возвращает массив зависимостей для дисциплины (массив из id дисциплин)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* int $targetpritemid id [[Разработка:storages/programmitems | дисциплины ]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* Массив объектов с полями: &lt;br /&gt;
** тип зависимости&lt;br /&gt;
** текст ошибки&lt;br /&gt;
** параметр предусловия.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''requirepritem( $targetpritid, $psbcid, $dependpritid )'''====&lt;br /&gt;
&lt;br /&gt;
Функция предусловия. Базовая. Проверяет, получен ли студентом зачет по данной дисциплине&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* int $targetpritid id целевой [[Разработка:storages/programmitems | дисциплины ]] (для универсальности интерфейса)&lt;br /&gt;
* int $psbcid id [[Разработка:storages/programmsbcs | подписки на программу ]]&lt;br /&gt;
* int $dependitid id [[Разработка:storages/programmitems | дисциплины ]], необходимой для подписания на целевую дисциплину&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* Массив объектов с полями: &lt;br /&gt;
** тип зависимости&lt;br /&gt;
** текст ошибки&lt;br /&gt;
** параметр предусловия.&lt;/div&gt;</summary>
		<author><name>Nickkang</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:storages/cstreams&amp;diff=2241</id>
		<title>Разработка:storages/cstreams</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:storages/cstreams&amp;diff=2241"/>
				<updated>2011-04-26T09:28:22Z</updated>
		
		<summary type="html">&lt;p&gt;Nickkang: Добавлено поле содержащее время последней синхронизации оценок + метод для выборки самых давно-синхронизированных cstream`ов&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = cstreams&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Таблица в базе данных===&lt;br /&gt;
''cstreams'' - учебный поток. Представляет учебный процесс, идущий по учебной дисциплине/предмету в течение одного учебного периоду с конкретным преподавателем, одним или несколькими учащимися или группой.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* ageid - учебный период в таблице [[Разработка:storages/ages | ages ]]&lt;br /&gt;
* programmitemid - дисциплина в таблице [[Разработка:storages/programmitems | programmitems ]]&lt;br /&gt;
* teacherid - id преподавателя в таблице [[Разработка:storages/persons | persons ]]. После создания поля appointmentid стало ненужным. Все старые обращения к этому полю будут переделаны на обращения к appointmentid, при создании новых обращений они должны обращаться к appointmentid. После переработки старых методов данное поле удалиться.&lt;br /&gt;
* departmentid - подразделение, которому принадлежит учебный процесс в таблице [[Разработка:storages/departments | departments ]]&lt;br /&gt;
* appointmentid - id назначения на должность в таблице [[Разработка:storages/appointments | appointments ]].&lt;br /&gt;
* mdlgroup - id группы moodle, соответствующей учебному потоку&lt;br /&gt;
* eduweeks - количество учебных недель/циклов (каждая соответствует одному циклу в расписании) продолжительности курса, по-умолчанию берется из programmitems, если там не указано - из ages. Нужны для подсчета часов при составлении расписания.&lt;br /&gt;
* begindate - дата и время, когда учебный процесс был впервые переведен в состояние &amp;quot;идет обучение&amp;quot; по [http://ru.wikipedia.org/wiki/UTC UTC]&lt;br /&gt;
* enddate  - дата и время окончания по [http://ru.wikipedia.org/wiki/UTC UTC], когда учебный процесс был в последний раз выведен из состояния &amp;quot;идет обучение&amp;quot;&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/cstreams | cstreams ]]&lt;br /&gt;
* hours - часов всего&lt;br /&gt;
* hoursweek - часов в неделю&lt;br /&gt;
* name - имя предмето-потока&lt;br /&gt;
* hoursweekdistance - количество часов в неделю дистанционно&lt;br /&gt;
* explanatory - пояснительная записка&lt;br /&gt;
* lastgradesync - дата последней синхронизации оценок&lt;br /&gt;
&lt;br /&gt;
===Дополнительные методы:===&lt;br /&gt;
&lt;br /&gt;
===='''insert($dataobject, $id = NULL, $quiet=false)'''====&lt;br /&gt;
&lt;br /&gt;
Вставляет запись в таблицу плагина.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* dataobject(object) - данные для записи в таблицу.&lt;br /&gt;
* $id = NULL&lt;br /&gt;
* quiet(bool) - генерировать или нет события, по умолчанию - нет(false).&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id вставленной записи.&lt;br /&gt;
* (bool) - false, если операция не удалась.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''delete($id,$quiet=false)'''====&lt;br /&gt;
&lt;br /&gt;
Удаляет запись из таблицы плагина с указанным id.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* id(int) - id записи в этой таблице .&lt;br /&gt;
* quiet(bool) - генерировать или нет события, по умолчанию - нет(false).&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если запись удалена или ее нет, false - в остальных случаях.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update($dataobject, $id = NULL, $quiet=false)'''====&lt;br /&gt;
&lt;br /&gt;
Обновляет запись в таблице плагина данными из объекта. Отсутствующие в объекте записи не изменяются. Если id передан, то обновляется запись с переданным id. Если id не передан обновляется запись с id, который передан в объекте.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* dataobject(object) - данные, которыми надо заменить запись в таблице.&lt;br /&gt;
* id(int) - id обновляемой записи в этой таблице.&lt;br /&gt;
* quiet(bool) - не генерировать событий.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если обновление прошло успешно, и false - во всех остальных случаях.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_teacher_cstream($id, $status = &amp;quot;active&amp;quot;)'''====&lt;br /&gt;
&lt;br /&gt;
Получает список учебных процессов у данного преподавателя.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $id(int) - id преподавателя в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $status(string) - статус потока, по умолчанию - идет(active).&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив процессов. &lt;br /&gt;
* (bool) - false, если процессы не найдены.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
* формируем SQL-запрос и возвращаем список процессов:&lt;br /&gt;
** если указывается статус - процессы с указанным статусом,&lt;br /&gt;
** если статус указывается null - процессы с любым статусом,&lt;br /&gt;
** если статус не указывается - процессы со статусом active.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_department_cstream($id, $status = &amp;quot;active&amp;quot;)'''====&lt;br /&gt;
&lt;br /&gt;
Получает список учебных процессов у данного подразделения.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $id(int) - id подразделения в таблице [[Разработка:storages/departments | departments ]].&lt;br /&gt;
* $status(string) - статус потока, по умолчанию - идет(active).&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив процессов. &lt;br /&gt;
* (bool) - false, если процессы не найдены.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
* формируем SQL-запрос и возвращаем список процессов:&lt;br /&gt;
** если указывается статус - процессы с указанным статусом,&lt;br /&gt;
** если статус указывается null - процессы с любым статусом,&lt;br /&gt;
** если статус не указывается - процессы со статусом active.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_age_cstream($id, $status = &amp;quot;active&amp;quot;)'''====&lt;br /&gt;
&lt;br /&gt;
Получает список учебных процессов для данного учебного периода.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $id(int) - id учебного периода в таблице [[Разработка:storages/ages | ages ]].&lt;br /&gt;
* $status(string) - статус потока, по умолчанию - идет(active).&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив процессов. &lt;br /&gt;
* (bool) - false, если процессы не найдены.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
* формируем SQL-запрос и возвращаем список процессов:&lt;br /&gt;
** если указывается статус - процессы с указанным статусом,&lt;br /&gt;
** если статус указывается null - процессы с любым статусом,&lt;br /&gt;
** если статус не указывается - процессы со статусом active.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_programmitem_cstream($id, $status = &amp;quot;active&amp;quot;)'''====&lt;br /&gt;
&lt;br /&gt;
Получает список учебных процессов по данной дисциплине.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $id(int) - id дисциплины в таблице [[Разработка:storages/programmitems | programmitems ]].&lt;br /&gt;
* $status(string) - статус потока, по умолчанию - идет(active).&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив процессов. &lt;br /&gt;
* (bool) - false, если процессы не найдены.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
* формируем SQL-запрос и возвращаем список процессов:&lt;br /&gt;
** если указывается статус - процессы с указанным статусом,&lt;br /&gt;
** если статус указывается null - процессы с любым статусом,&lt;br /&gt;
** если статус не указывается - процессы со статусом active.&lt;br /&gt;
&lt;br /&gt;
===='''get_agroup_cstream($id)'''====&lt;br /&gt;
&lt;br /&gt;
Получает список учебных процессов для академической группы.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $id(int) - id академической группы в таблице [[Разработка:storages/agroups | agroups ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив процессов.&lt;br /&gt;
* (bool) - false, если процессы не найдены.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_agroup_agenum_cstreams($agroupid, $ageid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить Список программ по академической группе, и периоду.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $agroupid(int) - id академической группы в таблице [[Разработка:storages/agroups | agroups ]].&lt;br /&gt;
* $ageid(int) - id учебного периода в таблице [[Разработка:storages/ages | ages ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив записей из этой таблицы, если они есть.&lt;br /&gt;
* (bool) - false, если ничего не нашлось.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_agroup_status_cstreams($agroupid, $status)'''====&lt;br /&gt;
Получить Список программ по академической группе, и статусу.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $agroupid(int) - id академической группы в таблице [[Разработка:storages/agroups | agroups ]].&lt;br /&gt;
* $status(string) - статус потока.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив записей из таблицы cstreams если они есть.&lt;br /&gt;
* (bool) - false, если ничегг не нашлось.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_numberof_cstreams($select)'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает количество потоков.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $select(string) - критерии отбора записей.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - количество найденных записей.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_prog_age_cstreams($pitemid, $ageid, $status=null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить список учебных потоков, допустимых учебной программой и текущим периодом&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmid(object) - id учебной программы в таблице [[Разработка:storages/programms | programms ]].&lt;br /&gt;
* $ageid(object) - id периода в таблице [[Разработка:storages/ages | ages ]].&lt;br /&gt;
* $status(string) - статус учебного потока.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив записей из базы.&lt;br /&gt;
* (bool) - false, если произошла ошибка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_programm_age_cstreams($programmid, $ageid = null, $agenum = null, $dpid = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получает все учебные потоки программы.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmid(int) - id учебной программы в таблице [[Разработка:storages/programms | programms ]].&lt;br /&gt;
* $ageid(int) - id периода в таблице [[Разработка:storages/ages | ages ]], по умолчанию нет.&lt;br /&gt;
* $agenum - номер паралели в таблице [[Разработка:storages/programmitems | programmitems ]], по умолчанию нет(null).&lt;br /&gt;
* $dpid - id подразделения в таблице [[Разработка:storages/departments | departments ]], по умолчанию - нет(null).&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив потоков.&lt;br /&gt;
* (bool) - false, если потоки не найдены.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_listing($limitfrom, $limitnum, $conds=null, $countonly=false)'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает список учебных потоков по заданным критериям.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $limitfrom(int) - начиная с какой записи просматривается фрагмент списка записей.&lt;br /&gt;
* $limitnum(int) - сколько записей нужно извлечь из базы.&lt;br /&gt;
* $conds(object) - объект со списком свойств, по которым будет происходить поиск, по умолчанию - нет(null),&lt;br /&gt;
* $countonly(object) - вернуть список записей по указанным условиям или только их количество, по умолчанию - список(false),&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив записей из базы.&lt;br /&gt;
* (bool) - false, в случае ошибки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_select_listing($inputconds)'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает фрагмент sql-запроса после слова WHERE.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $inputconds(object) - список полей с условиями запроса в формате &amp;quot;поле_БД-&amp;gt;значение&amp;quot;.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (string).&lt;br /&gt;
&lt;br /&gt;
===='''get_agroup_ageids($agroupid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить id всех периодов, в течение которых проходит обучение выбранной группы.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* @param int $agroupid - id академической группы в таблице [[Разработка:storages/agroups | agroups ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - индексированный массив с уникальными значениями id периодов всех потоков.&lt;br /&gt;
* (bool) - false, если ничего не найдено.&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
===='''create_cstreams_for_agroup($agroupid, $ageid, $departmentid, $datebegin, $enddate=null)'''====&lt;br /&gt;
&lt;br /&gt;
Создаёт учебные потоки для группы.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $agroupid(int) - id акадкмическуой группы (класса) в таблице [[Разработка:storages/agroups | agroups ]].&lt;br /&gt;
* $ageid(int) - id учебного периода в таблице [[Разработка:storages/ages | ages ]].&lt;br /&gt;
* $departmentid(int) - id учебного подразделения в таблице [[Разработка:storages/departments | departments ]].&lt;br /&gt;
* $datebegin(int) - дата начала обучения в формате [http://ru.wikipedia.org/wiki/UNIX-время unixtime].&lt;br /&gt;
* $enddate(int) - дата окончания обучения в формате [http://ru.wikipedia.org/wiki/UNIX-время unixtime], по умолчанию - нет(null).&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если всё получилось, и false, если возникли ошибки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''create_cstreams_for_programm($programmid, $ageid, $agenum, $departmentid, $datebegin, $enddate=null)'''====&lt;br /&gt;
&lt;br /&gt;
Создаёт подписку на программу в учебном периоде для выбранной параллели.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmid(int) - id учебной программы в таблице [[Разработка:storages/programms | programms ]].&lt;br /&gt;
* $ageid(int) - id учебного периода в таблице [[Разработка:storages/ages | ages ]].&lt;br /&gt;
* $agenum(int) - номер параллели, для которой создается подписка.&lt;br /&gt;
* $departmentid(int) - id учебного подразделения в таблице [[Разработка:storages/departments | departments ]].&lt;br /&gt;
* $datebegin(int) - дата начала обучения в формате [http://ru.wikipedia.org/wiki/UNIX-время unixtime].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если всё получилось, и false, если возникли ошибки.&lt;br /&gt;
    &lt;br /&gt;
===='''enrol_agroup_on_cstreams($agroupid, $ageid)'''====&lt;br /&gt;
&lt;br /&gt;
Подписывает группу на список потоков.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $agroupid(int) - id группы в таблице [[Разработка:storages/agroups | agroups ]].&lt;br /&gt;
* $ageid(int) - id учебного периода в таблице [[Разработка:storages/ages | ages ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если всё получилось, и false, если возникли ошибки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_status_complete($id)'''====&lt;br /&gt;
&lt;br /&gt;
Переводит поток в статус &amp;quot;завершен&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id(int) - id потока в таблице плагина.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если поток удачно завершен, и false - в остальных случаях.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cstreams_on_parametres($programmitemid, $teacherid = 0, $mycstrems = false, $completecstrems = false)'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает список потоков по параметрам.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmitemid(int) - id дисциплины в таблице [[Разработка:storages/programmitems | programmitems ]].&lt;br /&gt;
* $teacherid(int) - id учителя в таблице [[Разработка:storages/persons | persons ]], по умолчанию - нет(0).&lt;br /&gt;
* $mycstrems(bool) - показать ли потоки текущего пользователя, по умолчанию - нет(false).&lt;br /&gt;
* $completecstrems(bool) - показать ли завершенные потоки, по умолчанию - нет(false).&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_short_name($cstreamid)'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает короткое имя потока.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cstreamid(int) - id потока в таблице плагина.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (string)&lt;br /&gt;
* (bool) - false, если возникли ошибки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''enrol_students_on_cstream($cstream, $programmsbcids)'''====&lt;br /&gt;
&lt;br /&gt;
Подписывает учеников на поток.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cstream(object) - объект из таблицы плагина.&lt;br /&gt;
* $programmsbcids(object) - массив, состоящий из id подписок на программы в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если всё получилось, и false, если возникли ошибки.&lt;br /&gt;
&lt;br /&gt;
===='''unenrol_students_from_cstream($cstream, $programmsbcids)'''====&lt;br /&gt;
&lt;br /&gt;
Исключает учеников из потока&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* @param object $cstream - объект из таблицы плагина.&lt;br /&gt;
* @param array $programmsbcids - массив, состоящий из id подписок на программы в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если всё получилось, и false, если возникли ошибки.&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
===='''enrol_student_on_cstream($cstream, $programmsbcid)'''====&lt;br /&gt;
&lt;br /&gt;
Подписывает одного ученика на поток.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cstream(object) - объект из таблицы плагина.&lt;br /&gt;
* $programmsbcid(int) - id подписки ученика на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если всё получилось, и false, если возникли ошибки.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
===='''unenrol_student_from_cstream($cstream, $programmsbcid)'''====&lt;br /&gt;
&lt;br /&gt;
Исключает одного ученика из потока. &lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cstream(object) - объект из таблицы плагина.&lt;br /&gt;
* $programmsbcid(int) - id подписки ученика на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если всё получилось, и false, если возникли ошибки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cstreamname($eventcode, $mixedvar, $cstream = false)'''====&lt;br /&gt;
&lt;br /&gt;
В зависимости от произошедших событий (значение $eventcode) сохраняет информацию о новом (insert), и новом, и старом (update) либо только старом (delete) имени предмето-потока в БД.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $eventcode - произошедшее событие.&lt;br /&gt;
* $mixedvar(array) - id нового и старого потоков в таблице плагина.&lt;br /&gt;
* $cstream - данные пришли из таблицы плагина? , по умолчанию - нет(false).&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если запись прошла успешно, и false - в случае ошибок.&lt;br /&gt;
&lt;br /&gt;
===='''get_old_sync_cstreams($limit)'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает id указанного количества активных самых давно-синхронизированных cstream`ов&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* int $limit Количество выбираемых записей&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив записей cstream&lt;br /&gt;
&lt;br /&gt;
===Планы:===&lt;br /&gt;
====Дополнительные методы:====&lt;br /&gt;
* Получить список учебных процессов для данного ученика с учетом персональной подписки и академических групп (второй параметр - статус, по умолчанию - &amp;quot;идет&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
===События===&lt;br /&gt;
В этом разделе описан список всех событий, которые генерируются, перехватываются и обрабатываются этим плагином.&lt;br /&gt;
====Перехватываемые события====&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 |+ Таблица событий, которые перехватывает этот плагин&lt;br /&gt;
 ! Тип плагина&lt;br /&gt;
 ! Код плагина&lt;br /&gt;
 ! Код события&lt;br /&gt;
 ! Доп. данные&lt;br /&gt;
 ! Пояснение&lt;br /&gt;
 |-&lt;br /&gt;
 |colspan=5 align=center | ''Этот плагин не перехватывает никаких событий''&lt;br /&gt;
 |}&lt;br /&gt;
====Генерируемые события====&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 |+ Таблица событий, которые генерирует этот плагин&lt;br /&gt;
 ! Тип плагина&lt;br /&gt;
 ! Код плагина&lt;br /&gt;
 ! Код события&lt;br /&gt;
 ! Доп. данные&lt;br /&gt;
 ! Пояснение&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |cstreams&lt;br /&gt;
 |insert&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;new&amp;quot; объект с данными для вставки в таблицу.&lt;br /&gt;
''Пример:'' array('new' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при вставке новой записи в таблицу cstreams.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |cstreams&lt;br /&gt;
 |update&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;new&amp;quot; обновленный объект, и в поле &amp;quot;old&amp;quot; объект со старыми данными, до обновления записи.&lt;br /&gt;
''Пример:'' array('old' =&amp;gt; $dataobject_old, 'new' =&amp;gt; $dataobject_new)&lt;br /&gt;
 |Генерируется каждый раз при обновлении записи в таблице cstreams.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |cstreams&lt;br /&gt;
 |delete&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;old&amp;quot; объект с данными, которые удаляются из таблицы&lt;br /&gt;
''Пример:'' array('old' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при удалении записи из таблицы cstreams.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |cstreams&lt;br /&gt;
 |changestatus&lt;br /&gt;
 |Массив, содержащий id учебного потока&lt;br /&gt;
''Пример:'' array('cstreamid'=&amp;gt;$id)&lt;br /&gt;
 |Событие посылается при изменении статуса учебного потока на &amp;quot;активный&amp;quot; (active)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Разработка]]&lt;br /&gt;
[[Категория:Плагины_storages]]&lt;/div&gt;</summary>
		<author><name>Nickkang</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/programmitems&amp;diff=2240</id>
		<title>Разработка:im/programmitems</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/programmitems&amp;diff=2240"/>
				<updated>2011-04-26T09:21:05Z</updated>
		
		<summary type="html">&lt;p&gt;Nickkang: Добавлена информация о новых полях и добавлении зависимостей (дисциплины-предусловия)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = programmitems&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
== Учебные предметы ==&lt;br /&gt;
Этот плагин предназначен для работы с учебными предметами. Работает на основе типового плагина im/ages.&lt;br /&gt;
=== Экран просмотра списка предметов ===&lt;br /&gt;
Экран представляет собой таблицу со списком учебных предметов. В таблице присутствуют поля:&lt;br /&gt;
* ''Название'' &lt;br /&gt;
* ''Название в стандарте''&lt;br /&gt;
* ''Код''&lt;br /&gt;
* ''Код в стандарте''&lt;br /&gt;
* ''Программа'' - к какой учебной программе принадлежит предмет&lt;br /&gt;
* ''Подразделение'' - к какому подразделению принадлежит предмет&lt;br /&gt;
* ''Статус'' - статус предмета. Статусы предметов описаны в плагине [[Разработка:workflows/programmitems|workflows/programmitems]]&lt;br /&gt;
* ''Тип'' - обязательный, рекомендованный, по выбору&lt;br /&gt;
* ''Обязательный'' - обязательна ли дисциплина&lt;br /&gt;
* ''Очки'' - количество очков, полученное за прохождение дисциплины (в кредитной системе)&lt;br /&gt;
* ''Количество недель''&lt;br /&gt;
* ''Длительность''&lt;br /&gt;
* ''Часов всего''&lt;br /&gt;
* ''Часов теории''&lt;br /&gt;
* ''Часов практики''&lt;br /&gt;
* ''Уровень компоненты'' - региональная, федеральная, и т. д.&lt;br /&gt;
* ''Описание'' - краткое описание предмета&lt;br /&gt;
* ''Заметки'' - заметки для персонала&lt;br /&gt;
* ''Тип итогового контроля'' - поле пока что не отображается&lt;br /&gt;
* ''Действия'' - просмотреть, или редактировать (если пользователь имеет права редактирования). В будущем предусмотрено удаление. Добавление зависимостей&lt;br /&gt;
&lt;br /&gt;
Также можно производить поиск по параметрам: название предмета, или его код. Просмотр списка предметов происходит постранично (по умолчанию - 10 записей на странице).&lt;br /&gt;
&lt;br /&gt;
=== Экран просмотра одного предмета ===&lt;br /&gt;
На этом экране отображается информация об одном учебном предмете.&lt;br /&gt;
&lt;br /&gt;
=== Экран просмотра списка предметов по программе ===&lt;br /&gt;
В этом разделе отображается полный состав учебной программы. Предметы группируются по параллелям. В заголовке указаны ссылки на создание учебных потоков по параллели и периоду. &lt;br /&gt;
&lt;br /&gt;
Для каждой дисциплины доступны следующие действия:&lt;br /&gt;
* Просмотреть информацию&lt;br /&gt;
* Редактировать&lt;br /&gt;
* Посмотреть тематическое планирование&lt;br /&gt;
* Посмотреть подписки&lt;br /&gt;
* Добавить зависимости&lt;br /&gt;
&lt;br /&gt;
=== Экран создания/редактирования предмета ===&lt;br /&gt;
Экран создания и редактирования учебного предмета представляет собой форму со списком полей. Назначение и описание полей совпадают с описанием полей в плагине [[Разработка:storages/programmitems#Подробный формат полей в таблице:|storages/programmitems]].&lt;br /&gt;
В будущем поля будут разбиты на 2 категории: обязательные и дополнительные.&lt;br /&gt;
&lt;br /&gt;
Поля &amp;quot;название&amp;quot; и &amp;quot;код&amp;quot; являются обязательными. Помимо этого, при создании или редактировании формы действуют следующие ограничения:&lt;br /&gt;
&lt;br /&gt;
'''При создании'''&lt;br /&gt;
* Нельзя указать номер периода, в котором идет предмет, больше, чем максимальное количество периодов в программе, в которую он добавляется.&lt;br /&gt;
* Нельзя создать предмет без привязки к учебному подразделению и программе&lt;br /&gt;
* Поле &amp;quot;код предмета&amp;quot; должно быть уникальным&lt;br /&gt;
&lt;br /&gt;
'''При редактировании'''&lt;br /&gt;
* Нельзя указать номер периода, в котором идет предмет, больше, чем максимальное количество периодов в программе, в которую он добавляется.&lt;br /&gt;
* Нельзя создать предмет без привязки к учебному подразделению и программе&lt;br /&gt;
* Поле &amp;quot;код предмета&amp;quot; должно быть уникальным&lt;br /&gt;
* Нельзя изменить поле &amp;quot;подразделение&amp;quot;&lt;br /&gt;
* Нельзя изменить поле &amp;quot;учебная программа&amp;quot;&lt;br /&gt;
&lt;br /&gt;
В будущем планируется добавить для редактирования поля &amp;quot;курс в moodle&amp;quot; и &amp;quot;тип итогового контроля&amp;quot; &lt;br /&gt;
&lt;br /&gt;
=== Экран добавления зависимостей ===&lt;br /&gt;
Позволяет добавлять дисциплины предусловия для указанной дисциплины с указанием характера зависимости (выбор из заданных).&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
Здесь описаны функции для работы со списком учебных предметов.&lt;br /&gt;
===== get_listing() =====&lt;br /&gt;
&lt;br /&gt;
''Параметры:''&lt;br /&gt;
* $limitfrom - с какой записи начинать вывод&lt;br /&gt;
* $limitnum - сколько записей выводить на одной странице&lt;br /&gt;
* $conds - Обьект, содержащий данные с условиями выборки, в формате ''поле_БД-&amp;gt;значение'' по умолчанию пустой массив&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) массив записей из базы, или false в случае ошибки&lt;br /&gt;
&lt;br /&gt;
===== form() =====&lt;br /&gt;
Возвращает форму создания/редактирования учебного предмета с начальными данными&lt;br /&gt;
&lt;br /&gt;
''Параметры:''&lt;br /&gt;
* $id - id учебной программы в таблице [[Разработка:storages/programmitems|programmitems]], для редактирования которой вызывается форма. По умолчанию NULL (создается новый предмет).&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* [[Разработка:moodleQuickForm|moodleQuickForm]] object - объект формы, с загруженными в нее исходными данными.&lt;br /&gt;
&lt;br /&gt;
===== showlist() =====&lt;br /&gt;
Возвращает html-код списка предметов.&lt;br /&gt;
&lt;br /&gt;
''Параметры:''&lt;br /&gt;
* $list - массив записей из таблицы [[Разработка:storages/programmitems|programmitems]] для отображения.&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (string) - html-код или false в случае ошибки&lt;br /&gt;
&lt;br /&gt;
===== show_id() =====&lt;br /&gt;
Возвращает html-код отображения информации об одном учебном предмете&lt;br /&gt;
&lt;br /&gt;
''Параметры:''&lt;br /&gt;
* $id - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (string) - html-код или false в случае ошибки&lt;/div&gt;</summary>
		<author><name>Nickkang</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:storages/programmitems&amp;diff=2239</id>
		<title>Разработка:storages/programmitems</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:storages/programmitems&amp;diff=2239"/>
				<updated>2011-04-26T09:03:04Z</updated>
		
		<summary type="html">&lt;p&gt;Nickkang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = programmitems&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
===Таблица в базе данных===&lt;br /&gt;
''programmitems'' - элементы учебной программы - учебные дисциплины/предметы. &lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* programmid - учебная программа в таблице [[Разработка:storages/programms | programms ]]&lt;br /&gt;
* agenum - номер учебного периода, от начала обучения по программе на который назначена дисциплина. Для необязательных дисциплин возможен 0, тогда студент может &amp;quot;взять&amp;quot; дисциплину в любом семестре.&lt;br /&gt;
* courseclsid - id по таблице coursecls (таблица пока не предусмотрена), предназначен для объединения однородных дисциплин. Однородность дисциплин может быть четырех уровней (записываются внутри таблицы coursecls): &lt;br /&gt;
** 1 - одинаковые дисциплины изучаемые в составе различных учебных программ, &lt;br /&gt;
** 2 - разные ступени изучения одной дисциплины, &lt;br /&gt;
** 3 - дисциплины, относящиеся к одной науке, &lt;br /&gt;
** 4 - категории (общественные, естественные, технические). Сама таблица coursecls пока не реализована, а поле зарезервировано на будущее.&lt;br /&gt;
* name - название дисциплины (текстовое поле)&lt;br /&gt;
* code - код дисциплины (текстовое поле, необязательное, при указании проверяется уникальность). Если код не указан - то вместо него подставляется id записи.&lt;br /&gt;
* mdlcourse - id курса в moodle&lt;br /&gt;
* type - тип предмета:&lt;br /&gt;
** ''required''- обязательный&lt;br /&gt;
** ''recommended'' - рекомендованный&lt;br /&gt;
** ''free'' - по выбору&lt;br /&gt;
* required - обязательный курс (0/1) На основании этого поля ориентируемся, нужно ли обязательно подписывать или нет, а предыдущий больше информационный. Например, даже обязательный курс, который планируется разделить на подгруппы может не требовать автоматической подписки.&lt;br /&gt;
* maxcredit - максимальное количество &amp;quot;кредитов&amp;quot;, получаемое за прохождение дисциплины&lt;br /&gt;
* maxduration - максимальная продолжительность курса от начальной подписки (в секундах). Если не установлено - продолжительность неограничена.  Учебные потоки  всегда завершается автоматически с закрытием учебного периода, к которому они относятся.&lt;br /&gt;
* hours - количество часов, отведенное на дисциплину (отобразиться в индивидуальной ведомости рядом с названием и оценкой)&lt;br /&gt;
* hourstheory - часов теории&lt;br /&gt;
* hourspractice - часов практики&lt;br /&gt;
* eduweeks - количество учебных недель/циклов (каждая соответствует одному циклу в расписании) продолжительности курса, если не указано, учебные процессы наследуют из ages.&lt;br /&gt;
* instrlevelid - id уровня компоненты - &lt;br /&gt;
** 1 - федеральная, &lt;br /&gt;
** 2 - региональная, &lt;br /&gt;
** 3 - учебного заведения, &lt;br /&gt;
** 4 - кафедры&lt;br /&gt;
* gradelevel - уровень оценки&lt;br /&gt;
** ''notused'' - оценка не идет в кондуит&lt;br /&gt;
** ''discipline'' - дисциплина&lt;br /&gt;
** ''coursework'' - курсовая работа&lt;br /&gt;
** ''practice'' - практика&lt;br /&gt;
** ''finalexam'' - междисциплинарный экзамен&lt;br /&gt;
** ''diplom'' - дипломная работа&lt;br /&gt;
* scale - диапазон или перечисленные через запятую возможной итоговой оценки, пустая строка если оценка не предусмотрена.  Оценка может быть и дробной. Диапазон задается двумя числами через дефис: худшая_оценка_-_лучшая_оценка_. Например 5-1. 5 - самый плохой балл. 1 - самый лучший. Если задается не диапазон, а интервал, то оценки перечисляются через запятую: 5, 4.5, 4, 3.5, 3, 2.5, 2, 1.5, 1.&lt;br /&gt;
* mingrade - минимальная (для диапазона) или начальная слева-направа начиная с единицы (для перечисления) оценка, при которой курс считается завершенным. Если не указано, курс считается завершенным при выставлении любой оценки.&lt;br /&gt;
* sname - название в источнике/стандарте&lt;br /&gt;
* scode - код в источнике/стандарте&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/programmitems | programmitems ]] &lt;br /&gt;
* departmentid - структурное подразделение в таблице [[Разработка:storages/departments | departments ]], ответственное за реализацию дисциплины&lt;br /&gt;
* about - описание дисциплины&lt;br /&gt;
* notice - заметка о дисциплины для внутреннего пользования&lt;br /&gt;
* controltypeid - тип итогового контроля по данному курсу&lt;br /&gt;
* hoursweek - часов в неделю&lt;br /&gt;
* explanatory - пояснительная записка&lt;br /&gt;
* gradesyncenabled - разрешать синхронизацию оценок для данной дисциплины&lt;br /&gt;
* incjournwithoutgrade - при синхронизации оценок вносить в ведомость на момент ее заполнения студентов не имеющих оценки&lt;br /&gt;
* incjournwithunsatisfgrade - при синхронизации оценок вносить в ведомость на момент ее заполнения студентов имеющих неудовлетворительные оценки&lt;br /&gt;
* altgradeitem - id из grades_items (если не указано, то при синхронизации оценок берется оценка из итоговой оценки курса, который указан в mdlcourse)&lt;br /&gt;
&lt;br /&gt;
===Дополнительные методы:===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_pitem_by_code($code)'''====&lt;br /&gt;
&lt;br /&gt;
Ищет дисциплины по коду дисциплины.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $code(string) - код дисциплины.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) объект дисциплины.&lt;br /&gt;
* (bool) false если дисциплина не найдена.&lt;br /&gt;
&lt;br /&gt;
===='''get_pitems_list($programmid, $agenum=false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Ищет список дисциплин, относящихся к учебной программе и учебному периоду.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* (int) $programmid - id учебной программы из таблицы [[Разработка:storages/programms|programms]].&lt;br /&gt;
* (int) $agenum - порядковый номер периода или false, обозначающий получение дисциплин отсортированных в порядке возрастания периодав и по названию внутри них, по умолчанию false&lt;br /&gt;
* (str) $status - статус, по умолчанию null&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) список дисциплин.&lt;br /&gt;
* (bool) false если дисциплины не найдены.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
По SQL-запросу находим список дисциплин и возвращаем результат.&lt;br /&gt;
&lt;br /&gt;
===='''get_maxagenum($programmid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить количество периодов для данной учебной программы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $programmid - id учебной программы из таблицы [[Разработка:storages/programms|programms]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* false - если не нашлось не одной записи&lt;br /&gt;
* 0 - если нашлись только записи с agenum=0, то есть необязательные&lt;br /&gt;
* в остальных случаях возвращается целое число - максимальное кол-во дисциплин в данном периоде&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
По sql-запросу производится поиск максимального значения agenum среди записей с выбранных programmid.&lt;br /&gt;
&lt;br /&gt;
===='''get_gradelevels()'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает список всех возможных уровней оценки&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* array&lt;br /&gt;
&lt;br /&gt;
===='''get_gradelevel_name($value)'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает название уровня оценки по его обозначению&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* (str) $value обозначение уровня оценки в БД&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* string&lt;br /&gt;
&lt;br /&gt;
===='''get_types()'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает все возможные типы дисциплины&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* array&lt;br /&gt;
&lt;br /&gt;
===='''get_type_name($value)'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает название типа по его идентификатору в базе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* (str) $value &lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* string&lt;br /&gt;
&lt;br /&gt;
===='''is_positive_grade($programmitemid, $grade)'''====&lt;br /&gt;
&lt;br /&gt;
Определяет является ли переданная оценка положительной(достаточной, для продолжения обучения)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* (int) $programmitemid - id предмета, по которому выставляется итоговая оценка&lt;br /&gt;
* (str) $grade - выставляемая оценка&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* bool&lt;br /&gt;
&lt;br /&gt;
===='''analyze_grade_scale($pitem, $grade)'''====&lt;br /&gt;
&lt;br /&gt;
Определяет является ли переданная оценка допустимой для шкалы текущего предмета&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* (obj) $pitem - объект из таблицы [[Разработка:storages/programmitems | programmitems]]&lt;br /&gt;
* (str) $grade - выставляемая оценка&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* bool&lt;br /&gt;
&lt;br /&gt;
===='''is_grade_valid($id, $grade, $scale=null)'''====&lt;br /&gt;
&lt;br /&gt;
Определяет допустима ли переданная оценка для данной дисциплины&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* (int) $id - id предмета в таблице [[Разработка:storages/programmitems | programmitems]]&lt;br /&gt;
* (str) $grade - выставляемая оценка&lt;br /&gt;
* (str) $scale - шкала оценок, если она указывается вручную, по умолчанию null&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* bool&lt;br /&gt;
&lt;br /&gt;
===='''set_status_deleted($id)'''====&lt;br /&gt;
&lt;br /&gt;
Переводит дисциплину в статус &amp;quot;удален&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* (int) $id - id дисциплины&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* bool (true - если поток удачно завершен и false в остальных случаях)&lt;br /&gt;
&lt;br /&gt;
===Планы:===&lt;br /&gt;
&lt;br /&gt;
===События===&lt;br /&gt;
В этом разделе описан список всех событий, которые генерируются, перехватываются и обрабатываются этим плагином.&lt;br /&gt;
====Перехватываемые события====&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 |+ Таблица событий, которые перехватывает этот плагин&lt;br /&gt;
 ! Тип плагина&lt;br /&gt;
 ! Код плагина&lt;br /&gt;
 ! Код события&lt;br /&gt;
 ! Доп. данные&lt;br /&gt;
 ! Пояснение&lt;br /&gt;
 |-&lt;br /&gt;
 |colspan=5 align=center | ''Этот плагин не перехватывает никаких событий''&lt;br /&gt;
 |}&lt;br /&gt;
====Генерируемые события====&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 |+ Таблица событий, которые генерирует этот плагин&lt;br /&gt;
 ! Тип плагина&lt;br /&gt;
 ! Код плагина&lt;br /&gt;
 ! Код события&lt;br /&gt;
 ! Доп. данные&lt;br /&gt;
 ! Пояснение&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |programmitems&lt;br /&gt;
 |insert&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;new&amp;quot; объект с данными для вставки в таблицу.&lt;br /&gt;
''Пример:'' array('new' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при вставке новой записи в таблицу programmitems.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |programmitems&lt;br /&gt;
 |update&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;new&amp;quot; обновленный объект, и в поле &amp;quot;old&amp;quot; объект со старыми данными, до обновления записи.&lt;br /&gt;
''Пример:'' array('old' =&amp;gt; $dataobject_old, 'new' =&amp;gt; $dataobject_new)&lt;br /&gt;
 |Генерируется каждый раз при обновлении записи в таблице programmitems.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |programmitems&lt;br /&gt;
 |delete&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;old&amp;quot; объект с данными, которые удаляются из таблицы&lt;br /&gt;
''Пример:'' array('old' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при удалении записи из таблицы programmitems.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Разработка]]&lt;br /&gt;
[[Категория:Плагины_storages]]&lt;/div&gt;</summary>
		<author><name>Nickkang</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:sync/courseenrolment&amp;diff=2238</id>
		<title>Разработка:sync/courseenrolment</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:sync/courseenrolment&amp;diff=2238"/>
				<updated>2011-04-26T08:44:14Z</updated>
		
		<summary type="html">&lt;p&gt;Nickkang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = courseenrolments&lt;br /&gt;
| type = sync&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Синхронизация подписок на учебные потоки с подписками на курсы Moodle.&lt;br /&gt;
&lt;br /&gt;
* Подписка на курс Moodle (вызывается из рабочего процесса cpassed при переводе объекта cpassed в статус &amp;quot;active&amp;quot;, в случае, если для ученика существует пользователь Moodle, а для дисциплины задан курс Moodle). При этом, если для потока задана группа moodle, она тоже передается и при подписке происходит включение в эту группу.&lt;br /&gt;
* Отписка от курса Moodle (вызывается из рабочего процесса cpassed при выводе подписки из статуса active).&lt;br /&gt;
&lt;br /&gt;
Подписка, отписка и включение в группу происходит с использованием плагина modlibs/ama (modlib('ama')-&amp;gt;course($mcourse)-&amp;gt;role()-&amp;gt;enrol(), modlib('ama')-&amp;gt;course($mcourse)-&amp;gt;role()-&amp;gt;unenrol(), modlib('ama')-&amp;gt;course($mcourse)-&amp;gt;group($mgroup)-&amp;gt;add_member($muser),&lt;br /&gt;
== API ==&lt;br /&gt;
=== enrol_to_course() ===&lt;br /&gt;
Записывает пользователя на курс.&lt;br /&gt;
* возвращаемое значение: (bool) &lt;br /&gt;
** true если пользователя удалось подписать &lt;br /&gt;
** false если произошла ошибка&lt;br /&gt;
* $mdlcourseid - id курса в Moodle на который подписывается пользователь&lt;br /&gt;
* $mdluserid - id пользователя в moodle&lt;br /&gt;
* $mdlgroupid[optional] - id группы, в которую будет записан пользователь или null, если пользователь не будет записан в группу&lt;br /&gt;
* @param int $mdlroleid[optional] - id роли прльзователя в курсе (из таблицы moodle). Роль по умолчанию - ученик.&lt;br /&gt;
* @param int $timeend[optional] - время окончания обучения на курсе в формете unixtime (при наступлении этой даты пользователь булет отписан с курса)&lt;br /&gt;
* @param bool $hidden[optional] - записать пользователя в скрытом режиме (он не будет отображаться в списке пользователей для учеников и учителей курса)&lt;br /&gt;
=== unenrol_from_course() ===&lt;br /&gt;
Отписывает пользователя из курса&lt;br /&gt;
* возвращаемое значение: (bool) &lt;br /&gt;
** true если пользователя удалось отписать &lt;br /&gt;
** false если произошла ошибка&lt;br /&gt;
* $mdlcourseid - id курса в Moodle с которого отписывается пользователь&lt;br /&gt;
* $mdluserid - id пользователя в moodle&lt;br /&gt;
=== add_to_group() ===&lt;br /&gt;
Записывает пользователя в группу moodle&lt;br /&gt;
* возвращаемое значение: (bool) &lt;br /&gt;
* $mdlcourseid - id курса в Moodle в котором находится группа&lt;br /&gt;
* $mdlgroupid - id группы в курсе, куда будет записываться пользователь&lt;br /&gt;
* $mdluserid - id пользователя в moodle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== get_cfg() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
Позволяет обращаться к конфигурационному файлу данного плагина.&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Для работы требуется переменная класса для хранения массива параметров из файла, т.е. обращение в файл производится только при первой попытке.&lt;br /&gt;
** Ищет конфигурационный файл (в соответствии с логикой работы dof - $this-&amp;gt;dof-&amp;gt;plugin_path($this-&amp;gt;type(),$this-&amp;gt;code(),'/cfg/cfg.php'))&lt;br /&gt;
** Возвращает значение по ключу (если ключ не указан, то возвращает весь массив параметров из файла). к примеру return @$mas['a'], т.е. если нет значения, то не генерируется ошибка, а возвращается null.&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
** string[optional] $key=null Ключ в массиве, т.е. искомый параметр. Если параметр не передан, то возвращается весь массив.&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** Параметр или null (если конфигурационный файл не найден или если параметр не найден в файле или если он найден и его значение null, это стоит учитывать)&lt;br /&gt;
&lt;br /&gt;
=== sync_grades() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
Синхронизирует оценки деканата и moodle (запускается кроном)&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Выбирает указанное в кофиге кол-во активных самых давно синхронизированных cstream`ов (отсортированных по дате последней синхронизации в порядке возрастания)&lt;br /&gt;
** вернет false, если нет параметра в конфиге&lt;br /&gt;
** запускает sync_cstream()&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** bool успешность. Если в конфиге не найдено количество cstream`ов, синхронизируемых за раз, то false. Так же false в случае, если произошла ошибка синхронизации хоть одного cstream`а&lt;br /&gt;
&lt;br /&gt;
=== sync_cstream() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
Синхронизирует оценки деканата и moodle по конкретному cstream`у&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Смотрит в дисциплине из таблицы programmitems (связанной с cstream`ом) флаг gradesyncenabled. Если false, то не синхронизируем&lt;br /&gt;
** Выбирает все активные cpassed`ы для данного cstream`а&lt;br /&gt;
** получает оценку с помощью метода get_scale_grade&lt;br /&gt;
** Формирует и исполняет ведомость (с помощью класса, который находится в папке плагина в файле order_itog_grades.php), которая проставляет оценку в cpassed.&lt;br /&gt;
** В зависимости от оценки и параметров дисциплины incjournwithoutgrade и incjournwithunsatisfgrade может не исполнить ведомость. Если передан параметр closing то в любом случае исполняет ведомость.&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
** int $cstreamid id cstream&lt;br /&gt;
** bool $closing[optional] = false Если закрываем cstream (т.е. закрываем не здесь, но значит все cpassed надо обязательно проставить)&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** bool&lt;br /&gt;
&lt;br /&gt;
=== get_scale_grade() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
получает оценку для указанного cpassed`а из таблиц moodle&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Ищет итоговую оценку курса в таблице grade_grades, id которого указан в cpassed`е. Если в дисциплине указан altgradeitem, то берет оценку из нее, т.е. из записи из grade_items с указанным id (пока для этого варианта не работает приведение оценки к шкале дисциплины ЭД)&lt;br /&gt;
** С помощью метода bring_grade_to_scale оценку в шкалу для данной дисциплины деканата&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
** int|object $cpassed id cpassed`а или сам объект&lt;br /&gt;
** int|object[optional] $pitem id programmitem`а или сам объект&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** Приведенная к шкале оценка&lt;br /&gt;
** false в случае ошибки&lt;br /&gt;
** null - если нет оценки пока&lt;br /&gt;
&lt;br /&gt;
=== init_logs() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
Инициализация логов (не обязательно вызывать метод, для использования логов)&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Инициализирует переменную logs, которая является свойством текущего класса.&lt;br /&gt;
** Если переменная уже инициализированна раннее или в конфигурационном файле не установлено или отключено ведение логов, то ничего не делает&lt;br /&gt;
** Инициализация подразумевает установку:&lt;br /&gt;
*** формат даты для названий файлов&lt;br /&gt;
*** директории логов&lt;br /&gt;
*** базовых имен файлов. т.е. название файла логов для всех сообщений будет выглядеть так &amp;lt;дата в установленном формате&amp;gt;log.txt, а для лога с ошибками &amp;lt;дата в установленном формате&amp;gt;errorlog.txt&lt;br /&gt;
*** абсолютных путей к файлам логов, в которые будут писаться сообщения в данном экземпляре класса&lt;br /&gt;
** Вызывает метод, устанавливающий абсолютные пути файлов логов. Если говорить кратко (лучше смотреть в коде), он ищет два файла логов (обычный и для ошибок), к которым недавно происходило обращение для записи (не более заданного в конфиге кол-ва секунд). Если не находит таких файлов, то создает новые в соответствии с заданным форматом имени.&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
** -&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** на данный момент не предусмотрено возвращаемого значения&lt;br /&gt;
&lt;br /&gt;
=== delete_old_logs() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
Стирает старые логи в папке логов для данного плагина (эта директория устанавливается в init_logs)&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Вызывать нужно только после инициализации логов, иначе ничгео метод не сделает.&lt;br /&gt;
** По заданному формату даты в названии логов ищет файлы, которые созданы более чем заданное в конфиге кол-во дней, и удаляет их.&lt;br /&gt;
** Если в папке будут лишние файлы, формат названия которых не соответствует заданному, то они также могут быть удалены.&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** на данный момент не предусмотрено возвращаемого значения&lt;br /&gt;
&lt;br /&gt;
=== log() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
Запись сообщения в лог (для корректной работы не требуется вызывать больше ничего, устанавливать параметры - все автоматически)&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Для корректной работы не требуется вызывать больше ничего, устанавливать параметры - все автоматически&lt;br /&gt;
** Метод вызывает инициализацию логов&lt;br /&gt;
** Пишет сообщение $message в лог для всех сообщений и если передан параметр $error, то пишет еще и в лог ошибок&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
** string $message Сообщение об ошибке&lt;br /&gt;
** bool[optional] $error Если это сообщение об ошибке&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** на данный момент не предусмотрено возвращаемого значения&lt;br /&gt;
&lt;br /&gt;
=== log_get_str() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
Вызывает log, но в качестве сообщения надо подавать код сообщения и параметр как в get_string()&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Получает сообщение используя get_string и вызывает log()&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
** string $message Сообщение об ошибке&lt;br /&gt;
** mixed $a Параметры для строки из файла локализации&lt;br /&gt;
** bool[optional] $error Если это сообщение об ошибке&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** на данный момент не предусмотрено возвращаемого значения&lt;br /&gt;
&lt;br /&gt;
== Cron ==&lt;br /&gt;
* ''Периодичность запуска''&lt;br /&gt;
** Значение берется из конфигурационного файла (стоит учитывать, что это происходит только при установке или обновлении плагина)&lt;br /&gt;
* ''Что выполняется''&lt;br /&gt;
** sync_grades()&lt;br /&gt;
* ''Условия запуска (нюансы, логика запуска)''&lt;br /&gt;
** Запускатся если в конфигурационном файле задана переменная, активирующая синхронизацию и если пониженная нагрузка системы в данный момент, иначе вернет true.&lt;/div&gt;</summary>
		<author><name>Nickkang</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:sync/courseenrolment&amp;diff=2237</id>
		<title>Разработка:sync/courseenrolment</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:sync/courseenrolment&amp;diff=2237"/>
				<updated>2011-04-26T07:56:47Z</updated>
		
		<summary type="html">&lt;p&gt;Nickkang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = courseenrolments&lt;br /&gt;
| type = sync&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Синхронизация подписок на учебные потоки с подписками на курсы Moodle.&lt;br /&gt;
&lt;br /&gt;
* Подписка на курс Moodle (вызывается из рабочего процесса cpassed при переводе объекта cpassed в статус &amp;quot;active&amp;quot;, в случае, если для ученика существует пользователь Moodle, а для дисциплины задан курс Moodle). При этом, если для потока задана группа moodle, она тоже передается и при подписке происходит включение в эту группу.&lt;br /&gt;
* Отписка от курса Moodle (вызывается из рабочего процесса cpassed при выводе подписки из статуса active).&lt;br /&gt;
&lt;br /&gt;
Подписка, отписка и включение в группу происходит с использованием плагина modlibs/ama (modlib('ama')-&amp;gt;course($mcourse)-&amp;gt;role()-&amp;gt;enrol(), modlib('ama')-&amp;gt;course($mcourse)-&amp;gt;role()-&amp;gt;unenrol(), modlib('ama')-&amp;gt;course($mcourse)-&amp;gt;group($mgroup)-&amp;gt;add_member($muser),&lt;br /&gt;
== API ==&lt;br /&gt;
=== enrol_to_course() ===&lt;br /&gt;
Записывает пользователя на курс.&lt;br /&gt;
* возвращаемое значение: (bool) &lt;br /&gt;
** true если пользователя удалось подписать &lt;br /&gt;
** false если произошла ошибка&lt;br /&gt;
* $mdlcourseid - id курса в Moodle на который подписывается пользователь&lt;br /&gt;
* $mdluserid - id пользователя в moodle&lt;br /&gt;
* $mdlgroupid[optional] - id группы, в которую будет записан пользователь или null, если пользователь не будет записан в группу&lt;br /&gt;
* @param int $mdlroleid[optional] - id роли прльзователя в курсе (из таблицы moodle). Роль по умолчанию - ученик.&lt;br /&gt;
* @param int $timeend[optional] - время окончания обучения на курсе в формете unixtime (при наступлении этой даты пользователь булет отписан с курса)&lt;br /&gt;
* @param bool $hidden[optional] - записать пользователя в скрытом режиме (он не будет отображаться в списке пользователей для учеников и учителей курса)&lt;br /&gt;
=== unenrol_from_course() ===&lt;br /&gt;
Отписывает пользователя из курса&lt;br /&gt;
* возвращаемое значение: (bool) &lt;br /&gt;
** true если пользователя удалось отписать &lt;br /&gt;
** false если произошла ошибка&lt;br /&gt;
* $mdlcourseid - id курса в Moodle с которого отписывается пользователь&lt;br /&gt;
* $mdluserid - id пользователя в moodle&lt;br /&gt;
=== add_to_group() ===&lt;br /&gt;
Записывает пользователя в группу moodle&lt;br /&gt;
* возвращаемое значение: (bool) &lt;br /&gt;
* $mdlcourseid - id курса в Moodle в котором находится группа&lt;br /&gt;
* $mdlgroupid - id группы в курсе, куда будет записываться пользователь&lt;br /&gt;
* $mdluserid - id пользователя в moodle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== get_cfg() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
Позволяет обращаться к конфигурационному файлу данного плагина.&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Для работы требуется переменная класса для хранения массива параметров из файла, т.е. обращение в файл производится только при первой попытке.&lt;br /&gt;
** Ищет конфигурационный файл (в соответствии с логикой работы dof - $this-&amp;gt;dof-&amp;gt;plugin_path($this-&amp;gt;type(),$this-&amp;gt;code(),'/cfg/cfg.php'))&lt;br /&gt;
** Возвращает значение по ключу (если ключ не указан, то возвращает весь массив параметров из файла). к примеру return @$mas['a'], т.е. если нет значения, то не генерируется ошибка, а возвращается null.&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
** string[optional] $key=null Ключ в массиве, т.е. искомый параметр. Если параметр не передан, то возвращается весь массив.&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** Параметр или null (если конфигурационный файл не найден или если параметр не найден в файле или если он найден и его значение null, это стоит учитывать)&lt;br /&gt;
&lt;br /&gt;
=== sync_grades() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
Синхронизирует оценки деканата и moodle (запускается кроном)&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Выбирает указанное в кофиге кол-во активных самых давно синхронизированных cstream`ов (отсортированных по дате последней синхронизации в порядке возрастания)&lt;br /&gt;
** вернет false, если нет параметра в конфиге&lt;br /&gt;
** запускает sync_cstream()&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** bool успешность. Если в конфиге не найдено количество cstream`ов, синхронизируемых за раз, то false. Так же false в случае, если произошла ошибка синхронизации хоть одного cstream`а&lt;br /&gt;
&lt;br /&gt;
=== sync_cstream() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
Синхронизирует оценки деканата и moodle по конкретному cstream`у&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Смотрит в дисциплине из таблицы programmitems (связанной с cstream`ом) флаг gradesyncenabled. Если false, то не синхронизируем&lt;br /&gt;
** Выбирает все активные cpassed`ы для данного cstream`а&lt;br /&gt;
** получает оценку с помощью метода get_scale_grade&lt;br /&gt;
** Формирует и исполняет ведомость (с помощью класса, который находится в папке плагина в файле order_itog_grades.php), которая проставляет оценку в cpassed.&lt;br /&gt;
** В зависимости от оценки и параметров дисциплины incjournwithoutgrade и incjournwithunsatisfgrade может не исполнить ведомость. Если передан параметр closing то в любом случае исполняет ведомость.&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
** int $cstreamid id cstream&lt;br /&gt;
** bool $closing[optional] = false Если закрываем cstream (т.е. закрываем не здесь, но значит все cpassed надо обязательно проставить)&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** bool&lt;br /&gt;
&lt;br /&gt;
=== get_scale_grade() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
получает оценку для указанного cpassed`а из таблиц moodle&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Ищет итоговую оценку курса в таблице grade_grades, id которого указан в cpassed`е. Если в дисциплине указан altgradeitem, то берет оценку из нее, т.е. из записи из grade_items с указанным id (пока для этого варианта не работает приведение оценки к шкале дисциплины ЭД)&lt;br /&gt;
** С помощью метода bring_grade_to_scale оценку в шкалу для данной дисциплины деканата&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
** int|object $cpassed id cpassed`а или сам объект&lt;br /&gt;
** int|object[optional] $pitem id programmitem`а или сам объект&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** Приведенная к шкале оценка&lt;br /&gt;
** false в случае ошибки&lt;br /&gt;
** null - если нет оценки пока&lt;br /&gt;
&lt;br /&gt;
=== init_logs() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
Инициализация логов (не обязательно вызывать метод, для использования логов)&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Инициализирует переменную logs, которая является свойством текущего класса.&lt;br /&gt;
** Если переменная уже инициализированна раннее или в конфигурационном файле не установлено или отключено ведение логов, то ничего не делает&lt;br /&gt;
** Инициализация подразумевает установку:&lt;br /&gt;
*** формат даты для названий файлов&lt;br /&gt;
*** директории логов&lt;br /&gt;
*** базовых имен файлов. т.е. название файла логов для всех сообщений будет выглядеть так &amp;lt;дата в установленном формате&amp;gt;log.txt, а для лога с ошибками &amp;lt;дата в установленном формате&amp;gt;errorlog.txt&lt;br /&gt;
*** абсолютных путей к файлам логов, в которые будут писаться сообщения в данном экземпляре класса&lt;br /&gt;
** Вызывает метод, устанавливающий абсолютные пути файлов логов. Если говорить кратко (лучше смотреть в коде), он ищет два файла логов (обычный и для ошибок), к которым недавно происходило обращение для записи (не более заданного в конфиге кол-ва секунд). Если не находит таких файлов, то создает новые в соответствии с заданным форматом имени.&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
** -&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** на данный момент не предусмотрено возвращаемого значения&lt;br /&gt;
&lt;br /&gt;
=== delete_old_logs() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
Стирает старые логи в папке логов для данного плагина (эта директория устанавливается в init_logs)&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Вызывать нужно только после инициализации логов, иначе ничгео метод не сделает.&lt;br /&gt;
** По заданному формату даты в названии логов ищет файлы, которые созданы более чем заданное в конфиге кол-во дней, и удаляет их.&lt;br /&gt;
** Если в папке будут лишние файлы, формат названия которых не соответствует заданному, то они также могут быть удалены.&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** на данный момент не предусмотрено возвращаемого значения&lt;br /&gt;
&lt;br /&gt;
=== log() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
Запись сообщения в лог (для корректной работы не требуется вызывать больше ничего, устанавливать параметры - все автоматически)&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Для корректной работы не требуется вызывать больше ничего, устанавливать параметры - все автоматически&lt;br /&gt;
** Метод вызывает инициализацию логов&lt;br /&gt;
** Пишет сообщение $message в лог для всех сообщений и если передан параметр $error, то пишет еще и в лог ошибок&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
** string $message Сообщение об ошибке&lt;br /&gt;
** bool[optional] $error Если это сообщение об ошибке&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** на данный момент не предусмотрено возвращаемого значения&lt;br /&gt;
&lt;br /&gt;
=== log_get_str() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
Вызывает log, но в качестве сообщения надо подавать код сообщения и параметр как в get_string()&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Получает сообщение используя get_string и вызывает log()&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
** string $message Сообщение об ошибке&lt;br /&gt;
** mixed $a Параметры для строки из файла локализации&lt;br /&gt;
** bool[optional] $error Если это сообщение об ошибке&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** на данный момент не предусмотрено возвращаемого значения&lt;/div&gt;</summary>
		<author><name>Nickkang</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:sync/courseenrolment&amp;diff=2235</id>
		<title>Разработка:sync/courseenrolment</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:sync/courseenrolment&amp;diff=2235"/>
				<updated>2011-04-21T12:54:15Z</updated>
		
		<summary type="html">&lt;p&gt;Nickkang: Добавлены методы синхронизации оценок&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = courseenrolments&lt;br /&gt;
| type = sync&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Синхронизация подписок на учебные потоки с подписками на курсы Moodle.&lt;br /&gt;
&lt;br /&gt;
* Подписка на курс Moodle (вызывается из рабочего процесса cpassed при переводе объекта cpassed в статус &amp;quot;active&amp;quot;, в случае, если для ученика существует пользователь Moodle, а для дисциплины задан курс Moodle). При этом, если для потока задана группа moodle, она тоже передается и при подписке происходит включение в эту группу.&lt;br /&gt;
* Отписка от курса Moodle (вызывается из рабочего процесса cpassed при выводе подписки из статуса active).&lt;br /&gt;
&lt;br /&gt;
Подписка, отписка и включение в группу происходит с использованием плагина modlibs/ama (modlib('ama')-&amp;gt;course($mcourse)-&amp;gt;role()-&amp;gt;enrol(), modlib('ama')-&amp;gt;course($mcourse)-&amp;gt;role()-&amp;gt;unenrol(), modlib('ama')-&amp;gt;course($mcourse)-&amp;gt;group($mgroup)-&amp;gt;add_member($muser),&lt;br /&gt;
== API ==&lt;br /&gt;
=== enrol_to_course() ===&lt;br /&gt;
Записывает пользователя на курс.&lt;br /&gt;
* возвращаемое значение: (bool) &lt;br /&gt;
** true если пользователя удалось подписать &lt;br /&gt;
** false если произошла ошибка&lt;br /&gt;
* $mdlcourseid - id курса в Moodle на который подписывается пользователь&lt;br /&gt;
* $mdluserid - id пользователя в moodle&lt;br /&gt;
* $mdlgroupid[optional] - id группы, в которую будет записан пользователь или null, если пользователь не будет записан в группу&lt;br /&gt;
* @param int $mdlroleid[optional] - id роли прльзователя в курсе (из таблицы moodle). Роль по умолчанию - ученик.&lt;br /&gt;
* @param int $timeend[optional] - время окончания обучения на курсе в формете unixtime (при наступлении этой даты пользователь булет отписан с курса)&lt;br /&gt;
* @param bool $hidden[optional] - записать пользователя в скрытом режиме (он не будет отображаться в списке пользователей для учеников и учителей курса)&lt;br /&gt;
=== unenrol_from_course() ===&lt;br /&gt;
Отписывает пользователя из курса&lt;br /&gt;
* возвращаемое значение: (bool) &lt;br /&gt;
** true если пользователя удалось отписать &lt;br /&gt;
** false если произошла ошибка&lt;br /&gt;
* $mdlcourseid - id курса в Moodle с которого отписывается пользователь&lt;br /&gt;
* $mdluserid - id пользователя в moodle&lt;br /&gt;
=== add_to_group() ===&lt;br /&gt;
Записывает пользователя в группу moodle&lt;br /&gt;
* возвращаемое значение: (bool) &lt;br /&gt;
* $mdlcourseid - id курса в Moodle в котором находится группа&lt;br /&gt;
* $mdlgroupid - id группы в курсе, куда будет записываться пользователь&lt;br /&gt;
* $mdluserid - id пользователя в moodle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== get_cfg() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
Позволяет обращаться к конфигурационному файлу данного плагина.&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Для работы требуется переменная класса для хранения массива параметров из файла, т.е. обращение в файл производится только при первой попытке.&lt;br /&gt;
** Ищет конфигурационный файл (в соответствии с логикой работы dof - $this-&amp;gt;dof-&amp;gt;plugin_path($this-&amp;gt;type(),$this-&amp;gt;code(),'/cfg/cfg.php'))&lt;br /&gt;
** Возвращает значение по ключу (если ключ не указан, то возвращает весь массив параметров из файла). к примеру return @$mas['a'], т.е. если нет значения, то не генерируется ошибка, а возвращается null.&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
** string[optional] $key=null Ключ в массиве, т.е. искомый параметр. Если параметр не передан, то возвращается весь массив.&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** Параметр или null (если конфигурационный файл не найден или если параметр не найден в файле или если он найден и его значение null, это стоит учитывать)&lt;br /&gt;
&lt;br /&gt;
=== sync_grades() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
** Синхронизирует оценки деканата и moodle (запускается кроном)&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Выбирает указанное в кофиге кол-во активных самых давно синхронизированных cstream`ов (отсортированных по дате последней синхронизации в порядке возрастания)&lt;br /&gt;
** вернет false, если нет параметра в конфиге&lt;br /&gt;
** запускает sync_cstream()&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** bool успешность. Если в конфиге не найдено количество cstream`ов, синхронизируемых за раз, то false. Так же false в случае, если произошла ошибка синхронизации хоть одного cstream`а&lt;br /&gt;
&lt;br /&gt;
=== sync_cstream() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
** Синхронизирует оценки деканата и moodle по конкретному cstream`у&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Смотрит в дисциплине из таблицы programmitems (связанной с cstream`ом) флаг gradesyncenabled. Если false, то не синхронизируем&lt;br /&gt;
** Выбирает все активные cpassed`ы для данного cstream`а&lt;br /&gt;
** получает оценку с помощью метода get_scale_grade&lt;br /&gt;
** Формирует и исполняет ведомость (с помощью класса, который находится в папке плагина в файле order_itog_grades.php), которая проставляет оценку в cpassed.&lt;br /&gt;
** В зависимости от оценки и параметров дисциплины incjournwithoutgrade и incjournwithunsatisfgrade может не исполнить ведомость. Если передан параметр closing то в любом случае исполняет ведомость.&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
** int $cstreamid id cstream&lt;br /&gt;
** bool $closing[optional] = false Если закрываем cstream (т.е. закрываем не здесь, но значит все cpassed надо обязательно проставить)&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** bool&lt;br /&gt;
&lt;br /&gt;
=== get_scale_grade() ===&lt;br /&gt;
* ''Краткое описание:''&lt;br /&gt;
получает оценку для указанного cpassed`а из таблиц moodle&lt;br /&gt;
* ''Логика работы:''&lt;br /&gt;
** Ищет итоговую оценку курса в таблице grade_grades, id которого указан в cpassed`е. Если в дисциплине указан altgradeitem, то берет оценку из нее, т.е. из записи из grade_items с указанным id (пока для этого варианта не работает приведение оценки к шкале дисциплины ЭД)&lt;br /&gt;
** С помощью метода bring_grade_to_scale оценку в шкалу для данной дисциплины деканата&lt;br /&gt;
* ''Аргументы:''&lt;br /&gt;
** int|object $cpassed id cpassed`а или сам объект&lt;br /&gt;
** int|object[optional] $pitem id programmitem`а или сам объект&lt;br /&gt;
* ''Возвращаемое значение:''&lt;br /&gt;
** Приведенная к шкале оценка&lt;br /&gt;
** false в случае ошибки&lt;br /&gt;
** null - если нет оценки пока&lt;/div&gt;</summary>
		<author><name>Nickkang</name></author>	</entry>

	</feed>