<?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=Konovalov</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=Konovalov"/>
		<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/Konovalov"/>
		<updated>2026-04-12T17:08:20Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.2</generator>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7%D1%8B&amp;diff=2904</id>
		<title>Релизы</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7%D1%8B&amp;diff=2904"/>
				<updated>2015-02-10T06:01:20Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* 2.6.1 (2015-02-09) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==История выпуска релизов==&lt;br /&gt;
&lt;br /&gt;
=== 2.6.1 (2015-02-09) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-26x/fdo-261.zip/download FDO 2.6.1]&lt;br /&gt;
&lt;br /&gt;
*Новые возможности:&lt;br /&gt;
**Индивидуальные учебные планы: доработан динамический интерфейс с возможностью drag&amp;amp;drop.&lt;br /&gt;
**ЗЕТ и расширенный набор часов для дисциплин, автоматический подсчёт часов.&lt;br /&gt;
**Возможность указывать уровень образования в программе (+процедура обновления)&lt;br /&gt;
**Расширенный поиск персон с фильтрацией по нескольким критериям.&lt;br /&gt;
**Возможность просматривать историю оценок отписанных учеников в журнале группы, настройки для отображения этой информации.&lt;br /&gt;
**Добавлен интерфейс просмотра истории оценок студента по подписке и предмету в групповой журнал и зачётную книжку студента.&lt;br /&gt;
&lt;br /&gt;
*Улучшения и исправления:&lt;br /&gt;
**Доработан и отлажен SOAP-вебсервис.&lt;br /&gt;
**SOAP-вебсервис по-умолчанию при установке отключён. Добавлена настройка для регулирования&lt;br /&gt;
**Добавлен просмотр зарплатных часов при просмотре занятий для персон с правом просмотра финансовой информации.&lt;br /&gt;
**Исправлена логика работы при обновлении персоны - логин существующего пользователя меняется, только если создана настройка в cfg/cfg.php.&lt;br /&gt;
**Исправлена ошибка с созданием учебного расписания на день.&lt;br /&gt;
**Исправлена ошибка с отображением нагрузки в журнале для администратора.&lt;br /&gt;
**Исправлена ошибка, приводящая к удалению подписки у студента/преподавателя при остановке учебного процесса, даже если у студента/преподавателя были другие дисциплины,связанные с данным курсом Moodle.&lt;br /&gt;
**Реализовано корректное удаление персоны, добавлена страница удаления сотрудника.&lt;br /&gt;
**Исправлены ошибки в шаблоне отчета по фактической нагрузке.&lt;br /&gt;
**Добавлена проверка уникальности поля 'id пользователя в Moodle' в интерфейсе добавления/редактирования персоны.&lt;br /&gt;
**Добавлены ссылки на просмотр программы в отображении подписки на программу.&lt;br /&gt;
**Оптимизирована генерация и отображение отчёта по фактической нагрузке для уменьшения объёма хранящихся данных и времени его генерации.&lt;br /&gt;
**Исправлена ошибка с изменением программы у академической группы.&lt;br /&gt;
**Исправлена генерация формы отображения/редактирования персоны на странице создания договоров с сотрудником и учеником.&lt;br /&gt;
**Исправлена ошибка, вызывающая неправильное автосоздание рабочих дней в календаре учебного периода.&lt;br /&gt;
**Исправлено поведение: если день зафиксирован через приказ о зарплатном периоде, то учителя не могут сменять статус занятий, которые затрагивает этот приказ.&lt;br /&gt;
**Исправление проблем с пустым отчеством персон, созданных после релиза 2.6.0&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;
*im/obj&lt;br /&gt;
**Возможность получать ссылку на просмотр объекта из справочника&lt;br /&gt;
*im/persons&lt;br /&gt;
**Реализован функционал для отображения, редактирования, обработки, валидации нескольких персон с помощью одной формы. В будущем планируется добавить функционал в dof_modlib_widgets_form и описать процесс создания новых форм&lt;br /&gt;
*im/programmsbcs&lt;br /&gt;
**Возможность указывать только необходимые поля для просмотра объекта&lt;br /&gt;
*modlibs/widgets&lt;br /&gt;
**Добавлена возможность &amp;quot;замораживать&amp;quot; форму для того, чтобы не дублировать код в плагинах, использующих просмотр/редактирование существующего объекта, а наследовать форму для его отображения.&lt;br /&gt;
**Добавлено поле выбора даты dof_date_selector с поддержкой опций, позволяющих указывать время. Данные опции необходимы для верного создания временных интервалов для объектов Деканата.&lt;br /&gt;
**Добавлен метод для создания и установки (обновления) значений элементов формы.&lt;br /&gt;
*modlib/billing&lt;br /&gt;
**Добавлена библиотека системы биллинга. Организация системы приказов для проведения транзакций между счетами.&lt;br /&gt;
**storage/accounts, storage/accentryes&lt;br /&gt;
**Добавлены справочники для счетов по договорам, транзакций между счетами.&lt;br /&gt;
*storage/tags, storage/comments, storage/taglinks, storage/tasks&lt;br /&gt;
**Добавлены справочники для комментариев, тегов, линковок тегов к объектам деканата, задач пользователей, методы для реализации CRUD-интерфейса CRM системы на основе деканата.&lt;br /&gt;
*dof/lib&lt;br /&gt;
**Добавлены классы для исключений:&lt;br /&gt;
**dof_exception&lt;br /&gt;
**dof_exception_dml&lt;br /&gt;
**dof_exception_ddl&lt;br /&gt;
**dof_exception_file&lt;br /&gt;
*workflow/*&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;
** [[Разработка:im/acl | Система прав]]&lt;br /&gt;
** [[Разработка:im/admin | Администрирование]]&lt;br /&gt;
** [[Разработка:im/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:im/cfg | Параметры конфигураций]]&lt;br /&gt;
** [[Разработка:im/cpassed | Изучаемые и пройденные дисциплины]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы]]&lt;br /&gt;
** [[Разработка:im/departments | Подразделения ВУЗа]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал занятий]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы по контингенту]]&lt;br /&gt;
** [[Разработка:im/learningplan | Формирование учебного плана на весь срок обучения]]&lt;br /&gt;
** [[Разработка:im/my | Мой кабинет]]&lt;br /&gt;
** [[Разработка:im/obj | Отображение объектов]]&lt;br /&gt;
** [[Разработка:im/persons | Люди]]&lt;br /&gt;
** [[Разработка:im/plans | Тематическое планирование]]&lt;br /&gt;
** [[Разработка:im/programmitems | Учебные дисциплины]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на изучение учебной программы]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты]]&lt;br /&gt;
** [[Разработка:im/schdays | Календарь учебного периода]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание учебных занятий]]&lt;br /&gt;
** [[Разработка:im/sel | Договоры]]&lt;br /&gt;
** [[Разработка:im/standard | Плагин Стандарт]]&lt;br /&gt;
** [[Разработка:im/university | ВУЗ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama | API работы с Moodle]]&lt;br /&gt;
** [[Разработка:modlibs/base | Базовые классы плагинов]]&lt;br /&gt;
** [[Разработка:modlibs/billing | Библиотека биллинга]]&lt;br /&gt;
** [[Разработка:modlibs/calcformula | Формулы]]&lt;br /&gt;
** [[Разработка:modlibs/cur | Cur]]&lt;br /&gt;
** [[Разработка:modlibs/ig | Идеограммы]]&lt;br /&gt;
** [[Разработка:modlibs/jquery | Jquery]]&lt;br /&gt;
** [[Разработка:modlibs/nvg | Управление навигацией]]&lt;br /&gt;
** [[Разработка:modlibs/pear | Библиотеки PEAR]]&lt;br /&gt;
** [[Разработка:modlibs/phpexcel | PHPExcel]]&lt;br /&gt;
** [[Разработка:modlibs/refbook | Стандарты]]&lt;br /&gt;
** [[Разработка:modlibs/templater | Шаблоны документации (Templater)]]&lt;br /&gt;
** [[Разработка:modlibs/widgets | Виджеты]]&lt;br /&gt;
** [[Разработка:modlibs/yui | YUI]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/accentryes | Биллинг Проводки]]&lt;br /&gt;
** [[Разработка:storages/accounts | Биллинг Счета]]&lt;br /&gt;
** [[Разработка:storages/acl | Полномочия]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents | Применения доверенностей]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants | Доверенности и мандаты]]&lt;br /&gt;
** [[Разработка:storages/addresses | Адреса]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История смены учебных периодов для групп]]&lt;br /&gt;
** [[Разработка:storages/agroups | Учебные группы]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначение должности с табельными номерами]]&lt;br /&gt;
** [[Разработка:storages/comments | CRM Комментарии]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки]]&lt;br /&gt;
** [[Разработка:storages/contracts | Договора]]&lt;br /&gt;
** [[Разработка:storages/cov | Значения дополнительных опций]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Оценки по контрольным точкам]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Участие академических групп в учебных процессах]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебный процесс]]&lt;br /&gt;
** [[Разработка:storages/departments | Подразделения учебного заведения]]&lt;br /&gt;
** [[Разработка:storages/eagreements | Договоры с сотрудниками]]&lt;br /&gt;
** [[Разработка:storages/educations | Документы об образовании]]&lt;br /&gt;
** [[Разработка:storages/invcategories | Категории ресурсов]]&lt;br /&gt;
** [[Разработка:storages/invitems | Реестр склада(оборудование)]]&lt;br /&gt;
** [[Разработка:storages/invsets | Комплекты оборудования]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История смены учебных периодов для учащихся]]&lt;br /&gt;
** [[Разработка:storages/learningplan | Индивидуальный учебный план]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты]]&lt;br /&gt;
** [[Разработка:storages/orderdata | Данные из отчетов]]&lt;br /&gt;
** [[Разработка:storages/orders | Работа с приказами]]&lt;br /&gt;
** [[Разработка:storages/organizations | Организации]]&lt;br /&gt;
** [[Разработка:storages/persons | Люди]]&lt;br /&gt;
** [[Разработка:storages/planinh | Наследование темы]]&lt;br /&gt;
** [[Разработка:storages/plans | Темы и контрольные точки]]&lt;br /&gt;
** [[Разработка:storages/plansections | Тематические разделы]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости для дисциплин]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины]]&lt;br /&gt;
** [[Разработка:storages/programms | Учебные программы]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs | Подписки на учебные программы]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты]]&lt;br /&gt;
** [[Разработка:storages/schdays | Реестр дней, на которые было создано учебное расписание]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события, отображенные на реальные даты]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Штатное расписание - вакансии]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие/отсутствие учащихся]]&lt;br /&gt;
** [[Разработка:storages/schtemplates | Расписание учебной недели]]&lt;br /&gt;
** [[Разработка:storages/statushistory | История статусов]]&lt;br /&gt;
** [[Разработка:storages/sync | Реестр синхронизаций]]&lt;br /&gt;
** [[Разработка:storages/synclogs | Логи реестра синхронизаций]]&lt;br /&gt;
** [[Разработка:storages/taglinks | CRM Ссылки тегов]]&lt;br /&gt;
** [[Разработка:storages/tags | CRM Теги]]&lt;br /&gt;
** [[Разработка:storages/tasks | CRM Задачи]]&lt;br /&gt;
** [[Разработка:storages/teachers | Преподаватели (связь должности и преподаваемой дисциплины)]]&lt;br /&gt;
** [[Разработка:storages/workplaces | Привязка к месту работы]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка на курс]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации о курсе Moodle]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle]]&lt;br /&gt;
** [[Разработка:sync/personstom | Синхронизация персоналий]]&lt;br /&gt;
** [[Разработка:sync/schedule | Синхронизация расписания уроков]]&lt;br /&gt;
** [[Разработка:sync/soap | SOAP-сервис для синхронизации слушателей]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/accentryes | Статусы операций]]&lt;br /&gt;
** [[Разработка:workflows/accounts | Статусы счетов]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents | Статусы применения доверенностей]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants | Статусы доверенностей и мандатов]]&lt;br /&gt;
** [[Разработка:workflows/ages | Статусы учебных годов]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Статусы академических групп]]&lt;br /&gt;
** [[Разработка:workflows/appointments | Статусы назначения должностей с табельными номерами]]&lt;br /&gt;
** [[Разработка:workflows/contracts | Статусы договоров на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | Статусы изучаемых и пройденных курсов]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Статусы учебного процесса]]&lt;br /&gt;
** [[Разработка:workflows/departments | Статусы подразделений]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | Статусы договоров с сотрудниками]]&lt;br /&gt;
** [[Разработка:workflows/invitems | Статусы оборудования]]&lt;br /&gt;
** [[Разработка:workflows/invsets | Статусы комплектов оборудовани]]&lt;br /&gt;
** [[Разработка:workflows/orders | Статусы учебных годов]]&lt;br /&gt;
** [[Разработка:workflows/persons | Статусы персон]]&lt;br /&gt;
** [[Разработка:workflows/plans | Статусы контрольных точек]]&lt;br /&gt;
** [[Разработка:workflows/positions | Статусы должностей]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Статусы дисциплин]]&lt;br /&gt;
** [[Разработка:workflows/programms | Статусы учебных программ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Статусы подписок на программы]]&lt;br /&gt;
** [[Разработка:workflows/schdays | Статусы дней]]&lt;br /&gt;
** [[Разработка:workflows/schevents | Статусы событий]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Статусы вакансий]]&lt;br /&gt;
** [[Разработка:workflows/schtemplates | Статусы расписания учебной недели]]&lt;br /&gt;
** [[Разработка:workflows/taglinks | Статусы ссылок тегов]]&lt;br /&gt;
** [[Разработка:workflows/tags | Статусы тегов]]&lt;br /&gt;
** [[Разработка:workflows/tasks | Статусы задач]]&lt;br /&gt;
** [[Разработка:workflows/teachers | Статусы связей должностей с дисциплинами]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&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;
* НОУ ВПО МФПУ «Синергия»&lt;br /&gt;
&lt;br /&gt;
=== 2.6.0 (2014-09-29) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-26x/fdo-260.zip/download FDO 2.6.0]&lt;br /&gt;
&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;
**Поддержка Moodle 2.6, сохранена совместимость с Moodle 2.4&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;
**Исправлена ошибка при получении учебного периода для новых подписок (не начавших обучение)&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/departments&lt;br /&gt;
**Правки форматирования некоторых плагинов в соответствии со стандартами кодирования, улучшение читаемости кода&lt;br /&gt;
**Убраны упоминания о ENUM и ENUMVALUES в во всех плагинах storages&lt;br /&gt;
**Исправлены некоторые уведомления в режиме отладки. Например: ошибка &amp;quot;You should really redirect before you start page output&amp;quot; в журнале группы при сохранении оценки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/learningplan | Учебный план ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/base| Base ]]&lt;br /&gt;
** [[Разработка:modlibs/calcformula| Calcformula ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/phpexcel| phpexcel ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/educations | educations - ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/learningplan | Учебный план ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orderdata    | orderdata ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/plansections | Plansections ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/schtemplates | schtemplates ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов ]]&lt;br /&gt;
** [[Разработка:storages/sync    |  sync ]]&lt;br /&gt;
** [[Разработка:storages/synclogs    |  synclogs ]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/schedule | schedule ]]&lt;br /&gt;
&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/departments | Departments ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/invitems | invitems ]]&lt;br /&gt;
** [[Разработка:workflows/invsets | invsets ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schdays | Schdays ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/schtemplates | schtemplates ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
* НОУ ВПО МФПУ «Синергия»&lt;br /&gt;
&lt;br /&gt;
=== 2.4.11 (2014-02-25) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-2411.zip/download FDO 2.4.11 ]&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;
* Добавлена возможность делать вложенные ajaxselect&lt;br /&gt;
* Ведение логов в файл приказов и отчетов&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
=== 2.4.10 (2013-11-22) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-2410.zip/download FDO 2.4.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;
* Переписано API плагинов ages&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
=== 2.4.9 (2013-10-08) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-249.zip/download FDO 2.4.9 ]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
* Учет рабочего времени:&lt;br /&gt;
** Фиксация зарплатных коэффициентов в занятиях&lt;br /&gt;
** Отчеты о фактической нагрузке. Отображение зарплатных баллов&lt;br /&gt;
** Интерфейс просмотра зарплатных балов для персоны&lt;br /&gt;
** Отметка уроков преподавателем до 25-го числа включительно&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;
* Модернизирована постраничная навигация (теперь она не выводит все 1000 номеров страниц)&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;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
=== 2.4.8 (2013-08-06) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-248.zip/download FDO 2.4.8 ]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
* Коэффициенты учета рабочего времени сотрудников&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Совместимость с Moodle 2.4 и 2.5&lt;br /&gt;
* Исправлены баги при просмотре расписания в дневнике учащегося&lt;br /&gt;
* Исправлена совместимость с PostgreSQL&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;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
=== 2.4.7 (2013-04-15) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-247.zip/download FDO 2.4.7 ]&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Модифицирован интерфейс просмотра сотрудников&lt;br /&gt;
* Исправлено отображение таблиц при скачивании ведомостей групп и процессов&lt;br /&gt;
* Исправлена ошибка выбора периодов в приказах о переводе&lt;br /&gt;
* Добавлена возможность быстрого создания и редактирования объектов через поля autocomplite.&lt;br /&gt;
* Улучшена работа создания метаконтрактов&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
=== 2.4.6 (2013-03-06) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-246.zip/download FDO 2.4.6 ]&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Исправлено в учебном плане отображение нескольких подписок в одном учебном году на один и тот же контракт.&lt;br /&gt;
* В изучаемых и пройденных дисциплинах убран поиск по учащимся.&lt;br /&gt;
* Добавлен фильтр к учебному плану статусов подписок. &lt;br /&gt;
* Исправлены ошибки при инсталяции блока.&lt;br /&gt;
* Добавлена настройка для отображения секций в im/my.&lt;br /&gt;
* В некоторых местах исправлены проверки прав.&lt;br /&gt;
* К просмотру уроков добавлены колонки &amp;quot;Оценка&amp;quot; и &amp;quot;Тема&amp;quot;(только в расширенном виде),добавлен экспорт в csv-формате.&lt;br /&gt;
* Исправлены ошибки совместимости с PHP 5.3 и Moodle 2.3.&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
* Алексей Балышев&lt;br /&gt;
&lt;br /&gt;
=== 2.4.5 (2013-01-25) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-245.zip/download FDO 2.4.5 ]&lt;br /&gt;
&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;
* Форма смены статуса теперь каждый раз требует подтверждение статуса. &lt;br /&gt;
* Заказы на отчеты не дублируются, если у них одинаковые параметры и предыдущий отчет еще не сгенерировался.&lt;br /&gt;
* Модифицирован отчет по замененным урокам: добавлена колонка &amp;quot;тип замены&amp;quot; с возможностью фильтрации.&lt;br /&gt;
* todo исполняется от имени того, кто его заказал.&lt;br /&gt;
* Добавлена форма смены курса moodle переподписывающая учащихся с курса на курс.&lt;br /&gt;
* Отображение приостановленных учебных процессов в итоговой ведомости учащегося.&lt;br /&gt;
* Пофиксены проверки прав.&lt;br /&gt;
* Исправлена синхронизация персоны деканата с пользователем Moodle при создании персоны&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
&lt;br /&gt;
=== 2.4.4 (2012-09-19) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-244.zip/download FDO 2.4.4 ]&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Исправлена возможность наследования стандартных ролей.&lt;br /&gt;
* В дневнике ученика теперь изученные предметы помечаются серым.&lt;br /&gt;
* Просмотр уроков происходит вне зависимости от подразделения. Уроки не из того подразделения помечаются зеленым.&lt;br /&gt;
* Исправлен переход по страницам в списке подразделений.&lt;br /&gt;
* Исправлена ошибка синхронизации персоны с пользователем Moodle.&lt;br /&gt;
* Курс Moodle можно теперь менять только у приостановленной дисциплины.&lt;br /&gt;
* Пофиксены некоторые ссылки, где мог происходить сброс подразделения.&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
&lt;br /&gt;
=== 2.4.3 (2012-08-31) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-243.zip/download FDO 2.4.3 ]&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;
* Доработан интерфейс записи на курс &amp;quot;Подписка для плагина Free Deans Office&amp;quot;&lt;br /&gt;
* Доработана возможность при автоматическом закрытии ведомости указывать в курса Moodle не только 100 бальную систему.&lt;br /&gt;
* Исправлена ошибка при создании табельных номеров&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2.4.2 (2012-06-28) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-242.zip/download FDO 2.4.2 ]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Возвращена возможность скачивать итоговую ведомость в формате odt&lt;br /&gt;
* Исправлено отображение итоговой ведомости&lt;br /&gt;
* Исправлено отображение дневника&lt;br /&gt;
* Переработаны страницы деканата для отображения в темах Moodle без горизонтальной прокрутки&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/obj | Просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
&lt;br /&gt;
=== 2.4.1 (2012-06-09) ===&lt;br /&gt;
'''Это первый релиз, предназначенный для работы с Moodle 2.x.'''&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания:&lt;br /&gt;
&lt;br /&gt;
Новые возможности&lt;br /&gt;
* В ядро добавлена возможность работы с широковещательными сообщениями&lt;br /&gt;
* На страницу создания договора с сотрудником добавлено autocomplete-поле&lt;br /&gt;
* На страницу создания договора с учеником добавлены autocomplete-поля с возможностью поиска по персонам и пользователям Moodle&lt;br /&gt;
* Улучшены механизмы отладки для разработчиков: добавлено отображение стека вызовов при ошибках&lt;br /&gt;
* Добавлен отчет по замененным урокам&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Произведен полный рефакторинг ядра проекта и всех плагинов, для обсеспечения совместимости с Moodle 2&lt;br /&gt;
** Переписаны все функции работы с базой данных&lt;br /&gt;
** Переписаны функции работы с плагинами&lt;br /&gt;
** Переписаны плагины авторизации и подписки на курсы&lt;br /&gt;
** Устаревшие enum-поля всех таблиц заменены на тип text (требование Moodle)&lt;br /&gt;
** Из ядра убраны неиспользуемые полномочия&lt;br /&gt;
** Переписаны функции модуля ama. Код проекта очищен от использования устаревших методов&lt;br /&gt;
* Исправлена проблема с созданием записей об истории обучения при подписании приказа о переводе&lt;br /&gt;
* Стандартизирован механизм получения ссылок на объекты&lt;br /&gt;
* Исправлена подстановка значений по умолчанию в формы запроса отчетов&lt;br /&gt;
* Исправлен и доработан элемент формы dof_autocomplete&lt;br /&gt;
* Workflow-плагины добавлены методы работы с метастатусами&lt;br /&gt;
* Исправлен подсчет часов в нагрузке учителей&lt;br /&gt;
* Исправлено отображение временной зоны пользователя при просмотре расписания&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
* Илья Смирнов ( R.I.P. )&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;
&lt;br /&gt;
=== 2.3.3 (2012-04-24) ===&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-23x/fdo-233.zip/download FDO 2.3.3 ]&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;
* Исправлена ошибка, возникающая при экспорте отчета в Excel&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;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== 2.3.2 (2012-02-21) ===&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-23x/fdo-232.zip/download FDO 2.3.2 ]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
* Добавлен плагин [[Разработка:im/inventory | Ресурсы ]]. Появилась возможность вести учет оборудования в образовательном учреждении. Особенности и возможности модуля:&lt;br /&gt;
** Учет поступившего в организацию оборудования &lt;br /&gt;
** Учет списанного оборудования&lt;br /&gt;
** Формирование и выдача комплектов оборудования преподавателям и учащимся&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;
*** где и у кого находится выданное оборудование&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;
* Добавлен плагин modlib/cur, позволяющий управлять учебными планами через приказы. В справочник cpasseds добавлено поле с id приказа, по которому подписка была создана.&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;
Улучшения и исправления:&lt;br /&gt;
* Журнал: оптимизирован запрос для отображения всех проведенных в подразделении занятий за период. Теперь даже при большом количестве проводимых занятий (около 1000 в день) он корректно обрабатывается.&lt;br /&gt;
* Журнал: Исправлена ошибка с двойным созданием темы урока в журнале. В форму сохранения урока (а также в другие формы) добавлен элемент &amp;quot;одноразовая кнопка&amp;quot;, которая устраняет проблему двойного клика.&lt;br /&gt;
* Журнал: на странице просмотра уроков добавлен календарь, чтобы было удобнее выбирать диапазон дат&lt;br /&gt;
* Отчеты: во все отчеты при просмотре добавлена более подробная информация по ним (время когда был собран отчет, время заказа, подразделение, кто заказал)&lt;br /&gt;
* Отчеты: возможность удаление отчета как уже собранного, так и несобранного для пользователей, который этот отсчет запросили и для администратора&lt;br /&gt;
* Управление доступом: определены права доступа для сбора всех типов отчетов&lt;br /&gt;
* Журнал: Исправлена ошибка, не позволяющая сохранить тему урока при слишком длинном домашнем задании. Максимальная длина домашнего задания увеличена с 256 до 700 символов&lt;br /&gt;
* Тематическое планирование: Добавлена возможность скрыть/показать пояснительную записку для тематического планирования , чтобы было удобнее работать с темами.&lt;br /&gt;
* Управление доступом: Закончена работа над правами завуча&lt;br /&gt;
* Формы: оптимизирован элемент dof_autocomplete (интерактивное выпадающее меню) - теперь он работает быстрее&lt;br /&gt;
* Журнал: на странице просмотра уроков выпадающее меню &amp;quot;режим отображения&amp;quot; заменено на вкладки&lt;br /&gt;
* Журнал: исправлена ошибка, из-за которой при просмотре уроков по персоне не отображались уроки, которые были созданы вручную (не через шаблоны)&lt;br /&gt;
* Журнал: добавлено отображение даты выставления оценки и посещаемости урока в журнале (всплывающая подсказка)&lt;br /&gt;
* Управление доступом: для всех прав доступа добавлено описание&lt;br /&gt;
* Журнал: добавлена возможность выставлять оценку &amp;quot;0&amp;quot;&lt;br /&gt;
* Предметы и предмето-классы: исправлена ошибка, из-за которой не удавалось вернуть предмето-класс обратно в активный статус, если группа Moodle удалена&lt;br /&gt;
* Сотрудники: исправлена ошибка, из-за которой при создании табельного номера не проставлялась дата заключения договора&lt;br /&gt;
* 20+ мелких исправлений ошибок &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===2.3.1 (2011-11-22)===&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-23x/fdo-231.zip/download]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
* Добавлен плагин &amp;quot;Расписание&amp;quot;. Теперь есть возможность планировать учебный процесс создавая расписание при помощи шаблонов&lt;br /&gt;
* Добавлена поддержка библиотеки jQuery&lt;br /&gt;
* Поиск уроков по персонам переделан с использованием AJAX-запросов для ускорения быстродействия&lt;br /&gt;
* Добавлена возможность AJAX-редактирования тематического планирования&lt;br /&gt;
* Добавлены различные режимы отображения расписания (по учителям, по ученикам, по интервалам времени)&lt;br /&gt;
* При составлении расписания учитывается недогруженность/перегруженность учителей и учеников &lt;br /&gt;
* При составлении расписания учитывается пересечение занятий друг с другом (чтобы нельзя было запланировать два урока одному ученику или учителю в разных местах одновременно)&lt;br /&gt;
* Добавлен детальный вывод ошибок, в случае когда невозможно создать расписание&lt;br /&gt;
* Добавлена возможность наследовать учебно-тематическое планирование из предмета в дисциплину&lt;br /&gt;
* Автоматическое создание групп Moodle, при подписке предмето-класса на курс&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;
* Импорт отчета нагрузки учителей переделан на формат csv, читаемый уже из файла отчета, что ускоряет процесс импорта&lt;br /&gt;
* В системе добавлены ссылки,на курсы и другие объекты moodle для облегчения навигации&lt;br /&gt;
* Улучшен внешний вид календаря в дневнике (видно, в какие дни у ученика есть занятия, подсвечивается текущая неделя)&lt;br /&gt;
* Появилась возможность просмотра истории, если у ученика были пересдачи по предмету&lt;br /&gt;
*Более 30+ исправлений ошибок&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз:&lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===2.3.0 Beta 1 (2011-07-11)===&lt;br /&gt;
&lt;br /&gt;
Просмотр информации по подразделениям, собственные права и конфигурации деканата, отчеты по персонам.&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-23x/230b1.zip/download]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
*Просмотр информации объектов деканата по структурным подразделениям;&lt;br /&gt;
*Реализована собственная система прав в деканате, независимая от системы прав в Moodle;&lt;br /&gt;
*Интерфейс для просмотра прав для доверенности и персоны;  &lt;br /&gt;
*Реализованы собственные конфигурации в деканате;&lt;br /&gt;
*Интерфейс просмотра настроек конфигурации;&lt;br /&gt;
*Запрос отчетности для учащихся и сотрудников по активности деятельности в Moodle;&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;
*Автоматическое заполнение итоговой ведомости по итоговым оценкам из Moodle;&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;
*Шаблон расписания занятий (пока может использоваться шаблон из версии 1.6.2)&lt;br /&gt;
*AJAX-элемент с автоматической подгрузкой вариантов выбора&lt;br /&gt;
*Приказ о формировании групп&lt;br /&gt;
*Управление прецедентами, обращениями и служебными заданиями&lt;br /&gt;
*Управление оплатой за обучение &lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз:&lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Периоды ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===2.2.3 Beta 1 (2011-03-24)===&lt;br /&gt;
Тематическое планироване, приказы о переводе на следующую параллель.&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-22x/223b1.zip/download]&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;
* Отображение дневника учащегося в Google Chrome&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;
* Шаблон расписания занятий (пока может использоваться шаблон из версии 1.6.2)&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;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/agroups | Периоды ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | Истоия обучения академаческих групп  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===2.2.2 Beta 4 (2010-11-11)===&lt;br /&gt;
Нагрузка преподавателей, учебный план учащихся, расписание учебных занятий.&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-22x/222b4.zip/download]&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;
* Синхронизация персоны деканата с пользователем moodle.&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;
* Шаблон расписания занятий (пока может использоваться шаблон из версии 1.6.2)&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;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/agroups | Периоды ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&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;
&lt;br /&gt;
===2.2.1 Beta 3 (2010-05-27)===&lt;br /&gt;
Управление сотрудниками, должностями и вакансиями.&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-22x/221b3.zip/download]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
* Регистрация договоров с сотрудниками&lt;br /&gt;
* Управление должностями в организации&lt;br /&gt;
* Управление вакансиями&lt;br /&gt;
* Работа с табельными номерами&lt;br /&gt;
* Распределение преподаваемых предметов по учителям (указание того, какой учитель какой предмет ведет)&lt;br /&gt;
* Синхронизация подписок на предметы с подписками на курс в Moodle (пользователь автоматически записывается/отписывается с курса при изменении статуса подписки на предмет)&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;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/agroups | Периоды ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===2.2.0 Beta1 (2010-03-17)===&lt;br /&gt;
Информационная модель и бизнес-процессы учебного заведения.&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-22x/220b1.zip/download]&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;
* Синхронизация подписок с Moodle&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;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Периоды ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
&lt;br /&gt;
Проекты:&lt;br /&gt;
[[Разработка:Проект_090529|Проект 2009-05-29 (версия 2.1.0 =&amp;gt; 2.2.0)]]&lt;br /&gt;
[[Разработка:Проект_100111_итерации|Итерации по проекту 2010-91-11 (подготовка к релизу версии 2.2.0)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
* ЮРГУЭС&lt;br /&gt;
* СИБАДИ&lt;br /&gt;
&lt;br /&gt;
===2.1.0 (2009-06-10)===&lt;br /&gt;
Управление договорами на обучение&lt;br /&gt;
&lt;br /&gt;
Новые возможности для пользователей:&lt;br /&gt;
&lt;br /&gt;
* Управление договорами на обучение:&lt;br /&gt;
** Договора могут вносить кураторы, имеющие возможность просматривать только &amp;quot;свои&amp;quot; договора и редактировать их только до подписания.&lt;br /&gt;
** Для договоров создан рабочий процесс, отслеживающий их продвижение от внесения в систему, подписания сторонами, до расторжения. При этом для ученика автоматически регистрируется и удаляется учетная запись Moodle.&lt;br /&gt;
** Текст договора автоматически формируется в форматах ODF (Open Office Writer) и HTML по шаблонам, которые могут быть изменены.&lt;br /&gt;
* Справочник участников учебного процесса (студенты, законные представители/клиенты, кураторы)&lt;br /&gt;
** Просмотр списков, дополнительной информации, паспортных данных для пользователей, имеющих соответствующие привелегии в системе.&lt;br /&gt;
** Автоматическое обновление учетной записи Moodle при изменении данных о студенте.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Новые инструменты для разработчиков:&lt;br /&gt;
* История изменения статусов объектов.&lt;br /&gt;
* Генерация документов по шаблонам (ODF, CSV, HTML).&lt;br /&gt;
* Работа с приказами: приказом считается некоторое законченное, единоличное действие в системе, изменяющее ее состояние, приказ содержит исходные данные и перед исполнением должен быть подписан полномочным пользователем, при этом формируется контрольная сумма по всем исходным данным. В момент исполнения проверяется, подписан ли приказ, и верна ли контрольная сумма. Формат исходных данных для приказа совместим с форматом исходных данных для генератора документов по шаблонам.&lt;br /&gt;
* Библиотека виджетов: прогресс-бар, обертки для квикформа.&lt;br /&gt;
* Улучшение в альтернативном API Moodle (modlib/ama)&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз:&lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/atest | Автоматическое тестирование плагинов (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:im/exampleim | Пример плагина интерфейса (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/examplelib| Пример плагина библиотеки (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/addresses | addresses - адреса ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/examplest    | examplest - пример справочника (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    | statushistory - история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/workplace   | workplace - привязка к месту работы]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/examplesync | examplesync - пример плагина синхронизации (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/examplewf   | examplewf - пример рабочего процесса (для разработчиков) ]]&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&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;
===2.0.1 (2008-08-29)===&lt;br /&gt;
SDK для разработчиков&lt;br /&gt;
&lt;br /&gt;
Релиз предназначен для ознакомления разработчиков плагинов с API системы. Содержит примеры плагинов каждого типа, демонстрирующие возможности ядра системы.&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз:&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/exampleim | Пример плагина интерфейса (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/examplelib| Пример плагина библиотеки (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/examplest    | examplest - пример справочника (для разработчиков) ]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/examplesync | examplesync - пример плагина синхронизации (для разработчиков) ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/examplewf   | examplewf - пример рабочего процесса (для разработчиков) ]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Илья Смирнов&lt;br /&gt;
* Евгений Цыганцов&lt;br /&gt;
Поддержка проекта: ООО &amp;quot;Открытые технологии&amp;quot;&lt;/div&gt;</summary>
		<author><name>Konovalov</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/soap&amp;diff=2898</id>
		<title>Разработка:sync/soap</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/soap&amp;diff=2898"/>
				<updated>2015-02-09T10:14:07Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Коды ошибок */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = soap&lt;br /&gt;
| type = sync&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Описание=&lt;br /&gt;
&lt;br /&gt;
Веб-сервис для интеграции с другими системами по протоколу SOAP.&lt;br /&gt;
Плагин использует инфраструктуру [[Разработка:storages/sync | storages/sync ]] для хранения соответствия внутренних и внешних id объектов и [[Разработка:storages/synclog | storages/synclog ]] для логирования всех операций синхронизации.&lt;br /&gt;
&lt;br /&gt;
Плагин объявляет SOAP-сервис, который располагается по адресам:&lt;br /&gt;
* /sync/soap/soap.php?do=wsdl - wsdl-файл&lt;br /&gt;
* /sync/soap/soap.php?do=service - сам сервис&lt;br /&gt;
&lt;br /&gt;
У каждого метода присутствуют следующие обязательные служебные параметры:&lt;br /&gt;
* requesttime - (UNIX timestamp) время генерации запроса, используется для устаревания запроса с целью защиты от атаки на &amp;quot;повторение перехваченного запроса&amp;quot;&lt;br /&gt;
* requestlogin - идентифицирует систему-отправитель запроса (задается в sync/soap/cfg/clients.php, вместе с паролем requestpassword и необязательными параметрами)&lt;br /&gt;
* requesthash - sha1-хеш от всех полей запроса в алфавитном порядке, включая предыдущие два, а так же поля requestpassword (в самом запросе не участвует). Используется для подтверждения подлинности запроса.&lt;br /&gt;
&lt;br /&gt;
'''Все параметры, в которых передаётся время, принимают UNIX timestamp, если в подписи к ним не написано иначе.'''&lt;br /&gt;
&lt;br /&gt;
Имена полей soap-запросов должны совпадать с именами полей в справочниках: [[Разработка:storages/metacontracts | storages/metacontracts ]], [[Разработка:storages/persons | storages/persons ]], [[Разработка:storages/contracts | storages/contracts ]]&lt;br /&gt;
&lt;br /&gt;
Во всех запросах используются только внешние id. Например, при создании персоны новая система передает свой уникальный id, которым она её обозначает. Этот id сохраняется в [[Разработка:storages/sync | storages/sync ]]. При создании контракта на обучение, внешняя система передает свой собственный id персоны (которая была создана ранее), плагин [[Разработка:sync/soap | sync/soap ]] конвертирует этот id во внутренний через справочник [[Разработка:storages/sync | storages/sync ]] и создает запись в [[Разработка:storages/contracts | storages/contracts ]]. Если внешний id объекта не передан, запрос возвращает ошибку (объект не создается и не обновляется).&lt;br /&gt;
&lt;br /&gt;
Служебные, специальные и автоматически-вычисляемые поля справочников не доступны для редактирования через SOAP-запросы (например adddate, status). Действия, которые запрещены пользователям системы через интерфейс, запрещены и через SOAP-запросы (например, нельзя сменить персону в уже созданном контракте).&lt;br /&gt;
&lt;br /&gt;
Все запросы обрабатывают вложенный объект cov. Все поля внутри объекта cov сохраняются (обновляются) в справочнике [[Разработка:storages/cov | storages/cov ]]. Не упомянутые в запросе поля (ранее сохраненные в cov) игнорируются. Все имена полей, присутствующие в соответствующем справочнике зарезервированы и не могут быть переданы через объект cov (например, нельзя сохранить поле cov/status для объекта persons, потому что в нем уже есть поле status).&lt;br /&gt;
&lt;br /&gt;
Подразделение для размещения объекта передается в SOAP-запросах через его код (code), а не id.&lt;br /&gt;
Успешная операция для методов типа 'set_' возвращает следующую структуру данных:&lt;br /&gt;
* id - переданный в запросе id объекта&lt;br /&gt;
* dofid - внутренний id объекта&lt;br /&gt;
* modified - время изменения объекта (UNIX timestamp)&lt;br /&gt;
* hash - контрольная сумма из storages/sync&lt;br /&gt;
* errorcode - код ошибки, помогающий идентифицировать проблему при исполнении запроса&lt;br /&gt;
&lt;br /&gt;
Для проверки SOAP-запросов используется хеширование по следующему алгоритму:&lt;br /&gt;
&lt;br /&gt;
* requesthash == sha1(requestpassword + requesttime + requestlogin + json(vars) + json(cvars)), где&lt;br /&gt;
&lt;br /&gt;
** vars формируется следующим образом:&lt;br /&gt;
*** Из полей объекта для SOAP-запроса исключаются служебные данные — requesthash, requestlogin, requesttime и дополнительный объект cov&lt;br /&gt;
*** Поля сортируются в алфавитном порядке;&lt;br /&gt;
** cvars — вложенный объект cov, поля которого так же сортируются в алфавитном порядке;&lt;br /&gt;
** json() - функция для преобразования массива/объекта в json-строку.&lt;br /&gt;
** Знаком &amp;quot;+&amp;quot; указана конкатенация строк.&lt;br /&gt;
'''Примечание''': XML-структура SOAP-запроса для вложенных объектов, таких как cov, должна выглядеть следующим образом:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfield&amp;gt;RU&amp;lt;/addfield&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtwo&amp;gt;RU-MOS&amp;lt;/addfieldtwo&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtthree&amp;gt;Москва&amp;lt;/addfieldtthree&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
При использовании ассоциативных массивов, например, на PHP, при попытке передать их SOAP-клиенту произойдёт искажение представления:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfield&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldtwo&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU-MOS&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldthree&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;Москва&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
Поэтому при проверке на сервере хэш не совпадёт.&lt;br /&gt;
&lt;br /&gt;
=API (внешний) =&lt;br /&gt;
&lt;br /&gt;
==='''set_meta_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные метаконтракта, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса (UNIX timestamp)&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id метаконтракта&lt;br /&gt;
** num(string) - Номер метаконтракта&lt;br /&gt;
** departmentcode(string) - Код подразделения&lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_person($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные персоны, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса (UNIX timestamp)&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id метаконтракта&lt;br /&gt;
** firstname(string) - Имя&lt;br /&gt;
** middlename(string) - Отчество&lt;br /&gt;
** lastname(string) - Фамилия&lt;br /&gt;
** preferredname(string) - Префикс для имения (Mr. Dr. Г-н, Г-а)&lt;br /&gt;
** dateofbirth(int) - Дата рождения в UTS&lt;br /&gt;
** gender(string) - Пол (male, female, unknown)&lt;br /&gt;
** email(string) - Основной адрес электронной почты&lt;br /&gt;
** phonehome(string) - Домашний телефон&lt;br /&gt;
** phonework(string) - Рабочий телефон&lt;br /&gt;
** phonecell(string) - Сотовый телефон&lt;br /&gt;
** passtypeid(int) - Тип удостоверения личности (1 - свидетельство о рождении, 2 - паспорт гражданина РФ, 3 - загранпасспорт, 4 - разрешение на временное проживание лица без гражданства, 5 - вид на жительство, 6 - военный билет, 7 - водительсткое удостоверение пластиковое, 8 - вод. удостоверение форма 1, 9 - вод. удостоверение международное)&lt;br /&gt;
** passportserial(string) - Серия удостоверения личности (если предусмотрена типом документа)&lt;br /&gt;
** passportnum(string) - Номер удостоверения личности&lt;br /&gt;
** passportdate(int) - Дата выдачи удостоверения личности в UTS&lt;br /&gt;
** passportem(string) - Название организации, выдавшей удостоверение личности&lt;br /&gt;
** citizenship(string) - Гражданство&lt;br /&gt;
** departmentcode(string) - Основной отдел, к которому приписан человек (может редактировать его данные в persons)&lt;br /&gt;
** about(string) - Характеристика личности&lt;br /&gt;
** skype(string) - Уникальный идентификатор в Skype&lt;br /&gt;
** phoneadd1(string) - Дополнительный телефон 1&lt;br /&gt;
** phoneadd2(string) - Дополнительный телефон 2&lt;br /&gt;
** phoneadd3(string) - Дополнительный телефон 3&lt;br /&gt;
** emailadd1(string) - Дополнительная электронная почта 1&lt;br /&gt;
** emailadd2(string) - Дополнительная электронная почта 2&lt;br /&gt;
** emailadd3(string) - Дополнительная электронная почта 3&lt;br /&gt;
** passportaddr(object) - Адрес прописки по паспорту (для генерации документов)&lt;br /&gt;
** address(object) - Текущий адрес (почтовый адрес)&lt;br /&gt;
** birthaddress(object) - Адрес рождения персоны&lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Формат объектов: passportaddr, address, birthaddress''&lt;br /&gt;
* postalcode(string) - Почтовый индекс&lt;br /&gt;
* country(string) - Код страны проживания (по предъявленному паспорту) в ICO 3166-1:1997 (RU)&lt;br /&gt;
* region(string) - Код региона по ISO 3166-2 (RU-NGR, RU-MOS)&lt;br /&gt;
* county(string) - Административный район&lt;br /&gt;
* city(string) - Город&lt;br /&gt;
* streetname(string) - Название улицы&lt;br /&gt;
* streettype(string) - Тип улицы&lt;br /&gt;
* number(string) - Номер дома&lt;br /&gt;
* gate(string) - Подъезд&lt;br /&gt;
* floor(string) - Этаж&lt;br /&gt;
* apartment(string) - Квартира&lt;br /&gt;
* latitude(float) - Широта в градусах&lt;br /&gt;
* longitude(float) - Долгота в градусах&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные договора, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса (UNIX timestamp)&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id договора&lt;br /&gt;
** typeid(int) - Тип договора, если у учебного заведения предусмотрено несколько разных типов договоров&lt;br /&gt;
** num(string) - Номер договора&lt;br /&gt;
** numpass(string) - Номер пропуска, студенческого билета и т.п.&lt;br /&gt;
** date(int) - Дата заключения&lt;br /&gt;
** sellerid(int) - Менеджер по работе с клиентами (приемная комиссия, партнер) - добавляет договор, меняет статус до &amp;quot;подписан клиентом&amp;quot;, отслеживает статус договора и ход обучения (id по таблице persons)&lt;br /&gt;
** clientid(int) - Клиент, оплачивающий обучение (законный представитель, сам совершеннолетний ученик или куратор от организации, может принимать значение 0 или null, если клиент создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** studentid(int) - Ученик (может принимать значение 0, если ученик создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** notes(string) - Заметки&lt;br /&gt;
** departmentcode(string) - Подразделение в таблице departments, к которому приписан контракт на обучение (например, принявшее ученика)&lt;br /&gt;
** contractform(string) - Форма договора (шаблон)&lt;br /&gt;
** curatorid(int) - Куратор или классный руководитель данного ученика (по таблице persons или не указан), отслеживает учебный процесс, держит связь с учеником, является посредником между учеником и системой, может быть внешней персоной.&lt;br /&gt;
** enddate(int) - Дата окончания договора&lt;br /&gt;
** metacontractid(int) - id метаконтракта, к которому привязан договор, в таблице metacontracts &lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы (внутренние)=&lt;br /&gt;
&lt;br /&gt;
===='''check_address($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить поля адреса&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника addresses&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP19, SP21-SP23]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_column_types_null($input, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить поля запроса на предмет ненулевых значений и корректности типов справочника&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект SOAP-запроса&lt;br /&gt;
* table(string) - название справочника, &lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SC6-SC7], [PR5-PR6]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_cov($cov, $fields = null)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить дополнительный объект на предмет соответствия формату&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* cov(array) - дополнительный вложенный объект.&lt;br /&gt;
* fields(object) - поля объекта для проверки дублирующихся полей.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [PI6-PI8], [SC3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_department($code)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли такое подразделение и актуальный ли у него статус&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* code(string) - код подразделения.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP5-SP7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_email($email)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет, можно ли использовать переданный e-mail в системе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* email(string) - электронная почта.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP2], [PI4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_fields_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом проверяют объект SOAP-запроса на предмет некорректных значений полей&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - содержит поля запроса&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_hash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет входящий запрос по sha1-хешу, сверяя наличие требуемых полей и выдаёт код ошибки при её наличии&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - содержит поля запроса, а так же обязательные поля - id, requesttime, requestlogin, requesthash.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true в случае успеха,&lt;br /&gt;
* (string) - иначе - код ошибки: [PR0-PR4], [PI3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''connect_sync($pcode, $provider, $substorage = null)'''====&lt;br /&gt;
&lt;br /&gt;
Создать соединение с объектом синхронизации по названию справочника и поставщику данных&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* pcode(string) - название плагина для синхронизации (metacontracts, persons, ...)&lt;br /&gt;
* provider(string) - название поставщика синхронизации&lt;br /&gt;
* substorage(string) - код внутреннего субсправочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки, или&lt;br /&gt;
* (object) - объект подключения к синхронизации dof_storage_sync_connect&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''errorlog($input, $queryname=null)'''====&lt;br /&gt;
&lt;br /&gt;
Записывает переданный объект в файл ('/dat/errorlog.txt') для последующей отладки&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(mixed) - переменная для вывода в файл&lt;br /&gt;
* queryname(string) - название запроса (какя именно операция выполняется)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (void)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют действия, сопутствующие SOAP-запросу&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_additional_($input, $operation, $dofid = null)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют дополнительные действия в SOAP-запросе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
* operation(string) - название операции: 'insert', 'update', ...&lt;br /&gt;
* dofid(int) - id объекта из справочника (если не null, то операция 'update', иначе - 'insert')&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - операция прошла успешно&lt;br /&gt;
* (object) - возвращает дополнительные поля, которые надо присоединить к объекту в методе [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_set_base($input, $method)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить базовые действия метода set_:&lt;br /&gt;
* 1) Получить объект синхронизации&lt;br /&gt;
* 2) Получить объект для ответа&lt;br /&gt;
* 3) Просчитать хеш объекта (без служебных полей)&lt;br /&gt;
* 4) Есть ли объект синхронизации с таким id в базе?&lt;br /&gt;
* 4.1) Объект найден. Проверить, нужно ли производить синхронизацию&lt;br /&gt;
* 4.1.1) Синхронизация нужна&lt;br /&gt;
* 4.1.1.1) Обновить объект в базе ([[#update_object($input, $dofid, $method, $table)|update_object()]]), объект синхронизации и сгенерировать ответ 'OK'&lt;br /&gt;
* 4.1.1.2) Логирование&lt;br /&gt;
* 4.1.1.3) Cгенерировать ответ 'OK', синхронизация успешна&lt;br /&gt;
* 4.1.2) Синхронизация не нужна, сгенерировать ответ 'ОК'&lt;br /&gt;
* 4.2) Объект не найден.&lt;br /&gt;
* 4.2.1) Добавить объект в базу ([[#insert_object($input, $method, $table)|insert_object()]]), обрабатывая ошибки, объект синхронизации&lt;br /&gt;
* 4.2.2) Логирование&lt;br /&gt;
* 4.2.3) Cгенерировать ответ 'OK', синхронизация успешна&lt;br /&gt;
* 5) Вернуть ответ&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#insert_object($input, $method, $table)|insert_object()]] и [[#update_object($input, $dofid, $method, $table)|update_object()]]&lt;br /&gt;
* input(object) - объект SOAP-запроса&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект $response (см. метод [[#set_meta_contract($input)|set_meta_contract()]])&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_fields($input, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить поля для вставки или обновления таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с определёнными полями одного из справочника&lt;br /&gt;
* storage(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, в случае ошибки&lt;br /&gt;
* (object) - объект с полями для вставки/обновления записи в таблице&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_key($requestlogin)'''====&lt;br /&gt;
&lt;br /&gt;
Получить ключ идентификатора системы, используя логин.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* requestlogin(string) - идентификатор системы (логин)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если ключ не найден,&lt;br /&gt;
* (string) - ключ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_response($type, $errorcode = 'OK')'''====&lt;br /&gt;
&lt;br /&gt;
Получить каркас объекта ответа для разных типов методов.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* type(string) - тип запроса ('set', 'get', ...)&lt;br /&gt;
* errorcode(string) - код ошибки&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если произошла ошибка&lt;br /&gt;
* (object) - объект для передачи ответа в SOAP-сообщениях&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_storage_error($method, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить код ошибки справочника по названию метода и таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название операции со справочником: 'insert', 'update', ...&lt;br /&gt;
* storage(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого сочетания &amp;quot;метод-справочник&amp;quot; не найдено&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_sync_object($table, $provider, $id, $direct = 'down')'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли объект синхронизации в справочнике storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* table(string) - справочник, по которому необходимо получить объект&lt;br /&gt;
* provider(string) - внешний провайдер (поле storage/sync.upsubsubstorage)&lt;br /&gt;
* id - id из таблицы storage/sync&lt;br /&gt;
* direct - направление синхронизации&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если объект не найден&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
* (object) - объект table с записью&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_table($method)'''====&lt;br /&gt;
&lt;br /&gt;
Получить название таблицы (справочника), с которым работает переданный метод&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название метода&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого метода не найдено&lt;br /&gt;
* (string) - название справочника&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_object($input, $requestpassword)'''====&lt;br /&gt;
&lt;br /&gt;
Получить sha1-хеш пришедшего SOAP-запроса по описанному ранее алгоритму&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с обязательными полями id, requesttime, requestlogin, requesthash, объектом cov.&lt;br /&gt;
* requestpassword(string) - ключ идентификатора системы.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_uphash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить хеширование объекта для сравнения с uphash в storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с полями справочника, без специальных полей request*&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_address($input)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить новый адрес&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_object($input, $method, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить объект в базу:&lt;br /&gt;
* Получить из запроса поля для вставки в таблицу: [[#get_fields($input, $storage)|get_fields()]]&lt;br /&gt;
* Выполнить дополнительные действия: [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_()]], в случае ошибок сгенерировать ответ&lt;br /&gt;
* Вставить объект в базу, обработать ошибки&lt;br /&gt;
* Обработать объект cov: [[#update_cov($dofid, $inputcov, $plugincode)|update_cov()]], добавить поля в базу, обработать ошибки&lt;br /&gt;
* В соответствии с настройками выставить статус через [[#set_status_route($table, $dofid, $departmentid)|set_status_route()]], ошибки только логировать&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''is_sync_object_exists($table, $provider, $id, $direct = 'down')'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли объект синхронизации в справочнике storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* table(string) - название справочника&lt;br /&gt;
* provider(string) - название клиента, с которым выполняется синхронизация&lt;br /&gt;
* id(int) - id объекта, в зависимости от направления синхронизации&lt;br /&gt;
* direct(string) - направление синхронизации ('up', 'down')&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''normalize_array($item)'''====&lt;br /&gt;
&lt;br /&gt;
Нормализует ошибочно переданный ассоциативный массив в объект&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* item(object) - объект с вложенным массивом item[], в котором находятся объекты:&lt;br /&gt;
** item[0] = stdClass(),&lt;br /&gt;
** item[0]-&amp;gt;key, &lt;br /&gt;
** item[0]-&amp;gt;value, &lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект, в котором поля {item[0]-&amp;gt;key}, а значения: {item[0]-&amp;gt;value}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_method($input, $methodname)'''====&lt;br /&gt;
&lt;br /&gt;
Выполняет базовую проверку переданных параметров (контрольная сумма), проверяет, реализованы ли функции для проверки входных параметров и исполнения запроса, вызывает 'set' метод для переданного в качестве аргумента объекта запроса и метода. В случае возникновения ошибок составляет ответный запрос и выполняет логирование.&lt;br /&gt;
Вызывает следующие методы:&lt;br /&gt;
* [[#check_hash($input)|-&amp;gt;check_hash()]]&lt;br /&gt;
* [[#check_fields_($input)|-&amp;gt;check_fields_$methodname()]]&lt;br /&gt;
* [[#execute_($input)|-&amp;gt;execute_$methodname()]]&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект SOAP-запроса (должны присутствовать служебные поля request*)&lt;br /&gt;
* methodname(string) - название функции, которую необходимо исполнить&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект содерщаший поля:&lt;br /&gt;
** id - переданный в запросе id объекта&lt;br /&gt;
** dofid - внутренний id объекта&lt;br /&gt;
** modified - время изменения объекта&lt;br /&gt;
** hash - контрольная сумма из storages/sync&lt;br /&gt;
** errorcode - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_status_route($table, $dofid, $departmentid)'''====&lt;br /&gt;
&lt;br /&gt;
Установить статус согласно маршруту, заданному в конфиге&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
* dofid(int) - внутренний id объекта из таблицы $storage&lt;br /&gt;
* departmentid(int) - id из таблицы departments&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (array) - код ошибки и описание: array('код_ошибки', 'описание ошибки')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_address($input, $dofid)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить адрес&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице addresses&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат обновления&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_cov($dofid, $inputcov, $plugincode)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить вложенный объект cov для внутренних объектов&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице $plugincode&lt;br /&gt;
* inputcov(object) - объект, по которому происходит перебор&lt;br /&gt;
* plugincode(string) - код плагина storage&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат обновления&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_object($input, $dofid, $method, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить объект в базе:&lt;br /&gt;
* Получить из запроса поля для вставки в таблицу: [[#get_fields($input, $storage)|get_fields()]]&lt;br /&gt;
* Выполнить дополнительные действия: [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_()]], в случае ошибок сгенерировать ответ&lt;br /&gt;
* Обновить объект в базе, обработать ошибки&lt;br /&gt;
* Обработать объект cov: [[#update_cov($dofid, $inputcov, $plugincode)|update_cov()]], добавить поля в базу, обработать ошибки&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице $plugincode&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Коды ошибок=&lt;br /&gt;
&lt;br /&gt;
При успешном выполнении операции синхронизации возвращается код ошибки 'OK'.&lt;br /&gt;
В ином случае, возвращается одна из следующих ошибок:&lt;br /&gt;
&lt;br /&gt;
* Ошибки параметров запроса [P]:&lt;br /&gt;
* Обязательные [PR]&lt;br /&gt;
** PR0 - Данные запроса пришли в некорректном формате&lt;br /&gt;
** PR1 - Отсутствует идентификатор системы [requestlogin]&lt;br /&gt;
** PR2 - Отсутствует время запроса [requesttime]&lt;br /&gt;
** PR3 - Отсутствует контрольная сумма [requesthash]&lt;br /&gt;
** PR4 - Отсутствует идентификатор объекта [id]&lt;br /&gt;
** PR5 - Отсутствует значение в ненулевом поле&lt;br /&gt;
** PR6 - Некорректный тип переданного поля&lt;br /&gt;
* Некорректные [PI]&lt;br /&gt;
** PI3 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** PI4 - Недопустимые символы в e-mail&lt;br /&gt;
** PI5 - Тип переменной подразделения должен быть строковый&lt;br /&gt;
** PI6 - Тип переменной cov должен быть массивом&lt;br /&gt;
** PI7 - Поля внутри переменной cov не должны быть массивами или объектами&lt;br /&gt;
** PI8 - Поля внутри переменной cov не должны совпадать с полями справочника (например, status, adddate)&lt;br /&gt;
* Ошибки внутренние [S]:&lt;br /&gt;
* Некорректные параметры [SP]&lt;br /&gt;
** SP1 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** SP2 - Данный e-mail не допустим в системе&lt;br /&gt;
** SP3 - Данный e-mail уже зарегистрирован в системе&lt;br /&gt;
** SP4 - Название мета-контракта не может быть пустым&lt;br /&gt;
** SP5 - Подразделения с таким кодом не существует&lt;br /&gt;
** SP6 - Подразделение не актуально&lt;br /&gt;
** SP7 - Код подразделения должен быть строкового типа&lt;br /&gt;
** SP8 - Неверно передан параметр с запросом&lt;br /&gt;
** SP9 - Код подразделения не передан, и значения по-умолчанию не найдено&lt;br /&gt;
* persons&lt;br /&gt;
** SP9 - Имя не может быть пустым&lt;br /&gt;
** SP10 - Фамилия не может быть пустой&lt;br /&gt;
** SP11 - E-Mail не может быть пустым&lt;br /&gt;
** SP12 - Укажите дату рождения персоны&lt;br /&gt;
** SP13 - Укажите пол&lt;br /&gt;
** SP14 - Укажите корректный пол: Мужской (male) или Женский&amp;quot; (female)&lt;br /&gt;
** SP15 - Укажите правильный тип удостоверения личности&lt;br /&gt;
** SP16 - Укажите серию паспорта&lt;br /&gt;
** SP17 - Укажите номер паспорта&lt;br /&gt;
** SP18 - Укажите место выдачи паспорта&lt;br /&gt;
** SP19 - Укажите тип улицы&lt;br /&gt;
** SP20 - Логин Skype содержит недопустимые символы&lt;br /&gt;
** SP21 - В адресе некорректно указана страна&lt;br /&gt;
** SP22 - В адресе некорректно указан регион&lt;br /&gt;
** SP22 - Нельзя указать регион без страны&lt;br /&gt;
** SP23 - Предыдущее поле старого ФИО не заполнено&lt;br /&gt;
* contracts&lt;br /&gt;
** SP24 - Укажите ученика&lt;br /&gt;
** SP25 - Укажите законного представителя&lt;br /&gt;
** SP26 - Укажите менеджера по работе с клиентами&lt;br /&gt;
** SP27 - Укажите дату заключения договора&lt;br /&gt;
** SP28 - Переданный id персоны в поле [Ученик] не найден в базе&lt;br /&gt;
** SP29 - Переданный id персоны в поле [Законный представитель] не найден в базе&lt;br /&gt;
** SP30 - Переданный id персоны в поле [Менеджер] не найден в базе&lt;br /&gt;
** SP31 - Переданный id персоны в поле [Куратор] не найден в базе&lt;br /&gt;
** SP32 - Менеджер по-умолчанию не найден&lt;br /&gt;
** SP33 - Метаконтракт не найден&lt;br /&gt;
** SP34 - Дата заключения договора не в корректном формате&lt;br /&gt;
** SP35 - Не найден студент, на которого заключён договор&lt;br /&gt;
** SP36 - Нельзя изменить студента, на которого заключён договор&lt;br /&gt;
** SP37 - Номер договора должен быть уникальным&lt;br /&gt;
* Ошибки кодирования [SC]&lt;br /&gt;
** SC1 - Не зарегистрирована функция проверки параметров запроса для данного метода&lt;br /&gt;
** SC2 - Не зарегистрирована функция исполнения запроса для данного метода&lt;br /&gt;
** SC3 - Не верно передан формат проверки полей вложенного массива cov&lt;br /&gt;
** SC4 - Для этого метода не задана таблица, с которой он работает&lt;br /&gt;
** SC5 - Неверно указано название операции&lt;br /&gt;
** SC6 - Такого справочника не существует&lt;br /&gt;
** SC7 - Неизвестный тип переменной&lt;br /&gt;
** SC8 - Не удалось получить поля для добавления/обновления объекта в базе&lt;br /&gt;
** SC9 - Некорректные параметры в функции проверки объекта синхронизации справочника&lt;br /&gt;
* Ошибки целостности структуры (базы) [SI]&lt;br /&gt;
** SI1 - Не удалось добавить запись в справочник metacontracts&lt;br /&gt;
** SI2 - Не удалось обновить запись в справочнике metacontracts&lt;br /&gt;
** SI3 - Не удалось добавить запись в справочник persons&lt;br /&gt;
** SI4 - Не удалось обновить запись в справочнике persons&lt;br /&gt;
** SI5 - Не удалось добавить запись в справочник contracts&lt;br /&gt;
** SI6 - Не удалось обновить запись в справочнике contracts&lt;br /&gt;
** SI7 - Не удалось обновить запись в справочнике cov&lt;br /&gt;
** SI8 - Не удалось обновить запись в справочнике addresses&lt;br /&gt;
** SI9 - Не удалось найти запись в справочнике addresses для обновления&lt;br /&gt;
** SI10 - Не удалось найти запись в справочнике persons&lt;br /&gt;
* Ошибки рабочих процессов (при смене статусов, исполнении приказов, ...) (workflow) [SW]&lt;br /&gt;
** SW1 - Не удалось изменить статус на $a&lt;br /&gt;
** SW2 - Статуса с таким именем [$a] не обнаружено&lt;br /&gt;
&lt;br /&gt;
=Замечания, возможные проблемы=&lt;br /&gt;
&lt;br /&gt;
* Не совпадает контрольная сумма, ошибка [PI3]&lt;br /&gt;
** Необходимо обязательно проверять наличие всех полей, описанных в параметрах функций. Все типы параметров должны соответствовать описанным в wsdl-файле. К примеру, если в PHP попытаться передать массив в параметр, принимающий только строки, произойдёт конвертация массива в строку.&lt;br /&gt;
* Ошибки при выполнении запроса, если не передан какой-либо параметр, либо передан лишний параметр&lt;br /&gt;
** Желательно создавать класс (объект), в котором определены все поля и типы запроса, указанные в wsdl. От него создаётся экземпляр класса и поверх этих полей записываются значения. Таким образом, если поля не указаны, они автоматически должны заполняться значением null. Это позволит упростить процедуру хеширования и взаимодействия с сервером.&lt;br /&gt;
&lt;br /&gt;
=Расширение функционала=&lt;br /&gt;
&lt;br /&gt;
* Методы set&lt;br /&gt;
** Рассмотрим на примере создания метода set_department(). Необходимо выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
** 1) Добавить в blocks_dof_sync_soap_soapserver:&lt;br /&gt;
** * set_department() - в нём один единственный вызов: return $this-&amp;gt;dof-&amp;gt;sync('soap')-&amp;gt;set_method($input, __FUNCTION__);&lt;br /&gt;
** * Задокументировать входные параметры, @return object для всех методов set_ пока одинаков&lt;br /&gt;
&lt;br /&gt;
** 2) Добавить в dof_sync_soap:&lt;br /&gt;
** * [[#check_fields_($input)|check_fields_set_department($input)]] - проверки входных параметров, проверка возможности добавить объект в базу без ошибок&lt;br /&gt;
** * [[#execute_($input)|execute_set_department($input)]] - основное тело исполнения запроса. Основные действия выполняются в функции [[#execute_set_base($input, $method)|execute_set_base()]], поэтому рекомендуется использовать вызов: return $this-&amp;gt;execute_set_base($input, 'set_department');&lt;br /&gt;
** Если нужна более расширенная логика, метод можно написать самому (но желательно отталкиваться от общего алгоритма в [[#execute_set_base($input, $method)|execute_set_base()]].&lt;br /&gt;
** * [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_set_department($input, $operation, $dofif)]] - метод, который выполняется при вызове [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
** * При необходимости добавить смену статусов&lt;/div&gt;</summary>
		<author><name>Konovalov</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:modlibs/yui&amp;diff=2897</id>
		<title>Разработка:modlibs/yui</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:modlibs/yui&amp;diff=2897"/>
				<updated>2015-02-02T12:28:19Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = yui&lt;br /&gt;
| type = modlibs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Описание =&lt;br /&gt;
Эта modlib-библиотека создана как обертка для подключения файлов YUI.&lt;br /&gt;
&lt;br /&gt;
= Структура папок =&lt;br /&gt;
Плагин находится в папке '''dof/yui''' — этого требуют стандарты кодирования и автозагрузчик YUI.&lt;br /&gt;
Внутри него находятся папки с модулями. Внутри папок находятся скрипты, по названию такие же, как названия модулей.&lt;br /&gt;
&lt;br /&gt;
== Плагины ==&lt;br /&gt;
Все плагины, которые подключаются к YUI должны находится в папке '''dof/yui/modulename/'''.&lt;br /&gt;
Внутри папки могут содержаться js и css-файлы. Каждый плагин активируется при помощи функции yui_module().&lt;br /&gt;
&lt;br /&gt;
= API =&lt;br /&gt;
&lt;br /&gt;
=== yui_module() ===&lt;br /&gt;
Добавить модуль YUI в указанном месте.&lt;br /&gt;
&lt;br /&gt;
= Использование =&lt;br /&gt;
Смотреть [[Разработка:Стандарт_кодирования#Использование_JavaScript|modlibs/yui]]&lt;br /&gt;
&lt;br /&gt;
= Обновление =&lt;br /&gt;
Библиотека наследуется автоматически от загрузчика YUI, встроенного в Moodle.&lt;br /&gt;
&lt;br /&gt;
= Особенности =&lt;br /&gt;
Обратите внимание на [https://tracker.moodle.org/browse/MDL-47036 MDL-47036], поскольку YUI официально устарел и в дальнейшем, возможно, предстоит от него избавиться.&lt;/div&gt;</summary>
		<author><name>Konovalov</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:modlibs/yui&amp;diff=2896</id>
		<title>Разработка:modlibs/yui</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:modlibs/yui&amp;diff=2896"/>
				<updated>2015-02-02T12:22:57Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: Новая страница: «{{Infobox_Plugin | name = yui | type = modlibs }}  = Описание = Эта modlib-библиотека создана как обертка для подключ...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = yui&lt;br /&gt;
| type = modlibs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Описание =&lt;br /&gt;
Эта modlib-библиотека создана как обертка для подключения файлов YUI.&lt;br /&gt;
&lt;br /&gt;
= Структура папок =&lt;br /&gt;
Плагин находится в папке '''dof/yui''' — этого требуют стандарты кодирования и автозагрузчик YUI.&lt;br /&gt;
Внутри него находятся папки с модулями. Внутри папок находятся скрипты, по названию такие же, как названия модулей.&lt;br /&gt;
&lt;br /&gt;
== Плагины ==&lt;br /&gt;
Все плагины, которые подключаются к YUI должны находится в папке '''dof/yui/modulename/'''.&lt;br /&gt;
Внутри папки могут содержаться js и css-файлы. Каждый плагин активируется при помощи функции yui_module().&lt;br /&gt;
&lt;br /&gt;
= API =&lt;br /&gt;
&lt;br /&gt;
=== yui_module() ===&lt;br /&gt;
Добавить модуль YUI в указанном месте.&lt;br /&gt;
&lt;br /&gt;
= Обновление =&lt;br /&gt;
Библиотека наследуется автоматически от загрузчика YUI, встроенного в Moodle.&lt;br /&gt;
&lt;br /&gt;
= Особенности =&lt;br /&gt;
Обратите внимание на [https://tracker.moodle.org/browse/MDL-47036 MDL-47036], поскольку YUI официально устарел и в дальнейшем, возможно, предстоит от него избавиться.&lt;/div&gt;</summary>
		<author><name>Konovalov</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:%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=2895</id>
		<title>Разработка:Стандарт кодирования</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:%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=2895"/>
				<updated>2015-02-02T08:36:49Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Использование JavaScript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Правила оформления кода в проекте «Электронный деканат». ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Стиль кодирования ===&lt;br /&gt;
==== Формат файлов ====&lt;br /&gt;
# Все файлы с кодом должны иметь расширение .php&lt;br /&gt;
# Все html-шаблоны должны иметь расширение .html&lt;br /&gt;
# Весь текст, включая исходный код, должен быть в кодировке utf-8 с оконачаниями строк в формет Unix&lt;br /&gt;
# Окончания строк в формате Unix (LF - 0x0A)&lt;br /&gt;
# Все php-теги должны быть полными &amp;lt;?php ... ?&amp;gt;. Краткие теки &amp;lt;? ?&amp;gt; не допускаются&lt;br /&gt;
# Все отступы – 4 пробела. Не использовать TAB.&lt;br /&gt;
# Длинна строки в коде не должна быть больше 80 символов. В некоторых случаях допускается 120, если это упростит читаемость кода.&lt;br /&gt;
# Пробелы можно использовать свободно. Не надо бояться растягивать код для улучшения читабельности.&lt;br /&gt;
==== Имена ====&lt;br /&gt;
# Имена файлов должны состоять только из латинских символов, знака подчеркивания и точки. Имя файла обязательно должно иметь расширение. Рекомендуется использовать для именования файлов слова на английском языке.&lt;br /&gt;
# Имена классов должны состоять из строчных латинских символов и знака подчеркивания. Рекомендуется использовать английские слова разделенных символом подчеркивания. Имя класса в плагине должно начинаться с префикса, соответствующего плагину. Если требуется, имя класса может включать преффикс и суффикс.&lt;br /&gt;
# Имена функций и методов должны состоять из строчных латинских символов и знака подчеркивания. Имя функции в плагине должно начинаться с префикса, соответствующего имени модуля (dof_) и плагину, в котором объявлена (типплагина_кодплагина). Затем идет часть имени, описывающая выполняемое действие. Последняя часть - это существительное, обозначающее сущность, над которой это действие производится либо набор сущностей. Не должно быть пробелов между именем функции и скобками. Это относится и к объявлению функции, и к ее использованию. Параметры всегда должны иметь разумные значения по умолчанию, если это возможно. Пример: modname_get_string($identifier, $pluginname = NULL). Между ключевым словом function и именем функции должен быть только один пробел.&lt;br /&gt;
# Имена параметров функций именуются по тем же правилам, что и переменные. Имя параметра должно быть кратким и информативным для сторонних программистов. Если параметр может быть не задан, используйте по умолчанию значение  null, для отличия этой ситуации от передачи параметра false, 0 или '' если это требуется).&lt;br /&gt;
# Имена переменных - всегда легкие для чтения осмысленные слова английского языка, набранные в нижнем регистре. Несколько слов пишутся слитно. Но они должны быть как можно короче. Используйте имена во множественном числе для массивов объектов. Например: $courseid, $studentsgrades&lt;br /&gt;
# Имена глобальных переменных, должны состоять полностью из заглавных букв. Пример: $CFG&lt;br /&gt;
# Имена констант должны состоять из латинских символов в верхнем регистре и знака подчеркивания. Всегда начинаются с имени модуля (DOF). Если константа объявлена в плагине, она получает дополнительный префикс ТИППЛАГИНА_КОДПЛАГИНА. Слова в названии разделены символом подчеркивания. Пример: SITE_ID&lt;br /&gt;
# true, false и null должны быть набраны в нижнем регистре&lt;br /&gt;
# AND, OR, XOR должны быть набраны в верхнем регистре, не используйте сокращенные синонимы.&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;
# Индексация массива может начинаться с любого положительного числа, обычно с 0.&lt;br /&gt;
# При объявлении массива через функцию array() ставьте пробел после запятой при перечислении параметров. Длинные объявления можно переносить по строкам. При объявлении ассоциативных массивов помещайте на одну строку одну пару ключ-значение.&lt;br /&gt;
==== Классы ====&lt;br /&gt;
# Свойства класса должны объявляться до его методов.&lt;br /&gt;
# Фигурная скобка пишется на следующей строчке после объявления имени класса, на одном уровне с ключевым словом class.&lt;br /&gt;
# Объявление любого класса должно быть документировано по стандарту PHPDocumentor&lt;br /&gt;
# Весь код внутри класса должен быть сдвинут на 4 пробела от уровня его объявления.&lt;br /&gt;
# Объявление класса должно быть отделено от остального коду двумя пустыми строками.&lt;br /&gt;
# Свойства класса должны объявляться напрямую при объявлении класса с указанием модификатора доступа (private (доступ извне запрещен), protected (разрешен доступ из наследников) или public)&lt;br /&gt;
==== Функции и методы ====&lt;br /&gt;
# Объявление функций и методов должно сопровождаться комментарием по стандарту PHPDocumentor&lt;br /&gt;
# Все объявления методов должны содержать модификатор доступа (private (доступ извне запрещен), protected (разрешен доступ из наследников) или public)&lt;br /&gt;
# Фигурная скобка должна располагаться на следующей строке после объявления имени функции или метода на одном с ним уровнем.&lt;br /&gt;
# Тело функции должно быть сдвинуто на 4 пробела вправо.&lt;br /&gt;
# Между именем функции и круглой скобкой не должно быть пробела.&lt;br /&gt;
# Если функция не возвращает значений, то true обозначает успех, false - не успех. Если функция возвращает массив, в случае успешного выполнения, но отсутствия элементов в результате, функция должна возвращать пустой массив.&lt;br /&gt;
&lt;br /&gt;
==== Управляющие конструкции ====&lt;br /&gt;
Ставьте один пробел между скобками и синтаксическими конструкциями. Это не относится к функциям и их параметрам. Пример:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    if ( $a &amp;gt;= max($key) )&lt;br /&gt;
    {&lt;br /&gt;
    &lt;br /&gt;
    ···· $c = $a;&lt;br /&gt;
    &lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блоки всегда ограничиваются фигурными скобками. При этом используется [http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B8%D0%BB%D1%8C_%D0%BE%D1%82%D1%81%D1%82%D1%83%D0%BF%D0%BE%D0%B2#.D0.A1.D1.82.D0.B8.D0.BB.D1.8C_.D0.9E.D0.BB.D0.BC.D0.B0.D0.BD.D0.B0 стиль Олмана]:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    if (&amp;lt;cond&amp;gt;)&lt;br /&gt;
    {&lt;br /&gt;
    ····&amp;lt;body&amp;gt;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Комментарии и документация ====&lt;br /&gt;
# Комментарии должны быть подробными и содержательными. Объяснять каждое объявление классов, функций и переменных. Каждый цикл и каждая ветвь условия должны быть пояснены содержательным смыслом выполняемых действий, например: &amp;quot;перебираем список товаров&amp;quot;, &amp;quot;если пользователь не заполнил поле имя...&amp;quot;&lt;br /&gt;
# Комментарии к функциям и классам оформляются в формате [http://manual.phpdoc.org/HTMLframesConverter/default/ PHPDoc]&lt;br /&gt;
# Комментарии в строках должны быть в стиле '''//'''. Они должны быть понятными и располагаться над строкой комментируемого кода.&lt;br /&gt;
# Файлы, содержащие PHP-код должны начинаться с комментария, предусмотренного лицензией GNU GPL.&lt;br /&gt;
&lt;br /&gt;
==== Дата и время ====&lt;br /&gt;
#Все даты и время в базе данных хранятся в [http://ru.wikipedia.org/wiki/Unix_timestamp Unix Timestamp] по [http://ru.wikipedia.org/wiki/UTC UTC] без учета летнего времени и пересчитываются в местное время при отображении (это стандартный функционал time() - Time Stamp не зависит от часовых поясов).&lt;br /&gt;
# В зависимости от услових (и техзадания) применяется либо часовой пояс подразделения (например, в периоде и днях), либо часовой пояс пользователя.&lt;br /&gt;
# Если определена только дата, то время устанавливается 12:00 по полудню по применяемому часовому поясу.&lt;br /&gt;
&lt;br /&gt;
==== Исключения ====&lt;br /&gt;
# Рекомендуется использование исключений для сообщения об ошибках.&lt;br /&gt;
# Любые необработанные исключения должны заканчиваться вызовом $DOF-&amp;gt;print_error() для вывода сообщения об ошибке.&lt;br /&gt;
# Не используйте исключения для обработки штатных ситуаций, только в ошибочных и аварийных ситуаций.&lt;br /&gt;
# Для вывода исключений можно использовать следующие классы:&lt;br /&gt;
## dof_exception - базовый класс исключения&lt;br /&gt;
## dof_exception_coding - ошибка разработчика&lt;br /&gt;
## dof_exception_ddl - ошибка определения структуры СУБД&lt;br /&gt;
## dof_exception_dml - ошибка манипуляции с СУБД&lt;br /&gt;
## dof_exception_file - ошибка работы с файлами&lt;br /&gt;
&lt;br /&gt;
==== Прочее ====&lt;br /&gt;
# При копировании объектов используйте PHP5-функцию копирования объектов. В MOODLE есть функция clone(), которая совместима и с PHP4 тоже.&lt;br /&gt;
# Если вы копируете переменную, которая может содержать объект, то используйте функцию MOODLE fullclone().&lt;br /&gt;
# Все переменные перед первым использованием необходимо инициализировать.&lt;br /&gt;
# Имя модуля может включать только строчные латинские буквы и содержать не более 20 символов.&lt;br /&gt;
# Следует избегать использования глобальных переменных.&lt;br /&gt;
# Обращения к объектом Free Dean's Office выполняется через объект [[Разработка:lib/dof.php|$DOF]]. При объявлении плагина он должен сохранить ссылка на объект $DOF в собственном свойстве dof и во всех собственных методов использовать для обращения '''$this-&amp;gt;dof'''&lt;br /&gt;
# Не должно быть никакого SQL-кода за пределом справочников ([[Разработка:Структура#Справочники|плагинов storage]])&lt;br /&gt;
# Из справочников (storage) нельзя обращаться к плагинам интерфейса (im)&lt;br /&gt;
# Кроме [[Разработка:Структура#Интерфейс пользователя|плагинов im]] никакие другие плагины не должны принимать запросы по http. Исключение могут составлять плагины [[Разработка:Структура#Синхронизации|sync]], которые могут принимать входящие soap-запросы и т.п. (но и они не должны реализовывать веб-интерфейс). При этом все плагины должны быть безопасны на случай, если злоумышленик попытается обратиться по прямой ссылке к одному из их файлов (следует предотвращать запуск файла по прямой ссылке, если это может нанести урон безопасности).&lt;br /&gt;
# В методах обращения к базе, подразумевающих формирование своего SQL запроса, например get_records_sql(), необходимо максимально задействовать входные параметры, вместо формирования одного единственного $sql. Например limitfrom и limitnum необходимо передавать дополнительными параметрами, а не добавлять их в параметр $sql.&lt;br /&gt;
&lt;br /&gt;
==== Исключения из правил ====&lt;br /&gt;
# При использовании сторонних библиотек возможно отступление от некоторых пунктов. Это связано с экономией времени на переработку оформления библиотеки и сохранением стиля сопутствующего кода. Пример: class SomeCustomClass {function classMethod(){...}}&lt;br /&gt;
&lt;br /&gt;
=== Структура базы данных ===&lt;br /&gt;
# Имена таблиц, принадлежащих справочникам, должны быть вида &amp;quot;block_dof_s_кодсправочника&amp;quot;&lt;br /&gt;
# Имена колонок БД, содержащих ключ по другой колонке в БД Free Dean's Office должны заканчиваться на &amp;quot;id&amp;quot;&lt;br /&gt;
# Имена колонок в БД, содержащих ключ объекта в собственной БД Moodle должны начинаться на &amp;quot;mdl&amp;quot; (но не должны заканчиваться на &amp;quot;id&amp;quot;)&lt;br /&gt;
# Имя колонки status рекомендуется использовать только для статусов рабочих процессов (workflow)&lt;br /&gt;
# Если в таблице есть поле &amp;quot;code&amp;quot; то это поле должно быть уникальнам в рамках всей таблицы (как будто это второй первичный ключ)&lt;br /&gt;
# При именовании колонок рекомендуется придерживаться следующего правила: колонка именуется простым словом (name,type,price) если ее содержимое относится ко всей записи (например, для колонки &amp;quot;курсы&amp;quot; name - название курса, type - тип курса &amp;quot;очный&amp;quot;, &amp;quot;дистанционный&amp;quot; и т.п. price - цена курса), а для остальных полей имя лучше уточнять (controltype - тип итогового контроля, ownerid - &amp;quot;владелец&amp;quot; курса, markprice - цена оценки :-))))&lt;br /&gt;
&lt;br /&gt;
=== Безопасность ===&lt;br /&gt;
# Все переменные должны содержать только безопасные данные (текстовые строки должны быть обработаны addslashes()). &lt;br /&gt;
# При получении данных через optional_param(), require_param(), dof_modlib_widgets_form (moodleform), а так же через стандартные методы справочников - все данные передаются в уже обработанном виде. &lt;br /&gt;
# При отображении данных на веб-странице и прочих операциях, где строки не должны быть экранированы, программист должен самостоятельно обработать данные stripslashes() непосредственно перед операцией, далее эти данные в программе использоваться не должны, либо их необходимо преобразовать обратно. Во всех остальных случаях, включая задание текстовых констант непосредственно в коде программы, программист обязан позаботится о безопасности данных (addslashes()).&lt;br /&gt;
&lt;br /&gt;
Типы ожидаемых данных для функций optional_param() и require_param() можно посмотреть в статье [Разработка:Константы_Moodle#Константы типов данных|константы типов данных]].&lt;br /&gt;
&lt;br /&gt;
==== Работа с правами доступа ====&lt;br /&gt;
Правила работы с правами доступа описаны в разделе &amp;quot;[[Разработка:Управление_доступом#.D0.9F.D1.80.D0.B0.D0.B2.D0.B8.D0.BB.D0.B0_.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D1.8B_.D1.81_.D0.BF.D1.80.D0.B0.D0.B2.D0.B0.D0.BC.D0.B8_.D0.B4.D0.BE.D1.81.D1.82.D1.83.D0.BF.D0.B0|Управление доступом]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Использование JavaScript ===&lt;br /&gt;
В качестве основной js-библиотеки проекта используется [https://docs.moodle.org/dev/YUI YUI]. Сама библиотека подключена как modlib-плагин: [[Разработка:modlibs/yui]].&lt;br /&gt;
Помимо неё в проекте используется [http://jquery.com/ jQuery]:  [[Разработка:modlibs/jquery]].&lt;br /&gt;
&lt;br /&gt;
Все скрипты (и стили), рекомендуется располагать в отдельный файлах. &lt;br /&gt;
&lt;br /&gt;
JavaScript располагается в файлах с раширением .js, стили - .css.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы подключить скрипты YUI необходимо:&lt;br /&gt;
&lt;br /&gt;
1) Создать папку в директории dof/yui/modulename&lt;br /&gt;
&lt;br /&gt;
2) Создать скрипт с таким же названием (modulename.js), как и папка&lt;br /&gt;
&lt;br /&gt;
3) Воспользоваться функцией YUI.add() для добавления нужного функционала, например, таким образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
YUI.add('moodle-block_dof-modulename', function (Y) {&lt;br /&gt;
    var MODULENAME = 'block_dof_modulename';&lt;br /&gt;
    var MODULE = function () {&lt;br /&gt;
        MODULE.superclass.constructor.apply(this, arguments);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    MODULE.prototype = {&lt;br /&gt;
        initializer: function (params) {&lt;br /&gt;
            /* Инициализация происходит здесь */&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    Y.extend(MODULE, Y.Base, MODULE.prototype, {&lt;br /&gt;
        NAME: MODULENAME,&lt;br /&gt;
        /* Можно передать эти параметры через функцию yui_module() */&lt;br /&gt;
        ATTRS: {&lt;br /&gt;
            params: [],&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    M.block_dof = M.block_dof || {};&lt;br /&gt;
    M.block_dof.init_modulename = function (params) {&lt;br /&gt;
        return new MODULE(params);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}, '@VERSION@', {&lt;br /&gt;
    /* Модули для подключения необходимого фукнционала */&lt;br /&gt;
    requires: ['anim', 'array-extras', 'base', 'dd-constrain', 'dd-delegate', 'dd-drop',&lt;br /&gt;
        'dd-proxy', 'event-resize', 'io', 'json-parse', 'json', 'node', 'panel']&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) В коде вызвать подключение модуля:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$DOF-&amp;gt;modlib('yui')-&amp;gt;yui_module('moodle-block_dof-modulename', 'M.block_dof.init_modulename',&lt;br /&gt;
        array(array('submitparams' =&amp;gt; $submitparams)));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для того чтобы подключить скрипты jQuery можно воспользоваться двумя способами:&lt;br /&gt;
&lt;br /&gt;
1) Если нужно просто подключить отдельный файл - то нужно воспользоваться функцией [[Разработка:modlibs/nvg#add_scripts()|add_scripts()]] в плагине nvg.&lt;br /&gt;
&lt;br /&gt;
2) Если нужно подключить библиотеку - то надо воспользоваться функцией [[Разработка:modlibs/widgets#js_init()|js_init()]] в плагине widgets.&lt;br /&gt;
&lt;br /&gt;
Если вы пишете виджет, который использует javascript, то он сам должен подключать все нужные файлы. Файлы виджетов всегда прописываются в функции [[Разработка:modlibs/widgets#js_init()|js_init()]].&lt;br /&gt;
&lt;br /&gt;
=== Работа с библиотеками Moodle ===&lt;br /&gt;
Все обращения к библиотекам moodle можно производить только в модуле ama. Модуль ama можно вызывать только из модуля sync.&lt;br /&gt;
&lt;br /&gt;
=== Другие правила ===&lt;br /&gt;
==== Работа с сессиями ====&lt;br /&gt;
Для каждого плагина, чтобы избежать пересечения по именам переменных, выделено персональное пространство в массиве сессии:&lt;br /&gt;
$_SESSION['dof'][plugintype][plugincode],&lt;br /&gt;
plugintype записывается так, как он указан, как его возвращает метод type().&lt;br /&gt;
&lt;br /&gt;
== Работа со стандартными библиотеками moodle ==&lt;br /&gt;
Этот раздел будет содержать справку по работе со стандартными пакетами moodle&lt;br /&gt;
&lt;br /&gt;
=== Работа с moodleQuickForm ===&lt;br /&gt;
''Основная статья:'' [[Разработка:moodleQuickForm]].&lt;br /&gt;
&lt;br /&gt;
В этом разделе содержаться только основные правила работы с moodleQuickForm, которых следует придерживаться при написании форм. Подробные инструкции по работе с формами содержатся в основной статье.&lt;br /&gt;
==== Создание класса ====&lt;br /&gt;
Все создаваемые классы форм должны наследоваться только от класса ''dof_modlib_widgets_form''. Для того чтобы подключить этот класс, нужно воспользоваться функцией '''webform'''() из библиотеки [[Разработка:modlibs/widgets#API|widgets]].&lt;br /&gt;
&lt;br /&gt;
Пример кода:&lt;br /&gt;
    ''// Подключаем библиотеку форм''&lt;br /&gt;
    $DOF-&amp;gt;modlib('widgets')-&amp;gt;'''webform'''();&lt;br /&gt;
    &lt;br /&gt;
    ''// создаем класс формы при помощи наследования''&lt;br /&gt;
    class my_form extends '''dof_modlib_widgets_form'''&lt;br /&gt;
    {&lt;br /&gt;
        ....&lt;br /&gt;
    }&lt;br /&gt;
Наследование от класса ''moodleform'' или от ''HTMLQuickForm'' напрямую '''не допускается''' из-за проблем с совместимостью.&lt;br /&gt;
&lt;br /&gt;
Во всех внутренних методах формы разрешается использовать обращение к глобальной переменной [[Разработка:lib/dof.php|$DOF]].&lt;br /&gt;
&lt;br /&gt;
При создании формы для добавления любых текстовых строк на русском языке следует пользоваться функцией $DOF-&amp;gt;get_string().&lt;br /&gt;
&lt;br /&gt;
==== Получение данных ====&lt;br /&gt;
Получение данных из формы производится только при помощи специального метода [[Разработка:moodleQuickForm#get_data($slashed) | get_data()]].&lt;br /&gt;
&lt;br /&gt;
Проверка того, отправлены ли данные из формы производится при помощи метода [[Разработка:moodleQuickForm#is_submitted() | is_submitted()]].&lt;br /&gt;
&lt;br /&gt;
Пример кода:&lt;br /&gt;
    // создаем объект данных&lt;br /&gt;
    $form = new my_form();&lt;br /&gt;
    ''// проверяем, отправлены ли данные из формы''&lt;br /&gt;
    if ( $form-&amp;gt;'''is_submitted'''() )&lt;br /&gt;
    {&lt;br /&gt;
        ''// получаем данные''&lt;br /&gt;
        $data = $form-&amp;gt;'''get_data'''();&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;
При создании формы, в полях, которые получают данные всегда указывайте тип данных, который вы ожидаете получить при помощи функции [[Разработка:moodleQuickForm#setType($elementname, $paramtype) | setType()]]&lt;br /&gt;
&lt;br /&gt;
Для всех дополнительных проверок на стороне сервера должен использоваться внутренний метод [[Разработка:moodleQuickForm#validation($data, $files) | validation()]].&lt;br /&gt;
&lt;br /&gt;
=== Работа с moodleExcelWorkbook ===&lt;br /&gt;
&lt;br /&gt;
=== Работа с XMLDB ===&lt;br /&gt;
''Основная статья:'' [[Разработка:XMLDB]]&lt;br /&gt;
&lt;br /&gt;
Если при создании нового плагина storage вам потребуется создать новую таблицу в базе данных, то следует воспользоваться установкой таблиц через XMLDB-скрипты.&lt;br /&gt;
&lt;br /&gt;
Основные правила создания таблиц:&lt;br /&gt;
* Собственные таблицы могут иметь только плагины типа storage&lt;br /&gt;
* Файл С XML-кодом таблицы должен называться install.xml и лежать внутри плагина, в папке &amp;quot;db&amp;quot;.&lt;br /&gt;
* Одному плагину storage должна соответствовать только одна таблица в базе данных.&lt;br /&gt;
* При обновлении таблицы не надо править ее xml-файл, вся информация об обновлении таблиц дается только в скриптах.&lt;br /&gt;
* При составлении скриптов для обновления структуры таблицы настоятельно рекомендуется пользоваться встроенным XMLDB-редактором Moodle.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Разработка]]&lt;/div&gt;</summary>
		<author><name>Konovalov</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:%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=2894</id>
		<title>Разработка:Стандарт кодирования</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:%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=2894"/>
				<updated>2015-02-02T07:45:55Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Исключения */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Правила оформления кода в проекте «Электронный деканат». ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Стиль кодирования ===&lt;br /&gt;
==== Формат файлов ====&lt;br /&gt;
# Все файлы с кодом должны иметь расширение .php&lt;br /&gt;
# Все html-шаблоны должны иметь расширение .html&lt;br /&gt;
# Весь текст, включая исходный код, должен быть в кодировке utf-8 с оконачаниями строк в формет Unix&lt;br /&gt;
# Окончания строк в формате Unix (LF - 0x0A)&lt;br /&gt;
# Все php-теги должны быть полными &amp;lt;?php ... ?&amp;gt;. Краткие теки &amp;lt;? ?&amp;gt; не допускаются&lt;br /&gt;
# Все отступы – 4 пробела. Не использовать TAB.&lt;br /&gt;
# Длинна строки в коде не должна быть больше 80 символов. В некоторых случаях допускается 120, если это упростит читаемость кода.&lt;br /&gt;
# Пробелы можно использовать свободно. Не надо бояться растягивать код для улучшения читабельности.&lt;br /&gt;
==== Имена ====&lt;br /&gt;
# Имена файлов должны состоять только из латинских символов, знака подчеркивания и точки. Имя файла обязательно должно иметь расширение. Рекомендуется использовать для именования файлов слова на английском языке.&lt;br /&gt;
# Имена классов должны состоять из строчных латинских символов и знака подчеркивания. Рекомендуется использовать английские слова разделенных символом подчеркивания. Имя класса в плагине должно начинаться с префикса, соответствующего плагину. Если требуется, имя класса может включать преффикс и суффикс.&lt;br /&gt;
# Имена функций и методов должны состоять из строчных латинских символов и знака подчеркивания. Имя функции в плагине должно начинаться с префикса, соответствующего имени модуля (dof_) и плагину, в котором объявлена (типплагина_кодплагина). Затем идет часть имени, описывающая выполняемое действие. Последняя часть - это существительное, обозначающее сущность, над которой это действие производится либо набор сущностей. Не должно быть пробелов между именем функции и скобками. Это относится и к объявлению функции, и к ее использованию. Параметры всегда должны иметь разумные значения по умолчанию, если это возможно. Пример: modname_get_string($identifier, $pluginname = NULL). Между ключевым словом function и именем функции должен быть только один пробел.&lt;br /&gt;
# Имена параметров функций именуются по тем же правилам, что и переменные. Имя параметра должно быть кратким и информативным для сторонних программистов. Если параметр может быть не задан, используйте по умолчанию значение  null, для отличия этой ситуации от передачи параметра false, 0 или '' если это требуется).&lt;br /&gt;
# Имена переменных - всегда легкие для чтения осмысленные слова английского языка, набранные в нижнем регистре. Несколько слов пишутся слитно. Но они должны быть как можно короче. Используйте имена во множественном числе для массивов объектов. Например: $courseid, $studentsgrades&lt;br /&gt;
# Имена глобальных переменных, должны состоять полностью из заглавных букв. Пример: $CFG&lt;br /&gt;
# Имена констант должны состоять из латинских символов в верхнем регистре и знака подчеркивания. Всегда начинаются с имени модуля (DOF). Если константа объявлена в плагине, она получает дополнительный префикс ТИППЛАГИНА_КОДПЛАГИНА. Слова в названии разделены символом подчеркивания. Пример: SITE_ID&lt;br /&gt;
# true, false и null должны быть набраны в нижнем регистре&lt;br /&gt;
# AND, OR, XOR должны быть набраны в верхнем регистре, не используйте сокращенные синонимы.&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;
# Индексация массива может начинаться с любого положительного числа, обычно с 0.&lt;br /&gt;
# При объявлении массива через функцию array() ставьте пробел после запятой при перечислении параметров. Длинные объявления можно переносить по строкам. При объявлении ассоциативных массивов помещайте на одну строку одну пару ключ-значение.&lt;br /&gt;
==== Классы ====&lt;br /&gt;
# Свойства класса должны объявляться до его методов.&lt;br /&gt;
# Фигурная скобка пишется на следующей строчке после объявления имени класса, на одном уровне с ключевым словом class.&lt;br /&gt;
# Объявление любого класса должно быть документировано по стандарту PHPDocumentor&lt;br /&gt;
# Весь код внутри класса должен быть сдвинут на 4 пробела от уровня его объявления.&lt;br /&gt;
# Объявление класса должно быть отделено от остального коду двумя пустыми строками.&lt;br /&gt;
# Свойства класса должны объявляться напрямую при объявлении класса с указанием модификатора доступа (private (доступ извне запрещен), protected (разрешен доступ из наследников) или public)&lt;br /&gt;
==== Функции и методы ====&lt;br /&gt;
# Объявление функций и методов должно сопровождаться комментарием по стандарту PHPDocumentor&lt;br /&gt;
# Все объявления методов должны содержать модификатор доступа (private (доступ извне запрещен), protected (разрешен доступ из наследников) или public)&lt;br /&gt;
# Фигурная скобка должна располагаться на следующей строке после объявления имени функции или метода на одном с ним уровнем.&lt;br /&gt;
# Тело функции должно быть сдвинуто на 4 пробела вправо.&lt;br /&gt;
# Между именем функции и круглой скобкой не должно быть пробела.&lt;br /&gt;
# Если функция не возвращает значений, то true обозначает успех, false - не успех. Если функция возвращает массив, в случае успешного выполнения, но отсутствия элементов в результате, функция должна возвращать пустой массив.&lt;br /&gt;
&lt;br /&gt;
==== Управляющие конструкции ====&lt;br /&gt;
Ставьте один пробел между скобками и синтаксическими конструкциями. Это не относится к функциям и их параметрам. Пример:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    if ( $a &amp;gt;= max($key) )&lt;br /&gt;
    {&lt;br /&gt;
    &lt;br /&gt;
    ···· $c = $a;&lt;br /&gt;
    &lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блоки всегда ограничиваются фигурными скобками. При этом используется [http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B8%D0%BB%D1%8C_%D0%BE%D1%82%D1%81%D1%82%D1%83%D0%BF%D0%BE%D0%B2#.D0.A1.D1.82.D0.B8.D0.BB.D1.8C_.D0.9E.D0.BB.D0.BC.D0.B0.D0.BD.D0.B0 стиль Олмана]:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    if (&amp;lt;cond&amp;gt;)&lt;br /&gt;
    {&lt;br /&gt;
    ····&amp;lt;body&amp;gt;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Комментарии и документация ====&lt;br /&gt;
# Комментарии должны быть подробными и содержательными. Объяснять каждое объявление классов, функций и переменных. Каждый цикл и каждая ветвь условия должны быть пояснены содержательным смыслом выполняемых действий, например: &amp;quot;перебираем список товаров&amp;quot;, &amp;quot;если пользователь не заполнил поле имя...&amp;quot;&lt;br /&gt;
# Комментарии к функциям и классам оформляются в формате [http://manual.phpdoc.org/HTMLframesConverter/default/ PHPDoc]&lt;br /&gt;
# Комментарии в строках должны быть в стиле '''//'''. Они должны быть понятными и располагаться над строкой комментируемого кода.&lt;br /&gt;
# Файлы, содержащие PHP-код должны начинаться с комментария, предусмотренного лицензией GNU GPL.&lt;br /&gt;
&lt;br /&gt;
==== Дата и время ====&lt;br /&gt;
#Все даты и время в базе данных хранятся в [http://ru.wikipedia.org/wiki/Unix_timestamp Unix Timestamp] по [http://ru.wikipedia.org/wiki/UTC UTC] без учета летнего времени и пересчитываются в местное время при отображении (это стандартный функционал time() - Time Stamp не зависит от часовых поясов).&lt;br /&gt;
# В зависимости от услових (и техзадания) применяется либо часовой пояс подразделения (например, в периоде и днях), либо часовой пояс пользователя.&lt;br /&gt;
# Если определена только дата, то время устанавливается 12:00 по полудню по применяемому часовому поясу.&lt;br /&gt;
&lt;br /&gt;
==== Исключения ====&lt;br /&gt;
# Рекомендуется использование исключений для сообщения об ошибках.&lt;br /&gt;
# Любые необработанные исключения должны заканчиваться вызовом $DOF-&amp;gt;print_error() для вывода сообщения об ошибке.&lt;br /&gt;
# Не используйте исключения для обработки штатных ситуаций, только в ошибочных и аварийных ситуаций.&lt;br /&gt;
# Для вывода исключений можно использовать следующие классы:&lt;br /&gt;
## dof_exception - базовый класс исключения&lt;br /&gt;
## dof_exception_coding - ошибка разработчика&lt;br /&gt;
## dof_exception_ddl - ошибка определения структуры СУБД&lt;br /&gt;
## dof_exception_dml - ошибка манипуляции с СУБД&lt;br /&gt;
## dof_exception_file - ошибка работы с файлами&lt;br /&gt;
&lt;br /&gt;
==== Прочее ====&lt;br /&gt;
# При копировании объектов используйте PHP5-функцию копирования объектов. В MOODLE есть функция clone(), которая совместима и с PHP4 тоже.&lt;br /&gt;
# Если вы копируете переменную, которая может содержать объект, то используйте функцию MOODLE fullclone().&lt;br /&gt;
# Все переменные перед первым использованием необходимо инициализировать.&lt;br /&gt;
# Имя модуля может включать только строчные латинские буквы и содержать не более 20 символов.&lt;br /&gt;
# Следует избегать использования глобальных переменных.&lt;br /&gt;
# Обращения к объектом Free Dean's Office выполняется через объект [[Разработка:lib/dof.php|$DOF]]. При объявлении плагина он должен сохранить ссылка на объект $DOF в собственном свойстве dof и во всех собственных методов использовать для обращения '''$this-&amp;gt;dof'''&lt;br /&gt;
# Не должно быть никакого SQL-кода за пределом справочников ([[Разработка:Структура#Справочники|плагинов storage]])&lt;br /&gt;
# Из справочников (storage) нельзя обращаться к плагинам интерфейса (im)&lt;br /&gt;
# Кроме [[Разработка:Структура#Интерфейс пользователя|плагинов im]] никакие другие плагины не должны принимать запросы по http. Исключение могут составлять плагины [[Разработка:Структура#Синхронизации|sync]], которые могут принимать входящие soap-запросы и т.п. (но и они не должны реализовывать веб-интерфейс). При этом все плагины должны быть безопасны на случай, если злоумышленик попытается обратиться по прямой ссылке к одному из их файлов (следует предотвращать запуск файла по прямой ссылке, если это может нанести урон безопасности).&lt;br /&gt;
# В методах обращения к базе, подразумевающих формирование своего SQL запроса, например get_records_sql(), необходимо максимально задействовать входные параметры, вместо формирования одного единственного $sql. Например limitfrom и limitnum необходимо передавать дополнительными параметрами, а не добавлять их в параметр $sql.&lt;br /&gt;
&lt;br /&gt;
==== Исключения из правил ====&lt;br /&gt;
# При использовании сторонних библиотек возможно отступление от некоторых пунктов. Это связано с экономией времени на переработку оформления библиотеки и сохранением стиля сопутствующего кода. Пример: class SomeCustomClass {function classMethod(){...}}&lt;br /&gt;
&lt;br /&gt;
=== Структура базы данных ===&lt;br /&gt;
# Имена таблиц, принадлежащих справочникам, должны быть вида &amp;quot;block_dof_s_кодсправочника&amp;quot;&lt;br /&gt;
# Имена колонок БД, содержащих ключ по другой колонке в БД Free Dean's Office должны заканчиваться на &amp;quot;id&amp;quot;&lt;br /&gt;
# Имена колонок в БД, содержащих ключ объекта в собственной БД Moodle должны начинаться на &amp;quot;mdl&amp;quot; (но не должны заканчиваться на &amp;quot;id&amp;quot;)&lt;br /&gt;
# Имя колонки status рекомендуется использовать только для статусов рабочих процессов (workflow)&lt;br /&gt;
# Если в таблице есть поле &amp;quot;code&amp;quot; то это поле должно быть уникальнам в рамках всей таблицы (как будто это второй первичный ключ)&lt;br /&gt;
# При именовании колонок рекомендуется придерживаться следующего правила: колонка именуется простым словом (name,type,price) если ее содержимое относится ко всей записи (например, для колонки &amp;quot;курсы&amp;quot; name - название курса, type - тип курса &amp;quot;очный&amp;quot;, &amp;quot;дистанционный&amp;quot; и т.п. price - цена курса), а для остальных полей имя лучше уточнять (controltype - тип итогового контроля, ownerid - &amp;quot;владелец&amp;quot; курса, markprice - цена оценки :-))))&lt;br /&gt;
&lt;br /&gt;
=== Безопасность ===&lt;br /&gt;
# Все переменные должны содержать только безопасные данные (текстовые строки должны быть обработаны addslashes()). &lt;br /&gt;
# При получении данных через optional_param(), require_param(), dof_modlib_widgets_form (moodleform), а так же через стандартные методы справочников - все данные передаются в уже обработанном виде. &lt;br /&gt;
# При отображении данных на веб-странице и прочих операциях, где строки не должны быть экранированы, программист должен самостоятельно обработать данные stripslashes() непосредственно перед операцией, далее эти данные в программе использоваться не должны, либо их необходимо преобразовать обратно. Во всех остальных случаях, включая задание текстовых констант непосредственно в коде программы, программист обязан позаботится о безопасности данных (addslashes()).&lt;br /&gt;
&lt;br /&gt;
Типы ожидаемых данных для функций optional_param() и require_param() можно посмотреть в статье [Разработка:Константы_Moodle#Константы типов данных|константы типов данных]].&lt;br /&gt;
&lt;br /&gt;
==== Работа с правами доступа ====&lt;br /&gt;
Правила работы с правами доступа описаны в разделе &amp;quot;[[Разработка:Управление_доступом#.D0.9F.D1.80.D0.B0.D0.B2.D0.B8.D0.BB.D0.B0_.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D1.8B_.D1.81_.D0.BF.D1.80.D0.B0.D0.B2.D0.B0.D0.BC.D0.B8_.D0.B4.D0.BE.D1.81.D1.82.D1.83.D0.BF.D0.B0|Управление доступом]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Использование JavaScript ===&lt;br /&gt;
В качестве основной js-библиотеки проекта используется [http://jquery.com/ jQuery]. Сама библиотека подключена как modlib-плагин: [[Разработка:modlibs/jquery]]. &lt;br /&gt;
&lt;br /&gt;
Все скрипты (и стили), рекомендуется располагать в отдельный файлах. &lt;br /&gt;
&lt;br /&gt;
JavaScript располагается в файлах с раширением .js, стили - .css.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы подключить скрипты можно воспользоваться двумя способами:&lt;br /&gt;
&lt;br /&gt;
1) Если нужно просто подключить отдельный файл - то нужно воспользоваться функцией [[Разработка:modlibs/nvg#add_scripts()|add_scripts()]] в плагине nvg.&lt;br /&gt;
2) Если нужно подключить библиотеку - то надо воспользоваться функцией [[Разработка:modlibs/widgets#js_init()|js_init()]] в плагине widgets.&lt;br /&gt;
&lt;br /&gt;
Если вы пишете виджет, который использует javascript, то он сам должен подключать все нужные файлы. Файлы виджетов всегда прописываются в функции [[Разработка:modlibs/widgets#js_init()|js_init()]].&lt;br /&gt;
&lt;br /&gt;
=== Работа с библиотеками Moodle ===&lt;br /&gt;
Все обращения к библиотекам moodle можно производить только в модуле ama. Модуль ama можно вызывать только из модуля sync.&lt;br /&gt;
&lt;br /&gt;
=== Другие правила ===&lt;br /&gt;
==== Работа с сессиями ====&lt;br /&gt;
Для каждого плагина, чтобы избежать пересечения по именам переменных, выделено персональное пространство в массиве сессии:&lt;br /&gt;
$_SESSION['dof'][plugintype][plugincode],&lt;br /&gt;
plugintype записывается так, как он указан, как его возвращает метод type().&lt;br /&gt;
&lt;br /&gt;
== Работа со стандартными библиотеками moodle ==&lt;br /&gt;
Этот раздел будет содержать справку по работе со стандартными пакетами moodle&lt;br /&gt;
&lt;br /&gt;
=== Работа с moodleQuickForm ===&lt;br /&gt;
''Основная статья:'' [[Разработка:moodleQuickForm]].&lt;br /&gt;
&lt;br /&gt;
В этом разделе содержаться только основные правила работы с moodleQuickForm, которых следует придерживаться при написании форм. Подробные инструкции по работе с формами содержатся в основной статье.&lt;br /&gt;
==== Создание класса ====&lt;br /&gt;
Все создаваемые классы форм должны наследоваться только от класса ''dof_modlib_widgets_form''. Для того чтобы подключить этот класс, нужно воспользоваться функцией '''webform'''() из библиотеки [[Разработка:modlibs/widgets#API|widgets]].&lt;br /&gt;
&lt;br /&gt;
Пример кода:&lt;br /&gt;
    ''// Подключаем библиотеку форм''&lt;br /&gt;
    $DOF-&amp;gt;modlib('widgets')-&amp;gt;'''webform'''();&lt;br /&gt;
    &lt;br /&gt;
    ''// создаем класс формы при помощи наследования''&lt;br /&gt;
    class my_form extends '''dof_modlib_widgets_form'''&lt;br /&gt;
    {&lt;br /&gt;
        ....&lt;br /&gt;
    }&lt;br /&gt;
Наследование от класса ''moodleform'' или от ''HTMLQuickForm'' напрямую '''не допускается''' из-за проблем с совместимостью.&lt;br /&gt;
&lt;br /&gt;
Во всех внутренних методах формы разрешается использовать обращение к глобальной переменной [[Разработка:lib/dof.php|$DOF]].&lt;br /&gt;
&lt;br /&gt;
При создании формы для добавления любых текстовых строк на русском языке следует пользоваться функцией $DOF-&amp;gt;get_string().&lt;br /&gt;
&lt;br /&gt;
==== Получение данных ====&lt;br /&gt;
Получение данных из формы производится только при помощи специального метода [[Разработка:moodleQuickForm#get_data($slashed) | get_data()]].&lt;br /&gt;
&lt;br /&gt;
Проверка того, отправлены ли данные из формы производится при помощи метода [[Разработка:moodleQuickForm#is_submitted() | is_submitted()]].&lt;br /&gt;
&lt;br /&gt;
Пример кода:&lt;br /&gt;
    // создаем объект данных&lt;br /&gt;
    $form = new my_form();&lt;br /&gt;
    ''// проверяем, отправлены ли данные из формы''&lt;br /&gt;
    if ( $form-&amp;gt;'''is_submitted'''() )&lt;br /&gt;
    {&lt;br /&gt;
        ''// получаем данные''&lt;br /&gt;
        $data = $form-&amp;gt;'''get_data'''();&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;
При создании формы, в полях, которые получают данные всегда указывайте тип данных, который вы ожидаете получить при помощи функции [[Разработка:moodleQuickForm#setType($elementname, $paramtype) | setType()]]&lt;br /&gt;
&lt;br /&gt;
Для всех дополнительных проверок на стороне сервера должен использоваться внутренний метод [[Разработка:moodleQuickForm#validation($data, $files) | validation()]].&lt;br /&gt;
&lt;br /&gt;
=== Работа с moodleExcelWorkbook ===&lt;br /&gt;
&lt;br /&gt;
=== Работа с XMLDB ===&lt;br /&gt;
''Основная статья:'' [[Разработка:XMLDB]]&lt;br /&gt;
&lt;br /&gt;
Если при создании нового плагина storage вам потребуется создать новую таблицу в базе данных, то следует воспользоваться установкой таблиц через XMLDB-скрипты.&lt;br /&gt;
&lt;br /&gt;
Основные правила создания таблиц:&lt;br /&gt;
* Собственные таблицы могут иметь только плагины типа storage&lt;br /&gt;
* Файл С XML-кодом таблицы должен называться install.xml и лежать внутри плагина, в папке &amp;quot;db&amp;quot;.&lt;br /&gt;
* Одному плагину storage должна соответствовать только одна таблица в базе данных.&lt;br /&gt;
* При обновлении таблицы не надо править ее xml-файл, вся информация об обновлении таблиц дается только в скриптах.&lt;br /&gt;
* При составлении скриптов для обновления структуры таблицы настоятельно рекомендуется пользоваться встроенным XMLDB-редактором Moodle.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Разработка]]&lt;/div&gt;</summary>
		<author><name>Konovalov</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/soap&amp;diff=2860</id>
		<title>Разработка:sync/soap</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/soap&amp;diff=2860"/>
				<updated>2014-11-24T06:33:18Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = soap&lt;br /&gt;
| type = sync&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Описание=&lt;br /&gt;
&lt;br /&gt;
Веб-сервис для интеграции с другими системами по протоколу SOAP.&lt;br /&gt;
Плагин использует инфраструктуру [[Разработка:storages/sync | storages/sync ]] для хранения соответствия внутренних и внешних id объектов и [[Разработка:storages/synclog | storages/synclog ]] для логирования всех операций синхронизации.&lt;br /&gt;
&lt;br /&gt;
Плагин объявляет SOAP-сервис, который располагается по адресам:&lt;br /&gt;
* /sync/soap/soap.php?do=wsdl - wsdl-файл&lt;br /&gt;
* /sync/soap/soap.php?do=service - сам сервис&lt;br /&gt;
&lt;br /&gt;
У каждого метода присутствуют следующие обязательные служебные параметры:&lt;br /&gt;
* requesttime - (UNIX timestamp) время генерации запроса, используется для устаревания запроса с целью защиты от атаки на &amp;quot;повторение перехваченного запроса&amp;quot;&lt;br /&gt;
* requestlogin - идентифицирует систему-отправитель запроса (задается в sync/soap/cfg/clients.php, вместе с паролем requestpassword и необязательными параметрами)&lt;br /&gt;
* requesthash - sha1-хеш от всех полей запроса в алфавитном порядке, включая предыдущие два, а так же поля requestpassword (в самом запросе не участвует). Используется для подтверждения подлинности запроса.&lt;br /&gt;
&lt;br /&gt;
'''Все параметры, в которых передаётся время, принимают UNIX timestamp, если в подписи к ним не написано иначе.'''&lt;br /&gt;
&lt;br /&gt;
Имена полей soap-запросов должны совпадать с именами полей в справочниках: [[Разработка:storages/metacontracts | storages/metacontracts ]], [[Разработка:storages/persons | storages/persons ]], [[Разработка:storages/contracts | storages/contracts ]]&lt;br /&gt;
&lt;br /&gt;
Во всех запросах используются только внешние id. Например, при создании персоны новая система передает свой уникальный id, которым она её обозначает. Этот id сохраняется в [[Разработка:storages/sync | storages/sync ]]. При создании контракта на обучение, внешняя система передает свой собственный id персоны (которая была создана ранее), плагин [[Разработка:sync/soap | sync/soap ]] конвертирует этот id во внутренний через справочник [[Разработка:storages/sync | storages/sync ]] и создает запись в [[Разработка:storages/contracts | storages/contracts ]]. Если внешний id объекта не передан, запрос возвращает ошибку (объект не создается и не обновляется).&lt;br /&gt;
&lt;br /&gt;
Служебные, специальные и автоматически-вычисляемые поля справочников не доступны для редактирования через SOAP-запросы (например adddate, status). Действия, которые запрещены пользователям системы через интерфейс, запрещены и через SOAP-запросы (например, нельзя сменить персону в уже созданном контракте).&lt;br /&gt;
&lt;br /&gt;
Все запросы обрабатывают вложенный объект cov. Все поля внутри объекта cov сохраняются (обновляются) в справочнике [[Разработка:storages/cov | storages/cov ]]. Не упомянутые в запросе поля (ранее сохраненные в cov) игнорируются. Все имена полей, присутствующие в соответствующем справочнике зарезервированы и не могут быть переданы через объект cov (например, нельзя сохранить поле cov/status для объекта persons, потому что в нем уже есть поле status).&lt;br /&gt;
&lt;br /&gt;
Подразделение для размещения объекта передается в SOAP-запросах через его код (code), а не id.&lt;br /&gt;
Успешная операция для методов типа 'set_' возвращает следующую структуру данных:&lt;br /&gt;
* id - переданный в запросе id объекта&lt;br /&gt;
* dofid - внутренний id объекта&lt;br /&gt;
* modified - время изменения объекта (UNIX timestamp)&lt;br /&gt;
* hash - контрольная сумма из storages/sync&lt;br /&gt;
* errorcode - код ошибки, помогающий идентифицировать проблему при исполнении запроса&lt;br /&gt;
&lt;br /&gt;
Для проверки SOAP-запросов используется хеширование по следующему алгоритму:&lt;br /&gt;
&lt;br /&gt;
* requesthash == sha1(requestpassword + requesttime + requestlogin + json(vars) + json(cvars)), где&lt;br /&gt;
&lt;br /&gt;
** vars формируется следующим образом:&lt;br /&gt;
*** Из полей объекта для SOAP-запроса исключаются служебные данные — requesthash, requestlogin, requesttime и дополнительный объект cov&lt;br /&gt;
*** Поля сортируются в алфавитном порядке;&lt;br /&gt;
** cvars — вложенный объект cov, поля которого так же сортируются в алфавитном порядке;&lt;br /&gt;
** json() - функция для преобразования массива/объекта в json-строку.&lt;br /&gt;
** Знаком &amp;quot;+&amp;quot; указана конкатенация строк.&lt;br /&gt;
'''Примечание''': XML-структура SOAP-запроса для вложенных объектов, таких как cov, должна выглядеть следующим образом:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfield&amp;gt;RU&amp;lt;/addfield&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtwo&amp;gt;RU-MOS&amp;lt;/addfieldtwo&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtthree&amp;gt;Москва&amp;lt;/addfieldtthree&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
При использовании ассоциативных массивов, например, на PHP, при попытке передать их SOAP-клиенту произойдёт искажение представления:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfield&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldtwo&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU-MOS&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldthree&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;Москва&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
Поэтому при проверке на сервере хэш не совпадёт.&lt;br /&gt;
&lt;br /&gt;
=API (внешний) =&lt;br /&gt;
&lt;br /&gt;
==='''set_meta_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные метаконтракта, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса (UNIX timestamp)&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id метаконтракта&lt;br /&gt;
** num(string) - Номер метаконтракта&lt;br /&gt;
** departmentcode(string) - Код подразделения&lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_person($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные персоны, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса (UNIX timestamp)&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id метаконтракта&lt;br /&gt;
** firstname(string) - Имя&lt;br /&gt;
** middlename(string) - Отчество&lt;br /&gt;
** lastname(string) - Фамилия&lt;br /&gt;
** preferredname(string) - Префикс для имения (Mr. Dr. Г-н, Г-а)&lt;br /&gt;
** dateofbirth(int) - Дата рождения в UTS&lt;br /&gt;
** gender(string) - Пол (male, female, unknown)&lt;br /&gt;
** email(string) - Основной адрес электронной почты&lt;br /&gt;
** phonehome(string) - Домашний телефон&lt;br /&gt;
** phonework(string) - Рабочий телефон&lt;br /&gt;
** phonecell(string) - Сотовый телефон&lt;br /&gt;
** passtypeid(int) - Тип удостоверения личности (1 - свидетельство о рождении, 2 - паспорт гражданина РФ, 3 - загранпасспорт, 4 - разрешение на временное проживание лица без гражданства, 5 - вид на жительство, 6 - военный билет, 7 - водительсткое удостоверение пластиковое, 8 - вод. удостоверение форма 1, 9 - вод. удостоверение международное)&lt;br /&gt;
** passportserial(string) - Серия удостоверения личности (если предусмотрена типом документа)&lt;br /&gt;
** passportnum(string) - Номер удостоверения личности&lt;br /&gt;
** passportdate(int) - Дата выдачи удостоверения личности в UTS&lt;br /&gt;
** passportem(string) - Название организации, выдавшей удостоверение личности&lt;br /&gt;
** citizenship(string) - Гражданство&lt;br /&gt;
** departmentcode(string) - Основной отдел, к которому приписан человек (может редактировать его данные в persons)&lt;br /&gt;
** about(string) - Характеристика личности&lt;br /&gt;
** skype(string) - Уникальный идентификатор в Skype&lt;br /&gt;
** phoneadd1(string) - Дополнительный телефон 1&lt;br /&gt;
** phoneadd2(string) - Дополнительный телефон 2&lt;br /&gt;
** phoneadd3(string) - Дополнительный телефон 3&lt;br /&gt;
** emailadd1(string) - Дополнительная электронная почта 1&lt;br /&gt;
** emailadd2(string) - Дополнительная электронная почта 2&lt;br /&gt;
** emailadd3(string) - Дополнительная электронная почта 3&lt;br /&gt;
** passportaddr(object) - Адрес прописки по паспорту (для генерации документов)&lt;br /&gt;
** address(object) - Текущий адрес (почтовый адрес)&lt;br /&gt;
** birthaddress(object) - Адрес рождения персоны&lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Формат объектов: passportaddr, address, birthaddress''&lt;br /&gt;
* postalcode(string) - Почтовый индекс&lt;br /&gt;
* country(string) - Код страны проживания (по предъявленному паспорту) в ICO 3166-1:1997 (RU)&lt;br /&gt;
* region(string) - Код региона по ISO 3166-2 (RU-NGR, RU-MOS)&lt;br /&gt;
* county(string) - Административный район&lt;br /&gt;
* city(string) - Город&lt;br /&gt;
* streetname(string) - Название улицы&lt;br /&gt;
* streettype(string) - Тип улицы&lt;br /&gt;
* number(string) - Номер дома&lt;br /&gt;
* gate(string) - Подъезд&lt;br /&gt;
* floor(string) - Этаж&lt;br /&gt;
* apartment(string) - Квартира&lt;br /&gt;
* latitude(float) - Широта в градусах&lt;br /&gt;
* longitude(float) - Долгота в градусах&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные договора, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса (UNIX timestamp)&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id договора&lt;br /&gt;
** typeid(int) - Тип договора, если у учебного заведения предусмотрено несколько разных типов договоров&lt;br /&gt;
** num(string) - Номер договора&lt;br /&gt;
** numpass(string) - Номер пропуска, студенческого билета и т.п.&lt;br /&gt;
** date(int) - Дата заключения&lt;br /&gt;
** sellerid(int) - Менеджер по работе с клиентами (приемная комиссия, партнер) - добавляет договор, меняет статус до &amp;quot;подписан клиентом&amp;quot;, отслеживает статус договора и ход обучения (id по таблице persons)&lt;br /&gt;
** clientid(int) - Клиент, оплачивающий обучение (законный представитель, сам совершеннолетний ученик или куратор от организации, может принимать значение 0 или null, если клиент создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** studentid(int) - Ученик (может принимать значение 0, если ученик создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** notes(string) - Заметки&lt;br /&gt;
** departmentcode(string) - Подразделение в таблице departments, к которому приписан контракт на обучение (например, принявшее ученика)&lt;br /&gt;
** contractform(string) - Форма договора (шаблон)&lt;br /&gt;
** curatorid(int) - Куратор или классный руководитель данного ученика (по таблице persons или не указан), отслеживает учебный процесс, держит связь с учеником, является посредником между учеником и системой, может быть внешней персоной.&lt;br /&gt;
** enddate(int) - Дата окончания договора&lt;br /&gt;
** metacontractid(int) - id метаконтракта, к которому привязан договор, в таблице metacontracts &lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы (внутренние)=&lt;br /&gt;
&lt;br /&gt;
===='''check_address($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить поля адреса&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника addresses&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP19, SP21-SP23]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_column_types_null($input, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить поля запроса на предмет ненулевых значений и корректности типов справочника&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект SOAP-запроса&lt;br /&gt;
* table(string) - название справочника, &lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SC6-SC7], [PR5-PR6]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_cov($cov, $fields = null)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить дополнительный объект на предмет соответствия формату&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* cov(array) - дополнительный вложенный объект.&lt;br /&gt;
* fields(object) - поля объекта для проверки дублирующихся полей.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [PI6-PI8], [SC3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_department($code)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли такое подразделение и актуальный ли у него статус&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* code(string) - код подразделения.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP5-SP7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_email($email)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет, можно ли использовать переданный e-mail в системе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* email(string) - электронная почта.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP2], [PI4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_fields_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом проверяют объект SOAP-запроса на предмет некорректных значений полей&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - содержит поля запроса&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_hash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет входящий запрос по sha1-хешу, сверяя наличие требуемых полей и выдаёт код ошибки при её наличии&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - содержит поля запроса, а так же обязательные поля - id, requesttime, requestlogin, requesthash.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true в случае успеха,&lt;br /&gt;
* (string) - иначе - код ошибки: [PR0-PR4], [PI3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''connect_sync($pcode, $provider, $substorage = null)'''====&lt;br /&gt;
&lt;br /&gt;
Создать соединение с объектом синхронизации по названию справочника и поставщику данных&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* pcode(string) - название плагина для синхронизации (metacontracts, persons, ...)&lt;br /&gt;
* provider(string) - название поставщика синхронизации&lt;br /&gt;
* substorage(string) - код внутреннего субсправочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки, или&lt;br /&gt;
* (object) - объект подключения к синхронизации dof_storage_sync_connect&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''errorlog($input, $queryname=null)'''====&lt;br /&gt;
&lt;br /&gt;
Записывает переданный объект в файл ('/dat/errorlog.txt') для последующей отладки&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(mixed) - переменная для вывода в файл&lt;br /&gt;
* queryname(string) - название запроса (какя именно операция выполняется)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (void)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют действия, сопутствующие SOAP-запросу&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_additional_($input, $operation, $dofid = null)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют дополнительные действия в SOAP-запросе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
* operation(string) - название операции: 'insert', 'update', ...&lt;br /&gt;
* dofid(int) - id объекта из справочника (если не null, то операция 'update', иначе - 'insert')&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - операция прошла успешно&lt;br /&gt;
* (object) - возвращает дополнительные поля, которые надо присоединить к объекту в методе [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_set_base($input, $method)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить базовые действия метода set_:&lt;br /&gt;
* 1) Получить объект синхронизации&lt;br /&gt;
* 2) Получить объект для ответа&lt;br /&gt;
* 3) Просчитать хеш объекта (без служебных полей)&lt;br /&gt;
* 4) Есть ли объект синхронизации с таким id в базе?&lt;br /&gt;
* 4.1) Объект найден. Проверить, нужно ли производить синхронизацию&lt;br /&gt;
* 4.1.1) Синхронизация нужна&lt;br /&gt;
* 4.1.1.1) Обновить объект в базе ([[#update_object($input, $dofid, $method, $table)|update_object()]]), объект синхронизации и сгенерировать ответ 'OK'&lt;br /&gt;
* 4.1.1.2) Логирование&lt;br /&gt;
* 4.1.1.3) Cгенерировать ответ 'OK', синхронизация успешна&lt;br /&gt;
* 4.1.2) Синхронизация не нужна, сгенерировать ответ 'ОК'&lt;br /&gt;
* 4.2) Объект не найден.&lt;br /&gt;
* 4.2.1) Добавить объект в базу ([[#insert_object($input, $method, $table)|insert_object()]]), обрабатывая ошибки, объект синхронизации&lt;br /&gt;
* 4.2.2) Логирование&lt;br /&gt;
* 4.2.3) Cгенерировать ответ 'OK', синхронизация успешна&lt;br /&gt;
* 5) Вернуть ответ&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#insert_object($input, $method, $table)|insert_object()]] и [[#update_object($input, $dofid, $method, $table)|update_object()]]&lt;br /&gt;
* input(object) - объект SOAP-запроса&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект $response (см. метод [[#set_meta_contract($input)|set_meta_contract()]])&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_fields($input, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить поля для вставки или обновления таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с определёнными полями одного из справочника&lt;br /&gt;
* storage(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, в случае ошибки&lt;br /&gt;
* (object) - объект с полями для вставки/обновления записи в таблице&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_key($requestlogin)'''====&lt;br /&gt;
&lt;br /&gt;
Получить ключ идентификатора системы, используя логин.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* requestlogin(string) - идентификатор системы (логин)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если ключ не найден,&lt;br /&gt;
* (string) - ключ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_response($type, $errorcode = 'OK')'''====&lt;br /&gt;
&lt;br /&gt;
Получить каркас объекта ответа для разных типов методов.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* type(string) - тип запроса ('set', 'get', ...)&lt;br /&gt;
* errorcode(string) - код ошибки&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если произошла ошибка&lt;br /&gt;
* (object) - объект для передачи ответа в SOAP-сообщениях&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_storage_error($method, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить код ошибки справочника по названию метода и таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название операции со справочником: 'insert', 'update', ...&lt;br /&gt;
* storage(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого сочетания &amp;quot;метод-справочник&amp;quot; не найдено&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_sync_object($table, $provider, $id, $direct = 'down')'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли объект синхронизации в справочнике storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* table(string) - справочник, по которому необходимо получить объект&lt;br /&gt;
* provider(string) - внешний провайдер (поле storage/sync.upsubsubstorage)&lt;br /&gt;
* id - id из таблицы storage/sync&lt;br /&gt;
* direct - направление синхронизации&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если объект не найден&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
* (object) - объект table с записью&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_table($method)'''====&lt;br /&gt;
&lt;br /&gt;
Получить название таблицы (справочника), с которым работает переданный метод&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название метода&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого метода не найдено&lt;br /&gt;
* (string) - название справочника&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_object($input, $requestpassword)'''====&lt;br /&gt;
&lt;br /&gt;
Получить sha1-хеш пришедшего SOAP-запроса по описанному ранее алгоритму&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с обязательными полями id, requesttime, requestlogin, requesthash, объектом cov.&lt;br /&gt;
* requestpassword(string) - ключ идентификатора системы.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_uphash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить хеширование объекта для сравнения с uphash в storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с полями справочника, без специальных полей request*&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_address($input)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить новый адрес&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_object($input, $method, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить объект в базу:&lt;br /&gt;
* Получить из запроса поля для вставки в таблицу: [[#get_fields($input, $storage)|get_fields()]]&lt;br /&gt;
* Выполнить дополнительные действия: [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_()]], в случае ошибок сгенерировать ответ&lt;br /&gt;
* Вставить объект в базу, обработать ошибки&lt;br /&gt;
* Обработать объект cov: [[#update_cov($dofid, $inputcov, $plugincode)|update_cov()]], добавить поля в базу, обработать ошибки&lt;br /&gt;
* В соответствии с настройками выставить статус через [[#set_status_route($table, $dofid, $departmentid)|set_status_route()]], ошибки только логировать&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''is_sync_object_exists($table, $provider, $id, $direct = 'down')'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли объект синхронизации в справочнике storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* table(string) - название справочника&lt;br /&gt;
* provider(string) - название клиента, с которым выполняется синхронизация&lt;br /&gt;
* id(int) - id объекта, в зависимости от направления синхронизации&lt;br /&gt;
* direct(string) - направление синхронизации ('up', 'down')&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''normalize_array($item)'''====&lt;br /&gt;
&lt;br /&gt;
Нормализует ошибочно переданный ассоциативный массив в объект&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* item(object) - объект с вложенным массивом item[], в котором находятся объекты:&lt;br /&gt;
** item[0] = stdClass(),&lt;br /&gt;
** item[0]-&amp;gt;key, &lt;br /&gt;
** item[0]-&amp;gt;value, &lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект, в котором поля {item[0]-&amp;gt;key}, а значения: {item[0]-&amp;gt;value}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_method($input, $methodname)'''====&lt;br /&gt;
&lt;br /&gt;
Выполняет базовую проверку переданных параметров (контрольная сумма), проверяет, реализованы ли функции для проверки входных параметров и исполнения запроса, вызывает 'set' метод для переданного в качестве аргумента объекта запроса и метода. В случае возникновения ошибок составляет ответный запрос и выполняет логирование.&lt;br /&gt;
Вызывает следующие методы:&lt;br /&gt;
* [[#check_hash($input)|-&amp;gt;check_hash()]]&lt;br /&gt;
* [[#check_fields_($input)|-&amp;gt;check_fields_$methodname()]]&lt;br /&gt;
* [[#execute_($input)|-&amp;gt;execute_$methodname()]]&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект SOAP-запроса (должны присутствовать служебные поля request*)&lt;br /&gt;
* methodname(string) - название функции, которую необходимо исполнить&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект содерщаший поля:&lt;br /&gt;
** id - переданный в запросе id объекта&lt;br /&gt;
** dofid - внутренний id объекта&lt;br /&gt;
** modified - время изменения объекта&lt;br /&gt;
** hash - контрольная сумма из storages/sync&lt;br /&gt;
** errorcode - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_status_route($table, $dofid, $departmentid)'''====&lt;br /&gt;
&lt;br /&gt;
Установить статус согласно маршруту, заданному в конфиге&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
* dofid(int) - внутренний id объекта из таблицы $storage&lt;br /&gt;
* departmentid(int) - id из таблицы departments&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (array) - код ошибки и описание: array('код_ошибки', 'описание ошибки')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_address($input, $dofid)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить адрес&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице addresses&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат обновления&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_cov($dofid, $inputcov, $plugincode)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить вложенный объект cov для внутренних объектов&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице $plugincode&lt;br /&gt;
* inputcov(object) - объект, по которому происходит перебор&lt;br /&gt;
* plugincode(string) - код плагина storage&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат обновления&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_object($input, $dofid, $method, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить объект в базе:&lt;br /&gt;
* Получить из запроса поля для вставки в таблицу: [[#get_fields($input, $storage)|get_fields()]]&lt;br /&gt;
* Выполнить дополнительные действия: [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_()]], в случае ошибок сгенерировать ответ&lt;br /&gt;
* Обновить объект в базе, обработать ошибки&lt;br /&gt;
* Обработать объект cov: [[#update_cov($dofid, $inputcov, $plugincode)|update_cov()]], добавить поля в базу, обработать ошибки&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице $plugincode&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Коды ошибок=&lt;br /&gt;
&lt;br /&gt;
При успешном выполнении операции синхронизации возвращается код ошибки 'OK'.&lt;br /&gt;
В ином случае, возвращается одна из следующих ошибок:&lt;br /&gt;
&lt;br /&gt;
* Ошибки параметров запроса [P]:&lt;br /&gt;
* Обязательные [PR]&lt;br /&gt;
** PR0 - Данные запроса пришли в некорректном формате&lt;br /&gt;
** PR1 - Отсутствует идентификатор системы [requestlogin]&lt;br /&gt;
** PR2 - Отсутствует время запроса [requesttime]&lt;br /&gt;
** PR3 - Отсутствует контрольная сумма [requesthash]&lt;br /&gt;
** PR4 - Отсутствует идентификатор объекта [id]&lt;br /&gt;
** PR5 - Отсутствует значение в ненулевом поле&lt;br /&gt;
** PR6 - Некорректный тип переданного поля&lt;br /&gt;
* Некорректные [PI]&lt;br /&gt;
** PI3 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** PI4 - Недопустимые символы в e-mail&lt;br /&gt;
** PI5 - Тип переменной подразделения должен быть строковый&lt;br /&gt;
** PI6 - Тип переменной cov должен быть массивом&lt;br /&gt;
** PI7 - Поля внутри переменной cov не должны быть массивами или объектами&lt;br /&gt;
** PI8 - Поля внутри переменной cov не должны совпадать с полями справочника (например, status, adddate)&lt;br /&gt;
* Ошибки внутренние [S]:&lt;br /&gt;
* Некорректные параметры [SP]&lt;br /&gt;
** SP1 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** SP2 - Данный e-mail не допустим в системе&lt;br /&gt;
** SP3 - Данный e-mail уже зарегистрирован в системе&lt;br /&gt;
** SP4 - Название мета-контракта не может быть пустым&lt;br /&gt;
** SP5 - Подразделения с таким кодом не существует&lt;br /&gt;
** SP6 - Подразделение не актуально&lt;br /&gt;
** SP7 - Код подразделения должен быть строкового типа&lt;br /&gt;
** SP8 - Неверно передан параметр с запросом&lt;br /&gt;
** SP9 - Код подразделения не передан, и значения по-умолчанию не найдено&lt;br /&gt;
* persons&lt;br /&gt;
** SP9 - Имя не может быть пустым&lt;br /&gt;
** SP10 - Фамилия не может быть пустой&lt;br /&gt;
** SP11 - E-Mail не может быть пустым&lt;br /&gt;
** SP12 - Укажите дату рождения персоны&lt;br /&gt;
** SP13 - Укажите пол&lt;br /&gt;
** SP14 - Укажите корректный пол: Мужской (male) или Женский&amp;quot; (female)&lt;br /&gt;
** SP15 - Укажите правильный тип удостоверения личности&lt;br /&gt;
** SP16 - Укажите серию паспорта&lt;br /&gt;
** SP17 - Укажите номер паспорта&lt;br /&gt;
** SP18 - Укажите место выдачи паспорта&lt;br /&gt;
** SP19 - Укажите тип улицы&lt;br /&gt;
** SP20 - Логин Skype содержит недопустимые символы&lt;br /&gt;
** SP21 - В адресе некорректно указана страна&lt;br /&gt;
** SP22 - В адресе некорректно указан регион&lt;br /&gt;
** SP22 - Нельзя указать регион без страны&lt;br /&gt;
** SP23 - Предыдущее поле старого ФИО не заполнено&lt;br /&gt;
* contracts&lt;br /&gt;
** SP24 - Укажите ученика&lt;br /&gt;
** SP25 - Укажите законного представителя&lt;br /&gt;
** SP26 - Укажите менеджера по работе с клиентами&lt;br /&gt;
** SP27 - Укажите дату заключения договора&lt;br /&gt;
** SP28 - Переданный id персоны в поле [Ученик] не найден в базе&lt;br /&gt;
** SP29 - Переданный id персоны в поле [Законный представитель] не найден в базе&lt;br /&gt;
** SP30 - Переданный id персоны в поле [Менеджер] не найден в базе&lt;br /&gt;
** SP31 - Переданный id персоны в поле [Куратор] не найден в базе&lt;br /&gt;
** SP32 - Менеджер по-умолчанию не найден&lt;br /&gt;
** SP33 - Метаконтракт не найден&lt;br /&gt;
** SP34 - Дата заключения договора не в корректном формате&lt;br /&gt;
** SP35 - Не найден студент, на которого заключён договор&lt;br /&gt;
** SP36 - Нельзя изменить студента, на которого заключён договор&lt;br /&gt;
* Ошибки кодирования [SC]&lt;br /&gt;
** SC1 - Не зарегистрирована функция проверки параметров запроса для данного метода&lt;br /&gt;
** SC2 - Не зарегистрирована функция исполнения запроса для данного метода&lt;br /&gt;
** SC3 - Не верно передан формат проверки полей вложенного массива cov&lt;br /&gt;
** SC4 - Для этого метода не задана таблица, с которой он работает&lt;br /&gt;
** SC5 - Неверно указано название операции&lt;br /&gt;
** SC6 - Такого справочника не существует&lt;br /&gt;
** SC7 - Неизвестный тип переменной&lt;br /&gt;
** SC8 - Не удалось получить поля для добавления/обновления объекта в базе&lt;br /&gt;
** SC9 - Некорректные параметры в функции проверки объекта синхронизации справочника&lt;br /&gt;
* Ошибки целостности структуры (базы) [SI]&lt;br /&gt;
** SI1 - Не удалось добавить запись в справочник metacontracts&lt;br /&gt;
** SI2 - Не удалось обновить запись в справочнике metacontracts&lt;br /&gt;
** SI3 - Не удалось добавить запись в справочник persons&lt;br /&gt;
** SI4 - Не удалось обновить запись в справочнике persons&lt;br /&gt;
** SI5 - Не удалось добавить запись в справочник contracts&lt;br /&gt;
** SI6 - Не удалось обновить запись в справочнике contracts&lt;br /&gt;
** SI7 - Не удалось обновить запись в справочнике cov&lt;br /&gt;
** SI8 - Не удалось обновить запись в справочнике addresses&lt;br /&gt;
** SI9 - Не удалось найти запись в справочнике addresses для обновления&lt;br /&gt;
** SI10 - Не удалось найти запись в справочнике persons&lt;br /&gt;
* Ошибки рабочих процессов (при смене статусов, исполнении приказов, ...) (workflow) [SW]&lt;br /&gt;
** SW1 - Не удалось изменить статус на $a&lt;br /&gt;
** SW2 - Статуса с таким именем [$a] не обнаружено&lt;br /&gt;
&lt;br /&gt;
=Замечания, возможные проблемы=&lt;br /&gt;
&lt;br /&gt;
* Не совпадает контрольная сумма, ошибка [PI3]&lt;br /&gt;
** Необходимо обязательно проверять наличие всех полей, описанных в параметрах функций. Все типы параметров должны соответствовать описанным в wsdl-файле. К примеру, если в PHP попытаться передать массив в параметр, принимающий только строки, произойдёт конвертация массива в строку.&lt;br /&gt;
* Ошибки при выполнении запроса, если не передан какой-либо параметр, либо передан лишний параметр&lt;br /&gt;
** Желательно создавать класс (объект), в котором определены все поля и типы запроса, указанные в wsdl. От него создаётся экземпляр класса и поверх этих полей записываются значения. Таким образом, если поля не указаны, они автоматически должны заполняться значением null. Это позволит упростить процедуру хеширования и взаимодействия с сервером.&lt;br /&gt;
&lt;br /&gt;
=Расширение функционала=&lt;br /&gt;
&lt;br /&gt;
* Методы set&lt;br /&gt;
** Рассмотрим на примере создания метода set_department(). Необходимо выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
** 1) Добавить в blocks_dof_sync_soap_soapserver:&lt;br /&gt;
** * set_department() - в нём один единственный вызов: return $this-&amp;gt;dof-&amp;gt;sync('soap')-&amp;gt;set_method($input, __FUNCTION__);&lt;br /&gt;
** * Задокументировать входные параметры, @return object для всех методов set_ пока одинаков&lt;br /&gt;
&lt;br /&gt;
** 2) Добавить в dof_sync_soap:&lt;br /&gt;
** * [[#check_fields_($input)|check_fields_set_department($input)]] - проверки входных параметров, проверка возможности добавить объект в базу без ошибок&lt;br /&gt;
** * [[#execute_($input)|execute_set_department($input)]] - основное тело исполнения запроса. Основные действия выполняются в функции [[#execute_set_base($input, $method)|execute_set_base()]], поэтому рекомендуется использовать вызов: return $this-&amp;gt;execute_set_base($input, 'set_department');&lt;br /&gt;
** Если нужна более расширенная логика, метод можно написать самому (но желательно отталкиваться от общего алгоритма в [[#execute_set_base($input, $method)|execute_set_base()]].&lt;br /&gt;
** * [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_set_department($input, $operation, $dofif)]] - метод, который выполняется при вызове [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
** * При необходимости добавить смену статусов&lt;/div&gt;</summary>
		<author><name>Konovalov</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=2846</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=2846"/>
				<updated>2014-10-29T12:49:10Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Дополнительные методы: */&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 - зачетные единицы трудоемкости (максимальное количество кредитов за курс, ЗЕТ)&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;
* metasyncon - включена ли синхронизация с метадисциплиной&lt;br /&gt;
* metaprogrammitemid - id метадисциплины для синхронизации&lt;br /&gt;
* billingtext - цена дисциплины&lt;br /&gt;
* billingrules - &lt;br /&gt;
* salfactor - поправочный зарплатный коэффициент&lt;br /&gt;
* hourslab - часов лабораторных (Лаб)&lt;br /&gt;
* hoursind - часов самостоятельной работы слушателя (СРС)&lt;br /&gt;
* hourscontrol - часов контроля (Контроль)&lt;br /&gt;
* autohours (0/1) - &amp;quot;Автоматически расчитывать количества Часов всего&amp;quot; (галочка рядом с полем &amp;quot;Часов всего&amp;quot;). Если установлена, при сохранении, в поле hours записывается сумма: hourstheory+hourslab+hourspractice+hoursind+hourscontrol&lt;br /&gt;
* hoursclassroom - часов аудиторных - поле отображается, но не редактируется. При сохранении автоматически вычисляется как сумма: hourstheory+hourslab+hourspractice&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;
===='''get_hours_sum($programmitemids)'''====&lt;br /&gt;
&lt;br /&gt;
Получить суммарное количество часов и ЗЕТ по нескольким предметам&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* (array) $programmitemids - массив id из таблицы programmitems&lt;br /&gt;
* (int) $id - id дисциплины&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (object) - или объект с полями:&lt;br /&gt;
** -&amp;gt;maxcredit&lt;br /&gt;
** -&amp;gt;hours&lt;br /&gt;
** -&amp;gt;hourstheory&lt;br /&gt;
** -&amp;gt;hourspractice&lt;br /&gt;
** -&amp;gt;hoursweek&lt;br /&gt;
** -&amp;gt;hourslab&lt;br /&gt;
** -&amp;gt;hoursind&lt;br /&gt;
** -&amp;gt;hourscontrol&lt;br /&gt;
** -&amp;gt;hoursclassroom&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;
&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;
 |change_mcourse_in_programmitem&lt;br /&gt;
 |Обязателен. Указывается id дисциплины. В mixedvar необходим параметр mdlcourse.&lt;br /&gt;
 |'''Только для внутреннего использования системой'''. Находит все активные подписки на дисциплины в указанной дисциплине, после чего каждую из них приостанавливает. Меняет курс Moodle в дисциплине. Возобновляет приостановленные подписки. Посылается из формы смены курса Moodle на странице просмотра дисциплины.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Плагины обработки todo | storages/programmitems]]&lt;/div&gt;</summary>
		<author><name>Konovalov</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/soap&amp;diff=2845</id>
		<title>Разработка:sync/soap</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/soap&amp;diff=2845"/>
				<updated>2014-10-13T10:08:51Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Коды ошибок */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = soap&lt;br /&gt;
| type = sync&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Описание=&lt;br /&gt;
&lt;br /&gt;
Веб-сервис для интеграции с другими системами по протоколу SOAP.&lt;br /&gt;
Плагин использует инфраструктуру [[Разработка:storages/sync | storages/sync ]] для хранения соответствия внутренних и внешних id объектов и [[Разработка:storages/synclog | storages/synclog ]] для логирования всех операций синхронизации.&lt;br /&gt;
&lt;br /&gt;
Плагин объявляет SOAP-сервис, который располагается по адресам:&lt;br /&gt;
* /sync/soap/soap.php?do=wsdl - wsdl-файл&lt;br /&gt;
* /sync/soap/soap.php?do=service - сам сервис&lt;br /&gt;
&lt;br /&gt;
У каждого метода присутствуют следующие обязательные служебные параметры:&lt;br /&gt;
* requesttime - (UNIX timestamp) время генерации запроса, используется для устаревания запроса с целью защиты от атаки на &amp;quot;повторение перехваченного запроса&amp;quot;&lt;br /&gt;
* requestlogin - идентифицирует систему-отправитель запроса (задается в sync/soap/cfg/clients.php, вместе с паролем requestpassword и необязательными параметрами)&lt;br /&gt;
* requesthash - sha1-хеш от всех полей запроса в алфавитном порядке, включая предыдущие два, а так же поля requestpassword (в самом запросе не участвует). Используется для подтверждения подлинности запроса.&lt;br /&gt;
&lt;br /&gt;
'''Все параметры, в которых передаётся время, принимают UNIX timestamp, если в подписи к ним не написано иначе.'''&lt;br /&gt;
&lt;br /&gt;
Имена полей soap-запросов должны совпадать с именами полей в справочниках: [[Разработка:storages/metacontracts | storages/metacontracts ]], [[Разработка:storages/persons | storages/persons ]], [[Разработка:storages/contracts | storages/contracts ]]&lt;br /&gt;
&lt;br /&gt;
Во всех запросах используются только внешние id. Например, при создании персоны новая система передает свой уникальный id, которым она её обозначает. Этот id сохраняется в [[Разработка:storages/sync | storages/sync ]]. При создании контракта на обучение, внешняя система передает свой собственный id персоны (которая была создана ранее), плагин [[Разработка:sync/soap | sync/soap ]] конвертирует этот id во внутренний через справочник [[Разработка:storages/sync | storages/sync ]] и создает запись в [[Разработка:storages/contracts | storages/contracts ]]. Если внешний id объекта не передан, запрос возвращает ошибку (объект не создается и не обновляется).&lt;br /&gt;
&lt;br /&gt;
Служебные, специальные и автоматически-вычисляемые поля справочников не доступны для редактирования через SOAP-запросы (например adddate, status). Действия, которые запрещены пользователям системы через интерфейс, запрещены и через SOAP-запросы (например, нельзя сменить персону в уже созданном контракте).&lt;br /&gt;
&lt;br /&gt;
Все запросы обрабатывают вложенный объект cov. Все поля внутри объекта cov сохраняются (обновляются) в справочнике [[Разработка:storages/cov | storages/cov ]]. Не упомянутые в запросе поля (ранее сохраненные в cov) игнорируются. Все имена полей, присутствующие в соответствующем справочнике зарезервированы и не могут быть переданы через объект cov (например, нельзя сохранить поле cov/status для объекта persons, потому что в нем уже есть поле status).&lt;br /&gt;
&lt;br /&gt;
Подразделение для размещения объекта передается в SOAP-запросах через его код (code), а не id.&lt;br /&gt;
Успешная операция для методов типа 'set_' возвращает следующую структуру данных:&lt;br /&gt;
* id - переданный в запросе id объекта&lt;br /&gt;
* dofid - внутренний id объекта&lt;br /&gt;
* modified - время изменения объекта (UNIX timestamp)&lt;br /&gt;
* hash - контрольная сумма из storages/sync&lt;br /&gt;
* errorcode - код ошибки, помогающий идентифицировать проблему при исполнении запроса&lt;br /&gt;
&lt;br /&gt;
Для проверки SOAP-запросов используется хеширование по следующему алгоритму:&lt;br /&gt;
&lt;br /&gt;
* requesthash == sha1(requestpassword + requesttime + requestlogin + json(vars) + json(cvars)), где&lt;br /&gt;
&lt;br /&gt;
** vars формируется следующим образом:&lt;br /&gt;
*** Из полей объекта для SOAP-запроса исключаются служебные данные — requesthash, requestlogin, requesttime и дополнительный объект cov&lt;br /&gt;
*** Поля сортируются в алфавитном порядке;&lt;br /&gt;
** cvars — вложенный объект cov, поля которого так же сортируются в алфавитном порядке;&lt;br /&gt;
** json() - функция для преобразования массива/объекта в json-строку.&lt;br /&gt;
** Знаком &amp;quot;+&amp;quot; указана конкатенация строк.&lt;br /&gt;
'''Примечание''': XML-структура SOAP-запроса для вложенных объектов, таких как cov, должна выглядеть следующим образом:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfield&amp;gt;RU&amp;lt;/addfield&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtwo&amp;gt;RU-MOS&amp;lt;/addfieldtwo&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtthree&amp;gt;Москва&amp;lt;/addfieldtthree&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
При использовании ассоциативных массивов, например, на PHP, при попытке передать их SOAP-клиенту произойдёт искажение представления:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfield&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldtwo&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU-MOS&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldthree&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;Москва&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
Поэтому при проверке на сервере хэш не совпадёт.&lt;br /&gt;
&lt;br /&gt;
=API=&lt;br /&gt;
&lt;br /&gt;
==='''set_meta_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные метаконтракта, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса (UNIX timestamp)&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id метаконтракта&lt;br /&gt;
** num(string) - Номер метаконтракта&lt;br /&gt;
** departmentcode(string) - Код подразделения&lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_person($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные персоны, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса (UNIX timestamp)&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id метаконтракта&lt;br /&gt;
** firstname(string) - Имя&lt;br /&gt;
** middlename(string) - Отчество&lt;br /&gt;
** lastname(string) - Фамилия&lt;br /&gt;
** preferredname(string) - Префикс для имения (Mr. Dr. Г-н, Г-а)&lt;br /&gt;
** dateofbirth(int) - Дата рождения в UTS&lt;br /&gt;
** gender(string) - Пол (male, female, unknown)&lt;br /&gt;
** email(string) - Основной адрес электронной почты&lt;br /&gt;
** phonehome(string) - Домашний телефон&lt;br /&gt;
** phonework(string) - Рабочий телефон&lt;br /&gt;
** phonecell(string) - Сотовый телефон&lt;br /&gt;
** passtypeid(int) - Тип удостоверения личности (1 - свидетельство о рождении, 2 - паспорт гражданина РФ, 3 - загранпасспорт, 4 - разрешение на временное проживание лица без гражданства, 5 - вид на жительство, 6 - военный билет, 7 - водительсткое удостоверение пластиковое, 8 - вод. удостоверение форма 1, 9 - вод. удостоверение международное)&lt;br /&gt;
** passportserial(string) - Серия удостоверения личности (если предусмотрена типом документа)&lt;br /&gt;
** passportnum(string) - Номер удостоверения личности&lt;br /&gt;
** passportdate(int) - Дата выдачи удостоверения личности в UTS&lt;br /&gt;
** passportem(string) - Название организации, выдавшей удостоверение личности&lt;br /&gt;
** citizenship(string) - Гражданство&lt;br /&gt;
** departmentcode(string) - Основной отдел, к которому приписан человек (может редактировать его данные в persons)&lt;br /&gt;
** about(string) - Характеристика личности&lt;br /&gt;
** skype(string) - Уникальный идентификатор в Skype&lt;br /&gt;
** phoneadd1(string) - Дополнительный телефон 1&lt;br /&gt;
** phoneadd2(string) - Дополнительный телефон 2&lt;br /&gt;
** phoneadd3(string) - Дополнительный телефон 3&lt;br /&gt;
** emailadd1(string) - Дополнительная электронная почта 1&lt;br /&gt;
** emailadd2(string) - Дополнительная электронная почта 2&lt;br /&gt;
** emailadd3(string) - Дополнительная электронная почта 3&lt;br /&gt;
** passportaddr(object) - Адрес прописки по паспорту (для генерации документов)&lt;br /&gt;
** address(object) - Текущий адрес (почтовый адрес)&lt;br /&gt;
** birthaddress(object) - Адрес рождения персоны&lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Формат объектов: passportaddr, address, birthaddress''&lt;br /&gt;
* postalcode(string) - Почтовый индекс&lt;br /&gt;
* country(string) - Код страны проживания (по предъявленному паспорту) в ICO 3166-1:1997 (RU)&lt;br /&gt;
* region(string) - Код региона по ISO 3166-2 (RU-NGR, RU-MOS)&lt;br /&gt;
* county(string) - Административный район&lt;br /&gt;
* city(string) - Город&lt;br /&gt;
* streetname(string) - Название улицы&lt;br /&gt;
* streettype(string) - Тип улицы&lt;br /&gt;
* number(string) - Номер дома&lt;br /&gt;
* gate(string) - Подъезд&lt;br /&gt;
* floor(string) - Этаж&lt;br /&gt;
* apartment(string) - Квартира&lt;br /&gt;
* latitude(float) - Широта в градусах&lt;br /&gt;
* longitude(float) - Долгота в градусах&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные договора, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса (UNIX timestamp)&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id договора&lt;br /&gt;
** typeid(int) - Тип договора, если у учебного заведения предусмотрено несколько разных типов договоров&lt;br /&gt;
** num(string) - Номер договора&lt;br /&gt;
** numpass(string) - Номер пропуска, студенческого билета и т.п.&lt;br /&gt;
** date(int) - Дата заключения&lt;br /&gt;
** sellerid(int) - Менеджер по работе с клиентами (приемная комиссия, партнер) - добавляет договор, меняет статус до &amp;quot;подписан клиентом&amp;quot;, отслеживает статус договора и ход обучения (id по таблице persons)&lt;br /&gt;
** clientid(int) - Клиент, оплачивающий обучение (законный представитель, сам совершеннолетний ученик или куратор от организации, может принимать значение 0 или null, если клиент создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** studentid(int) - Ученик (может принимать значение 0, если ученик создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** notes(string) - Заметки&lt;br /&gt;
** departmentcode(string) - Подразделение в таблице departments, к которому приписан контракт на обучение (например, принявшее ученика)&lt;br /&gt;
** contractform(string) - Форма договора (шаблон)&lt;br /&gt;
** curatorid(int) - Куратор или классный руководитель данного ученика (по таблице persons или не указан), отслеживает учебный процесс, держит связь с учеником, является посредником между учеником и системой, может быть внешней персоной.&lt;br /&gt;
** enddate(int) - Дата окончания договора&lt;br /&gt;
** metacontractid(int) - id метаконтракта, к которому привязан договор, в таблице metacontracts &lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы=&lt;br /&gt;
&lt;br /&gt;
===='''check_address($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить поля адреса&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника addresses&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP19, SP21-SP23]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_column_types_null($input, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить поля запроса на предмет ненулевых значений и корректности типов справочника&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект SOAP-запроса&lt;br /&gt;
* table(string) - название справочника, &lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SC6-SC7], [PR5-PR6]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_cov($cov, $fields = null)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить дополнительный объект на предмет соответствия формату&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* cov(array) - дополнительный вложенный объект.&lt;br /&gt;
* fields(object) - поля объекта для проверки дублирующихся полей.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [PI6-PI8], [SC3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_department($code)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли такое подразделение и актуальный ли у него статус&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* code(string) - код подразделения.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP5-SP7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_email($email)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет, можно ли использовать переданный e-mail в системе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* email(string) - электронная почта.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP2], [PI4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_fields_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом проверяют объект SOAP-запроса на предмет некорректных значений полей&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - содержит поля запроса&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_hash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет входящий запрос по sha1-хешу, сверяя наличие требуемых полей и выдаёт код ошибки при её наличии&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - содержит поля запроса, а так же обязательные поля - id, requesttime, requestlogin, requesthash.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true в случае успеха,&lt;br /&gt;
* (string) - иначе - код ошибки: [PR0-PR4], [PI3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''connect_sync($pcode, $provider, $substorage = null)'''====&lt;br /&gt;
&lt;br /&gt;
Создать соединение с объектом синхронизации по названию справочника и поставщику данных&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* pcode(string) - название плагина для синхронизации (metacontracts, persons, ...)&lt;br /&gt;
* provider(string) - название поставщика синхронизации&lt;br /&gt;
* substorage(string) - код внутреннего субсправочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки, или&lt;br /&gt;
* (object) - объект подключения к синхронизации dof_storage_sync_connect&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''errorlog($input, $queryname=null)'''====&lt;br /&gt;
&lt;br /&gt;
Записывает переданный объект в файл ('/dat/errorlog.txt') для последующей отладки&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(mixed) - переменная для вывода в файл&lt;br /&gt;
* queryname(string) - название запроса (какя именно операция выполняется)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (void)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют действия, сопутствующие SOAP-запросу&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_additional_($input, $operation, $dofid = null)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют дополнительные действия в SOAP-запросе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
* operation(string) - название операции: 'insert', 'update', ...&lt;br /&gt;
* dofid(int) - id объекта из справочника (если не null, то операция 'update', иначе - 'insert')&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - операция прошла успешно&lt;br /&gt;
* (object) - возвращает дополнительные поля, которые надо присоединить к объекту в методе [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_set_base($input, $method)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить базовые действия метода set_:&lt;br /&gt;
* 1) Получить объект синхронизации&lt;br /&gt;
* 2) Получить объект для ответа&lt;br /&gt;
* 3) Просчитать хеш объекта (без служебных полей)&lt;br /&gt;
* 4) Есть ли объект синхронизации с таким id в базе?&lt;br /&gt;
* 4.1) Объект найден. Проверить, нужно ли производить синхронизацию&lt;br /&gt;
* 4.1.1) Синхронизация нужна&lt;br /&gt;
* 4.1.1.1) Обновить объект в базе ([[#update_object($input, $dofid, $method, $table)|update_object()]]), объект синхронизации и сгенерировать ответ 'OK'&lt;br /&gt;
* 4.1.1.2) Логирование&lt;br /&gt;
* 4.1.1.3) Cгенерировать ответ 'OK', синхронизация успешна&lt;br /&gt;
* 4.1.2) Синхронизация не нужна, сгенерировать ответ 'ОК'&lt;br /&gt;
* 4.2) Объект не найден.&lt;br /&gt;
* 4.2.1) Добавить объект в базу ([[#insert_object($input, $method, $table)|insert_object()]]), обрабатывая ошибки, объект синхронизации&lt;br /&gt;
* 4.2.2) Логирование&lt;br /&gt;
* 4.2.3) Cгенерировать ответ 'OK', синхронизация успешна&lt;br /&gt;
* 5) Вернуть ответ&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#insert_object($input, $method, $table)|insert_object()]] и [[#update_object($input, $dofid, $method, $table)|update_object()]]&lt;br /&gt;
* input(object) - объект SOAP-запроса&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект $response (см. метод [[#set_meta_contract($input)|set_meta_contract()]])&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_fields($input, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить поля для вставки или обновления таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с определёнными полями одного из справочника&lt;br /&gt;
* storage(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, в случае ошибки&lt;br /&gt;
* (object) - объект с полями для вставки/обновления записи в таблице&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_key($requestlogin)'''====&lt;br /&gt;
&lt;br /&gt;
Получить ключ идентификатора системы, используя логин.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* requestlogin(string) - идентификатор системы (логин)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если ключ не найден,&lt;br /&gt;
* (string) - ключ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_response($type, $errorcode = 'OK')'''====&lt;br /&gt;
&lt;br /&gt;
Получить каркас объекта ответа для разных типов методов.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* type(string) - тип запроса ('set', 'get', ...)&lt;br /&gt;
* errorcode(string) - код ошибки&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если произошла ошибка&lt;br /&gt;
* (object) - объект для передачи ответа в SOAP-сообщениях&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_storage_error($method, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить код ошибки справочника по названию метода и таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название операции со справочником: 'insert', 'update', ...&lt;br /&gt;
* storage(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого сочетания &amp;quot;метод-справочник&amp;quot; не найдено&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_sync_object($table, $provider, $id, $direct = 'down')'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли объект синхронизации в справочнике storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* table(string) - справочник, по которому необходимо получить объект&lt;br /&gt;
* provider(string) - внешний провайдер (поле storage/sync.upsubsubstorage)&lt;br /&gt;
* id - id из таблицы storage/sync&lt;br /&gt;
* direct - направление синхронизации&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если объект не найден&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
* (object) - объект table с записью&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_table($method)'''====&lt;br /&gt;
&lt;br /&gt;
Получить название таблицы (справочника), с которым работает переданный метод&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название метода&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого метода не найдено&lt;br /&gt;
* (string) - название справочника&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_object($input, $requestpassword)'''====&lt;br /&gt;
&lt;br /&gt;
Получить sha1-хеш пришедшего SOAP-запроса по описанному ранее алгоритму&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с обязательными полями id, requesttime, requestlogin, requesthash, объектом cov.&lt;br /&gt;
* requestpassword(string) - ключ идентификатора системы.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_uphash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить хеширование объекта для сравнения с uphash в storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с полями справочника, без специальных полей request*&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_address($input)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить новый адрес&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_object($input, $method, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить объект в базу:&lt;br /&gt;
* Получить из запроса поля для вставки в таблицу: [[#get_fields($input, $storage)|get_fields()]]&lt;br /&gt;
* Выполнить дополнительные действия: [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_()]], в случае ошибок сгенерировать ответ&lt;br /&gt;
* Вставить объект в базу, обработать ошибки&lt;br /&gt;
* Обработать объект cov: [[#update_cov($dofid, $inputcov, $plugincode)|update_cov()]], добавить поля в базу, обработать ошибки&lt;br /&gt;
* В соответствии с настройками выставить статус через [[#set_status_route($table, $dofid, $departmentid)|set_status_route()]], ошибки только логировать&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''is_sync_object_exists($table, $provider, $id, $direct = 'down')'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли объект синхронизации в справочнике storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* table(string) - название справочника&lt;br /&gt;
* provider(string) - название клиента, с которым выполняется синхронизация&lt;br /&gt;
* id(int) - id объекта, в зависимости от направления синхронизации&lt;br /&gt;
* direct(string) - направление синхронизации ('up', 'down')&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''normalize_array($item)'''====&lt;br /&gt;
&lt;br /&gt;
Нормализует ошибочно переданный ассоциативный массив в объект&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* item(object) - объект с вложенным массивом item[], в котором находятся объекты:&lt;br /&gt;
** item[0] = stdClass(),&lt;br /&gt;
** item[0]-&amp;gt;key, &lt;br /&gt;
** item[0]-&amp;gt;value, &lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект, в котором поля {item[0]-&amp;gt;key}, а значения: {item[0]-&amp;gt;value}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_method($input, $methodname)'''====&lt;br /&gt;
&lt;br /&gt;
Выполняет базовую проверку переданных параметров (контрольная сумма), проверяет, реализованы ли функции для проверки входных параметров и исполнения запроса, вызывает 'set' метод для переданного в качестве аргумента объекта запроса и метода. В случае возникновения ошибок составляет ответный запрос и выполняет логирование.&lt;br /&gt;
Вызывает следующие методы:&lt;br /&gt;
* [[#check_hash($input)|-&amp;gt;check_hash()]]&lt;br /&gt;
* [[#check_fields_($input)|-&amp;gt;check_fields_$methodname()]]&lt;br /&gt;
* [[#execute_($input)|-&amp;gt;execute_$methodname()]]&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект SOAP-запроса (должны присутствовать служебные поля request*)&lt;br /&gt;
* methodname(string) - название функции, которую необходимо исполнить&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект содерщаший поля:&lt;br /&gt;
** id - переданный в запросе id объекта&lt;br /&gt;
** dofid - внутренний id объекта&lt;br /&gt;
** modified - время изменения объекта&lt;br /&gt;
** hash - контрольная сумма из storages/sync&lt;br /&gt;
** errorcode - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_status_route($table, $dofid, $departmentid)'''====&lt;br /&gt;
&lt;br /&gt;
Установить статус согласно маршруту, заданному в конфиге&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
* dofid(int) - внутренний id объекта из таблицы $storage&lt;br /&gt;
* departmentid(int) - id из таблицы departments&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (array) - код ошибки и описание: array('код_ошибки', 'описание ошибки')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_address($input, $dofid)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить адрес&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице addresses&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат обновления&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_cov($dofid, $inputcov, $plugincode)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить вложенный объект cov для внутренних объектов&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице $plugincode&lt;br /&gt;
* inputcov(object) - объект, по которому происходит перебор&lt;br /&gt;
* plugincode(string) - код плагина storage&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат обновления&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_object($input, $dofid, $method, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить объект в базе:&lt;br /&gt;
* Получить из запроса поля для вставки в таблицу: [[#get_fields($input, $storage)|get_fields()]]&lt;br /&gt;
* Выполнить дополнительные действия: [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_()]], в случае ошибок сгенерировать ответ&lt;br /&gt;
* Обновить объект в базе, обработать ошибки&lt;br /&gt;
* Обработать объект cov: [[#update_cov($dofid, $inputcov, $plugincode)|update_cov()]], добавить поля в базу, обработать ошибки&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице $plugincode&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Коды ошибок=&lt;br /&gt;
&lt;br /&gt;
При успешном выполнении операции синхронизации возвращается код ошибки 'OK'.&lt;br /&gt;
В ином случае, возвращается одна из следующих ошибок:&lt;br /&gt;
&lt;br /&gt;
* Ошибки параметров запроса [P]:&lt;br /&gt;
* Обязательные [PR]&lt;br /&gt;
** PR0 - Данные запроса пришли в некорректном формате&lt;br /&gt;
** PR1 - Отсутствует идентификатор системы [requestlogin]&lt;br /&gt;
** PR2 - Отсутствует время запроса [requesttime]&lt;br /&gt;
** PR3 - Отсутствует контрольная сумма [requesthash]&lt;br /&gt;
** PR4 - Отсутствует идентификатор объекта [id]&lt;br /&gt;
** PR5 - Отсутствует значение в ненулевом поле&lt;br /&gt;
** PR6 - Некорректный тип переданного поля&lt;br /&gt;
* Некорректные [PI]&lt;br /&gt;
** PI3 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** PI4 - Недопустимые символы в e-mail&lt;br /&gt;
** PI5 - Тип переменной подразделения должен быть строковый&lt;br /&gt;
** PI6 - Тип переменной cov должен быть массивом&lt;br /&gt;
** PI7 - Поля внутри переменной cov не должны быть массивами или объектами&lt;br /&gt;
** PI8 - Поля внутри переменной cov не должны совпадать с полями справочника (например, status, adddate)&lt;br /&gt;
* Ошибки внутренние [S]:&lt;br /&gt;
* Некорректные параметры [SP]&lt;br /&gt;
** SP1 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** SP2 - Данный e-mail не допустим в системе&lt;br /&gt;
** SP3 - Данный e-mail уже зарегистрирован в системе&lt;br /&gt;
** SP4 - Название мета-контракта не может быть пустым&lt;br /&gt;
** SP5 - Подразделения с таким кодом не существует&lt;br /&gt;
** SP6 - Подразделение не актуально&lt;br /&gt;
** SP7 - Код подразделения должен быть строкового типа&lt;br /&gt;
** SP8 - Неверно передан параметр с запросом&lt;br /&gt;
** SP9 - Код подразделения не передан, и значения по-умолчанию не найдено&lt;br /&gt;
* persons&lt;br /&gt;
** SP9 - Имя не может быть пустым&lt;br /&gt;
** SP10 - Фамилия не может быть пустой&lt;br /&gt;
** SP11 - E-Mail не может быть пустым&lt;br /&gt;
** SP12 - Укажите дату рождения персоны&lt;br /&gt;
** SP13 - Укажите пол&lt;br /&gt;
** SP14 - Укажите корректный пол: Мужской (male) или Женский&amp;quot; (female)&lt;br /&gt;
** SP15 - Укажите правильный тип удостоверения личности&lt;br /&gt;
** SP16 - Укажите серию паспорта&lt;br /&gt;
** SP17 - Укажите номер паспорта&lt;br /&gt;
** SP18 - Укажите место выдачи паспорта&lt;br /&gt;
** SP19 - Укажите тип улицы&lt;br /&gt;
** SP20 - Логин Skype содержит недопустимые символы&lt;br /&gt;
** SP21 - В адресе некорректно указана страна&lt;br /&gt;
** SP22 - В адресе некорректно указан регион&lt;br /&gt;
** SP22 - Нельзя указать регион без страны&lt;br /&gt;
** SP23 - Предыдущее поле старого ФИО не заполнено&lt;br /&gt;
* contracts&lt;br /&gt;
** SP24 - Укажите ученика&lt;br /&gt;
** SP25 - Укажите законного представителя&lt;br /&gt;
** SP26 - Укажите менеджера по работе с клиентами&lt;br /&gt;
** SP27 - Укажите дату заключения договора&lt;br /&gt;
** SP28 - Переданный id персоны в поле [Ученик] не найден в базе&lt;br /&gt;
** SP29 - Переданный id персоны в поле [Законный представитель] не найден в базе&lt;br /&gt;
** SP30 - Переданный id персоны в поле [Менеджер] не найден в базе&lt;br /&gt;
** SP31 - Переданный id персоны в поле [Куратор] не найден в базе&lt;br /&gt;
** SP32 - Менеджер по-умолчанию не найден&lt;br /&gt;
** SP33 - Метаконтракт не найден&lt;br /&gt;
** SP34 - Дата заключения договора не в корректном формате&lt;br /&gt;
** SP35 - Не найден студент, на которого заключён договор&lt;br /&gt;
** SP36 - Нельзя изменить студента, на которого заключён договор&lt;br /&gt;
* Ошибки кодирования [SC]&lt;br /&gt;
** SC1 - Не зарегистрирована функция проверки параметров запроса для данного метода&lt;br /&gt;
** SC2 - Не зарегистрирована функция исполнения запроса для данного метода&lt;br /&gt;
** SC3 - Не верно передан формат проверки полей вложенного массива cov&lt;br /&gt;
** SC4 - Для этого метода не задана таблица, с которой он работает&lt;br /&gt;
** SC5 - Неверно указано название операции&lt;br /&gt;
** SC6 - Такого справочника не существует&lt;br /&gt;
** SC7 - Неизвестный тип переменной&lt;br /&gt;
** SC8 - Не удалось получить поля для добавления/обновления объекта в базе&lt;br /&gt;
** SC9 - Некорректные параметры в функции проверки объекта синхронизации справочника&lt;br /&gt;
* Ошибки целостности структуры (базы) [SI]&lt;br /&gt;
** SI1 - Не удалось добавить запись в справочник metacontracts&lt;br /&gt;
** SI2 - Не удалось обновить запись в справочнике metacontracts&lt;br /&gt;
** SI3 - Не удалось добавить запись в справочник persons&lt;br /&gt;
** SI4 - Не удалось обновить запись в справочнике persons&lt;br /&gt;
** SI5 - Не удалось добавить запись в справочник contracts&lt;br /&gt;
** SI6 - Не удалось обновить запись в справочнике contracts&lt;br /&gt;
** SI7 - Не удалось обновить запись в справочнике cov&lt;br /&gt;
** SI8 - Не удалось обновить запись в справочнике addresses&lt;br /&gt;
** SI9 - Не удалось найти запись в справочнике addresses для обновления&lt;br /&gt;
** SI10 - Не удалось найти запись в справочнике persons&lt;br /&gt;
* Ошибки рабочих процессов (при смене статусов, исполнении приказов, ...) (workflow) [SW]&lt;br /&gt;
** SW1 - Не удалось изменить статус на $a&lt;br /&gt;
** SW2 - Статуса с таким именем [$a] не обнаружено&lt;br /&gt;
&lt;br /&gt;
=Замечания, возможные проблемы=&lt;br /&gt;
&lt;br /&gt;
* Не совпадает контрольная сумма, ошибка [PI3]&lt;br /&gt;
** Необходимо обязательно проверять наличие всех полей, описанных в параметрах функций. Все типы параметров должны соответствовать описанным в wsdl-файле. К примеру, если в PHP попытаться передать массив в параметр, принимающий только строки, произойдёт конвертация массива в строку.&lt;br /&gt;
* Ошибки при выполнении запроса, если не передан какой-либо параметр, либо передан лишний параметр&lt;br /&gt;
** Желательно создавать класс (объект), в котором определены все поля и типы запроса, указанные в wsdl. От него создаётся экземпляр класса и поверх этих полей записываются значения. Таким образом, если поля не указаны, они автоматически должны заполняться значением null. Это позволит упростить процедуру хеширования и взаимодействия с сервером.&lt;br /&gt;
&lt;br /&gt;
=Расширение функционала=&lt;br /&gt;
&lt;br /&gt;
* Методы set&lt;br /&gt;
** Рассмотрим на примере создания метода set_department(). Необходимо выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
** 1) Добавить в blocks_dof_sync_soap_soapserver:&lt;br /&gt;
** * set_department() - в нём один единственный вызов: return $this-&amp;gt;dof-&amp;gt;sync('soap')-&amp;gt;set_method($input, __FUNCTION__);&lt;br /&gt;
** * Задокументировать входные параметры, @return object для всех методов set_ пока одинаков&lt;br /&gt;
&lt;br /&gt;
** 2) Добавить в dof_sync_soap:&lt;br /&gt;
** * [[#check_fields_($input)|check_fields_set_department($input)]] - проверки входных параметров, проверка возможности добавить объект в базу без ошибок&lt;br /&gt;
** * [[#execute_($input)|execute_set_department($input)]] - основное тело исполнения запроса. Основные действия выполняются в функции [[#execute_set_base($input, $method)|execute_set_base()]], поэтому рекомендуется использовать вызов: return $this-&amp;gt;execute_set_base($input, 'set_department');&lt;br /&gt;
** Если нужна более расширенная логика, метод можно написать самому (но желательно отталкиваться от общего алгоритма в [[#execute_set_base($input, $method)|execute_set_base()]].&lt;br /&gt;
** * [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_set_department($input, $operation, $dofif)]] - метод, который выполняется при вызове [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
** * При необходимости добавить смену статусов&lt;/div&gt;</summary>
		<author><name>Konovalov</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=2844</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=2844"/>
				<updated>2014-10-13T09:43:30Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Подробный формат полей в таблице: */&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 - зачетные единицы трудоемкости (максимальное количество кредитов за курс, ЗЕТ)&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;
* metasyncon - включена ли синхронизация с метадисциплиной&lt;br /&gt;
* metaprogrammitemid - id метадисциплины для синхронизации&lt;br /&gt;
* billingtext - цена дисциплины&lt;br /&gt;
* billingrules - &lt;br /&gt;
* salfactor - поправочный зарплатный коэффициент&lt;br /&gt;
* hourslab - часов лабораторных (Лаб)&lt;br /&gt;
* hoursind - часов самостоятельной работы слушателя (СРС)&lt;br /&gt;
* hourscontrol - часов контроля (Контроль)&lt;br /&gt;
* autohours (0/1) - &amp;quot;Автоматически расчитывать количества Часов всего&amp;quot; (галочка рядом с полем &amp;quot;Часов всего&amp;quot;). Если установлена, при сохранении, в поле hours записывается сумма: hourstheory+hourslab+hourspractice+hoursind+hourscontrol&lt;br /&gt;
* hoursclassroom - часов аудиторных - поле отображается, но не редактируется. При сохранении автоматически вычисляется как сумма: hourstheory+hourslab+hourspractice&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;
&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;
 |change_mcourse_in_programmitem&lt;br /&gt;
 |Обязателен. Указывается id дисциплины. В mixedvar необходим параметр mdlcourse.&lt;br /&gt;
 |'''Только для внутреннего использования системой'''. Находит все активные подписки на дисциплины в указанной дисциплине, после чего каждую из них приостанавливает. Меняет курс Moodle в дисциплине. Возобновляет приостановленные подписки. Посылается из формы смены курса Moodle на странице просмотра дисциплины.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Плагины обработки todo | storages/programmitems]]&lt;/div&gt;</summary>
		<author><name>Konovalov</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/soap&amp;diff=2843</id>
		<title>Разработка:sync/soap</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/soap&amp;diff=2843"/>
				<updated>2014-10-13T08:33:00Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = soap&lt;br /&gt;
| type = sync&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Описание=&lt;br /&gt;
&lt;br /&gt;
Веб-сервис для интеграции с другими системами по протоколу SOAP.&lt;br /&gt;
Плагин использует инфраструктуру [[Разработка:storages/sync | storages/sync ]] для хранения соответствия внутренних и внешних id объектов и [[Разработка:storages/synclog | storages/synclog ]] для логирования всех операций синхронизации.&lt;br /&gt;
&lt;br /&gt;
Плагин объявляет SOAP-сервис, который располагается по адресам:&lt;br /&gt;
* /sync/soap/soap.php?do=wsdl - wsdl-файл&lt;br /&gt;
* /sync/soap/soap.php?do=service - сам сервис&lt;br /&gt;
&lt;br /&gt;
У каждого метода присутствуют следующие обязательные служебные параметры:&lt;br /&gt;
* requesttime - (UNIX timestamp) время генерации запроса, используется для устаревания запроса с целью защиты от атаки на &amp;quot;повторение перехваченного запроса&amp;quot;&lt;br /&gt;
* requestlogin - идентифицирует систему-отправитель запроса (задается в sync/soap/cfg/clients.php, вместе с паролем requestpassword и необязательными параметрами)&lt;br /&gt;
* requesthash - sha1-хеш от всех полей запроса в алфавитном порядке, включая предыдущие два, а так же поля requestpassword (в самом запросе не участвует). Используется для подтверждения подлинности запроса.&lt;br /&gt;
&lt;br /&gt;
'''Все параметры, в которых передаётся время, принимают UNIX timestamp, если в подписи к ним не написано иначе.'''&lt;br /&gt;
&lt;br /&gt;
Имена полей soap-запросов должны совпадать с именами полей в справочниках: [[Разработка:storages/metacontracts | storages/metacontracts ]], [[Разработка:storages/persons | storages/persons ]], [[Разработка:storages/contracts | storages/contracts ]]&lt;br /&gt;
&lt;br /&gt;
Во всех запросах используются только внешние id. Например, при создании персоны новая система передает свой уникальный id, которым она её обозначает. Этот id сохраняется в [[Разработка:storages/sync | storages/sync ]]. При создании контракта на обучение, внешняя система передает свой собственный id персоны (которая была создана ранее), плагин [[Разработка:sync/soap | sync/soap ]] конвертирует этот id во внутренний через справочник [[Разработка:storages/sync | storages/sync ]] и создает запись в [[Разработка:storages/contracts | storages/contracts ]]. Если внешний id объекта не передан, запрос возвращает ошибку (объект не создается и не обновляется).&lt;br /&gt;
&lt;br /&gt;
Служебные, специальные и автоматически-вычисляемые поля справочников не доступны для редактирования через SOAP-запросы (например adddate, status). Действия, которые запрещены пользователям системы через интерфейс, запрещены и через SOAP-запросы (например, нельзя сменить персону в уже созданном контракте).&lt;br /&gt;
&lt;br /&gt;
Все запросы обрабатывают вложенный объект cov. Все поля внутри объекта cov сохраняются (обновляются) в справочнике [[Разработка:storages/cov | storages/cov ]]. Не упомянутые в запросе поля (ранее сохраненные в cov) игнорируются. Все имена полей, присутствующие в соответствующем справочнике зарезервированы и не могут быть переданы через объект cov (например, нельзя сохранить поле cov/status для объекта persons, потому что в нем уже есть поле status).&lt;br /&gt;
&lt;br /&gt;
Подразделение для размещения объекта передается в SOAP-запросах через его код (code), а не id.&lt;br /&gt;
Успешная операция для методов типа 'set_' возвращает следующую структуру данных:&lt;br /&gt;
* id - переданный в запросе id объекта&lt;br /&gt;
* dofid - внутренний id объекта&lt;br /&gt;
* modified - время изменения объекта (UNIX timestamp)&lt;br /&gt;
* hash - контрольная сумма из storages/sync&lt;br /&gt;
* errorcode - код ошибки, помогающий идентифицировать проблему при исполнении запроса&lt;br /&gt;
&lt;br /&gt;
Для проверки SOAP-запросов используется хеширование по следующему алгоритму:&lt;br /&gt;
&lt;br /&gt;
* requesthash == sha1(requestpassword + requesttime + requestlogin + json(vars) + json(cvars)), где&lt;br /&gt;
&lt;br /&gt;
** vars формируется следующим образом:&lt;br /&gt;
*** Из полей объекта для SOAP-запроса исключаются служебные данные — requesthash, requestlogin, requesttime и дополнительный объект cov&lt;br /&gt;
*** Поля сортируются в алфавитном порядке;&lt;br /&gt;
** cvars — вложенный объект cov, поля которого так же сортируются в алфавитном порядке;&lt;br /&gt;
** json() - функция для преобразования массива/объекта в json-строку.&lt;br /&gt;
** Знаком &amp;quot;+&amp;quot; указана конкатенация строк.&lt;br /&gt;
'''Примечание''': XML-структура SOAP-запроса для вложенных объектов, таких как cov, должна выглядеть следующим образом:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfield&amp;gt;RU&amp;lt;/addfield&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtwo&amp;gt;RU-MOS&amp;lt;/addfieldtwo&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtthree&amp;gt;Москва&amp;lt;/addfieldtthree&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
При использовании ассоциативных массивов, например, на PHP, при попытке передать их SOAP-клиенту произойдёт искажение представления:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfield&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldtwo&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU-MOS&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldthree&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;Москва&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
Поэтому при проверке на сервере хэш не совпадёт.&lt;br /&gt;
&lt;br /&gt;
=API=&lt;br /&gt;
&lt;br /&gt;
==='''set_meta_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные метаконтракта, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса (UNIX timestamp)&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id метаконтракта&lt;br /&gt;
** num(string) - Номер метаконтракта&lt;br /&gt;
** departmentcode(string) - Код подразделения&lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_person($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные персоны, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса (UNIX timestamp)&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id метаконтракта&lt;br /&gt;
** firstname(string) - Имя&lt;br /&gt;
** middlename(string) - Отчество&lt;br /&gt;
** lastname(string) - Фамилия&lt;br /&gt;
** preferredname(string) - Префикс для имения (Mr. Dr. Г-н, Г-а)&lt;br /&gt;
** dateofbirth(int) - Дата рождения в UTS&lt;br /&gt;
** gender(string) - Пол (male, female, unknown)&lt;br /&gt;
** email(string) - Основной адрес электронной почты&lt;br /&gt;
** phonehome(string) - Домашний телефон&lt;br /&gt;
** phonework(string) - Рабочий телефон&lt;br /&gt;
** phonecell(string) - Сотовый телефон&lt;br /&gt;
** passtypeid(int) - Тип удостоверения личности (1 - свидетельство о рождении, 2 - паспорт гражданина РФ, 3 - загранпасспорт, 4 - разрешение на временное проживание лица без гражданства, 5 - вид на жительство, 6 - военный билет, 7 - водительсткое удостоверение пластиковое, 8 - вод. удостоверение форма 1, 9 - вод. удостоверение международное)&lt;br /&gt;
** passportserial(string) - Серия удостоверения личности (если предусмотрена типом документа)&lt;br /&gt;
** passportnum(string) - Номер удостоверения личности&lt;br /&gt;
** passportdate(int) - Дата выдачи удостоверения личности в UTS&lt;br /&gt;
** passportem(string) - Название организации, выдавшей удостоверение личности&lt;br /&gt;
** citizenship(string) - Гражданство&lt;br /&gt;
** departmentcode(string) - Основной отдел, к которому приписан человек (может редактировать его данные в persons)&lt;br /&gt;
** about(string) - Характеристика личности&lt;br /&gt;
** skype(string) - Уникальный идентификатор в Skype&lt;br /&gt;
** phoneadd1(string) - Дополнительный телефон 1&lt;br /&gt;
** phoneadd2(string) - Дополнительный телефон 2&lt;br /&gt;
** phoneadd3(string) - Дополнительный телефон 3&lt;br /&gt;
** emailadd1(string) - Дополнительная электронная почта 1&lt;br /&gt;
** emailadd2(string) - Дополнительная электронная почта 2&lt;br /&gt;
** emailadd3(string) - Дополнительная электронная почта 3&lt;br /&gt;
** passportaddr(object) - Адрес прописки по паспорту (для генерации документов)&lt;br /&gt;
** address(object) - Текущий адрес (почтовый адрес)&lt;br /&gt;
** birthaddress(object) - Адрес рождения персоны&lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Формат объектов: passportaddr, address, birthaddress''&lt;br /&gt;
* postalcode(string) - Почтовый индекс&lt;br /&gt;
* country(string) - Код страны проживания (по предъявленному паспорту) в ICO 3166-1:1997 (RU)&lt;br /&gt;
* region(string) - Код региона по ISO 3166-2 (RU-NGR, RU-MOS)&lt;br /&gt;
* county(string) - Административный район&lt;br /&gt;
* city(string) - Город&lt;br /&gt;
* streetname(string) - Название улицы&lt;br /&gt;
* streettype(string) - Тип улицы&lt;br /&gt;
* number(string) - Номер дома&lt;br /&gt;
* gate(string) - Подъезд&lt;br /&gt;
* floor(string) - Этаж&lt;br /&gt;
* apartment(string) - Квартира&lt;br /&gt;
* latitude(float) - Широта в градусах&lt;br /&gt;
* longitude(float) - Долгота в градусах&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные договора, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса (UNIX timestamp)&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id договора&lt;br /&gt;
** typeid(int) - Тип договора, если у учебного заведения предусмотрено несколько разных типов договоров&lt;br /&gt;
** num(string) - Номер договора&lt;br /&gt;
** numpass(string) - Номер пропуска, студенческого билета и т.п.&lt;br /&gt;
** date(int) - Дата заключения&lt;br /&gt;
** sellerid(int) - Менеджер по работе с клиентами (приемная комиссия, партнер) - добавляет договор, меняет статус до &amp;quot;подписан клиентом&amp;quot;, отслеживает статус договора и ход обучения (id по таблице persons)&lt;br /&gt;
** clientid(int) - Клиент, оплачивающий обучение (законный представитель, сам совершеннолетний ученик или куратор от организации, может принимать значение 0 или null, если клиент создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** studentid(int) - Ученик (может принимать значение 0, если ученик создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** notes(string) - Заметки&lt;br /&gt;
** departmentcode(string) - Подразделение в таблице departments, к которому приписан контракт на обучение (например, принявшее ученика)&lt;br /&gt;
** contractform(string) - Форма договора (шаблон)&lt;br /&gt;
** curatorid(int) - Куратор или классный руководитель данного ученика (по таблице persons или не указан), отслеживает учебный процесс, держит связь с учеником, является посредником между учеником и системой, может быть внешней персоной.&lt;br /&gt;
** enddate(int) - Дата окончания договора&lt;br /&gt;
** metacontractid(int) - id метаконтракта, к которому привязан договор, в таблице metacontracts &lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы=&lt;br /&gt;
&lt;br /&gt;
===='''check_address($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить поля адреса&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника addresses&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP19, SP21-SP23]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_column_types_null($input, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить поля запроса на предмет ненулевых значений и корректности типов справочника&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект SOAP-запроса&lt;br /&gt;
* table(string) - название справочника, &lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SC6-SC7], [PR5-PR6]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_cov($cov, $fields = null)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить дополнительный объект на предмет соответствия формату&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* cov(array) - дополнительный вложенный объект.&lt;br /&gt;
* fields(object) - поля объекта для проверки дублирующихся полей.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [PI6-PI8], [SC3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_department($code)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли такое подразделение и актуальный ли у него статус&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* code(string) - код подразделения.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP5-SP7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_email($email)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет, можно ли использовать переданный e-mail в системе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* email(string) - электронная почта.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP2], [PI4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_fields_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом проверяют объект SOAP-запроса на предмет некорректных значений полей&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - содержит поля запроса&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_hash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет входящий запрос по sha1-хешу, сверяя наличие требуемых полей и выдаёт код ошибки при её наличии&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - содержит поля запроса, а так же обязательные поля - id, requesttime, requestlogin, requesthash.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true в случае успеха,&lt;br /&gt;
* (string) - иначе - код ошибки: [PR0-PR4], [PI3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''connect_sync($pcode, $provider, $substorage = null)'''====&lt;br /&gt;
&lt;br /&gt;
Создать соединение с объектом синхронизации по названию справочника и поставщику данных&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* pcode(string) - название плагина для синхронизации (metacontracts, persons, ...)&lt;br /&gt;
* provider(string) - название поставщика синхронизации&lt;br /&gt;
* substorage(string) - код внутреннего субсправочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки, или&lt;br /&gt;
* (object) - объект подключения к синхронизации dof_storage_sync_connect&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''errorlog($input, $queryname=null)'''====&lt;br /&gt;
&lt;br /&gt;
Записывает переданный объект в файл ('/dat/errorlog.txt') для последующей отладки&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(mixed) - переменная для вывода в файл&lt;br /&gt;
* queryname(string) - название запроса (какя именно операция выполняется)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (void)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют действия, сопутствующие SOAP-запросу&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_additional_($input, $operation, $dofid = null)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют дополнительные действия в SOAP-запросе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
* operation(string) - название операции: 'insert', 'update', ...&lt;br /&gt;
* dofid(int) - id объекта из справочника (если не null, то операция 'update', иначе - 'insert')&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - операция прошла успешно&lt;br /&gt;
* (object) - возвращает дополнительные поля, которые надо присоединить к объекту в методе [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_set_base($input, $method)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить базовые действия метода set_:&lt;br /&gt;
* 1) Получить объект синхронизации&lt;br /&gt;
* 2) Получить объект для ответа&lt;br /&gt;
* 3) Просчитать хеш объекта (без служебных полей)&lt;br /&gt;
* 4) Есть ли объект синхронизации с таким id в базе?&lt;br /&gt;
* 4.1) Объект найден. Проверить, нужно ли производить синхронизацию&lt;br /&gt;
* 4.1.1) Синхронизация нужна&lt;br /&gt;
* 4.1.1.1) Обновить объект в базе ([[#update_object($input, $dofid, $method, $table)|update_object()]]), объект синхронизации и сгенерировать ответ 'OK'&lt;br /&gt;
* 4.1.1.2) Логирование&lt;br /&gt;
* 4.1.1.3) Cгенерировать ответ 'OK', синхронизация успешна&lt;br /&gt;
* 4.1.2) Синхронизация не нужна, сгенерировать ответ 'ОК'&lt;br /&gt;
* 4.2) Объект не найден.&lt;br /&gt;
* 4.2.1) Добавить объект в базу ([[#insert_object($input, $method, $table)|insert_object()]]), обрабатывая ошибки, объект синхронизации&lt;br /&gt;
* 4.2.2) Логирование&lt;br /&gt;
* 4.2.3) Cгенерировать ответ 'OK', синхронизация успешна&lt;br /&gt;
* 5) Вернуть ответ&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#insert_object($input, $method, $table)|insert_object()]] и [[#update_object($input, $dofid, $method, $table)|update_object()]]&lt;br /&gt;
* input(object) - объект SOAP-запроса&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект $response (см. метод [[#set_meta_contract($input)|set_meta_contract()]])&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_fields($input, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить поля для вставки или обновления таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с определёнными полями одного из справочника&lt;br /&gt;
* storage(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, в случае ошибки&lt;br /&gt;
* (object) - объект с полями для вставки/обновления записи в таблице&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_key($requestlogin)'''====&lt;br /&gt;
&lt;br /&gt;
Получить ключ идентификатора системы, используя логин.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* requestlogin(string) - идентификатор системы (логин)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если ключ не найден,&lt;br /&gt;
* (string) - ключ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_response($type, $errorcode = 'OK')'''====&lt;br /&gt;
&lt;br /&gt;
Получить каркас объекта ответа для разных типов методов.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* type(string) - тип запроса ('set', 'get', ...)&lt;br /&gt;
* errorcode(string) - код ошибки&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если произошла ошибка&lt;br /&gt;
* (object) - объект для передачи ответа в SOAP-сообщениях&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_storage_error($method, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить код ошибки справочника по названию метода и таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название операции со справочником: 'insert', 'update', ...&lt;br /&gt;
* storage(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого сочетания &amp;quot;метод-справочник&amp;quot; не найдено&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_sync_object($table, $provider, $id, $direct = 'down')'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли объект синхронизации в справочнике storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* table(string) - справочник, по которому необходимо получить объект&lt;br /&gt;
* provider(string) - внешний провайдер (поле storage/sync.upsubsubstorage)&lt;br /&gt;
* id - id из таблицы storage/sync&lt;br /&gt;
* direct - направление синхронизации&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если объект не найден&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
* (object) - объект table с записью&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_table($method)'''====&lt;br /&gt;
&lt;br /&gt;
Получить название таблицы (справочника), с которым работает переданный метод&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название метода&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого метода не найдено&lt;br /&gt;
* (string) - название справочника&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_object($input, $requestpassword)'''====&lt;br /&gt;
&lt;br /&gt;
Получить sha1-хеш пришедшего SOAP-запроса по описанному ранее алгоритму&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с обязательными полями id, requesttime, requestlogin, requesthash, объектом cov.&lt;br /&gt;
* requestpassword(string) - ключ идентификатора системы.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_uphash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить хеширование объекта для сравнения с uphash в storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с полями справочника, без специальных полей request*&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_address($input)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить новый адрес&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_object($input, $method, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить объект в базу:&lt;br /&gt;
* Получить из запроса поля для вставки в таблицу: [[#get_fields($input, $storage)|get_fields()]]&lt;br /&gt;
* Выполнить дополнительные действия: [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_()]], в случае ошибок сгенерировать ответ&lt;br /&gt;
* Вставить объект в базу, обработать ошибки&lt;br /&gt;
* Обработать объект cov: [[#update_cov($dofid, $inputcov, $plugincode)|update_cov()]], добавить поля в базу, обработать ошибки&lt;br /&gt;
* В соответствии с настройками выставить статус через [[#set_status_route($table, $dofid, $departmentid)|set_status_route()]], ошибки только логировать&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''is_sync_object_exists($table, $provider, $id, $direct = 'down')'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли объект синхронизации в справочнике storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* table(string) - название справочника&lt;br /&gt;
* provider(string) - название клиента, с которым выполняется синхронизация&lt;br /&gt;
* id(int) - id объекта, в зависимости от направления синхронизации&lt;br /&gt;
* direct(string) - направление синхронизации ('up', 'down')&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''normalize_array($item)'''====&lt;br /&gt;
&lt;br /&gt;
Нормализует ошибочно переданный ассоциативный массив в объект&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* item(object) - объект с вложенным массивом item[], в котором находятся объекты:&lt;br /&gt;
** item[0] = stdClass(),&lt;br /&gt;
** item[0]-&amp;gt;key, &lt;br /&gt;
** item[0]-&amp;gt;value, &lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект, в котором поля {item[0]-&amp;gt;key}, а значения: {item[0]-&amp;gt;value}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_method($input, $methodname)'''====&lt;br /&gt;
&lt;br /&gt;
Выполняет базовую проверку переданных параметров (контрольная сумма), проверяет, реализованы ли функции для проверки входных параметров и исполнения запроса, вызывает 'set' метод для переданного в качестве аргумента объекта запроса и метода. В случае возникновения ошибок составляет ответный запрос и выполняет логирование.&lt;br /&gt;
Вызывает следующие методы:&lt;br /&gt;
* [[#check_hash($input)|-&amp;gt;check_hash()]]&lt;br /&gt;
* [[#check_fields_($input)|-&amp;gt;check_fields_$methodname()]]&lt;br /&gt;
* [[#execute_($input)|-&amp;gt;execute_$methodname()]]&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект SOAP-запроса (должны присутствовать служебные поля request*)&lt;br /&gt;
* methodname(string) - название функции, которую необходимо исполнить&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект содерщаший поля:&lt;br /&gt;
** id - переданный в запросе id объекта&lt;br /&gt;
** dofid - внутренний id объекта&lt;br /&gt;
** modified - время изменения объекта&lt;br /&gt;
** hash - контрольная сумма из storages/sync&lt;br /&gt;
** errorcode - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_status_route($table, $dofid, $departmentid)'''====&lt;br /&gt;
&lt;br /&gt;
Установить статус согласно маршруту, заданному в конфиге&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
* dofid(int) - внутренний id объекта из таблицы $storage&lt;br /&gt;
* departmentid(int) - id из таблицы departments&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (array) - код ошибки и описание: array('код_ошибки', 'описание ошибки')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_address($input, $dofid)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить адрес&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице addresses&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат обновления&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_cov($dofid, $inputcov, $plugincode)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить вложенный объект cov для внутренних объектов&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице $plugincode&lt;br /&gt;
* inputcov(object) - объект, по которому происходит перебор&lt;br /&gt;
* plugincode(string) - код плагина storage&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат обновления&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_object($input, $dofid, $method, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить объект в базе:&lt;br /&gt;
* Получить из запроса поля для вставки в таблицу: [[#get_fields($input, $storage)|get_fields()]]&lt;br /&gt;
* Выполнить дополнительные действия: [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_()]], в случае ошибок сгенерировать ответ&lt;br /&gt;
* Обновить объект в базе, обработать ошибки&lt;br /&gt;
* Обработать объект cov: [[#update_cov($dofid, $inputcov, $plugincode)|update_cov()]], добавить поля в базу, обработать ошибки&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице $plugincode&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Коды ошибок=&lt;br /&gt;
&lt;br /&gt;
При успешном выполнении операции синхронизации возвращается код ошибки 'OK'.&lt;br /&gt;
В ином случае, возвращается одна из следующих ошибок:&lt;br /&gt;
&lt;br /&gt;
* Ошибки параметров запроса [P]:&lt;br /&gt;
* Обязательные [PR]&lt;br /&gt;
** PR0 - Данные запроса пришли в некорректном формате&lt;br /&gt;
** PR1 - Отсутствует идентификатор системы [requestlogin]&lt;br /&gt;
** PR2 - Отсутствует время запроса [requesttime]&lt;br /&gt;
** PR3 - Отсутствует контрольная сумма [requesthash]&lt;br /&gt;
** PR4 - Отсутствует идентификатор объекта [id]&lt;br /&gt;
* Некорректные [PI]&lt;br /&gt;
** PI3 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** PI4 - Недопустимые символы в e-mail&lt;br /&gt;
** PI5 - Тип переменной подразделения должен быть строковый&lt;br /&gt;
** PI6 - Тип переменной cov должен быть объектом&lt;br /&gt;
** PI7 - Поля внутри переменной cov не должны быть массивами или объектами&lt;br /&gt;
** PI8 - Поля внутри переменной cov не должны совпадать с полями справочника (например, status, adddate)&lt;br /&gt;
* Ошибки внутренние [S]:&lt;br /&gt;
* Некорректные параметры [SP]&lt;br /&gt;
** SP1 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** SP2 - Данный e-mail не допустим в системе&lt;br /&gt;
** SP3 - Данный e-mail уже зарегистрирован в системе&lt;br /&gt;
** SP4 - Название подразделения не может быть пустым&lt;br /&gt;
** SP5 - Подразделения с таким кодом не существует&lt;br /&gt;
** SP6 - Подразделение не актуально&lt;br /&gt;
** SP7 - Код подразделения должен быть строкового типа&lt;br /&gt;
** SP8 - Неверно передан параметр с запросом&lt;br /&gt;
* Ошибки кодирования [SC]&lt;br /&gt;
** SC1 - Не зарегистрирована функция проверки параметров запроса для данного метода&lt;br /&gt;
** SC2 - Не зарегистрирована функция исполнения запроса для данного метода&lt;br /&gt;
** SC3 - Не верно передан формат проверки полей вложенного объекта cov&lt;br /&gt;
** SC4 - Для этого метода не задана таблица, с которой он работает&lt;br /&gt;
** SC5 - Неверно указано название операции&lt;br /&gt;
* Ошибки целостности структуры (базы) [SI]&lt;br /&gt;
** SI1 - Не удалось добавить запись в справочник metacontracts&lt;br /&gt;
** SI2 - Не удалось обновить запись в справочнике metacontracts&lt;br /&gt;
** SI3 - Не удалось добавить запись в справочник persons&lt;br /&gt;
** SI4 - Не удалось обновить запись в справочнике persons&lt;br /&gt;
** SI5 - Не удалось добавить запись в справочник contracts&lt;br /&gt;
** SI6 - Не удалось обновить запись в справочнике contracts&lt;br /&gt;
** SI7 - Не удалось обновить запись в справочнике cov&lt;br /&gt;
** SI8 - Не удалось обновить запись в справочнике addresses&lt;br /&gt;
** SI9 - Не удалось найти запись в справочнике addresses для обновления&lt;br /&gt;
&lt;br /&gt;
=Замечания, возможные проблемы=&lt;br /&gt;
&lt;br /&gt;
* Не совпадает контрольная сумма, ошибка [PI3]&lt;br /&gt;
** Необходимо обязательно проверять наличие всех полей, описанных в параметрах функций. Все типы параметров должны соответствовать описанным в wsdl-файле. К примеру, если в PHP попытаться передать массив в параметр, принимающий только строки, произойдёт конвертация массива в строку.&lt;br /&gt;
* Ошибки при выполнении запроса, если не передан какой-либо параметр, либо передан лишний параметр&lt;br /&gt;
** Желательно создавать класс (объект), в котором определены все поля и типы запроса, указанные в wsdl. От него создаётся экземпляр класса и поверх этих полей записываются значения. Таким образом, если поля не указаны, они автоматически должны заполняться значением null. Это позволит упростить процедуру хеширования и взаимодействия с сервером.&lt;br /&gt;
&lt;br /&gt;
=Расширение функционала=&lt;br /&gt;
&lt;br /&gt;
* Методы set&lt;br /&gt;
** Рассмотрим на примере создания метода set_department(). Необходимо выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
** 1) Добавить в blocks_dof_sync_soap_soapserver:&lt;br /&gt;
** * set_department() - в нём один единственный вызов: return $this-&amp;gt;dof-&amp;gt;sync('soap')-&amp;gt;set_method($input, __FUNCTION__);&lt;br /&gt;
** * Задокументировать входные параметры, @return object для всех методов set_ пока одинаков&lt;br /&gt;
&lt;br /&gt;
** 2) Добавить в dof_sync_soap:&lt;br /&gt;
** * [[#check_fields_($input)|check_fields_set_department($input)]] - проверки входных параметров, проверка возможности добавить объект в базу без ошибок&lt;br /&gt;
** * [[#execute_($input)|execute_set_department($input)]] - основное тело исполнения запроса. Основные действия выполняются в функции [[#execute_set_base($input, $method)|execute_set_base()]], поэтому рекомендуется использовать вызов: return $this-&amp;gt;execute_set_base($input, 'set_department');&lt;br /&gt;
** Если нужна более расширенная логика, метод можно написать самому (но желательно отталкиваться от общего алгоритма в [[#execute_set_base($input, $method)|execute_set_base()]].&lt;br /&gt;
** * [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_set_department($input, $operation, $dofif)]] - метод, который выполняется при вызове [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
** * При необходимости добавить смену статусов&lt;/div&gt;</summary>
		<author><name>Konovalov</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/schdays&amp;diff=2842</id>
		<title>Разработка:storages/schdays</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/schdays&amp;diff=2842"/>
				<updated>2014-10-09T07:10:47Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = schdays&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Таблица в базе данных===&lt;br /&gt;
''schdays'' - реестр дней, на которые было создано учебное расписание. Используется для определения, на какие дни уже было создано учебное расписание и по какому дню недели идет учебный процесс (полезно, например, при переносе рабочих дней в связи с государственными праздниками).&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* ageid - id периода, для которого формируем расписание&lt;br /&gt;
* date - Unix Timestamp на 12-00 этого дня по UTC&lt;br /&gt;
* daynum - номер дня недели по шаблону (от 1(понедельник) до 7(воскресенье))&lt;br /&gt;
* dayvar - вариант учебной недели, для которой создается день (0 - ежедневно, 1 - нечетная, 2 - четная)&lt;br /&gt;
* departmentid - структурное подразделение&lt;br /&gt;
* type - тип дня - рабочий, праздник, каникулы, выходной (working, holiday, vacation, dayoff)&lt;br /&gt;
* status - (plan, active, completed, fixed, deleted) список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/schdays | schdays ]]&lt;br /&gt;
&lt;br /&gt;
===Дополнительные методы:===&lt;br /&gt;
* Получить список дней (кроме удаленных), на которые было сформировано расписание по структурному подразделению&lt;br /&gt;
* Получить список дней (кроме удаленных), по дате в формате Unix Time по UTC и структурному подразделению (необязательный параметр)&lt;br /&gt;
* Пометить день как удаленный&lt;br /&gt;
* Создать день, одновременно создав соответствующее расписание&lt;br /&gt;
* Удалить день вместе с событиями, созданными по расписанию на него&lt;/div&gt;</summary>
		<author><name>Konovalov</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/soap&amp;diff=2840</id>
		<title>Разработка:sync/soap</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/soap&amp;diff=2840"/>
				<updated>2014-10-06T14:47:53Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = soap&lt;br /&gt;
| type = sync&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Описание=&lt;br /&gt;
&lt;br /&gt;
Веб-сервис для интеграции с другими системами по протоколу SOAP.&lt;br /&gt;
Плагин использует инфраструктуру [[Разработка:storages/sync | storages/sync ]] для хранения соответствия внутренних и внешних id объектов и [[Разработка:storages/synclog | storages/synclog ]] для логирования всех операций синхронизации.&lt;br /&gt;
&lt;br /&gt;
Плагин объявляет SOAP-сервис, который располагается по адресам:&lt;br /&gt;
* /sync/soap/soap.php?do=wsdl - wsdl-файл&lt;br /&gt;
* /sync/soap/soap.php?do=service - сам сервис&lt;br /&gt;
&lt;br /&gt;
У каждого метода присутствуют следующие обязательные служебные параметры:&lt;br /&gt;
* requesttime - (UNIX timestamp) время генерации запроса, используется для устаревания запроса с целью защиты от атаки на &amp;quot;повторение перехваченного запроса&amp;quot;&lt;br /&gt;
* requestlogin - идентифицирует систему-отправитель запроса (задается в sync/soap/cfg/clients.php, вместе с паролем requestpassword и необязательными параметрами)&lt;br /&gt;
* requesthash - sha1-хеш от всех полей запроса в алфавитном порядке, включая предыдущие два, а так же поля requestpassword (в самом запросе не участвует). Используется для подтверждения подлинности запроса.&lt;br /&gt;
&lt;br /&gt;
'''Все параметры, в которых передаётся время, принимают UNIX timestamp, если в подписи к ним не написано иначе.'''&lt;br /&gt;
&lt;br /&gt;
Имена полей soap-запросов должны совпадать с именами полей в справочниках: [[Разработка:storages/metacontracts | storages/metacontracts ]], [[Разработка:storages/persons | storages/persons ]], [[Разработка:storages/contracts | storages/contracts ]]&lt;br /&gt;
&lt;br /&gt;
Во всех запросах используются только внешние id. Например, при создании персоны новая система передает свой уникальный id, которым она её обозначает. Этот id сохраняется в [[Разработка:storages/sync | storages/sync ]]. При создании контракта на обучение, внешняя система передает свой собственный id персоны (которая была создана ранее), плагин [[Разработка:sync/soap | sync/soap ]] конвертирует этот id во внутренний через справочник [[Разработка:storages/sync | storages/sync ]] и создает запись в [[Разработка:storages/contracts | storages/contracts ]]. Если внешний id объекта не передан, запрос возвращает ошибку (объект не создается и не обновляется).&lt;br /&gt;
&lt;br /&gt;
Служебные, специальные и автоматически-вычисляемые поля справочников не доступны для редактирования через SOAP-запросы (например adddate, status). Действия, которые запрещены пользователям системы через интерфейс, запрещены и через SOAP-запросы (например, нельзя сменить персону в уже созданном контракте).&lt;br /&gt;
&lt;br /&gt;
Все запросы обрабатывают вложенный объект cov. Все поля внутри объекта cov сохраняются (обновляются) в справочнике [[Разработка:storages/cov | storages/cov ]]. Не упомянутые в запросе поля (ранее сохраненные в cov) игнорируются. Все имена полей, присутствующие в соответствующем справочнике зарезервированы и не могут быть переданы через объект cov (например, нельзя сохранить поле cov/status для объекта persons, потому что в нем уже есть поле status).&lt;br /&gt;
&lt;br /&gt;
Подразделение для размещения объекта передается в SOAP-запросах через его код (code), а не id.&lt;br /&gt;
Успешная операция для методов типа 'set_' возвращает следующую структуру данных:&lt;br /&gt;
* id - переданный в запросе id объекта&lt;br /&gt;
* dofid - внутренний id объекта&lt;br /&gt;
* modified - время изменения объекта (UNIX timestamp)&lt;br /&gt;
* hash - контрольная сумма из storages/sync&lt;br /&gt;
* errorcode - код ошибки, помогающий идентифицировать проблему при исполнении запроса&lt;br /&gt;
&lt;br /&gt;
Для проверки SOAP-запросов используется хеширование по следующему алгоритму:&lt;br /&gt;
&lt;br /&gt;
* requesthash == sha1(requestpassword + requesttime + requestlogin + json(vars) + json(cvars)), где&lt;br /&gt;
&lt;br /&gt;
** vars формируется следующим образом:&lt;br /&gt;
*** Из полей объекта для SOAP-запроса исключаются служебные данные — requesthash, requestlogin, requesttime и дополнительный объект cov&lt;br /&gt;
*** Поля сортируются в алфавитном порядке;&lt;br /&gt;
** cvars — вложенный объект cov, поля которого так же сортируются в алфавитном порядке;&lt;br /&gt;
** json() - функция для преобразования массива/объекта в json-строку.&lt;br /&gt;
** Знаком &amp;quot;+&amp;quot; указана конкатенация строк.&lt;br /&gt;
'''Примечание''': XML-структура SOAP-запроса для вложенных объектов, таких как cov, должна выглядеть следующим образом:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfield&amp;gt;RU&amp;lt;/addfield&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtwo&amp;gt;RU-MOS&amp;lt;/addfieldtwo&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtthree&amp;gt;Москва&amp;lt;/addfieldtthree&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
При использовании ассоциативных массивов, например, на PHP, при попытке передать их SOAP-клиенту произойдёт искажение представления:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfield&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldtwo&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU-MOS&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldthree&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;Москва&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
Поэтому при проверке на сервере хэш не совпадёт.&lt;br /&gt;
&lt;br /&gt;
=API=&lt;br /&gt;
&lt;br /&gt;
==='''set_meta_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные метаконтракта, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса (UNIX timestamp)&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id метаконтракта&lt;br /&gt;
** num(string) - Номер метаконтракта&lt;br /&gt;
** departmentcode(string) - Код подразделения&lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_person($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные персоны, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса (UNIX timestamp)&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id метаконтракта&lt;br /&gt;
** firstname(string) - Имя&lt;br /&gt;
** middlename(string) - Отчество&lt;br /&gt;
** lastname(string) - Фамилия&lt;br /&gt;
** preferredname(string) - Префикс для имения (Mr. Dr. Г-н, Г-а)&lt;br /&gt;
** dateofbirth(int) - Дата рождения в UTS&lt;br /&gt;
** gender(string) - Пол (male, female, unknown)&lt;br /&gt;
** email(string) - Основной адрес электронной почты&lt;br /&gt;
** phonehome(string) - Домашний телефон&lt;br /&gt;
** phonework(string) - Рабочий телефон&lt;br /&gt;
** phonecell(string) - Сотовый телефон&lt;br /&gt;
** passtypeid(int) - Тип удостоверения личности (1 - свидетельство о рождении, 2 - паспорт гражданина РФ, 3 - загранпасспорт, 4 - разрешение на временное проживание лица без гражданства, 5 - вид на жительство, 6 - военный билет, 7 - водительсткое удостоверение пластиковое, 8 - вод. удостоверение форма 1, 9 - вод. удостоверение международное)&lt;br /&gt;
** passportserial(string) - Серия удостоверения личности (если предусмотрена типом документа)&lt;br /&gt;
** passportnum(string) - Номер удостоверения личности&lt;br /&gt;
** passportdate(int) - Дата выдачи удостоверения личности в UTS&lt;br /&gt;
** passportem(string) - Название организации, выдавшей удостоверение личности&lt;br /&gt;
** citizenship(string) - Гражданство&lt;br /&gt;
** departmentcode(string) - Основной отдел, к которому приписан человек (может редактировать его данные в persons)&lt;br /&gt;
** about(string) - Характеристика личности&lt;br /&gt;
** skype(string) - Уникальный идентификатор в Skype&lt;br /&gt;
** phoneadd1(string) - Дополнительный телефон 1&lt;br /&gt;
** phoneadd2(string) - Дополнительный телефон 2&lt;br /&gt;
** phoneadd3(string) - Дополнительный телефон 3&lt;br /&gt;
** emailadd1(string) - Дополнительная электронная почта 1&lt;br /&gt;
** emailadd2(string) - Дополнительная электронная почта 2&lt;br /&gt;
** emailadd3(string) - Дополнительная электронная почта 3&lt;br /&gt;
** passportaddr(object) - Адрес прописки по паспорту (для генерации документов)&lt;br /&gt;
** address(object) - Текущий адрес (почтовый адрес)&lt;br /&gt;
** birthaddress(object) - Адрес рождения персоны&lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Формат объектов: passportaddr, address, birthaddress''&lt;br /&gt;
* postalcode(string) - Почтовый индекс&lt;br /&gt;
* country(string) - Код страны проживания (по предъявленному паспорту) в ICO 3166-1:1997 (RU)&lt;br /&gt;
* region(string) - Код региона по ISO 3166-2 (RU-NGR, RU-MOS)&lt;br /&gt;
* county(string) - Административный район&lt;br /&gt;
* city(string) - Город&lt;br /&gt;
* streetname(string) - Название улицы&lt;br /&gt;
* streettype(string) - Тип улицы&lt;br /&gt;
* number(string) - Номер дома&lt;br /&gt;
* gate(string) - Подъезд&lt;br /&gt;
* floor(string) - Этаж&lt;br /&gt;
* apartment(string) - Квартира&lt;br /&gt;
* latitude(float) - Широта в градусах&lt;br /&gt;
* longitude(float) - Долгота в градусах&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные договора, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса (UNIX timestamp)&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id договора&lt;br /&gt;
** typeid(int) - Тип договора, если у учебного заведения предусмотрено несколько разных типов договоров&lt;br /&gt;
** num(string) - Номер договора&lt;br /&gt;
** numpass(string) - Номер пропуска, студенческого билета и т.п.&lt;br /&gt;
** date(int) - Дата заключения&lt;br /&gt;
** sellerid(int) - Менеджер по работе с клиентами (приемная комиссия, партнер) - добавляет договор, меняет статус до &amp;quot;подписан клиентом&amp;quot;, отслеживает статус договора и ход обучения (id по таблице persons)&lt;br /&gt;
** clientid(int) - Клиент, оплачивающий обучение (законный представитель, сам совершеннолетний ученик или куратор от организации, может принимать значение 0 или null, если клиент создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** studentid(int) - Ученик (может принимать значение 0, если ученик создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** notes(string) - Заметки&lt;br /&gt;
** departmentcode(string) - Подразделение в таблице departments, к которому приписан контракт на обучение (например, принявшее ученика)&lt;br /&gt;
** contractform(string) - Форма договора (шаблон)&lt;br /&gt;
** curatorid(int) - Куратор или классный руководитель данного ученика (по таблице persons или не указан), отслеживает учебный процесс, держит связь с учеником, является посредником между учеником и системой, может быть внешней персоной.&lt;br /&gt;
** enddate(int) - Дата окончания договора&lt;br /&gt;
** metacontractid(int) - id метаконтракта, к которому привязан договор, в таблице metacontracts &lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы=&lt;br /&gt;
&lt;br /&gt;
===='''check_cov($cov, $fields = null)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить дополнительный объект на предмет соответствия формату&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* cov(array) - дополнительный вложенный объект.&lt;br /&gt;
* fields(object) - поля объекта для проверки дублирующихся полей.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [PI6-PI8], [SC3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_department($code)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли такое подразделение и актуальный ли у него статус&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* code(string) - код подразделения.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP5-SP7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_email($email)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет, можно ли использовать переданный e-mail в системе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* email(string) - электронная почта.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP2], [PI4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_fields_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом проверяют объект SOAP-запроса на предмет некорректных значений полей&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - содержит поля запроса&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_hash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет входящий запрос по sha1-хешу, сверяя наличие требуемых полей и выдаёт код ошибки при её наличии&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - содержит поля запроса, а так же обязательные поля - id, requesttime, requestlogin, requesthash.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true в случае успеха,&lt;br /&gt;
* (string) - иначе - код ошибки: [PR0-PR4], [PI3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''connect_sync($pcode, $provider, $substorage = null)'''====&lt;br /&gt;
&lt;br /&gt;
Создать соединение с объектом синхронизации по названию справочника и поставщику данных&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* pcode(string) - название плагина для синхронизации (metacontracts, persons, ...)&lt;br /&gt;
* provider(string) - название поставщика синхронизации&lt;br /&gt;
* substorage(string) - код внутреннего субсправочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки, или&lt;br /&gt;
* (object) - объект подключения к синхронизации dof_storage_sync_connect&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют действия, сопутствующие SOAP-запросу&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_additional_($input, $operation, $dofid = null)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют дополнительные действия в SOAP-запросе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
* operation(string) - название операции: 'insert', 'update', ...&lt;br /&gt;
* dofid(int) - id объекта из справочника (если не null, то операция 'update', иначе - 'insert')&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - операция прошла успешно&lt;br /&gt;
* (object) - возвращает дополнительные поля, которые надо присоединить к объекту в методе [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_set_base($input, $method)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить базовые действия метода set_:&lt;br /&gt;
* 1) Получить объект синхронизации&lt;br /&gt;
* 2) Получить объект для ответа&lt;br /&gt;
* 3) Просчитать хеш объекта (без служебных полей)&lt;br /&gt;
* 4) Есть ли объект синхронизации с таким id в базе?&lt;br /&gt;
* 4.1) Объект найден. Проверить, нужно ли производить синхронизацию&lt;br /&gt;
* 4.1.1) Синхронизация нужна&lt;br /&gt;
* 4.1.1.1) Обновить объект в базе ([[#update_object($input, $dofid, $method, $table)|update_object()]]), объект синхронизации и сгенерировать ответ 'OK'&lt;br /&gt;
* 4.1.1.2) Логирование&lt;br /&gt;
* 4.1.1.3) Cгенерировать ответ 'OK', синхронизация успешна&lt;br /&gt;
* 4.1.2) Синхронизация не нужна, сгенерировать ответ 'ОК'&lt;br /&gt;
* 4.2) Объект не найден.&lt;br /&gt;
* 4.2.1) Добавить объект в базу ([[#insert_object($input, $method, $table)|insert_object()]]), обрабатывая ошибки, объект синхронизации&lt;br /&gt;
* 4.2.2) Логирование&lt;br /&gt;
* 4.2.3) Cгенерировать ответ 'OK', синхронизация успешна&lt;br /&gt;
* 5) Вернуть ответ&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#insert_object($input, $method, $table)|insert_object()]] и [[#update_object($input, $dofid, $method, $table)|update_object()]]&lt;br /&gt;
* input(object) - объект SOAP-запроса&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект $response (см. метод [[#set_meta_contract($input)|set_meta_contract()]])&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_fields($input, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить поля для вставки или обновления таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с определёнными полями одного из справочника&lt;br /&gt;
* storage(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, в случае ошибки&lt;br /&gt;
* (object) - объект с полями для вставки/обновления записи в таблице&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_key($requestlogin)'''====&lt;br /&gt;
&lt;br /&gt;
Получить ключ идентификатора системы, используя логин.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* requestlogin(string) - идентификатор системы (логин)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если ключ не найден,&lt;br /&gt;
* (string) - ключ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_response($type, $errorcode = 'OK')'''====&lt;br /&gt;
&lt;br /&gt;
Получить каркас объекта ответа для разных типов методов.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* type(string) - тип запроса ('set', 'get', ...)&lt;br /&gt;
* errorcode(string) - код ошибки&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если произошла ошибка&lt;br /&gt;
* (object) - объект для передачи ответа в SOAP-сообщениях&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_storage_error($method, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить код ошибки справочника по названию метода и таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название операции со справочником: 'insert', 'update', ...&lt;br /&gt;
* storage(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого сочетания &amp;quot;метод-справочник&amp;quot; не найдено&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_table($method)'''====&lt;br /&gt;
&lt;br /&gt;
Получить название таблицы (справочника), с которым работает переданный метод&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название метода&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого метода не найдено&lt;br /&gt;
* (string) - название справочника&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_object($input, $requestpassword)'''====&lt;br /&gt;
&lt;br /&gt;
Получить sha1-хеш пришедшего SOAP-запроса по описанному ранее алгоритму&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с обязательными полями id, requesttime, requestlogin, requesthash, объектом cov.&lt;br /&gt;
* requestpassword(string) - ключ идентификатора системы.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_uphash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить хеширование объекта для сравнения с uphash в storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с полями справочника, без специальных полей request*&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_address($input)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить новый адрес&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_object($input, $method, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить объект в базу:&lt;br /&gt;
* Получить из запроса поля для вставки в таблицу: [[#get_fields($input, $storage)|get_fields()]]&lt;br /&gt;
* Выполнить дополнительные действия: [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_()]], в случае ошибок сгенерировать ответ&lt;br /&gt;
* Вставить объект в базу, обработать ошибки&lt;br /&gt;
* Обработать объект cov: [[#update_cov($dofid, $inputcov, $plugincode)|update_cov()]], добавить поля в базу, обработать ошибки&lt;br /&gt;
* В соответствии с настройками выставить статус через [[#set_status_route($table, $dofid, $departmentid)|set_status_route()]], ошибки только логировать&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''normalize_array($item)'''====&lt;br /&gt;
&lt;br /&gt;
Нормализует ошибочно переданный ассоциативный массив в объект&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* item(object) - объект с вложенным массивом item[], в котором находятся объекты:&lt;br /&gt;
** item[0] = stdClass(),&lt;br /&gt;
** item[0]-&amp;gt;key, &lt;br /&gt;
** item[0]-&amp;gt;value, &lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект, в котором поля {item[0]-&amp;gt;key}, а значения: {item[0]-&amp;gt;value}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_method($input, $methodname)'''====&lt;br /&gt;
&lt;br /&gt;
Выполняет базовую проверку переданных параметров (контрольная сумма), проверяет, реализованы ли функции для проверки входных параметров и исполнения запроса, вызывает 'set' метод для переданного в качестве аргумента объекта запроса и метода. В случае возникновения ошибок составляет ответный запрос и выполняет логирование.&lt;br /&gt;
Вызывает следующие методы:&lt;br /&gt;
* [[#check_hash($input)|-&amp;gt;check_hash()]]&lt;br /&gt;
* [[#check_fields_($input)|-&amp;gt;check_fields_$methodname()]]&lt;br /&gt;
* [[#execute_($input)|-&amp;gt;execute_$methodname()]]&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект SOAP-запроса (должны присутствовать служебные поля request*)&lt;br /&gt;
* methodname(string) - название функции, которую необходимо исполнить&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект содерщаший поля:&lt;br /&gt;
** id - переданный в запросе id объекта&lt;br /&gt;
** dofid - внутренний id объекта&lt;br /&gt;
** modified - время изменения объекта&lt;br /&gt;
** hash - контрольная сумма из storages/sync&lt;br /&gt;
** errorcode - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_status_route($table, $dofid, $departmentid)'''====&lt;br /&gt;
&lt;br /&gt;
Установить статус согласно маршруту, заданному в конфиге&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
* dofid(int) - внутренний id объекта из таблицы $storage&lt;br /&gt;
* departmentid(int) - id из таблицы departments&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (array) - код ошибки и описание: array('код_ошибки', 'описание ошибки')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_address($input, $dofid)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить адрес&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице addresses&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат обновления&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_cov($dofid, $inputcov, $plugincode)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить вложенный объект cov для внутренних объектов&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице $plugincode&lt;br /&gt;
* inputcov(object) - объект, по которому происходит перебор&lt;br /&gt;
* plugincode(string) - код плагина storage&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат обновления&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_object($input, $dofid, $method, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить объект в базе:&lt;br /&gt;
* Получить из запроса поля для вставки в таблицу: [[#get_fields($input, $storage)|get_fields()]]&lt;br /&gt;
* Выполнить дополнительные действия: [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_()]], в случае ошибок сгенерировать ответ&lt;br /&gt;
* Обновить объект в базе, обработать ошибки&lt;br /&gt;
* Обработать объект cov: [[#update_cov($dofid, $inputcov, $plugincode)|update_cov()]], добавить поля в базу, обработать ошибки&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице $plugincode&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Коды ошибок=&lt;br /&gt;
&lt;br /&gt;
При успешном выполнении операции синхронизации возвращается код ошибки 'OK'.&lt;br /&gt;
В ином случае, возвращается одна из следующих ошибок:&lt;br /&gt;
&lt;br /&gt;
* Ошибки параметров запроса [P]:&lt;br /&gt;
* Обязательные [PR]&lt;br /&gt;
** PR0 - Данные запроса пришли в некорректном формате&lt;br /&gt;
** PR1 - Отсутствует идентификатор системы [requestlogin]&lt;br /&gt;
** PR2 - Отсутствует время запроса [requesttime]&lt;br /&gt;
** PR3 - Отсутствует контрольная сумма [requesthash]&lt;br /&gt;
** PR4 - Отсутствует идентификатор объекта [id]&lt;br /&gt;
* Некорректные [PI]&lt;br /&gt;
** PI3 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** PI4 - Недопустимые символы в e-mail&lt;br /&gt;
** PI5 - Тип переменной подразделения должен быть строковый&lt;br /&gt;
** PI6 - Тип переменной cov должен быть объектом&lt;br /&gt;
** PI7 - Поля внутри переменной cov не должны быть массивами или объектами&lt;br /&gt;
** PI8 - Поля внутри переменной cov не должны совпадать с полями справочника (например, status, adddate)&lt;br /&gt;
* Ошибки внутренние [S]:&lt;br /&gt;
* Некорректные параметры [SP]&lt;br /&gt;
** SP1 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** SP2 - Данный e-mail не допустим в системе&lt;br /&gt;
** SP3 - Данный e-mail уже зарегистрирован в системе&lt;br /&gt;
** SP4 - Название подразделения не может быть пустым&lt;br /&gt;
** SP5 - Подразделения с таким кодом не существует&lt;br /&gt;
** SP6 - Подразделение не актуально&lt;br /&gt;
** SP7 - Код подразделения должен быть строкового типа&lt;br /&gt;
** SP8 - Неверно передан параметр с запросом&lt;br /&gt;
* Ошибки кодирования [SC]&lt;br /&gt;
** SC1 - Не зарегистрирована функция проверки параметров запроса для данного метода&lt;br /&gt;
** SC2 - Не зарегистрирована функция исполнения запроса для данного метода&lt;br /&gt;
** SC3 - Не верно передан формат проверки полей вложенного объекта cov&lt;br /&gt;
** SC4 - Для этого метода не задана таблица, с которой он работает&lt;br /&gt;
** SC5 - Неверно указано название операции&lt;br /&gt;
* Ошибки целостности структуры (базы) [SI]&lt;br /&gt;
** SI1 - Не удалось добавить запись в справочник metacontracts&lt;br /&gt;
** SI2 - Не удалось обновить запись в справочнике metacontracts&lt;br /&gt;
** SI3 - Не удалось добавить запись в справочник persons&lt;br /&gt;
** SI4 - Не удалось обновить запись в справочнике persons&lt;br /&gt;
** SI5 - Не удалось добавить запись в справочник contracts&lt;br /&gt;
** SI6 - Не удалось обновить запись в справочнике contracts&lt;br /&gt;
** SI7 - Не удалось обновить запись в справочнике cov&lt;br /&gt;
** SI8 - Не удалось обновить запись в справочнике addresses&lt;br /&gt;
** SI9 - Не удалось найти запись в справочнике addresses для обновления&lt;br /&gt;
&lt;br /&gt;
=Замечания, возможные проблемы=&lt;br /&gt;
&lt;br /&gt;
* Не совпадает контрольная сумма, ошибка [PI3]&lt;br /&gt;
** Необходимо обязательно проверять наличие всех полей, описанных в параметрах функций. Все типы параметров должны соответствовать описанным в wsdl-файле. К примеру, если в PHP попытаться передать массив в параметр, принимающий только строки, произойдёт конвертация массива в строку.&lt;br /&gt;
* Ошибки при выполнении запроса, если не передан какой-либо параметр, либо передан лишний параметр&lt;br /&gt;
** Желательно создавать класс (объект), в котором определены все поля и типы запроса, указанные в wsdl. От него создаётся экземпляр класса и поверх этих полей записываются значения. Таким образом, если поля не указаны, они автоматически должны заполняться значением null. Это позволит упростить процедуру хеширования и взаимодействия с сервером.&lt;br /&gt;
&lt;br /&gt;
=Расширение функционала=&lt;br /&gt;
&lt;br /&gt;
* Методы set&lt;br /&gt;
** Рассмотрим на примере создания метода set_department(). Необходимо выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
** 1) Добавить в blocks_dof_sync_soap_soapserver:&lt;br /&gt;
** * set_department() - в нём один единственный вызов: return $this-&amp;gt;dof-&amp;gt;sync('soap')-&amp;gt;set_method($input, __FUNCTION__);&lt;br /&gt;
** * Задокументировать входные параметры, @return object для всех методов set_ пока одинаков&lt;br /&gt;
&lt;br /&gt;
** 2) Добавить в dof_sync_soap:&lt;br /&gt;
** * [[#check_fields_($input)|check_fields_set_department($input)]] - проверки входных параметров, проверка возможности добавить объект в базу без ошибок&lt;br /&gt;
** * [[#execute_($input)|execute_set_department($input)]] - основное тело исполнения запроса. Основные действия выполняются в функции [[#execute_set_base($input, $method)|execute_set_base()]], поэтому рекомендуется использовать вызов: return $this-&amp;gt;execute_set_base($input, 'set_department');&lt;br /&gt;
** Если нужна более расширенная логика, метод можно написать самому (но желательно отталкиваться от общего алгоритма в [[#execute_set_base($input, $method)|execute_set_base()]].&lt;br /&gt;
** * [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_set_department($input, $operation, $dofif)]] - метод, который выполняется при вызове [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
** * При необходимости добавить смену статусов&lt;/div&gt;</summary>
		<author><name>Konovalov</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/soap&amp;diff=2839</id>
		<title>Разработка:sync/soap</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/soap&amp;diff=2839"/>
				<updated>2014-10-06T14:31:49Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = soap&lt;br /&gt;
| type = sync&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Описание=&lt;br /&gt;
&lt;br /&gt;
Веб-сервис для интеграции с другими системами по протоколу SOAP.&lt;br /&gt;
Плагин использует инфраструктуру [[Разработка:storages/sync | storages/sync ]] для хранения соответствия внутренних и внешних id объектов и [[Разработка:storages/synclog | storages/synclog ]] для логирования всех операций синхронизации.&lt;br /&gt;
&lt;br /&gt;
Плагин объявляет SOAP-сервис, который располагается по адресам:&lt;br /&gt;
* /sync/soap/soap.php?do=wsdl - wsdl-файл&lt;br /&gt;
* /sync/soap/soap.php?do=service - сам сервис&lt;br /&gt;
&lt;br /&gt;
У каждого метода присутствуют следующие обязательные служебные параметры:&lt;br /&gt;
* requestime - время генерации запроса, используется для устаревания запроса с целью защиты от атаки на &amp;quot;повторение перехваченного запроса&amp;quot;&lt;br /&gt;
* requestlogin - идентифицирует систему-отправитель запроса (задается в sync/soap/cfg/clients.php, вместе с паролем requestpassword и необязательными параметрами)&lt;br /&gt;
* requesthash - sha1-хеш от всех полей запроса в алфавитном порядке, включая предыдущие два, а так же поля requestpassword (в самом запросе не участвует). Используется для подтверждения подлинности запроса.&lt;br /&gt;
&lt;br /&gt;
Имена полей soap-запросов должны совпадать с именами полей в справочниках: [[Разработка:storages/metacontracts | storages/metacontracts ]], [[Разработка:storages/persons | storages/persons ]], [[Разработка:storages/contracts | storages/contracts ]]&lt;br /&gt;
&lt;br /&gt;
Во всех запросах используются только внешние id. Например, при создании персоны новая система передает свой уникальный id, которым она её обозначает. Этот id сохраняется в [[Разработка:storages/sync | storages/sync ]]. При создании контракта на обучение, внешняя система передает свой собственный id персоны (которая была создана ранее), плагин [[Разработка:sync/soap | sync/soap ]] конвертирует этот id во внутренний через справочник [[Разработка:storages/sync | storages/sync ]] и создает запись в [[Разработка:storages/contracts | storages/contracts ]]. Если внешний id объекта не передан, запрос возвращает ошибку (объект не создается и не обновляется).&lt;br /&gt;
&lt;br /&gt;
Служебные, специальные и автоматически-вычисляемые поля справочников не доступны для редактирования через SOAP-запросы (например adddate, status). Действия, которые запрещены пользователям системы через интерфейс, запрещены и через SOAP-запросы (например, нельзя сменить персону в уже созданном контракте).&lt;br /&gt;
&lt;br /&gt;
Все запросы обрабатывают вложенный объект cov. Все поля внутри объекта cov сохраняются (обновляются) в справочнике [[Разработка:storages/cov | storages/cov ]]. Не упомянутые в запросе поля (ранее сохраненные в cov) игнорируются. Все имена полей, присутствующие в соответствующем справочнике зарезервированы и не могут быть переданы через объект cov (например, нельзя сохранить поле cov/status для объекта persons, потому что в нем уже есть поле status).&lt;br /&gt;
&lt;br /&gt;
Подразделение для размещения объекта передается в SOAP-запросах через его код (code), а не id.&lt;br /&gt;
Успешная операция для методов типа 'set_' возвращает следующую структуру данных:&lt;br /&gt;
* id - переданный в запросе id объекта&lt;br /&gt;
* dofid - внутренний id объекта&lt;br /&gt;
* modified - время изменения объекта&lt;br /&gt;
* hash - контрольная сумма из storages/sync&lt;br /&gt;
* errorcode - код ошибки, помогающий идентифицировать проблему при исполнении запроса&lt;br /&gt;
&lt;br /&gt;
Для проверки SOAP-запросов используется хеширование по следующему алгоритму:&lt;br /&gt;
&lt;br /&gt;
* requesthash == sha1(requestpassword + requesttime + requestlogin + json(vars) + json(cvars)), где&lt;br /&gt;
&lt;br /&gt;
** vars формируется следующим образом:&lt;br /&gt;
*** Из полей объекта для SOAP-запроса исключаются служебные данные — requesthash, requestlogin, requesttime и дополнительный объект cov&lt;br /&gt;
*** Поля сортируются в алфавитном порядке;&lt;br /&gt;
** cvars — вложенный объект cov, поля которого так же сортируются в алфавитном порядке;&lt;br /&gt;
** json() - функция для преобразования массива/объекта в json-строку.&lt;br /&gt;
** Знаком &amp;quot;+&amp;quot; указана конкатенация строк.&lt;br /&gt;
'''Примечание''': XML-структура SOAP-запроса для вложенных объектов, таких как cov, должна выглядеть следующим образом:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfield&amp;gt;RU&amp;lt;/addfield&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtwo&amp;gt;RU-MOS&amp;lt;/addfieldtwo&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtthree&amp;gt;Москва&amp;lt;/addfieldtthree&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
При использовании ассоциативных массивов, например, на PHP, при попытке передать их SOAP-клиенту произойдёт искажение представления:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfield&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldtwo&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU-MOS&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldthree&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;Москва&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
Поэтому при проверке на сервере хэш не совпадёт.&lt;br /&gt;
&lt;br /&gt;
=API=&lt;br /&gt;
&lt;br /&gt;
==='''set_meta_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные метаконтракта, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id метаконтракта&lt;br /&gt;
** num(string) - Номер метаконтракта&lt;br /&gt;
** departmentcode(string) - Код подразделения&lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_person($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные персоны, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id метаконтракта&lt;br /&gt;
** firstname(string) - Имя&lt;br /&gt;
** middlename(string) - Отчество&lt;br /&gt;
** lastname(string) - Фамилия&lt;br /&gt;
** preferredname(string) - Префикс для имения (Mr. Dr. Г-н, Г-а)&lt;br /&gt;
** dateofbirth(int) - Дата рождения в UTS&lt;br /&gt;
** gender(string) - Пол (male, female, unknown)&lt;br /&gt;
** email(string) - Основной адрес электронной почты&lt;br /&gt;
** phonehome(string) - Домашний телефон&lt;br /&gt;
** phonework(string) - Рабочий телефон&lt;br /&gt;
** phonecell(string) - Сотовый телефон&lt;br /&gt;
** passtypeid(int) - Тип удостоверения личности (1 - свидетельство о рождении, 2 - паспорт гражданина РФ, 3 - загранпасспорт, 4 - разрешение на временное проживание лица без гражданства, 5 - вид на жительство, 6 - военный билет, 7 - водительсткое удостоверение пластиковое, 8 - вод. удостоверение форма 1, 9 - вод. удостоверение международное)&lt;br /&gt;
** passportserial(string) - Серия удостоверения личности (если предусмотрена типом документа)&lt;br /&gt;
** passportnum(string) - Номер удостоверения личности&lt;br /&gt;
** passportdate(int) - Дата выдачи удостоверения личности в UTS&lt;br /&gt;
** passportem(string) - Название организации, выдавшей удостоверение личности&lt;br /&gt;
** citizenship(string) - Гражданство&lt;br /&gt;
** departmentcode(string) - Основной отдел, к которому приписан человек (может редактировать его данные в persons)&lt;br /&gt;
** about(string) - Характеристика личности&lt;br /&gt;
** skype(string) - Уникальный идентификатор в Skype&lt;br /&gt;
** phoneadd1(string) - Дополнительный телефон 1&lt;br /&gt;
** phoneadd2(string) - Дополнительный телефон 2&lt;br /&gt;
** phoneadd3(string) - Дополнительный телефон 3&lt;br /&gt;
** emailadd1(string) - Дополнительная электронная почта 1&lt;br /&gt;
** emailadd2(string) - Дополнительная электронная почта 2&lt;br /&gt;
** emailadd3(string) - Дополнительная электронная почта 3&lt;br /&gt;
** passportaddr(object) - Адрес прописки по паспорту (для генерации документов)&lt;br /&gt;
** address(object) - Текущий адрес (почтовый адрес)&lt;br /&gt;
** birthaddress(object) - Адрес рождения персоны&lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Формат объектов: passportaddr, address, birthaddress''&lt;br /&gt;
* postalcode(string) - Почтовый индекс&lt;br /&gt;
* country(string) - Код страны проживания (по предъявленному паспорту) в ICO 3166-1:1997 (RU)&lt;br /&gt;
* region(string) - Код региона по ISO 3166-2 (RU-NGR, RU-MOS)&lt;br /&gt;
* county(string) - Административный район&lt;br /&gt;
* city(string) - Город&lt;br /&gt;
* streetname(string) - Название улицы&lt;br /&gt;
* streettype(string) - Тип улицы&lt;br /&gt;
* number(string) - Номер дома&lt;br /&gt;
* gate(string) - Подъезд&lt;br /&gt;
* floor(string) - Этаж&lt;br /&gt;
* apartment(string) - Квартира&lt;br /&gt;
* latitude(float) - Широта в градусах&lt;br /&gt;
* longitude(float) - Долгота в градусах&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные договора, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin(string) - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime(int) - Время генерации запроса&lt;br /&gt;
** requesthash(string) - sha1-хеш&lt;br /&gt;
** id(int) - Внешний id договора&lt;br /&gt;
** typeid(int) - Тип договора, если у учебного заведения предусмотрено несколько разных типов договоров&lt;br /&gt;
** num(string) - Номер договора&lt;br /&gt;
** numpass(string) - Номер пропуска, студенческого билета и т.п.&lt;br /&gt;
** date(int) - Дата заключения&lt;br /&gt;
** sellerid(int) - Менеджер по работе с клиентами (приемная комиссия, партнер) - добавляет договор, меняет статус до &amp;quot;подписан клиентом&amp;quot;, отслеживает статус договора и ход обучения (id по таблице persons)&lt;br /&gt;
** clientid(int) - Клиент, оплачивающий обучение (законный представитель, сам совершеннолетний ученик или куратор от организации, может принимать значение 0 или null, если клиент создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** studentid(int) - Ученик (может принимать значение 0, если ученик создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** notes(string) - Заметки&lt;br /&gt;
** departmentcode(string) - Подразделение в таблице departments, к которому приписан контракт на обучение (например, принявшее ученика)&lt;br /&gt;
** contractform(string) - Форма договора (шаблон)&lt;br /&gt;
** curatorid(int) - Куратор или классный руководитель данного ученика (по таблице persons или не указан), отслеживает учебный процесс, держит связь с учеником, является посредником между учеником и системой, может быть внешней персоной.&lt;br /&gt;
** enddate(int) - Дата окончания договора&lt;br /&gt;
** metacontractid(int) - id метаконтракта, к которому привязан договор, в таблице metacontracts &lt;br /&gt;
** cov(object) - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id(int) - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid(int) - Внутренний id объекта&lt;br /&gt;
** modified(int) - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash(string) - Хеш операции в storage/sync&lt;br /&gt;
** errorcode(string) - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы=&lt;br /&gt;
&lt;br /&gt;
===='''check_cov($cov, $fields = null)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить дополнительный объект на предмет соответствия формату&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* cov(array) - дополнительный вложенный объект.&lt;br /&gt;
* fields(object) - поля объекта для проверки дублирующихся полей.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [PI6-PI8], [SC3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_department($code)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли такое подразделение и актуальный ли у него статус&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* code(string) - код подразделения.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP5-SP7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_email($email)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет, можно ли использовать переданный e-mail в системе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* email(string) - электронная почта.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP2], [PI4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_fields_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом проверяют объект SOAP-запроса на предмет некорректных значений полей&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - содержит поля запроса&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_hash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет входящий запрос по sha1-хешу, сверяя наличие требуемых полей и выдаёт код ошибки при её наличии&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - содержит поля запроса, а так же обязательные поля - id, requesttime, requestlogin, requesthash.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true в случае успеха,&lt;br /&gt;
* (string) - иначе - код ошибки: [PR0-PR4], [PI3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''connect_sync($pcode, $provider, $substorage = null)'''====&lt;br /&gt;
&lt;br /&gt;
Создать соединение с объектом синхронизации по названию справочника и поставщику данных&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* pcode(string) - название плагина для синхронизации (metacontracts, persons, ...)&lt;br /&gt;
* provider(string) - название поставщика синхронизации&lt;br /&gt;
* substorage(string) - код внутреннего субсправочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки, или&lt;br /&gt;
* (object) - объект подключения к синхронизации dof_storage_sync_connect&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют действия, сопутствующие SOAP-запросу&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_additional_($input, $operation, $dofid = null)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют дополнительные действия в SOAP-запросе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
* operation(string) - название операции: 'insert', 'update', ...&lt;br /&gt;
* dofid(int) - id объекта из справочника (если не null, то операция 'update', иначе - 'insert')&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - операция прошла успешно&lt;br /&gt;
* (object) - возвращает дополнительные поля, которые надо присоединить к объекту в методе [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_set_base($input, $method)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить базовые действия метода set_:&lt;br /&gt;
* 1) Получить объект синхронизации&lt;br /&gt;
* 2) Получить объект для ответа&lt;br /&gt;
* 3) Просчитать хеш объекта (без служебных полей)&lt;br /&gt;
* 4) Есть ли объект синхронизации с таким id в базе?&lt;br /&gt;
* 4.1) Объект найден. Проверить, нужно ли производить синхронизацию&lt;br /&gt;
* 4.1.1) Синхронизация нужна&lt;br /&gt;
* 4.1.1.1) Обновить объект в базе ([[#update_object($input, $dofid, $method, $table)|update_object()]]), объект синхронизации и сгенерировать ответ 'OK'&lt;br /&gt;
* 4.1.1.2) Логирование&lt;br /&gt;
* 4.1.1.3) Cгенерировать ответ 'OK', синхронизация успешна&lt;br /&gt;
* 4.1.2) Синхронизация не нужна, сгенерировать ответ 'ОК'&lt;br /&gt;
* 4.2) Объект не найден.&lt;br /&gt;
* 4.2.1) Добавить объект в базу ([[#insert_object($input, $method, $table)|insert_object()]]), обрабатывая ошибки, объект синхронизации&lt;br /&gt;
* 4.2.2) Логирование&lt;br /&gt;
* 4.2.3) Cгенерировать ответ 'OK', синхронизация успешна&lt;br /&gt;
* 5) Вернуть ответ&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#insert_object($input, $method, $table)|insert_object()]] и [[#update_object($input, $dofid, $method, $table)|update_object()]]&lt;br /&gt;
* input(object) - объект SOAP-запроса&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект $response (см. метод [[#set_meta_contract($input)|set_meta_contract()]])&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_fields($input, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить поля для вставки или обновления таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с определёнными полями одного из справочника&lt;br /&gt;
* storage(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, в случае ошибки&lt;br /&gt;
* (object) - объект с полями для вставки/обновления записи в таблице&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_key($requestlogin)'''====&lt;br /&gt;
&lt;br /&gt;
Получить ключ идентификатора системы, используя логин.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* requestlogin(string) - идентификатор системы (логин)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если ключ не найден,&lt;br /&gt;
* (string) - ключ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_response($type, $errorcode = 'OK')'''====&lt;br /&gt;
&lt;br /&gt;
Получить каркас объекта ответа для разных типов методов.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* type(string) - тип запроса ('set', 'get', ...)&lt;br /&gt;
* errorcode(string) - код ошибки&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если произошла ошибка&lt;br /&gt;
* (object) - объект для передачи ответа в SOAP-сообщениях&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_storage_error($method, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить код ошибки справочника по названию метода и таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название операции со справочником: 'insert', 'update', ...&lt;br /&gt;
* storage(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого сочетания &amp;quot;метод-справочник&amp;quot; не найдено&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_table($method)'''====&lt;br /&gt;
&lt;br /&gt;
Получить название таблицы (справочника), с которым работает переданный метод&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название метода&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого метода не найдено&lt;br /&gt;
* (string) - название справочника&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_object($input, $requestpassword)'''====&lt;br /&gt;
&lt;br /&gt;
Получить sha1-хеш пришедшего SOAP-запроса по описанному ранее алгоритму&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с обязательными полями id, requesttime, requestlogin, requesthash, объектом cov.&lt;br /&gt;
* requestpassword(string) - ключ идентификатора системы.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_uphash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить хеширование объекта для сравнения с uphash в storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с полями справочника, без специальных полей request*&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_address($input)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить новый адрес&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_object($input, $method, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить объект в базу:&lt;br /&gt;
* Получить из запроса поля для вставки в таблицу: [[#get_fields($input, $storage)|get_fields()]]&lt;br /&gt;
* Выполнить дополнительные действия: [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_()]], в случае ошибок сгенерировать ответ&lt;br /&gt;
* Вставить объект в базу, обработать ошибки&lt;br /&gt;
* Обработать объект cov: [[#update_cov($dofid, $inputcov, $plugincode)|update_cov()]], добавить поля в базу, обработать ошибки&lt;br /&gt;
* В соответствии с настройками выставить статус через [[#set_status_route($table, $dofid, $departmentid)|set_status_route()]], ошибки только логировать&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''normalize_array($item)'''====&lt;br /&gt;
&lt;br /&gt;
Нормализует ошибочно переданный ассоциативный массив в объект&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* item(object) - объект с вложенным массивом item[], в котором находятся объекты:&lt;br /&gt;
** item[0] = stdClass(),&lt;br /&gt;
** item[0]-&amp;gt;key, &lt;br /&gt;
** item[0]-&amp;gt;value, &lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект, в котором поля {item[0]-&amp;gt;key}, а значения: {item[0]-&amp;gt;value}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_method($input, $methodname)'''====&lt;br /&gt;
&lt;br /&gt;
Выполняет базовую проверку переданных параметров (контрольная сумма), проверяет, реализованы ли функции для проверки входных параметров и исполнения запроса, вызывает 'set' метод для переданного в качестве аргумента объекта запроса и метода. В случае возникновения ошибок составляет ответный запрос и выполняет логирование.&lt;br /&gt;
Вызывает следующие методы:&lt;br /&gt;
* [[#check_hash($input)|-&amp;gt;check_hash()]]&lt;br /&gt;
* [[#check_fields_($input)|-&amp;gt;check_fields_$methodname()]]&lt;br /&gt;
* [[#execute_($input)|-&amp;gt;execute_$methodname()]]&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект SOAP-запроса (должны присутствовать служебные поля request*)&lt;br /&gt;
* methodname(string) - название функции, которую необходимо исполнить&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект содерщаший поля:&lt;br /&gt;
** id - переданный в запросе id объекта&lt;br /&gt;
** dofid - внутренний id объекта&lt;br /&gt;
** modified - время изменения объекта&lt;br /&gt;
** hash - контрольная сумма из storages/sync&lt;br /&gt;
** errorcode - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_status_route($table, $dofid, $departmentid)'''====&lt;br /&gt;
&lt;br /&gt;
Установить статус согласно маршруту, заданному в конфиге&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
* dofid(int) - внутренний id объекта из таблицы $storage&lt;br /&gt;
* departmentid(int) - id из таблицы departments&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (array) - код ошибки и описание: array('код_ошибки', 'описание ошибки')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_address($input, $dofid)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить адрес&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице addresses&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат обновления&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_cov($dofid, $inputcov, $plugincode)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить вложенный объект cov для внутренних объектов&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице $plugincode&lt;br /&gt;
* inputcov(object) - объект, по которому происходит перебор&lt;br /&gt;
* plugincode(string) - код плагина storage&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат обновления&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_object($input, $dofid, $method, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить объект в базе:&lt;br /&gt;
* Получить из запроса поля для вставки в таблицу: [[#get_fields($input, $storage)|get_fields()]]&lt;br /&gt;
* Выполнить дополнительные действия: [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_()]], в случае ошибок сгенерировать ответ&lt;br /&gt;
* Обновить объект в базе, обработать ошибки&lt;br /&gt;
* Обработать объект cov: [[#update_cov($dofid, $inputcov, $plugincode)|update_cov()]], добавить поля в базу, обработать ошибки&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице $plugincode&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Коды ошибок=&lt;br /&gt;
&lt;br /&gt;
При успешном выполнении операции синхронизации возвращается код ошибки 'OK'.&lt;br /&gt;
В ином случае, возвращается одна из следующих ошибок:&lt;br /&gt;
&lt;br /&gt;
* Ошибки параметров запроса [P]:&lt;br /&gt;
* Обязательные [PR]&lt;br /&gt;
** PR0 - Данные запроса пришли в некорректном формате&lt;br /&gt;
** PR1 - Отсутствует идентификатор системы [requestlogin]&lt;br /&gt;
** PR2 - Отсутствует время запроса [requesttime]&lt;br /&gt;
** PR3 - Отсутствует контрольная сумма [requesthash]&lt;br /&gt;
** PR4 - Отсутствует идентификатор объекта [id]&lt;br /&gt;
* Некорректные [PI]&lt;br /&gt;
** PI3 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** PI4 - Недопустимые символы в e-mail&lt;br /&gt;
** PI5 - Тип переменной подразделения должен быть строковый&lt;br /&gt;
** PI6 - Тип переменной cov должен быть объектом&lt;br /&gt;
** PI7 - Поля внутри переменной cov не должны быть массивами или объектами&lt;br /&gt;
** PI8 - Поля внутри переменной cov не должны совпадать с полями справочника (например, status, adddate)&lt;br /&gt;
* Ошибки внутренние [S]:&lt;br /&gt;
* Некорректные параметры [SP]&lt;br /&gt;
** SP1 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** SP2 - Данный e-mail не допустим в системе&lt;br /&gt;
** SP3 - Данный e-mail уже зарегистрирован в системе&lt;br /&gt;
** SP4 - Название подразделения не может быть пустым&lt;br /&gt;
** SP5 - Подразделения с таким кодом не существует&lt;br /&gt;
** SP6 - Подразделение не актуально&lt;br /&gt;
** SP7 - Код подразделения должен быть строкового типа&lt;br /&gt;
** SP8 - Неверно передан параметр с запросом&lt;br /&gt;
* Ошибки кодирования [SC]&lt;br /&gt;
** SC1 - Не зарегистрирована функция проверки параметров запроса для данного метода&lt;br /&gt;
** SC2 - Не зарегистрирована функция исполнения запроса для данного метода&lt;br /&gt;
** SC3 - Не верно передан формат проверки полей вложенного объекта cov&lt;br /&gt;
** SC4 - Для этого метода не задана таблица, с которой он работает&lt;br /&gt;
** SC5 - Неверно указано название операции&lt;br /&gt;
* Ошибки целостности структуры (базы) [SI]&lt;br /&gt;
** SI1 - Не удалось добавить запись в справочник metacontracts&lt;br /&gt;
** SI2 - Не удалось обновить запись в справочнике metacontracts&lt;br /&gt;
** SI3 - Не удалось добавить запись в справочник persons&lt;br /&gt;
** SI4 - Не удалось обновить запись в справочнике persons&lt;br /&gt;
** SI5 - Не удалось добавить запись в справочник contracts&lt;br /&gt;
** SI6 - Не удалось обновить запись в справочнике contracts&lt;br /&gt;
** SI7 - Не удалось обновить запись в справочнике cov&lt;br /&gt;
** SI8 - Не удалось обновить запись в справочнике addresses&lt;br /&gt;
** SI9 - Не удалось найти запись в справочнике addresses для обновления&lt;br /&gt;
&lt;br /&gt;
=Замечания, возможные проблемы=&lt;br /&gt;
&lt;br /&gt;
* Не совпадает контрольная сумма, ошибка [PI3]&lt;br /&gt;
** Необходимо обязательно проверять наличие всех полей, описанных в параметрах функций. Все типы параметров должны соответствовать описанным в wsdl-файле. К примеру, если в PHP попытаться передать массив в параметр, принимающий только строки, произойдёт конвертация массива в строку.&lt;br /&gt;
* Ошибки при выполнении запроса, если не передан какой-либо параметр, либо передан лишний параметр&lt;br /&gt;
** Желательно создавать класс (объект), в котором определены все поля и типы запроса, указанные в wsdl. От него создаётся экземпляр класса и поверх этих полей записываются значения. Таким образом, если поля не указаны, они автоматически должны заполняться значением null. Это позволит упростить процедуру хеширования и взаимодействия с сервером.&lt;br /&gt;
&lt;br /&gt;
=Расширение функционала=&lt;br /&gt;
&lt;br /&gt;
* Методы set&lt;br /&gt;
** Рассмотрим на примере создания метода set_department(). Необходимо выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
** 1) Добавить в blocks_dof_sync_soap_soapserver:&lt;br /&gt;
** * set_department() - в нём один единственный вызов: return $this-&amp;gt;dof-&amp;gt;sync('soap')-&amp;gt;set_method($input, __FUNCTION__);&lt;br /&gt;
** * Задокументировать входные параметры, @return object для всех методов set_ пока одинаков&lt;br /&gt;
&lt;br /&gt;
** 2) Добавить в dof_sync_soap:&lt;br /&gt;
** * [[#check_fields_($input)|check_fields_set_department($input)]] - проверки входных параметров, проверка возможности добавить объект в базу без ошибок&lt;br /&gt;
** * [[#execute_($input)|execute_set_department($input)]] - основное тело исполнения запроса. Основные действия выполняются в функции [[#execute_set_base($input, $method)|execute_set_base()]], поэтому рекомендуется использовать вызов: return $this-&amp;gt;execute_set_base($input, 'set_department');&lt;br /&gt;
** Если нужна более расширенная логика, метод можно написать самому (но желательно отталкиваться от общего алгоритма в [[#execute_set_base($input, $method)|execute_set_base()]].&lt;br /&gt;
** * [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_set_department($input, $operation, $dofif)]] - метод, который выполняется при вызове [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
** * При необходимости добавить смену статусов&lt;/div&gt;</summary>
		<author><name>Konovalov</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7%D1%8B&amp;diff=2838</id>
		<title>Релизы</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7%D1%8B&amp;diff=2838"/>
				<updated>2014-10-03T15:45:07Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* 2.6.0 (2014-09-29) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==История выпуска релизов==&lt;br /&gt;
&lt;br /&gt;
=== 2.6.0 (2014-09-29) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-26x/fdo-260.zip/download FDO 2.6.0]&lt;br /&gt;
&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;
**Поддержка Moodle 2.6, сохранена совместимость с Moodle 2.4&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;
**Исправлена ошибка при получении учебного периода для новых подписок (не начавших обучение)&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/departments&lt;br /&gt;
**Правки форматирования некоторых плагинов в соответствии со стандартами кодирования, улучшение читаемости кода&lt;br /&gt;
**Убраны упоминания о ENUM и ENUMVALUES в во всех плагинах storages&lt;br /&gt;
**Исправлены некоторые уведомления в режиме отладки. Например: ошибка &amp;quot;You should really redirect before you start page output&amp;quot; в журнале группы при сохранении оценки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/learningplan | Учебный план ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/base| Base ]]&lt;br /&gt;
** [[Разработка:modlibs/calcformula| Calcformula ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/phpexcel| phpexcel ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/educations | educations - ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/learningplan | Учебный план ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orderdata    | orderdata ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/plansections | Plansections ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/schtemplates | schtemplates ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов ]]&lt;br /&gt;
** [[Разработка:storages/sync    |  sync ]]&lt;br /&gt;
** [[Разработка:storages/synclogs    |  synclogs ]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/schedule | schedule ]]&lt;br /&gt;
&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/departments | Departments ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/invitems | invitems ]]&lt;br /&gt;
** [[Разработка:workflows/invsets | invsets ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schdays | Schdays ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/schtemplates | schtemplates ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
* НОУ ВПО МФПУ «Синергия»&lt;br /&gt;
&lt;br /&gt;
=== 2.4.11 (2014-02-25) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-2411.zip/download FDO 2.4.11 ]&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;
* Добавлена возможность делать вложенные ajaxselect&lt;br /&gt;
* Ведение логов в файл приказов и отчетов&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
=== 2.4.10 (2013-11-22) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-2410.zip/download FDO 2.4.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;
* Переписано API плагинов ages&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
=== 2.4.9 (2013-10-08) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-249.zip/download FDO 2.4.9 ]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
* Учет рабочего времени:&lt;br /&gt;
** Фиксация зарплатных коэффициентов в занятиях&lt;br /&gt;
** Отчеты о фактической нагрузке. Отображение зарплатных баллов&lt;br /&gt;
** Интерфейс просмотра зарплатных балов для персоны&lt;br /&gt;
** Отметка уроков преподавателем до 25-го числа включительно&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;
* Модернизирована постраничная навигация (теперь она не выводит все 1000 номеров страниц)&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;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
=== 2.4.8 (2013-08-06) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-248.zip/download FDO 2.4.8 ]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
* Коэффициенты учета рабочего времени сотрудников&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Совместимость с Moodle 2.4 и 2.5&lt;br /&gt;
* Исправлены баги при просмотре расписания в дневнике учащегося&lt;br /&gt;
* Исправлена совместимость с PostgreSQL&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;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
=== 2.4.7 (2013-04-15) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-247.zip/download FDO 2.4.7 ]&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Модифицирован интерфейс просмотра сотрудников&lt;br /&gt;
* Исправлено отображение таблиц при скачивании ведомостей групп и процессов&lt;br /&gt;
* Исправлена ошибка выбора периодов в приказах о переводе&lt;br /&gt;
* Добавлена возможность быстрого создания и редактирования объектов через поля autocomplite.&lt;br /&gt;
* Улучшена работа создания метаконтрактов&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
=== 2.4.6 (2013-03-06) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-246.zip/download FDO 2.4.6 ]&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Исправлено в учебном плане отображение нескольких подписок в одном учебном году на один и тот же контракт.&lt;br /&gt;
* В изучаемых и пройденных дисциплинах убран поиск по учащимся.&lt;br /&gt;
* Добавлен фильтр к учебному плану статусов подписок. &lt;br /&gt;
* Исправлены ошибки при инсталяции блока.&lt;br /&gt;
* Добавлена настройка для отображения секций в im/my.&lt;br /&gt;
* В некоторых местах исправлены проверки прав.&lt;br /&gt;
* К просмотру уроков добавлены колонки &amp;quot;Оценка&amp;quot; и &amp;quot;Тема&amp;quot;(только в расширенном виде),добавлен экспорт в csv-формате.&lt;br /&gt;
* Исправлены ошибки совместимости с PHP 5.3 и Moodle 2.3.&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
* Алексей Балышев&lt;br /&gt;
&lt;br /&gt;
=== 2.4.5 (2013-01-25) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-245.zip/download FDO 2.4.5 ]&lt;br /&gt;
&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;
* Форма смены статуса теперь каждый раз требует подтверждение статуса. &lt;br /&gt;
* Заказы на отчеты не дублируются, если у них одинаковые параметры и предыдущий отчет еще не сгенерировался.&lt;br /&gt;
* Модифицирован отчет по замененным урокам: добавлена колонка &amp;quot;тип замены&amp;quot; с возможностью фильтрации.&lt;br /&gt;
* todo исполняется от имени того, кто его заказал.&lt;br /&gt;
* Добавлена форма смены курса moodle переподписывающая учащихся с курса на курс.&lt;br /&gt;
* Отображение приостановленных учебных процессов в итоговой ведомости учащегося.&lt;br /&gt;
* Пофиксены проверки прав.&lt;br /&gt;
* Исправлена синхронизация персоны деканата с пользователем Moodle при создании персоны&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
&lt;br /&gt;
=== 2.4.4 (2012-09-19) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-244.zip/download FDO 2.4.4 ]&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Исправлена возможность наследования стандартных ролей.&lt;br /&gt;
* В дневнике ученика теперь изученные предметы помечаются серым.&lt;br /&gt;
* Просмотр уроков происходит вне зависимости от подразделения. Уроки не из того подразделения помечаются зеленым.&lt;br /&gt;
* Исправлен переход по страницам в списке подразделений.&lt;br /&gt;
* Исправлена ошибка синхронизации персоны с пользователем Moodle.&lt;br /&gt;
* Курс Moodle можно теперь менять только у приостановленной дисциплины.&lt;br /&gt;
* Пофиксены некоторые ссылки, где мог происходить сброс подразделения.&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
&lt;br /&gt;
=== 2.4.3 (2012-08-31) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-243.zip/download FDO 2.4.3 ]&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;
* Доработан интерфейс записи на курс &amp;quot;Подписка для плагина Free Deans Office&amp;quot;&lt;br /&gt;
* Доработана возможность при автоматическом закрытии ведомости указывать в курса Moodle не только 100 бальную систему.&lt;br /&gt;
* Исправлена ошибка при создании табельных номеров&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2.4.2 (2012-06-28) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-242.zip/download FDO 2.4.2 ]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Возвращена возможность скачивать итоговую ведомость в формате odt&lt;br /&gt;
* Исправлено отображение итоговой ведомости&lt;br /&gt;
* Исправлено отображение дневника&lt;br /&gt;
* Переработаны страницы деканата для отображения в темах Moodle без горизонтальной прокрутки&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/obj | Просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
&lt;br /&gt;
=== 2.4.1 (2012-06-09) ===&lt;br /&gt;
'''Это первый релиз, предназначенный для работы с Moodle 2.x.'''&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания:&lt;br /&gt;
&lt;br /&gt;
Новые возможности&lt;br /&gt;
* В ядро добавлена возможность работы с широковещательными сообщениями&lt;br /&gt;
* На страницу создания договора с сотрудником добавлено autocomplete-поле&lt;br /&gt;
* На страницу создания договора с учеником добавлены autocomplete-поля с возможностью поиска по персонам и пользователям Moodle&lt;br /&gt;
* Улучшены механизмы отладки для разработчиков: добавлено отображение стека вызовов при ошибках&lt;br /&gt;
* Добавлен отчет по замененным урокам&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Произведен полный рефакторинг ядра проекта и всех плагинов, для обсеспечения совместимости с Moodle 2&lt;br /&gt;
** Переписаны все функции работы с базой данных&lt;br /&gt;
** Переписаны функции работы с плагинами&lt;br /&gt;
** Переписаны плагины авторизации и подписки на курсы&lt;br /&gt;
** Устаревшие enum-поля всех таблиц заменены на тип text (требование Moodle)&lt;br /&gt;
** Из ядра убраны неиспользуемые полномочия&lt;br /&gt;
** Переписаны функции модуля ama. Код проекта очищен от использования устаревших методов&lt;br /&gt;
* Исправлена проблема с созданием записей об истории обучения при подписании приказа о переводе&lt;br /&gt;
* Стандартизирован механизм получения ссылок на объекты&lt;br /&gt;
* Исправлена подстановка значений по умолчанию в формы запроса отчетов&lt;br /&gt;
* Исправлен и доработан элемент формы dof_autocomplete&lt;br /&gt;
* Workflow-плагины добавлены методы работы с метастатусами&lt;br /&gt;
* Исправлен подсчет часов в нагрузке учителей&lt;br /&gt;
* Исправлено отображение временной зоны пользователя при просмотре расписания&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
* Илья Смирнов ( R.I.P. )&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;
&lt;br /&gt;
=== 2.3.3 (2012-04-24) ===&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-23x/fdo-233.zip/download FDO 2.3.3 ]&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;
* Исправлена ошибка, возникающая при экспорте отчета в Excel&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;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== 2.3.2 (2012-02-21) ===&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-23x/fdo-232.zip/download FDO 2.3.2 ]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
* Добавлен плагин [[Разработка:im/inventory | Ресурсы ]]. Появилась возможность вести учет оборудования в образовательном учреждении. Особенности и возможности модуля:&lt;br /&gt;
** Учет поступившего в организацию оборудования &lt;br /&gt;
** Учет списанного оборудования&lt;br /&gt;
** Формирование и выдача комплектов оборудования преподавателям и учащимся&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;
*** где и у кого находится выданное оборудование&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;
* Добавлен плагин modlib/cur, позволяющий управлять учебными планами через приказы. В справочник cpasseds добавлено поле с id приказа, по которому подписка была создана.&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;
Улучшения и исправления:&lt;br /&gt;
* Журнал: оптимизирован запрос для отображения всех проведенных в подразделении занятий за период. Теперь даже при большом количестве проводимых занятий (около 1000 в день) он корректно обрабатывается.&lt;br /&gt;
* Журнал: Исправлена ошибка с двойным созданием темы урока в журнале. В форму сохранения урока (а также в другие формы) добавлен элемент &amp;quot;одноразовая кнопка&amp;quot;, которая устраняет проблему двойного клика.&lt;br /&gt;
* Журнал: на странице просмотра уроков добавлен календарь, чтобы было удобнее выбирать диапазон дат&lt;br /&gt;
* Отчеты: во все отчеты при просмотре добавлена более подробная информация по ним (время когда был собран отчет, время заказа, подразделение, кто заказал)&lt;br /&gt;
* Отчеты: возможность удаление отчета как уже собранного, так и несобранного для пользователей, который этот отсчет запросили и для администратора&lt;br /&gt;
* Управление доступом: определены права доступа для сбора всех типов отчетов&lt;br /&gt;
* Журнал: Исправлена ошибка, не позволяющая сохранить тему урока при слишком длинном домашнем задании. Максимальная длина домашнего задания увеличена с 256 до 700 символов&lt;br /&gt;
* Тематическое планирование: Добавлена возможность скрыть/показать пояснительную записку для тематического планирования , чтобы было удобнее работать с темами.&lt;br /&gt;
* Управление доступом: Закончена работа над правами завуча&lt;br /&gt;
* Формы: оптимизирован элемент dof_autocomplete (интерактивное выпадающее меню) - теперь он работает быстрее&lt;br /&gt;
* Журнал: на странице просмотра уроков выпадающее меню &amp;quot;режим отображения&amp;quot; заменено на вкладки&lt;br /&gt;
* Журнал: исправлена ошибка, из-за которой при просмотре уроков по персоне не отображались уроки, которые были созданы вручную (не через шаблоны)&lt;br /&gt;
* Журнал: добавлено отображение даты выставления оценки и посещаемости урока в журнале (всплывающая подсказка)&lt;br /&gt;
* Управление доступом: для всех прав доступа добавлено описание&lt;br /&gt;
* Журнал: добавлена возможность выставлять оценку &amp;quot;0&amp;quot;&lt;br /&gt;
* Предметы и предмето-классы: исправлена ошибка, из-за которой не удавалось вернуть предмето-класс обратно в активный статус, если группа Moodle удалена&lt;br /&gt;
* Сотрудники: исправлена ошибка, из-за которой при создании табельного номера не проставлялась дата заключения договора&lt;br /&gt;
* 20+ мелких исправлений ошибок &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===2.3.1 (2011-11-22)===&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-23x/fdo-231.zip/download]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
* Добавлен плагин &amp;quot;Расписание&amp;quot;. Теперь есть возможность планировать учебный процесс создавая расписание при помощи шаблонов&lt;br /&gt;
* Добавлена поддержка библиотеки jQuery&lt;br /&gt;
* Поиск уроков по персонам переделан с использованием AJAX-запросов для ускорения быстродействия&lt;br /&gt;
* Добавлена возможность AJAX-редактирования тематического планирования&lt;br /&gt;
* Добавлены различные режимы отображения расписания (по учителям, по ученикам, по интервалам времени)&lt;br /&gt;
* При составлении расписания учитывается недогруженность/перегруженность учителей и учеников &lt;br /&gt;
* При составлении расписания учитывается пересечение занятий друг с другом (чтобы нельзя было запланировать два урока одному ученику или учителю в разных местах одновременно)&lt;br /&gt;
* Добавлен детальный вывод ошибок, в случае когда невозможно создать расписание&lt;br /&gt;
* Добавлена возможность наследовать учебно-тематическое планирование из предмета в дисциплину&lt;br /&gt;
* Автоматическое создание групп Moodle, при подписке предмето-класса на курс&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;
* Импорт отчета нагрузки учителей переделан на формат csv, читаемый уже из файла отчета, что ускоряет процесс импорта&lt;br /&gt;
* В системе добавлены ссылки,на курсы и другие объекты moodle для облегчения навигации&lt;br /&gt;
* Улучшен внешний вид календаря в дневнике (видно, в какие дни у ученика есть занятия, подсвечивается текущая неделя)&lt;br /&gt;
* Появилась возможность просмотра истории, если у ученика были пересдачи по предмету&lt;br /&gt;
*Более 30+ исправлений ошибок&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз:&lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===2.3.0 Beta 1 (2011-07-11)===&lt;br /&gt;
&lt;br /&gt;
Просмотр информации по подразделениям, собственные права и конфигурации деканата, отчеты по персонам.&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-23x/230b1.zip/download]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
*Просмотр информации объектов деканата по структурным подразделениям;&lt;br /&gt;
*Реализована собственная система прав в деканате, независимая от системы прав в Moodle;&lt;br /&gt;
*Интерфейс для просмотра прав для доверенности и персоны;  &lt;br /&gt;
*Реализованы собственные конфигурации в деканате;&lt;br /&gt;
*Интерфейс просмотра настроек конфигурации;&lt;br /&gt;
*Запрос отчетности для учащихся и сотрудников по активности деятельности в Moodle;&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;
*Автоматическое заполнение итоговой ведомости по итоговым оценкам из Moodle;&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;
*Шаблон расписания занятий (пока может использоваться шаблон из версии 1.6.2)&lt;br /&gt;
*AJAX-элемент с автоматической подгрузкой вариантов выбора&lt;br /&gt;
*Приказ о формировании групп&lt;br /&gt;
*Управление прецедентами, обращениями и служебными заданиями&lt;br /&gt;
*Управление оплатой за обучение &lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз:&lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Периоды ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===2.2.3 Beta 1 (2011-03-24)===&lt;br /&gt;
Тематическое планироване, приказы о переводе на следующую параллель.&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-22x/223b1.zip/download]&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;
* Отображение дневника учащегося в Google Chrome&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;
* Шаблон расписания занятий (пока может использоваться шаблон из версии 1.6.2)&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;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/agroups | Периоды ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | Истоия обучения академаческих групп  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===2.2.2 Beta 4 (2010-11-11)===&lt;br /&gt;
Нагрузка преподавателей, учебный план учащихся, расписание учебных занятий.&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-22x/222b4.zip/download]&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;
* Синхронизация персоны деканата с пользователем moodle.&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;
* Шаблон расписания занятий (пока может использоваться шаблон из версии 1.6.2)&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;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/agroups | Периоды ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&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;
&lt;br /&gt;
===2.2.1 Beta 3 (2010-05-27)===&lt;br /&gt;
Управление сотрудниками, должностями и вакансиями.&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-22x/221b3.zip/download]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
* Регистрация договоров с сотрудниками&lt;br /&gt;
* Управление должностями в организации&lt;br /&gt;
* Управление вакансиями&lt;br /&gt;
* Работа с табельными номерами&lt;br /&gt;
* Распределение преподаваемых предметов по учителям (указание того, какой учитель какой предмет ведет)&lt;br /&gt;
* Синхронизация подписок на предметы с подписками на курс в Moodle (пользователь автоматически записывается/отписывается с курса при изменении статуса подписки на предмет)&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;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/agroups | Периоды ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===2.2.0 Beta1 (2010-03-17)===&lt;br /&gt;
Информационная модель и бизнес-процессы учебного заведения.&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-22x/220b1.zip/download]&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;
* Синхронизация подписок с Moodle&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;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Периоды ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
&lt;br /&gt;
Проекты:&lt;br /&gt;
[[Разработка:Проект_090529|Проект 2009-05-29 (версия 2.1.0 =&amp;gt; 2.2.0)]]&lt;br /&gt;
[[Разработка:Проект_100111_итерации|Итерации по проекту 2010-91-11 (подготовка к релизу версии 2.2.0)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
* ЮРГУЭС&lt;br /&gt;
* СИБАДИ&lt;br /&gt;
&lt;br /&gt;
===2.1.0 (2009-06-10)===&lt;br /&gt;
Управление договорами на обучение&lt;br /&gt;
&lt;br /&gt;
Новые возможности для пользователей:&lt;br /&gt;
&lt;br /&gt;
* Управление договорами на обучение:&lt;br /&gt;
** Договора могут вносить кураторы, имеющие возможность просматривать только &amp;quot;свои&amp;quot; договора и редактировать их только до подписания.&lt;br /&gt;
** Для договоров создан рабочий процесс, отслеживающий их продвижение от внесения в систему, подписания сторонами, до расторжения. При этом для ученика автоматически регистрируется и удаляется учетная запись Moodle.&lt;br /&gt;
** Текст договора автоматически формируется в форматах ODF (Open Office Writer) и HTML по шаблонам, которые могут быть изменены.&lt;br /&gt;
* Справочник участников учебного процесса (студенты, законные представители/клиенты, кураторы)&lt;br /&gt;
** Просмотр списков, дополнительной информации, паспортных данных для пользователей, имеющих соответствующие привелегии в системе.&lt;br /&gt;
** Автоматическое обновление учетной записи Moodle при изменении данных о студенте.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Новые инструменты для разработчиков:&lt;br /&gt;
* История изменения статусов объектов.&lt;br /&gt;
* Генерация документов по шаблонам (ODF, CSV, HTML).&lt;br /&gt;
* Работа с приказами: приказом считается некоторое законченное, единоличное действие в системе, изменяющее ее состояние, приказ содержит исходные данные и перед исполнением должен быть подписан полномочным пользователем, при этом формируется контрольная сумма по всем исходным данным. В момент исполнения проверяется, подписан ли приказ, и верна ли контрольная сумма. Формат исходных данных для приказа совместим с форматом исходных данных для генератора документов по шаблонам.&lt;br /&gt;
* Библиотека виджетов: прогресс-бар, обертки для квикформа.&lt;br /&gt;
* Улучшение в альтернативном API Moodle (modlib/ama)&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз:&lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/atest | Автоматическое тестирование плагинов (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:im/exampleim | Пример плагина интерфейса (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/examplelib| Пример плагина библиотеки (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/addresses | addresses - адреса ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/examplest    | examplest - пример справочника (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    | statushistory - история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/workplace   | workplace - привязка к месту работы]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/examplesync | examplesync - пример плагина синхронизации (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/examplewf   | examplewf - пример рабочего процесса (для разработчиков) ]]&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&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;
===2.0.1 (2008-08-29)===&lt;br /&gt;
SDK для разработчиков&lt;br /&gt;
&lt;br /&gt;
Релиз предназначен для ознакомления разработчиков плагинов с API системы. Содержит примеры плагинов каждого типа, демонстрирующие возможности ядра системы.&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз:&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/exampleim | Пример плагина интерфейса (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/examplelib| Пример плагина библиотеки (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/examplest    | examplest - пример справочника (для разработчиков) ]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/examplesync | examplesync - пример плагина синхронизации (для разработчиков) ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/examplewf   | examplewf - пример рабочего процесса (для разработчиков) ]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Илья Смирнов&lt;br /&gt;
* Евгений Цыганцов&lt;br /&gt;
Поддержка проекта: ООО &amp;quot;Открытые технологии&amp;quot;&lt;/div&gt;</summary>
		<author><name>Konovalov</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7%D1%8B&amp;diff=2837</id>
		<title>Релизы</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7%D1%8B&amp;diff=2837"/>
				<updated>2014-10-03T15:30:52Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* 2.6.0 (2014-09-29) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==История выпуска релизов==&lt;br /&gt;
&lt;br /&gt;
=== 2.6.0 (2014-09-29) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-26x/fdo-260.zip/download FDO 2.6.0]&lt;br /&gt;
&lt;br /&gt;
*Новые возможности:&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;
**Поддержка Moodle 2.6, сохранена совместимость с Moodle 2.4&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;
**Исправлена ошибка при получении учебного периода для новых подписок (не начавших обучение)&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/departments&lt;br /&gt;
**Правки форматирования некоторых плагинов в соответствии со стандартами кодирования, улучшение читаемости кода&lt;br /&gt;
**Убраны упоминания о ENUM и ENUMVALUES в во всех плагинах storages&lt;br /&gt;
**Исправлены некоторые уведомления в режиме отладки. Например: ошибка &amp;quot;You should really redirect before you start page output&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;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/learningplan | Учебный план ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/base| Base ]]&lt;br /&gt;
** [[Разработка:modlibs/calcformula| Calcformula ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/phpexcel| phpexcel ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/educations | educations - ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/learningplan | Учебный план ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orderdata    | orderdata ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/plansections | Plansections ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/schtemplates | schtemplates ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов ]]&lt;br /&gt;
** [[Разработка:storages/sync    |  sync ]]&lt;br /&gt;
** [[Разработка:storages/synclogs    |  synclogs ]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/schedule | schedule ]]&lt;br /&gt;
&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/departments | Departments ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/invitems | invitems ]]&lt;br /&gt;
** [[Разработка:workflows/invsets | invsets ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schdays | Schdays ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/schtemplates | schtemplates ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
* НОУ ВПО МФПУ «Синергия»&lt;br /&gt;
&lt;br /&gt;
=== 2.4.11 (2014-02-25) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-2411.zip/download FDO 2.4.11 ]&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;
* Добавлена возможность делать вложенные ajaxselect&lt;br /&gt;
* Ведение логов в файл приказов и отчетов&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
=== 2.4.10 (2013-11-22) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-2410.zip/download FDO 2.4.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;
* Переписано API плагинов ages&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
=== 2.4.9 (2013-10-08) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-249.zip/download FDO 2.4.9 ]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
* Учет рабочего времени:&lt;br /&gt;
** Фиксация зарплатных коэффициентов в занятиях&lt;br /&gt;
** Отчеты о фактической нагрузке. Отображение зарплатных баллов&lt;br /&gt;
** Интерфейс просмотра зарплатных балов для персоны&lt;br /&gt;
** Отметка уроков преподавателем до 25-го числа включительно&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;
* Модернизирована постраничная навигация (теперь она не выводит все 1000 номеров страниц)&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;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
=== 2.4.8 (2013-08-06) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-248.zip/download FDO 2.4.8 ]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
* Коэффициенты учета рабочего времени сотрудников&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Совместимость с Moodle 2.4 и 2.5&lt;br /&gt;
* Исправлены баги при просмотре расписания в дневнике учащегося&lt;br /&gt;
* Исправлена совместимость с PostgreSQL&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;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
=== 2.4.7 (2013-04-15) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-247.zip/download FDO 2.4.7 ]&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Модифицирован интерфейс просмотра сотрудников&lt;br /&gt;
* Исправлено отображение таблиц при скачивании ведомостей групп и процессов&lt;br /&gt;
* Исправлена ошибка выбора периодов в приказах о переводе&lt;br /&gt;
* Добавлена возможность быстрого создания и редактирования объектов через поля autocomplite.&lt;br /&gt;
* Улучшена работа создания метаконтрактов&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
=== 2.4.6 (2013-03-06) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-246.zip/download FDO 2.4.6 ]&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Исправлено в учебном плане отображение нескольких подписок в одном учебном году на один и тот же контракт.&lt;br /&gt;
* В изучаемых и пройденных дисциплинах убран поиск по учащимся.&lt;br /&gt;
* Добавлен фильтр к учебному плану статусов подписок. &lt;br /&gt;
* Исправлены ошибки при инсталяции блока.&lt;br /&gt;
* Добавлена настройка для отображения секций в im/my.&lt;br /&gt;
* В некоторых местах исправлены проверки прав.&lt;br /&gt;
* К просмотру уроков добавлены колонки &amp;quot;Оценка&amp;quot; и &amp;quot;Тема&amp;quot;(только в расширенном виде),добавлен экспорт в csv-формате.&lt;br /&gt;
* Исправлены ошибки совместимости с PHP 5.3 и Moodle 2.3.&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
* Алексей Балышев&lt;br /&gt;
&lt;br /&gt;
=== 2.4.5 (2013-01-25) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-245.zip/download FDO 2.4.5 ]&lt;br /&gt;
&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;
* Форма смены статуса теперь каждый раз требует подтверждение статуса. &lt;br /&gt;
* Заказы на отчеты не дублируются, если у них одинаковые параметры и предыдущий отчет еще не сгенерировался.&lt;br /&gt;
* Модифицирован отчет по замененным урокам: добавлена колонка &amp;quot;тип замены&amp;quot; с возможностью фильтрации.&lt;br /&gt;
* todo исполняется от имени того, кто его заказал.&lt;br /&gt;
* Добавлена форма смены курса moodle переподписывающая учащихся с курса на курс.&lt;br /&gt;
* Отображение приостановленных учебных процессов в итоговой ведомости учащегося.&lt;br /&gt;
* Пофиксены проверки прав.&lt;br /&gt;
* Исправлена синхронизация персоны деканата с пользователем Moodle при создании персоны&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/my | Личный кабинет ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/metacontracts | Метаконтракты ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
&lt;br /&gt;
=== 2.4.4 (2012-09-19) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-244.zip/download FDO 2.4.4 ]&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Исправлена возможность наследования стандартных ролей.&lt;br /&gt;
* В дневнике ученика теперь изученные предметы помечаются серым.&lt;br /&gt;
* Просмотр уроков происходит вне зависимости от подразделения. Уроки не из того подразделения помечаются зеленым.&lt;br /&gt;
* Исправлен переход по страницам в списке подразделений.&lt;br /&gt;
* Исправлена ошибка синхронизации персоны с пользователем Moodle.&lt;br /&gt;
* Курс Moodle можно теперь менять только у приостановленной дисциплины.&lt;br /&gt;
* Пофиксены некоторые ссылки, где мог происходить сброс подразделения.&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
&lt;br /&gt;
=== 2.4.3 (2012-08-31) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-243.zip/download FDO 2.4.3 ]&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;
* Доработан интерфейс записи на курс &amp;quot;Подписка для плагина Free Deans Office&amp;quot;&lt;br /&gt;
* Доработана возможность при автоматическом закрытии ведомости указывать в курса Moodle не только 100 бальную систему.&lt;br /&gt;
* Исправлена ошибка при создании табельных номеров&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/reports | Отчеты ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2.4.2 (2012-06-28) ===&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-24x/fdo-242.zip/download FDO 2.4.2 ]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Возвращена возможность скачивать итоговую ведомость в формате odt&lt;br /&gt;
* Исправлено отображение итоговой ведомости&lt;br /&gt;
* Исправлено отображение дневника&lt;br /&gt;
* Переработаны страницы деканата для отображения в темах Moodle без горизонтальной прокрутки&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/obj | Просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
&lt;br /&gt;
=== 2.4.1 (2012-06-09) ===&lt;br /&gt;
'''Это первый релиз, предназначенный для работы с Moodle 2.x.'''&lt;br /&gt;
&lt;br /&gt;
Ссылка для скачивания:&lt;br /&gt;
&lt;br /&gt;
Новые возможности&lt;br /&gt;
* В ядро добавлена возможность работы с широковещательными сообщениями&lt;br /&gt;
* На страницу создания договора с сотрудником добавлено autocomplete-поле&lt;br /&gt;
* На страницу создания договора с учеником добавлены autocomplete-поля с возможностью поиска по персонам и пользователям Moodle&lt;br /&gt;
* Улучшены механизмы отладки для разработчиков: добавлено отображение стека вызовов при ошибках&lt;br /&gt;
* Добавлен отчет по замененным урокам&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Улучшения и исправления:&lt;br /&gt;
* Произведен полный рефакторинг ядра проекта и всех плагинов, для обсеспечения совместимости с Moodle 2&lt;br /&gt;
** Переписаны все функции работы с базой данных&lt;br /&gt;
** Переписаны функции работы с плагинами&lt;br /&gt;
** Переписаны плагины авторизации и подписки на курсы&lt;br /&gt;
** Устаревшие enum-поля всех таблиц заменены на тип text (требование Moodle)&lt;br /&gt;
** Из ядра убраны неиспользуемые полномочия&lt;br /&gt;
** Переписаны функции модуля ama. Код проекта очищен от использования устаревших методов&lt;br /&gt;
* Исправлена проблема с созданием записей об истории обучения при подписании приказа о переводе&lt;br /&gt;
* Стандартизирован механизм получения ссылок на объекты&lt;br /&gt;
* Исправлена подстановка значений по умолчанию в формы запроса отчетов&lt;br /&gt;
* Исправлен и доработан элемент формы dof_autocomplete&lt;br /&gt;
* Workflow-плагины добавлены методы работы с метастатусами&lt;br /&gt;
* Исправлен подсчет часов в нагрузке учителей&lt;br /&gt;
* Исправлено отображение временной зоны пользователя при просмотре расписания&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/obj | просмотр и редактирование объектов ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Мария Рожайская&lt;br /&gt;
* Илья Смирнов ( R.I.P. )&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;
&lt;br /&gt;
=== 2.3.3 (2012-04-24) ===&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-23x/fdo-233.zip/download FDO 2.3.3 ]&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;
* Исправлена ошибка, возникающая при экспорте отчета в Excel&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;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== 2.3.2 (2012-02-21) ===&lt;br /&gt;
Ссылка для скачивания: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-23x/fdo-232.zip/download FDO 2.3.2 ]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
* Добавлен плагин [[Разработка:im/inventory | Ресурсы ]]. Появилась возможность вести учет оборудования в образовательном учреждении. Особенности и возможности модуля:&lt;br /&gt;
** Учет поступившего в организацию оборудования &lt;br /&gt;
** Учет списанного оборудования&lt;br /&gt;
** Формирование и выдача комплектов оборудования преподавателям и учащимся&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;
*** где и у кого находится выданное оборудование&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;
* Добавлен плагин modlib/cur, позволяющий управлять учебными планами через приказы. В справочник cpasseds добавлено поле с id приказа, по которому подписка была создана.&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;
Улучшения и исправления:&lt;br /&gt;
* Журнал: оптимизирован запрос для отображения всех проведенных в подразделении занятий за период. Теперь даже при большом количестве проводимых занятий (около 1000 в день) он корректно обрабатывается.&lt;br /&gt;
* Журнал: Исправлена ошибка с двойным созданием темы урока в журнале. В форму сохранения урока (а также в другие формы) добавлен элемент &amp;quot;одноразовая кнопка&amp;quot;, которая устраняет проблему двойного клика.&lt;br /&gt;
* Журнал: на странице просмотра уроков добавлен календарь, чтобы было удобнее выбирать диапазон дат&lt;br /&gt;
* Отчеты: во все отчеты при просмотре добавлена более подробная информация по ним (время когда был собран отчет, время заказа, подразделение, кто заказал)&lt;br /&gt;
* Отчеты: возможность удаление отчета как уже собранного, так и несобранного для пользователей, который этот отсчет запросили и для администратора&lt;br /&gt;
* Управление доступом: определены права доступа для сбора всех типов отчетов&lt;br /&gt;
* Журнал: Исправлена ошибка, не позволяющая сохранить тему урока при слишком длинном домашнем задании. Максимальная длина домашнего задания увеличена с 256 до 700 символов&lt;br /&gt;
* Тематическое планирование: Добавлена возможность скрыть/показать пояснительную записку для тематического планирования , чтобы было удобнее работать с темами.&lt;br /&gt;
* Управление доступом: Закончена работа над правами завуча&lt;br /&gt;
* Формы: оптимизирован элемент dof_autocomplete (интерактивное выпадающее меню) - теперь он работает быстрее&lt;br /&gt;
* Журнал: на странице просмотра уроков выпадающее меню &amp;quot;режим отображения&amp;quot; заменено на вкладки&lt;br /&gt;
* Журнал: исправлена ошибка, из-за которой при просмотре уроков по персоне не отображались уроки, которые были созданы вручную (не через шаблоны)&lt;br /&gt;
* Журнал: добавлено отображение даты выставления оценки и посещаемости урока в журнале (всплывающая подсказка)&lt;br /&gt;
* Управление доступом: для всех прав доступа добавлено описание&lt;br /&gt;
* Журнал: добавлена возможность выставлять оценку &amp;quot;0&amp;quot;&lt;br /&gt;
* Предметы и предмето-классы: исправлена ошибка, из-за которой не удавалось вернуть предмето-класс обратно в активный статус, если группа Moodle удалена&lt;br /&gt;
* Сотрудники: исправлена ошибка, из-за которой при создании табельного номера не проставлялась дата заключения договора&lt;br /&gt;
* 20+ мелких исправлений ошибок &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз: &lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/inventory | Ресурсы ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/cur| Библиотека для работы с приказами ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===2.3.1 (2011-11-22)===&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-23x/fdo-231.zip/download]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
* Добавлен плагин &amp;quot;Расписание&amp;quot;. Теперь есть возможность планировать учебный процесс создавая расписание при помощи шаблонов&lt;br /&gt;
* Добавлена поддержка библиотеки jQuery&lt;br /&gt;
* Поиск уроков по персонам переделан с использованием AJAX-запросов для ускорения быстродействия&lt;br /&gt;
* Добавлена возможность AJAX-редактирования тематического планирования&lt;br /&gt;
* Добавлены различные режимы отображения расписания (по учителям, по ученикам, по интервалам времени)&lt;br /&gt;
* При составлении расписания учитывается недогруженность/перегруженность учителей и учеников &lt;br /&gt;
* При составлении расписания учитывается пересечение занятий друг с другом (чтобы нельзя было запланировать два урока одному ученику или учителю в разных местах одновременно)&lt;br /&gt;
* Добавлен детальный вывод ошибок, в случае когда невозможно создать расписание&lt;br /&gt;
* Добавлена возможность наследовать учебно-тематическое планирование из предмета в дисциплину&lt;br /&gt;
* Автоматическое создание групп Moodle, при подписке предмето-класса на курс&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;
* Импорт отчета нагрузки учителей переделан на формат csv, читаемый уже из файла отчета, что ускоряет процесс импорта&lt;br /&gt;
* В системе добавлены ссылки,на курсы и другие объекты moodle для облегчения навигации&lt;br /&gt;
* Улучшен внешний вид календаря в дневнике (видно, в какие дни у ученика есть занятия, подсвечивается текущая неделя)&lt;br /&gt;
* Появилась возможность просмотра истории, если у ученика были пересдачи по предмету&lt;br /&gt;
*Более 30+ исправлений ошибок&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз:&lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Академические группы ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/schedule | Расписание ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
** [[Разработка:modlibs/jquery| Библиотека jQuery ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schdays | Учебные дни ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===2.3.0 Beta 1 (2011-07-11)===&lt;br /&gt;
&lt;br /&gt;
Просмотр информации по подразделениям, собственные права и конфигурации деканата, отчеты по персонам.&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-23x/230b1.zip/download]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
*Просмотр информации объектов деканата по структурным подразделениям;&lt;br /&gt;
*Реализована собственная система прав в деканате, независимая от системы прав в Moodle;&lt;br /&gt;
*Интерфейс для просмотра прав для доверенности и персоны;  &lt;br /&gt;
*Реализованы собственные конфигурации в деканате;&lt;br /&gt;
*Интерфейс просмотра настроек конфигурации;&lt;br /&gt;
*Запрос отчетности для учащихся и сотрудников по активности деятельности в Moodle;&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;
*Автоматическое заполнение итоговой ведомости по итоговым оценкам из Moodle;&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;
*Шаблон расписания занятий (пока может использоваться шаблон из версии 1.6.2)&lt;br /&gt;
*AJAX-элемент с автоматической подгрузкой вариантов выбора&lt;br /&gt;
*Приказ о формировании групп&lt;br /&gt;
*Управление прецедентами, обращениями и служебными заданиями&lt;br /&gt;
*Управление оплатой за обучение &lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз:&lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/acl | Управление доступом ]]&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Периоды ]]&lt;br /&gt;
** [[Разработка:im/cfg | Управление настройками ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/acl |  Полномочия ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:storages/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | История обучения академических групп  ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/config | Настройки ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/pridepends | Зависимости дисциплин ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/reports | Отчеты  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
** [[Разработка:sync/minfo | Плагин получения информации из Moodle ]]&lt;br /&gt;
** [[Разработка:sync/mreports | Отчеты по пользователям и курсам Moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/aclwarrantagents |  Применение доверенностей ]]&lt;br /&gt;
** [[Разработка:workflows/aclwarrants |  Доверенности ]]&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===2.2.3 Beta 1 (2011-03-24)===&lt;br /&gt;
Тематическое планироване, приказы о переводе на следующую параллель.&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-22x/223b1.zip/download]&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;
* Отображение дневника учащегося в Google Chrome&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;
* Шаблон расписания занятий (пока может использоваться шаблон из версии 1.6.2)&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;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/agroups | Периоды ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/learningorders | Приказы контингента ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/agrouphistory | Истоия обучения академаческих групп  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===2.2.2 Beta 4 (2010-11-11)===&lt;br /&gt;
Нагрузка преподавателей, учебный план учащихся, расписание учебных занятий.&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-22x/222b4.zip/download]&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;
* Синхронизация персоны деканата с пользователем moodle.&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;
* Шаблон расписания занятий (пока может использоваться шаблон из версии 1.6.2)&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;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/agroups | Периоды ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/ig| Идеограммы ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpassed | Изучаемые и пройденные курсы учащихся ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programms | Программы ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/courseenrolment | Подписка учащихся на курс moodle ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/plans | Тематическое планирование ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schevents | События ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&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;
&lt;br /&gt;
===2.2.1 Beta 3 (2010-05-27)===&lt;br /&gt;
Управление сотрудниками, должностями и вакансиями.&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-22x/221b3.zip/download]&lt;br /&gt;
&lt;br /&gt;
Новые возможности:&lt;br /&gt;
* Регистрация договоров с сотрудниками&lt;br /&gt;
* Управление должностями в организации&lt;br /&gt;
* Управление вакансиями&lt;br /&gt;
* Работа с табельными номерами&lt;br /&gt;
* Распределение преподаваемых предметов по учителям (указание того, какой учитель какой предмет ведет)&lt;br /&gt;
* Синхронизация подписок на предметы с подписками на курс в Moodle (пользователь автоматически записывается/отписывается с курса при изменении статуса подписки на предмет)&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;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/employees | Сотрудники ]]&lt;br /&gt;
** [[Разработка:im/agroups | Периоды ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/appointments | Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/positions | Должности ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/appointments | appointments Назначения на должность (табельные номера) ]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/eagreements | eagreements - договора с сотрудниками ]]&lt;br /&gt;
** [[Разработка:workflows/positions | positions - должности ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/schpositions | Вакансии ]]&lt;br /&gt;
** [[Разработка:workflows/teachers |  Учителя (сопоставление табельных номеров преподаваемым предметам)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===2.2.0 Beta1 (2010-03-17)===&lt;br /&gt;
Информационная модель и бизнес-процессы учебного заведения.&lt;br /&gt;
&lt;br /&gt;
Скачать: [http://sourceforge.net/projects/freedeansoffice/files/freedeansoffice/fdo-22x/220b1.zip/download]&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;
* Синхронизация подписок с Moodle&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;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/ages | Периоды ]]&lt;br /&gt;
** [[Разработка:im/agroups | Периоды ]]&lt;br /&gt;
** [[Разработка:im/cpassed | Подписки на дисциплины ]]&lt;br /&gt;
** [[Разработка:im/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:im/departments | Структурные подразделения ]]&lt;br /&gt;
** [[Разработка:im/journal | Журнал ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/plans | Тематические планирования]]&lt;br /&gt;
** [[Разработка:im/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:im/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:im/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
** [[Разработка:im/recordbook | Зачетная книжка ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
** [[Разработка:im/university | &amp;quot;Университет&amp;quot; ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/addresses |  Адреса ]]&lt;br /&gt;
** [[Разработка:storages/ages | Учебные периоды ]]&lt;br /&gt;
** [[Разработка:storages/agroups | Академические группы  ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/cpgrades | Текущие оценки ]]&lt;br /&gt;
** [[Разработка:storages/cstreamlinks | Связь академических групп и учебных процессов ]]&lt;br /&gt;
** [[Разработка:storages/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/learninghistory | История обучения слушателей в учебных периодах ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/plans | Тематические планирования ]]&lt;br /&gt;
** [[Разработка:storages/programmitems | Дисциплины ]]&lt;br /&gt;
** [[Разработка:storages/programmsbcs |Подписки на учебные программы  ]]&lt;br /&gt;
** [[Разработка:storages/schevents | Учебные события (уроки, лекции, семинары) ]]&lt;br /&gt;
** [[Разработка:storages/schpresences | Присутствие слушателей на учебных событиях ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    |  история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/workplaces   | Места работы (привязка персон к организациям)]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/ages | Учебные периоды]]&lt;br /&gt;
** [[Разработка:workflows/agroups | Академические группы]]&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/cpassed | подписки на обучения]]&lt;br /&gt;
** [[Разработка:workflows/cstreams | Учебные процессы ]]&lt;br /&gt;
** [[Разработка:workflows/programmitems | Учебные процессы]]&lt;br /&gt;
** [[Разработка:workflows/programms | Учебные программы ]]&lt;br /&gt;
** [[Разработка:workflows/programmsbcs | Подписки на учебные программы ]]&lt;br /&gt;
&lt;br /&gt;
Проекты:&lt;br /&gt;
[[Разработка:Проект_090529|Проект 2009-05-29 (версия 2.1.0 =&amp;gt; 2.2.0)]]&lt;br /&gt;
[[Разработка:Проект_100111_итерации|Итерации по проекту 2010-91-11 (подготовка к релизу версии 2.2.0)]]&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;
* ООО &amp;quot;Открытые технологии&amp;quot;&lt;br /&gt;
* ГОУ Центр Образования &amp;quot;Технологии обучения&amp;quot;&lt;br /&gt;
* ЮРГУЭС&lt;br /&gt;
* СИБАДИ&lt;br /&gt;
&lt;br /&gt;
===2.1.0 (2009-06-10)===&lt;br /&gt;
Управление договорами на обучение&lt;br /&gt;
&lt;br /&gt;
Новые возможности для пользователей:&lt;br /&gt;
&lt;br /&gt;
* Управление договорами на обучение:&lt;br /&gt;
** Договора могут вносить кураторы, имеющие возможность просматривать только &amp;quot;свои&amp;quot; договора и редактировать их только до подписания.&lt;br /&gt;
** Для договоров создан рабочий процесс, отслеживающий их продвижение от внесения в систему, подписания сторонами, до расторжения. При этом для ученика автоматически регистрируется и удаляется учетная запись Moodle.&lt;br /&gt;
** Текст договора автоматически формируется в форматах ODF (Open Office Writer) и HTML по шаблонам, которые могут быть изменены.&lt;br /&gt;
* Справочник участников учебного процесса (студенты, законные представители/клиенты, кураторы)&lt;br /&gt;
** Просмотр списков, дополнительной информации, паспортных данных для пользователей, имеющих соответствующие привелегии в системе.&lt;br /&gt;
** Автоматическое обновление учетной записи Moodle при изменении данных о студенте.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Новые инструменты для разработчиков:&lt;br /&gt;
* История изменения статусов объектов.&lt;br /&gt;
* Генерация документов по шаблонам (ODF, CSV, HTML).&lt;br /&gt;
* Работа с приказами: приказом считается некоторое законченное, единоличное действие в системе, изменяющее ее состояние, приказ содержит исходные данные и перед исполнением должен быть подписан полномочным пользователем, при этом формируется контрольная сумма по всем исходным данным. В момент исполнения проверяется, подписан ли приказ, и верна ли контрольная сумма. Формат исходных данных для приказа совместим с форматом исходных данных для генератора документов по шаблонам.&lt;br /&gt;
* Библиотека виджетов: прогресс-бар, обертки для квикформа.&lt;br /&gt;
* Улучшение в альтернативном API Moodle (modlib/ama)&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз:&lt;br /&gt;
&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/atest | Автоматическое тестирование плагинов (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:im/exampleim | Пример плагина интерфейса (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:im/persons | Отображение персоны из справочника персон ]]&lt;br /&gt;
** [[Разработка:im/sel | Управление договорами на обучение ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/examplelib| Пример плагина библиотеки (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
** [[Разработка:modlibs/pear| Программный интерфейс к библиотеке pear ]]&lt;br /&gt;
** [[Разработка:modlibs/refbook| Справочник табличных данных (списки регионов, типы удостоверений личности и т.д. ]]&lt;br /&gt;
** [[Разработка:modlibs/templater| Верстка документов по шаблонам ]]&lt;br /&gt;
** [[Разработка:modlibs/widgets| Библиотека веб-виджетов ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/addresses | addresses - адреса ]]&lt;br /&gt;
** [[Разработка:storages/contracts | contracts - договор учащегося с учебным заведением ]]&lt;br /&gt;
** [[Разработка:storages/departments    | departments - подразделения учебного заведения ]]&lt;br /&gt;
** [[Разработка:storages/examplest    | examplest - пример справочника (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:storages/orders    | orders - приказы ]]&lt;br /&gt;
** [[Разработка:storages/organizations    | organizations - организации]]&lt;br /&gt;
** [[Разработка:storages/persons | persons - адресная книга, включающая всех участников учебного процесса ]]&lt;br /&gt;
** [[Разработка:storages/statushistory    | statushistory - история изменения статусов]]&lt;br /&gt;
** [[Разработка:storages/workplace   | workplace - привязка к месту работы]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/examplesync | examplesync - пример плагина синхронизации (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:sync/personstom | personstom - синхронизация справочника персон с пользователями moodle ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/contracts | contracts - рабочий процесс для договора на обучение]]&lt;br /&gt;
** [[Разработка:workflows/examplewf   | examplewf - пример рабочего процесса (для разработчиков) ]]&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&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;
===2.0.1 (2008-08-29)===&lt;br /&gt;
SDK для разработчиков&lt;br /&gt;
&lt;br /&gt;
Релиз предназначен для ознакомления разработчиков плагинов с API системы. Содержит примеры плагинов каждого типа, демонстрирующие возможности ядра системы.&lt;br /&gt;
&lt;br /&gt;
Плагины, вошедшие в релиз:&lt;br /&gt;
* Интерфейсы&lt;br /&gt;
** [[Разработка:im/admin | Управление плагинами ]]&lt;br /&gt;
** [[Разработка:im/exampleim | Пример плагина интерфейса (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:im/standard | Стандартный плагин интерфейса ]]&lt;br /&gt;
* Библиотеки&lt;br /&gt;
** [[Разработка:modlibs/ama| Альтернативный API управления объектами Moodle ]]&lt;br /&gt;
** [[Разработка:modlibs/examplelib| Пример плагина библиотеки (для разработчиков) ]]&lt;br /&gt;
** [[Разработка:modlibs/nvg| Библиотека навигации ]]&lt;br /&gt;
* Справочники&lt;br /&gt;
** [[Разработка:storages/examplest    | examplest - пример справочника (для разработчиков) ]]&lt;br /&gt;
* Синхронизация&lt;br /&gt;
** [[Разработка:sync/examplesync | examplesync - пример плагина синхронизации (для разработчиков) ]]&lt;br /&gt;
* Рабочие процессы&lt;br /&gt;
** [[Разработка:workflows/examplewf   | examplewf - пример рабочего процесса (для разработчиков) ]]&lt;br /&gt;
&lt;br /&gt;
Разработчики:&lt;br /&gt;
* Алексей Дьяченко&lt;br /&gt;
* Илья Смирнов&lt;br /&gt;
* Евгений Цыганцов&lt;br /&gt;
Поддержка проекта: ООО &amp;quot;Открытые технологии&amp;quot;&lt;/div&gt;</summary>
		<author><name>Konovalov</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/soap&amp;diff=2834</id>
		<title>Разработка:sync/soap</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/soap&amp;diff=2834"/>
				<updated>2014-10-02T06:50:13Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = soap&lt;br /&gt;
| type = sync&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Описание=&lt;br /&gt;
&lt;br /&gt;
Веб-сервис для интеграции с другими системами по протоколу SOAP.&lt;br /&gt;
Плагин использует инфраструктуру [[Разработка:storages/sync | storages/sync ]] для хранения соответствия внутренних и внешних id объектов и [[Разработка:storages/synclog | storages/synclog ]] для логирования всех операций синхронизации.&lt;br /&gt;
&lt;br /&gt;
Плагин объявляет SOAP-сервис, который располагается по адресам:&lt;br /&gt;
* /sync/soap/soap.php?do=wsdl - wsdl-файл&lt;br /&gt;
* /sync/soap/soap.php?do=service - сам сервис&lt;br /&gt;
&lt;br /&gt;
У каждого метода присутствуют следующие обязательные служебные параметры:&lt;br /&gt;
* requestime - время генерации запроса, используется для устаревания запроса с целью защиты от атаки на &amp;quot;повторение перехваченного запроса&amp;quot;&lt;br /&gt;
* requestlogin - идентифицирует систему-отправитель запроса (задается в sync/soap/cfg/clients.php, вместе с паролем requestpassword и необязательными параметрами)&lt;br /&gt;
* requesthash - sha1-хеш от всех полей запроса в алфавитном порядке, включая предыдущие два, а так же поля requestpassword (в самом запросе не участвует). Используется для подтверждения подлинности запроса.&lt;br /&gt;
&lt;br /&gt;
Имена полей soap-запросов должны совпадать с именами полей в справочниках: [[Разработка:storages/metacontracts | storages/metacontracts ]], [[Разработка:storages/persons | storages/persons ]], [[Разработка:storages/contracts | storages/contracts ]]&lt;br /&gt;
&lt;br /&gt;
Во всех запросах используются только внешние id. Например, при создании персоны новая система передает свой уникальный id, которым она её обозначает. Этот id сохраняется в [[Разработка:storages/sync | storages/sync ]]. При создании контракта на обучение, внешняя система передает свой собственный id персоны (которая была создана ранее), плагин [[Разработка:sync/soap | sync/soap ]] конвертирует этот id во внутренний через справочник [[Разработка:storages/sync | storages/sync ]] и создает запись в [[Разработка:storages/contracts | storages/contracts ]]. Если внешний id объекта не передан, запрос возвращает ошибку (объект не создается и не обновляется).&lt;br /&gt;
&lt;br /&gt;
Служебные, специальные и автоматически-вычисляемые поля справочников не доступны для редактирования через SOAP-запросы (например adddate, status). Действия, которые запрещены пользователям системы через интерфейс, запрещены и через SOAP-запросы (например, нельзя сменить персону в уже созданном контракте).&lt;br /&gt;
&lt;br /&gt;
Все запросы обрабатывают вложенный объект cov. Все поля внутри объекта cov сохраняются (обновляются) в справочнике [[Разработка:storages/cov | storages/cov ]]. Не упомянутые в запросе поля (ранее сохраненные в cov) игнорируются. Все имена полей, присутствующие в соответствующем справочнике зарезервированы и не могут быть переданы через объект cov (например, нельзя сохранить поле cov/status для объекта persons, потому что в нем уже есть поле status).&lt;br /&gt;
&lt;br /&gt;
Подразделение для размещения объекта передается в SOAP-запросах через его код (code), а не id.&lt;br /&gt;
Успешная операция для методов типа 'set_' возвращает следующую структуру данных:&lt;br /&gt;
* id - переданный в запросе id объекта&lt;br /&gt;
* dofid - внутренний id объекта&lt;br /&gt;
* modified - время изменения объекта&lt;br /&gt;
* hash - контрольная сумма из storages/sync&lt;br /&gt;
* errorcode - код ошибки, помогающий идентифицировать проблему при исполнении запроса&lt;br /&gt;
&lt;br /&gt;
Для проверки SOAP-запросов используется хеширование по следующему алгоритму:&lt;br /&gt;
&lt;br /&gt;
* requesthash == sha1(requestpassword + requesttime + requestlogin + json(vars) + json(cvars)), где&lt;br /&gt;
&lt;br /&gt;
** vars формируется следующим образом:&lt;br /&gt;
*** Из полей объекта для SOAP-запроса исключаются служебные данные — requesthash, requestlogin, requesttime и дополнительный объект cov&lt;br /&gt;
*** Поля сортируются в алфавитном порядке;&lt;br /&gt;
** cvars — вложенный объект cov, поля которого так же сортируются в алфавитном порядке;&lt;br /&gt;
** json() - функция для преобразования массива/объекта в json-строку.&lt;br /&gt;
** Знаком &amp;quot;+&amp;quot; указана конкатенация строк.&lt;br /&gt;
'''Примечание''': XML-структура SOAP-запроса для вложенных объектов, таких как cov, должна выглядеть следующим образом:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfield&amp;gt;RU&amp;lt;/addfield&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtwo&amp;gt;RU-MOS&amp;lt;/addfieldtwo&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtthree&amp;gt;Москва&amp;lt;/addfieldtthree&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
При использовании ассоциативных массивов, например, на PHP, при попытке передать их SOAP-клиенту произойдёт искажение представления:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfield&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldtwo&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU-MOS&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldthree&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;Москва&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
Поэтому при проверке на сервере хэш не совпадёт.&lt;br /&gt;
&lt;br /&gt;
=API=&lt;br /&gt;
&lt;br /&gt;
==='''set_meta_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные метаконтракта, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id метаконтракта&lt;br /&gt;
** num - Номер метаконтракта&lt;br /&gt;
** departmentcode - Код подразделения&lt;br /&gt;
** cov - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_person($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные персоны, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id метаконтракта&lt;br /&gt;
** firstname - Имя&lt;br /&gt;
** middlename - Отчество&lt;br /&gt;
** lastname - Фамилия&lt;br /&gt;
** preferredname - Префикс для имения (Mr. Dr. Г-н, Г-а)&lt;br /&gt;
** dateofbirth - Дата рождения в UTS&lt;br /&gt;
** gender - Пол (male, female, unknown)&lt;br /&gt;
** email - Основной адрес электронной почты&lt;br /&gt;
** phonehome - Домашний телефон&lt;br /&gt;
** phonework - Рабочий телефон&lt;br /&gt;
** phonecell - Сотовый телефон&lt;br /&gt;
** passtypeid - Тип удостоверения личности (1 - свидетельство о рождении, 2 - паспорт гражданина РФ, 3 - загранпасспорт, 4 - разрешение на временное проживание лица без гражданства, 5 - вид на жительство, 6 - военный билет, 7 - водительсткое удостоверение пластиковое, 8 - вод. удостоверение форма 1, 9 - вод. удостоверение международное)&lt;br /&gt;
** passportserial - Серия удостоверения личности (если предусмотрена типом документа)&lt;br /&gt;
** passportnum - Номер удостоверения личности&lt;br /&gt;
** passportdate - Дата выдачи удостоверения личности в UTS&lt;br /&gt;
** passportem - Название организации, выдавшей удостоверение личности&lt;br /&gt;
** citizenship - Гражданство&lt;br /&gt;
** departmentcode - Основной отдел, к которому приписан человек (может редактировать его данные в persons)&lt;br /&gt;
** about - Характеристика личности&lt;br /&gt;
** skype - Уникальный идентификатор в Skype&lt;br /&gt;
** phoneadd1 - Дополнительный телефон 1&lt;br /&gt;
** phoneadd2 - Дополнительный телефон 2&lt;br /&gt;
** phoneadd3 - Дополнительный телефон 3&lt;br /&gt;
** emailadd1 - Дополнительная электронная почта 1&lt;br /&gt;
** emailadd2 - Дополнительная электронная почта 2&lt;br /&gt;
** emailadd3 - Дополнительная электронная почта 3&lt;br /&gt;
** passportadd(object) - Адрес прописки по паспорту (для генерации документов)&lt;br /&gt;
** address(object) - Текущий адрес (почтовый адрес)&lt;br /&gt;
** birthaddress(object) - Адрес рождения персоны&lt;br /&gt;
** cov - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Формат объектов: passportadd, address, birthaddress''&lt;br /&gt;
* postalcode - Почтовый индекс&lt;br /&gt;
* country - Код страны проживания (по предъявленному паспорту) в ICO 3166-1:1997 (RU)&lt;br /&gt;
* region - Код региона по ISO 3166-2 (RU-NGR, RU-MOS)&lt;br /&gt;
* county - Административный район&lt;br /&gt;
* city - Город&lt;br /&gt;
* streetname - Название улицы&lt;br /&gt;
* streettype - Тип улицы&lt;br /&gt;
* number - Номер дома&lt;br /&gt;
* gate - Подъезд&lt;br /&gt;
* floor - Этаж&lt;br /&gt;
* apartment - Квартира&lt;br /&gt;
* latitude - Широта в градусах&lt;br /&gt;
* longitude - Долгота в градусах&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные договора, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id договора&lt;br /&gt;
** typeid - Тип договора, если у учебного заведения предусмотрено несколько разных типов договоров&lt;br /&gt;
** num - Номер договора&lt;br /&gt;
** numpass - Номер пропуска, студенческого билета и т.п.&lt;br /&gt;
** date - Дата заключения&lt;br /&gt;
** sellerid - Менеджер по работе с клиентами (приемная комиссия, партнер) - добавляет договор, меняет статус до &amp;quot;подписан клиентом&amp;quot;, отслеживает статус договора и ход обучения (id по таблице persons)&lt;br /&gt;
** clientid - Клиент, оплачивающий обучение (законный представитель, сам совершеннолетний ученик или куратор от организации, может принимать значение 0 или null, если клиент создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** studentid - Ученик (может принимать значение 0, если ученик создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** notes - Заметки&lt;br /&gt;
** departmentcode - Подразделение в таблице departments, к которому приписан контракт на обучение (например, принявшее ученика)&lt;br /&gt;
** contractform - Форма договора (шаблон)&lt;br /&gt;
** curatorid - Куратор или классный руководитель данного ученика (по таблице persons или не указан), отслеживает учебный процесс, держит связь с учеником, является посредником между учеником и системой, может быть внешней персоной.&lt;br /&gt;
** enddate - Дата окончания договора&lt;br /&gt;
** metacontractid - id метаконтракта, к которому привязан договор, в таблице metacontracts &lt;br /&gt;
** cov - Дополнительный объект cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы=&lt;br /&gt;
&lt;br /&gt;
===='''check_cov($cov, $fields = null)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить дополнительный объект на предмет соответствия формату&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* cov(array) - дополнительный вложенный объект.&lt;br /&gt;
* fields(object) - поля объекта для проверки дублирующихся полей.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [PI6-PI8], [SC3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_department($code)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли такое подразделение и актуальный ли у него статус&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* code(string) - код подразделения.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP5-SP7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_email($email)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет, можно ли использовать переданный e-mail в системе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* email(string) - электронная почта.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP2], [PI4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_fields_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом проверяют объект SOAP-запроса на предмет некорректных значений полей&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - содержит поля запроса&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_hash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет входящий запрос по sha1-хешу, сверяя наличие требуемых полей и выдаёт код ошибки при её наличии&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - содержит поля запроса, а так же обязательные поля - id, requesttime, requestlogin, requesthash.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true в случае успеха,&lt;br /&gt;
* (string) - иначе - код ошибки: [PR0-PR4], [PI3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''connect_sync($pcode, $provider, $substorage = null)'''====&lt;br /&gt;
&lt;br /&gt;
Создать соединение с объектом синхронизации по названию справочника и поставщику данных&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* pcode(string) - название плагина для синхронизации (metacontracts, persons, ...)&lt;br /&gt;
* provider(string) - название поставщика синхронизации&lt;br /&gt;
* substorage(string) - код внутреннего субсправочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки, или&lt;br /&gt;
* (object) - объект подключения к синхронизации dof_storage_sync_connect&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют действия, сопутствующие SOAP-запросу&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_additional_($input, $operation, $dofid = null)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют дополнительные действия в SOAP-запросе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
* operation(string) - название операции: 'insert', 'update', ...&lt;br /&gt;
* dofid(int) - id объекта из справочника (если не null, то операция 'update', иначе - 'insert')&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - операция прошла успешно&lt;br /&gt;
* (object) - возвращает дополнительные поля, которые надо присоединить к объекту в методе [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_set_base($input, $method)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить базовые действия метода set_:&lt;br /&gt;
* 1) Получить объект синхронизации&lt;br /&gt;
* 2) Получить объект для ответа&lt;br /&gt;
* 3) Просчитать хеш объекта (без служебных полей)&lt;br /&gt;
* 4) Есть ли объект синхронизации с таким id в базе?&lt;br /&gt;
* 4.1) Объект найден. Проверить, нужно ли производить синхронизацию&lt;br /&gt;
* 4.1.1) Синхронизация нужна&lt;br /&gt;
* 4.1.1.1) Обновить объект в базе ([[#update_object($input, $dofid, $method, $table)|update_object()]]), объект синхронизации и сгенерировать ответ 'OK'&lt;br /&gt;
* 4.1.1.2) Логирование&lt;br /&gt;
* 4.1.1.3) Cгенерировать ответ 'OK', синхронизация успешна&lt;br /&gt;
* 4.1.2) Синхронизация не нужна, сгенерировать ответ 'ОК'&lt;br /&gt;
* 4.2) Объект не найден.&lt;br /&gt;
* 4.2.1) Добавить объект в базу ([[#insert_object($input, $method, $table)|insert_object()]]), обрабатывая ошибки, объект синхронизации&lt;br /&gt;
* 4.2.2) Логирование&lt;br /&gt;
* 4.2.3) Cгенерировать ответ 'OK', синхронизация успешна&lt;br /&gt;
* 5) Вернуть ответ&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#insert_object($input, $method, $table)|insert_object()]] и [[#update_object($input, $dofid, $method, $table)|update_object()]]&lt;br /&gt;
* input(object) - объект SOAP-запроса&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект $response (см. метод [[#set_meta_contract($input)|set_meta_contract()]])&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_fields($input, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить поля для вставки или обновления таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с определёнными полями одного из справочника&lt;br /&gt;
* storage(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, в случае ошибки&lt;br /&gt;
* (object) - объект с полями для вставки/обновления записи в таблице&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_key($requestlogin)'''====&lt;br /&gt;
&lt;br /&gt;
Получить ключ идентификатора системы, используя логин.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* requestlogin(string) - идентификатор системы (логин)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если ключ не найден,&lt;br /&gt;
* (string) - ключ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_response($type, $errorcode = 'OK')'''====&lt;br /&gt;
&lt;br /&gt;
Получить каркас объекта ответа для разных типов методов.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* type(string) - тип запроса ('set', 'get', ...)&lt;br /&gt;
* errorcode(string) - код ошибки&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если произошла ошибка&lt;br /&gt;
* (object) - объект для передачи ответа в SOAP-сообщениях&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_storage_error($method, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить код ошибки справочника по названию метода и таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название операции со справочником: 'insert', 'update', ...&lt;br /&gt;
* storage(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого сочетания &amp;quot;метод-справочник&amp;quot; не найдено&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_table($method)'''====&lt;br /&gt;
&lt;br /&gt;
Получить название таблицы (справочника), с которым работает переданный метод&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название метода&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого метода не найдено&lt;br /&gt;
* (string) - название справочника&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_object($input, $requestpassword)'''====&lt;br /&gt;
&lt;br /&gt;
Получить sha1-хеш пришедшего SOAP-запроса по описанному ранее алгоритму&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с обязательными полями id, requesttime, requestlogin, requesthash, объектом cov.&lt;br /&gt;
* requestpassword(string) - ключ идентификатора системы.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_uphash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить хеширование объекта для сравнения с uphash в storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с полями справочника, без специальных полей request*&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_address($input)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить новый адрес&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_object($input, $method, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить объект в базу:&lt;br /&gt;
* Получить из запроса поля для вставки в таблицу: [[#get_fields($input, $storage)|get_fields()]]&lt;br /&gt;
* Выполнить дополнительные действия: [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_()]], в случае ошибок сгенерировать ответ&lt;br /&gt;
* Вставить объект в базу, обработать ошибки&lt;br /&gt;
* Обработать объект cov: [[#update_cov($dofid, $inputcov, $plugincode)|update_cov()]], добавить поля в базу, обработать ошибки&lt;br /&gt;
* В соответствии с настройками выставить статус через [[#set_status_route($table, $dofid, $departmentid)|set_status_route()]], ошибки только логировать&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''normalize_array($item)'''====&lt;br /&gt;
&lt;br /&gt;
Нормализует ошибочно переданный ассоциативный массив в объект&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* item(object) - объект с вложенным массивом item[], в котором находятся объекты:&lt;br /&gt;
** item[0] = stdClass(),&lt;br /&gt;
** item[0]-&amp;gt;key, &lt;br /&gt;
** item[0]-&amp;gt;value, &lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект, в котором поля {item[0]-&amp;gt;key}, а значения: {item[0]-&amp;gt;value}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_method($input, $methodname)'''====&lt;br /&gt;
&lt;br /&gt;
Выполняет базовую проверку переданных параметров (контрольная сумма), проверяет, реализованы ли функции для проверки входных параметров и исполнения запроса, вызывает 'set' метод для переданного в качестве аргумента объекта запроса и метода. В случае возникновения ошибок составляет ответный запрос и выполняет логирование.&lt;br /&gt;
Вызывает следующие методы:&lt;br /&gt;
* [[#check_hash($input)|-&amp;gt;check_hash()]]&lt;br /&gt;
* [[#check_fields_($input)|-&amp;gt;check_fields_$methodname()]]&lt;br /&gt;
* [[#execute_($input)|-&amp;gt;execute_$methodname()]]&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект SOAP-запроса (должны присутствовать служебные поля request*)&lt;br /&gt;
* methodname(string) - название функции, которую необходимо исполнить&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект содерщаший поля:&lt;br /&gt;
** id - переданный в запросе id объекта&lt;br /&gt;
** dofid - внутренний id объекта&lt;br /&gt;
** modified - время изменения объекта&lt;br /&gt;
** hash - контрольная сумма из storages/sync&lt;br /&gt;
** errorcode - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_status_route($table, $dofid, $departmentid)'''====&lt;br /&gt;
&lt;br /&gt;
Установить статус согласно маршруту, заданному в конфиге&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
* dofid(int) - внутренний id объекта из таблицы $storage&lt;br /&gt;
* departmentid(int) - id из таблицы departments&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (array) - код ошибки и описание: array('код_ошибки', 'описание ошибки')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_address($input, $dofid)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить адрес&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице addresses&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат обновления&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_cov($dofid, $inputcov, $plugincode)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить вложенный объект cov для внутренних объектов&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице $plugincode&lt;br /&gt;
* inputcov(object) - объект, по которому происходит перебор&lt;br /&gt;
* plugincode(string) - код плагина storage&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат обновления&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_object($input, $dofid, $method, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить объект в базе:&lt;br /&gt;
* Получить из запроса поля для вставки в таблицу: [[#get_fields($input, $storage)|get_fields()]]&lt;br /&gt;
* Выполнить дополнительные действия: [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_()]], в случае ошибок сгенерировать ответ&lt;br /&gt;
* Обновить объект в базе, обработать ошибки&lt;br /&gt;
* Обработать объект cov: [[#update_cov($dofid, $inputcov, $plugincode)|update_cov()]], добавить поля в базу, обработать ошибки&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице $plugincode&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Коды ошибок=&lt;br /&gt;
&lt;br /&gt;
При успешном выполнении операции синхронизации возвращается код ошибки 'OK'.&lt;br /&gt;
В ином случае, возвращается одна из следующих ошибок:&lt;br /&gt;
&lt;br /&gt;
* Ошибки параметров запроса [P]:&lt;br /&gt;
* Обязательные [PR]&lt;br /&gt;
** PR0 - Данные запроса пришли в некорректном формате&lt;br /&gt;
** PR1 - Отсутствует идентификатор системы [requestlogin]&lt;br /&gt;
** PR2 - Отсутствует время запроса [requesttime]&lt;br /&gt;
** PR3 - Отсутствует контрольная сумма [requesthash]&lt;br /&gt;
** PR4 - Отсутствует идентификатор объекта [id]&lt;br /&gt;
* Некорректные [PI]&lt;br /&gt;
** PI3 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** PI4 - Недопустимые символы в e-mail&lt;br /&gt;
** PI5 - Тип переменной подразделения должен быть строковый&lt;br /&gt;
** PI6 - Тип переменной cov должен быть объектом&lt;br /&gt;
** PI7 - Поля внутри переменной cov не должны быть массивами или объектами&lt;br /&gt;
** PI8 - Поля внутри переменной cov не должны совпадать с полями справочника (например, status, adddate)&lt;br /&gt;
* Ошибки внутренние [S]:&lt;br /&gt;
* Некорректные параметры [SP]&lt;br /&gt;
** SP1 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** SP2 - Данный e-mail не допустим в системе&lt;br /&gt;
** SP3 - Данный e-mail уже зарегистрирован в системе&lt;br /&gt;
** SP4 - Название подразделения не может быть пустым&lt;br /&gt;
** SP5 - Подразделения с таким кодом не существует&lt;br /&gt;
** SP6 - Подразделение не актуально&lt;br /&gt;
** SP7 - Код подразделения должен быть строкового типа&lt;br /&gt;
** SP8 - Неверно передан параметр с запросом&lt;br /&gt;
* Ошибки кодирования [SC]&lt;br /&gt;
** SC1 - Не зарегистрирована функция проверки параметров запроса для данного метода&lt;br /&gt;
** SC2 - Не зарегистрирована функция исполнения запроса для данного метода&lt;br /&gt;
** SC3 - Не верно передан формат проверки полей вложенного объекта cov&lt;br /&gt;
** SC4 - Для этого метода не задана таблица, с которой он работает&lt;br /&gt;
** SC5 - Неверно указано название операции&lt;br /&gt;
* Ошибки целостности структуры (базы) [SI]&lt;br /&gt;
** SI1 - Не удалось добавить запись в справочник metacontracts&lt;br /&gt;
** SI2 - Не удалось обновить запись в справочнике metacontracts&lt;br /&gt;
** SI3 - Не удалось добавить запись в справочник persons&lt;br /&gt;
** SI4 - Не удалось обновить запись в справочнике persons&lt;br /&gt;
** SI5 - Не удалось добавить запись в справочник contracts&lt;br /&gt;
** SI6 - Не удалось обновить запись в справочнике contracts&lt;br /&gt;
** SI7 - Не удалось обновить запись в справочнике cov&lt;br /&gt;
** SI8 - Не удалось обновить запись в справочнике addresses&lt;br /&gt;
** SI9 - Не удалось найти запись в справочнике addresses для обновления&lt;br /&gt;
&lt;br /&gt;
=Замечания, возможные проблемы=&lt;br /&gt;
&lt;br /&gt;
* Не совпадает контрольная сумма, ошибка [PI3]&lt;br /&gt;
** Необходимо обязательно проверять наличие всех полей, описанных в параметрах функций. Все типы параметров должны соответствовать описанным в wsdl-файле. К примеру, если в PHP попытаться передать массив в параметр, принимающий только строки, произойдёт конвертация массива в строку.&lt;br /&gt;
* Ошибки при выполнении запроса, если не передан какой-либо параметр, либо передан лишний параметр&lt;br /&gt;
** Желательно создавать класс (объект), в котором определены все поля и типы запроса, указанные в wsdl. От него создаётся экземпляр класса и поверх этих полей записываются значения. Таким образом, если поля не указаны, они автоматически должны заполняться значением null. Это позволит упростить процедуру хеширования и взаимодействия с сервером.&lt;/div&gt;</summary>
		<author><name>Konovalov</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/soap&amp;diff=2833</id>
		<title>Разработка:sync/soap</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/soap&amp;diff=2833"/>
				<updated>2014-10-02T06:05:47Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = soap&lt;br /&gt;
| type = sync&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Описание=&lt;br /&gt;
&lt;br /&gt;
Веб-сервис для интеграции с другими системами по протоколу SOAP.&lt;br /&gt;
Плагин использует инфраструктуру [[Разработка:storages/sync | storages/sync ]] для хранения соответствия внутренних и внешних id объектов и [[Разработка:storages/synclog | storages/synclog ]] для логирования всех операций синхронизации.&lt;br /&gt;
&lt;br /&gt;
Плагин объявляет SOAP-сервис, который располагается по адресам:&lt;br /&gt;
* /sync/soap/soap.php?do=wsdl - wsdl-файл&lt;br /&gt;
* /sync/soap/soap.php?do=service - сам сервис&lt;br /&gt;
&lt;br /&gt;
У каждого метода присутствуют следующие обязательные служебные параметры:&lt;br /&gt;
* requestime - время генерации запроса, используется для устаревания запроса с целью защиты от атаки на &amp;quot;повторение перехваченного запроса&amp;quot;&lt;br /&gt;
* requestlogin - идентифицирует систему-отправитель запроса (задается в sync/soap/cfg/clients.php, вместе с паролем requestpassword и необязательными параметрами)&lt;br /&gt;
* requesthash - sha1-хеш от всех полей запроса в алфавитном порядке, включая предыдущие два, а так же поля requestpassword (в самом запросе не участвует). Используется для подтверждения подлинности запроса.&lt;br /&gt;
&lt;br /&gt;
Имена полей soap-запросов должны совпадать с именами полей в справочниках: [[Разработка:storages/metacontracts | storages/metacontracts ]], [[Разработка:storages/persons | storages/persons ]], [[Разработка:storages/contracts | storages/contracts ]]&lt;br /&gt;
&lt;br /&gt;
Во всех запросах используются только внешние id. Например, при создании персоны новая система передает свой уникальный id, которым она её обозначает. Этот id сохраняется в [[Разработка:storages/sync | storages/sync ]]. При создании контракта на обучение, внешняя система передает свой собственный id персоны (которая была создана ранее), плагин [[Разработка:sync/soap | sync/soap ]] конвертирует этот id во внутренний через справочник [[Разработка:storages/sync | storages/sync ]] и создает запись в [[Разработка:storages/contracts | storages/contracts ]]. Если внешний id объекта не передан, запрос возвращает ошибку (объект не создается и не обновляется).&lt;br /&gt;
&lt;br /&gt;
Служебные, специальные и автоматически-вычисляемые поля справочников не доступны для редактирования через SOAP-запросы (например adddate, status). Действия, которые запрещены пользователям системы через интерфейс, запрещены и через SOAP-запросы (например, нельзя сменить персону в уже созданном контракте).&lt;br /&gt;
&lt;br /&gt;
Все запросы обрабатывают вложенный объект cov. Все поля внутри объекта cov сохраняются (обновляются) в справочнике [[Разработка:storages/cov | storages/cov ]]. Не упомянутые в запросе поля (ранее сохраненные в cov) игнорируются. Все имена полей, присутствующие в соответствующем справочнике зарезервированы и не могут быть переданы через объект cov (например, нельзя сохранить поле cov/status для объекта persons, потому что в нем уже есть поле status).&lt;br /&gt;
&lt;br /&gt;
Подразделение для размещения объекта передается в SOAP-запросах через его код (code), а не id.&lt;br /&gt;
Успешная операция для методов типа 'set_' возвращает следующую структуру данных:&lt;br /&gt;
* id - переданный в запросе id объекта&lt;br /&gt;
* dofid - внутренний id объекта&lt;br /&gt;
* modified - время изменения объекта&lt;br /&gt;
* hash - контрольная сумма из storages/sync&lt;br /&gt;
* errorcode - код ошибки, помогающий идентифицировать проблему при исполнении запроса&lt;br /&gt;
&lt;br /&gt;
Для проверки SOAP-запросов используется хеширование по следующему алгоритму:&lt;br /&gt;
&lt;br /&gt;
* requesthash == sha1(requestpassword + requesttime + requestlogin + json(vars) + json(cvars)), где&lt;br /&gt;
&lt;br /&gt;
** vars формируется следующим образом:&lt;br /&gt;
*** Из полей объекта для SOAP-запроса исключаются служебные данные — requesthash, requestlogin, requesttime и дополнительный массив cov&lt;br /&gt;
*** Поля сортируются в алфавитном порядке;&lt;br /&gt;
** cvars — вложенный объект cov, поля которого так же сортируются в алфавитном порядке;&lt;br /&gt;
** json() - функция для преобразования массива/объекта в json-строку.&lt;br /&gt;
** Знаком &amp;quot;+&amp;quot; указана конкатенация строк.&lt;br /&gt;
'''Примечание''': XML-структура SOAP-запроса для вложенных объектов, таких как cov, должна выглядеть следующим образом:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfield&amp;gt;RU&amp;lt;/addfield&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtwo&amp;gt;RU-MOS&amp;lt;/addfieldtwo&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtthree&amp;gt;Москва&amp;lt;/addfieldtthree&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
При использовании ассоциативных массивов, например, на PHP, при попытке передать их SOAP-клиенту произойдёт искажение представления:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfield&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldtwo&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU-MOS&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldthree&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;Москва&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
Поэтому при проверке на сервере хэш не совпадёт.&lt;br /&gt;
&lt;br /&gt;
=API=&lt;br /&gt;
&lt;br /&gt;
==='''set_meta_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные метаконтракта, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id метаконтракта&lt;br /&gt;
** num - Номер метаконтракта&lt;br /&gt;
** departmentcode - Код подразделения&lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_person($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные персоны, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id метаконтракта&lt;br /&gt;
** firstname - Имя&lt;br /&gt;
** middlename - Отчество&lt;br /&gt;
** lastname - Фамилия&lt;br /&gt;
** preferredname - Префикс для имения (Mr. Dr. Г-н, Г-а)&lt;br /&gt;
** dateofbirth - Дата рождения в UTS&lt;br /&gt;
** gender - Пол (male, female, unknown)&lt;br /&gt;
** email - Основной адрес электронной почты&lt;br /&gt;
** phonehome - Домашний телефон&lt;br /&gt;
** phonework - Рабочий телефон&lt;br /&gt;
** phonecell - Сотовый телефон&lt;br /&gt;
** passtypeid - Тип удостоверения личности (1 - свидетельство о рождении, 2 - паспорт гражданина РФ, 3 - загранпасспорт, 4 - разрешение на временное проживание лица без гражданства, 5 - вид на жительство, 6 - военный билет, 7 - водительсткое удостоверение пластиковое, 8 - вод. удостоверение форма 1, 9 - вод. удостоверение международное)&lt;br /&gt;
** passportserial - Серия удостоверения личности (если предусмотрена типом документа)&lt;br /&gt;
** passportnum - Номер удостоверения личности&lt;br /&gt;
** passportdate - Дата выдачи удостоверения личности в UTS&lt;br /&gt;
** passportem - Название организации, выдавшей удостоверение личности&lt;br /&gt;
** citizenship - Гражданство&lt;br /&gt;
** departmentcode - Основной отдел, к которому приписан человек (может редактировать его данные в persons)&lt;br /&gt;
** about - Характеристика личности&lt;br /&gt;
** skype - Уникальный идентификатор в Skype&lt;br /&gt;
** phoneadd1 - Дополнительный телефон 1&lt;br /&gt;
** phoneadd2 - Дополнительный телефон 2&lt;br /&gt;
** phoneadd3 - Дополнительный телефон 3&lt;br /&gt;
** emailadd1 - Дополнительная электронная почта 1&lt;br /&gt;
** emailadd2 - Дополнительная электронная почта 2&lt;br /&gt;
** emailadd3 - Дополнительная электронная почта 3&lt;br /&gt;
** passportadd(object) - Адрес прописки по паспорту (для генерации документов)&lt;br /&gt;
** address(object) - Текущий адрес (почтовый адрес)&lt;br /&gt;
** birthaddress(object) - Адрес рождения персоны&lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Формат объектов: passportadd, address, birthaddress''&lt;br /&gt;
* postalcode - Почтовый индекс&lt;br /&gt;
* country - Код страны проживания (по предъявленному паспорту) в ICO 3166-1:1997 (RU)&lt;br /&gt;
* region - Код региона по ISO 3166-2 (RU-NGR, RU-MOS)&lt;br /&gt;
* county - Административный район&lt;br /&gt;
* city - Город&lt;br /&gt;
* streetname - Название улицы&lt;br /&gt;
* streettype - Тип улицы&lt;br /&gt;
* number - Номер дома&lt;br /&gt;
* gate - Подъезд&lt;br /&gt;
* floor - Этаж&lt;br /&gt;
* apartment - Квартира&lt;br /&gt;
* latitude - Широта в градусах&lt;br /&gt;
* longitude - Долгота в градусах&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные договора, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id договора&lt;br /&gt;
** typeid - Тип договора, если у учебного заведения предусмотрено несколько разных типов договоров&lt;br /&gt;
** num - Номер договора&lt;br /&gt;
** numpass - Номер пропуска, студенческого билета и т.п.&lt;br /&gt;
** date - Дата заключения&lt;br /&gt;
** sellerid - Менеджер по работе с клиентами (приемная комиссия, партнер) - добавляет договор, меняет статус до &amp;quot;подписан клиентом&amp;quot;, отслеживает статус договора и ход обучения (id по таблице persons)&lt;br /&gt;
** clientid - Клиент, оплачивающий обучение (законный представитель, сам совершеннолетний ученик или куратор от организации, может принимать значение 0 или null, если клиент создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** studentid - Ученик (может принимать значение 0, если ученик создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** notes - Заметки&lt;br /&gt;
** departmentcode - Подразделение в таблице departments, к которому приписан контракт на обучение (например, принявшее ученика)&lt;br /&gt;
** contractform - Форма договора (шаблон) &lt;br /&gt;
** organizationid - Юридическое лицо в таблице organizations, оплачивающее договор, если ученик платит за себя сам - то не указывается.&lt;br /&gt;
** curatorid - Куратор или классный руководитель данного ученика (по таблице persons или не указан), отслеживает учебный процесс, держит связь с учеником, является посредником между учеником и системой, может быть внешней персоной.&lt;br /&gt;
** enddate - Дата окончания договора&lt;br /&gt;
** metacontractid - id метаконтракта, к которому привязан договор, в таблице metacontracts &lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы=&lt;br /&gt;
&lt;br /&gt;
===='''check_cov($cov, $fields = null)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить дополнительный массив на предмет соответствия формату&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* cov(array) - дополнительный вложенный массив.&lt;br /&gt;
* fields(object) - поля объекта для проверки дублирующихся полей.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [PI6-PI8], [SC3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_department($code)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли такое подразделение и актуальный ли у него статус&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* code(string) - код подразделения.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP5-SP7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_email($email)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет, можно ли использовать переданный e-mail в системе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* email(string) - электронная почта.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP2], [PI4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_fields_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом проверяют объект SOAP-запроса на предмет некорректных значений полей&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - содержит поля запроса&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_hash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет входящий запрос по sha1-хешу, сверяя наличие требуемых полей и выдаёт код ошибки при её наличии&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - содержит поля запроса, а так же обязательные поля - id, requesttime, requestlogin, requesthash.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true в случае успеха,&lt;br /&gt;
* (string) - иначе - код ошибки: [PR0-PR4], [PI3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''connect_sync($pcode, $provider, $substorage = null)'''====&lt;br /&gt;
&lt;br /&gt;
Создать соединение с объектом синхронизации по названию справочника и поставщику данных&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* pcode(string) - название плагина для синхронизации (metacontracts, persons, ...)&lt;br /&gt;
* provider(string) - название поставщика синхронизации&lt;br /&gt;
* substorage(string) - код внутреннего субсправочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки, или&lt;br /&gt;
* (object) - объект подключения к синхронизации dof_storage_sync_connect&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют действия, сопутствующие SOAP-запросу&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_additional_($input, $operation, $dofid = null)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют дополнительные действия в SOAP-запросе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
* operation(string) - название операции: 'insert', 'update', ...&lt;br /&gt;
* dofid(int) - id объекта из справочника (если не null, то операция 'update', иначе - 'insert')&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - операция прошла успешно&lt;br /&gt;
* (object) - возвращает дополнительные поля, которые надо присоединить к объекту в методе [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_set_base($input, $method)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить базовые действия метода set_:&lt;br /&gt;
* 1) Получить объект синхронизации&lt;br /&gt;
* 2) Получить объект для ответа&lt;br /&gt;
* 3) Просчитать хеш объекта (без служебных полей)&lt;br /&gt;
* 4) Есть ли объект синхронизации с таким id в базе?&lt;br /&gt;
* 4.1) Объект найден. Проверить, нужно ли производить синхронизацию&lt;br /&gt;
* 4.1.1) Синхронизация нужна&lt;br /&gt;
* 4.1.1.1) Обновить объект в базе ([[#update_object($input, $dofid, $method, $table)|update_object()]]), объект синхронизации и сгенерировать ответ 'OK'&lt;br /&gt;
* 4.1.1.2) Логирование&lt;br /&gt;
* 4.1.1.3) Cгенерировать ответ 'OK', синхронизация успешна&lt;br /&gt;
* 4.1.2) Синхронизация не нужна, сгенерировать ответ 'ОК'&lt;br /&gt;
* 4.2) Объект не найден.&lt;br /&gt;
* 4.2.1) Добавить объект в базу ([[#insert_object($input, $method, $table)|insert_object()]]), обрабатывая ошибки, объект синхронизации&lt;br /&gt;
* 4.2.2) Логирование&lt;br /&gt;
* 4.2.3) Cгенерировать ответ 'OK', синхронизация успешна&lt;br /&gt;
* 5) Вернуть ответ&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#insert_object($input, $method, $table)|insert_object()]] и [[#update_object($input, $dofid, $method, $table)|update_object()]]&lt;br /&gt;
* input(object) - объект SOAP-запроса&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект $response (см. метод [[#set_meta_contract($input)|set_meta_contract()]])&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_fields($input, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить поля для вставки или обновления таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с определёнными полями одного из справочника&lt;br /&gt;
* storage(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, в случае ошибки&lt;br /&gt;
* (object) - объект с полями для вставки/обновления записи в таблице&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_key($requestlogin)'''====&lt;br /&gt;
&lt;br /&gt;
Получить ключ идентификатора системы, используя логин.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* requestlogin(string) - идентификатор системы (логин)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если ключ не найден,&lt;br /&gt;
* (string) - ключ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_response($type, $errorcode = 'OK')'''====&lt;br /&gt;
&lt;br /&gt;
Получить каркас объекта ответа для разных типов методов.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* type(string) - тип запроса ('set', 'get', ...)&lt;br /&gt;
* errorcode(string) - код ошибки&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если произошла ошибка&lt;br /&gt;
* (object) - объект для передачи ответа в SOAP-сообщениях&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_storage_error($method, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить код ошибки справочника по названию метода и таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название операции со справочником: 'insert', 'update', ...&lt;br /&gt;
* storage(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого сочетания &amp;quot;метод-справочник&amp;quot; не найдено&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_table($method)'''====&lt;br /&gt;
&lt;br /&gt;
Получить название таблицы (справочника), с которым работает переданный метод&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название метода&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого метода не найдено&lt;br /&gt;
* (string) - название справочника&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_object($input, $requestpassword)'''====&lt;br /&gt;
&lt;br /&gt;
Получить sha1-хеш пришедшего SOAP-запроса по описанному ранее алгоритму&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с обязательными полями id, requesttime, requestlogin, requesthash, массивом cov.&lt;br /&gt;
* requestpassword(string) - ключ идентификатора системы.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_uphash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить хеширование объекта для сравнения с uphash в storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с полями справочника, без специальных полей request*&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_address($input)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить новый адрес&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_object($input, $method, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить объект в базу:&lt;br /&gt;
* Получить из запроса поля для вставки в таблицу: [[#get_fields($input, $storage)|get_fields()]]&lt;br /&gt;
* Выполнить дополнительные действия: [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_()]], в случае ошибок сгенерировать ответ&lt;br /&gt;
* Вставить объект в базу, обработать ошибки&lt;br /&gt;
* Обработать массив cov: [[#update_cov($dofid, $inputcov, $plugincode)|update_cov()]], добавить поля в базу, обработать ошибки&lt;br /&gt;
* В соответствии с настройками выставить статус через [[#set_status_route($table, $dofid, $departmentid)|set_status_route()]], ошибки только логировать&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''normalize_array($item)'''====&lt;br /&gt;
&lt;br /&gt;
Нормализует ошибочно переданный ассоциативный массив в объект&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* item(object) - объект с вложенным массивом item[], в котором находятся объекты:&lt;br /&gt;
** item[0] = stdClass(),&lt;br /&gt;
** item[0]-&amp;gt;key, &lt;br /&gt;
** item[0]-&amp;gt;value, &lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект, в котором поля {item[0]-&amp;gt;key}, а значения: {item[0]-&amp;gt;value}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_method($input, $methodname)'''====&lt;br /&gt;
&lt;br /&gt;
Выполняет базовую проверку переданных параметров (контрольная сумма), проверяет, реализованы ли функции для проверки входных параметров и исполнения запроса, вызывает 'set' метод для переданного в качестве аргумента объекта запроса и метода. В случае возникновения ошибок составляет ответный запрос и выполняет логирование.&lt;br /&gt;
Вызывает следующие методы:&lt;br /&gt;
* [[#check_hash($input)|-&amp;gt;check_hash()]]&lt;br /&gt;
* [[#check_fields_($input)|-&amp;gt;check_fields_$methodname()]]&lt;br /&gt;
* [[#execute_($input)|-&amp;gt;execute_$methodname()]]&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект SOAP-запроса (должны присутствовать служебные поля request*)&lt;br /&gt;
* methodname(string) - название функции, которую необходимо исполнить&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект содерщаший поля:&lt;br /&gt;
** id - переданный в запросе id объекта&lt;br /&gt;
** dofid - внутренний id объекта&lt;br /&gt;
** modified - время изменения объекта&lt;br /&gt;
** hash - контрольная сумма из storages/sync&lt;br /&gt;
** errorcode - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_status_route($table, $dofid, $departmentid)'''====&lt;br /&gt;
&lt;br /&gt;
Установить статус согласно маршруту, заданному в конфиге&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
* dofid(int) - внутренний id объекта из таблицы $storage&lt;br /&gt;
* departmentid(int) - id из таблицы departments&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (array) - код ошибки и описание: array('код_ошибки', 'описание ошибки')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_address($input, $dofid)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить адрес&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице addresses&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат обновления&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_cov($dofid, $inputcov, $plugincode)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить вложенный массив cov для внутренних объектов&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице $plugincode&lt;br /&gt;
* inputcov(object) - массив или объект, по которому происходит перебор&lt;br /&gt;
* plugincode(string) - код плагина storage&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат обновления&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''update_object($input, $dofid, $method, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Обновить объект в базе:&lt;br /&gt;
* Получить из запроса поля для вставки в таблицу: [[#get_fields($input, $storage)|get_fields()]]&lt;br /&gt;
* Выполнить дополнительные действия: [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_()]], в случае ошибок сгенерировать ответ&lt;br /&gt;
* Обновить объект в базе, обработать ошибки&lt;br /&gt;
* Обработать массив cov: [[#update_cov($dofid, $inputcov, $plugincode)|update_cov()]], добавить поля в базу, обработать ошибки&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* dofid(int) - внутренний id объекта в таблице $plugincode&lt;br /&gt;
* method(string) - метод API, который необходимо выполнить&lt;br /&gt;
* table(string) - название справочника: 'contracts', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Коды ошибок=&lt;br /&gt;
&lt;br /&gt;
При успешном выполнении операции синхронизации возвращается код ошибки 'OK'.&lt;br /&gt;
В ином случае, возвращается одна из следующих ошибок:&lt;br /&gt;
&lt;br /&gt;
* Ошибки параметров запроса [P]:&lt;br /&gt;
* Обязательные [PR]&lt;br /&gt;
** PR0 - Данные запроса пришли в некорректном формате&lt;br /&gt;
** PR1 - Отсутствует идентификатор системы [requestlogin]&lt;br /&gt;
** PR2 - Отсутствует время запроса [requesttime]&lt;br /&gt;
** PR3 - Отсутствует контрольная сумма [requesthash]&lt;br /&gt;
** PR4 - Отсутствует идентификатор объекта [id]&lt;br /&gt;
* Некорректные [PI]&lt;br /&gt;
** PI3 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** PI4 - Недопустимые символы в e-mail&lt;br /&gt;
** PI5 - Тип переменной подразделения должен быть строковый&lt;br /&gt;
** PI6 - Тип переменной cov должен быть массивом&lt;br /&gt;
** PI7 - Поля внутри переменной cov не должны быть массивами или объектами&lt;br /&gt;
** PI8 - Поля внутри переменной cov не должны совпадать с полями справочника (например, status, adddate)&lt;br /&gt;
* Ошибки внутренние [S]:&lt;br /&gt;
* Некорректные параметры [SP]&lt;br /&gt;
** SP1 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** SP2 - Данный e-mail не допустим в системе&lt;br /&gt;
** SP3 - Данный e-mail уже зарегистрирован в системе&lt;br /&gt;
** SP4 - Название подразделения не может быть пустым&lt;br /&gt;
** SP5 - Подразделения с таким кодом не существует&lt;br /&gt;
** SP6 - Подразделение не актуально&lt;br /&gt;
** SP7 - Код подразделения должен быть строкового типа&lt;br /&gt;
** SP8 - Неверно передан параметр с запросом&lt;br /&gt;
* Ошибки кодирования [SC]&lt;br /&gt;
** SC1 - Не зарегистрирована функция проверки параметров запроса для данного метода&lt;br /&gt;
** SC2 - Не зарегистрирована функция исполнения запроса для данного метода&lt;br /&gt;
** SC3 - Не верно передан формат проверки полей вложенного массива cov&lt;br /&gt;
** SC4 - Для этого метода не задана таблица, с которой он работает&lt;br /&gt;
** SC5 - Неверно указано название операции&lt;br /&gt;
* Ошибки целостности структуры (базы) [SI]&lt;br /&gt;
** SI1 - Не удалось добавить запись в справочник metacontracts&lt;br /&gt;
** SI2 - Не удалось обновить запись в справочнике metacontracts&lt;br /&gt;
** SI3 - Не удалось добавить запись в справочник persons&lt;br /&gt;
** SI4 - Не удалось обновить запись в справочнике persons&lt;br /&gt;
** SI5 - Не удалось добавить запись в справочник contracts&lt;br /&gt;
** SI6 - Не удалось обновить запись в справочнике contracts&lt;br /&gt;
** SI7 - Не удалось обновить запись в справочнике cov&lt;br /&gt;
** SI8 - Не удалось обновить запись в справочнике addresses&lt;br /&gt;
** SI9 - Не удалось найти запись в справочнике addresses для обновления&lt;br /&gt;
&lt;br /&gt;
=Замечания, возможные проблемы=&lt;br /&gt;
&lt;br /&gt;
* Не совпадает контрольная сумма, ошибка [PI3]&lt;br /&gt;
** Необходимо обязательно проверять наличие всех полей, описанных в параметрах функций. Все типы параметров должны соответствовать описанным в wsdl-файле. К примеру, если в PHP попытаться передать массив в параметр, принимающий только строки, произойдёт конвертация массива в строку.&lt;br /&gt;
* Ошибки при выполнении запроса, если не передан какой-либо параметр, либо передан лишний параметр&lt;br /&gt;
** Желательно создавать класс (объект), в котором определены все поля и типы запроса, указанные в wsdl. От него создаётся экземпляр класса и поверх этих полей записываются значения. Таким образом, если поля не указаны, они автоматически должны заполняться значением null. Это позволит упростить процедуру хеширования и взаимодействия с сервером.&lt;/div&gt;</summary>
		<author><name>Konovalov</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:lib/storage_base.php&amp;diff=2832</id>
		<title>Разработка:lib/storage base.php</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:lib/storage_base.php&amp;diff=2832"/>
				<updated>2014-10-01T12:22:49Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = core&lt;br /&gt;
| type = core&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
Родительский класс для справочников&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
====insert($dataobject,$quiet=false,$bulk=false)====&lt;br /&gt;
Вставляет запись в БД.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $dataobject (object) - данные для вставки в БД&lt;br /&gt;
* $quiet (bool) - флаг запрета генерации событий, true - запретить, false - разрешить.&lt;br /&gt;
* $bulk (bool) - true если операций последует много, false если обновлено будет всего несколько записей (для производительности).&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int), id вставленной записи&lt;br /&gt;
* (bool), false если операция не удалась&lt;br /&gt;
&lt;br /&gt;
====update($dataobject,$id = NULL,$quiet=false,$bulk=false)====&lt;br /&gt;
Обновляет запись в БД.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $dataobject (object) - данные для вставки в БД&lt;br /&gt;
* $id (int) - id записи в базе, если значение отсутствует id ищется в dataobject.&lt;br /&gt;
* $quiet (bool) - флаг запрета генерации событий, true - запретить, false - разрешить.&lt;br /&gt;
* $bulk (bool) - true если операций последует много, false если обновлено будет всего несколько записей (для производительности).&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool), true если запись обновилась&lt;br /&gt;
* (bool), false если операция не удалась&lt;br /&gt;
&lt;br /&gt;
====delete($id,$quiet=false)====&lt;br /&gt;
Удаляет запись из БД.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $id (int) - id записи в базе.&lt;br /&gt;
* $quiet (bool) - флаг запрета генерации событий, true - запретить, false - разрешить.&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool), true если запись удалилась&lt;br /&gt;
* (bool), false если операция не удалась&lt;br /&gt;
&lt;br /&gt;
====get($conditions, $fields='*', $strictness=IGNORE_MISSING)====&lt;br /&gt;
Получает запись из БД.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $conditions(int) - id записи в таблице&lt;br /&gt;
* $fields (string) - название возвращаемых полей, '*' - все.&lt;br /&gt;
* $strictness (constant) - &lt;br /&gt;
    IGNORE_MISSING - если запись не найдена - то функция возвращает false и выводит отладочное сообщение&lt;br /&gt;
    IGNORE_MULTIPLE - вернуть первое значение и игнорировать остальные, если нашлось больше одной записи (не рекомендуется)&lt;br /&gt;
    MUST_EXIST - если запись не найдена, или найдено несколько записей вместо одной, то будет вызвано исключение.&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object), если запись нашлась&lt;br /&gt;
* (bool), false если операция не удалась&lt;br /&gt;
&lt;br /&gt;
====get_columns($usecache = true)====&lt;br /&gt;
&lt;br /&gt;
Возвращает детальную информацию о полях в таблице. Информация кешируется&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $usecache (bool) - флаг для использования внутреннего кеширования. По-умолчанию включено&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) объекты database_column_info проиндексированные по названию полей&lt;br /&gt;
&lt;br /&gt;
====get_field($conditions,$return, $strictness=IGNORE_MISSING)====&lt;br /&gt;
Возвращает значение поля из БД.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $conditions(int|array) - id записи|массив полей и значений в таблице&lt;br /&gt;
* $return (string) - название поля в таблице.&lt;br /&gt;
* $strictness (constant) - &lt;br /&gt;
    IGNORE_MISSING - если запись не найдена - то функция возвращает false и выводит отладочное сообщение&lt;br /&gt;
    IGNORE_MULTIPLE - вернуть первое значение и игнорировать остальные, если нашлось больше одной записи (не рекомендуется)&lt;br /&gt;
    MUST_EXIST - если запись не найдена, или найдено несколько записей вместо одной, то будет вызвано исключение.&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (string), если запись нашлась&lt;br /&gt;
* (bool), false если операция не удалась&lt;br /&gt;
&lt;br /&gt;
====get_record($conditions, $fields='*', $strictness=IGNORE_MISSING)====&lt;br /&gt;
Получает запись из БД по критериям.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $conditions(array) - массив полей и значений в таблице&lt;br /&gt;
* $fields (string) - название возвращаемых полей, '*' - все.&lt;br /&gt;
* $strictness (constant) - &lt;br /&gt;
    IGNORE_MISSING - если запись не найдена - то функция возвращает false и выводит отладочное сообщение&lt;br /&gt;
    IGNORE_MULTIPLE - вернуть первое значение и игнорировать остальные, если нашлось больше одной записи (не рекомендуется)&lt;br /&gt;
    MUST_EXIST - если запись не найдена, или найдено несколько записей вместо одной, то будет вызвано исключение.&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object), если запись нашлась&lt;br /&gt;
* (bool), false если операция не удалась&lt;br /&gt;
&lt;br /&gt;
====get_records($conditions=array(), $sort='', $fields='*', $limitfrom=0, $limitnum=0)====&lt;br /&gt;
Получает записи из БД по критериям.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $conditions(array) - массив полей и значений в таблице&lt;br /&gt;
* $sort (string) - сортировка полей&lt;br /&gt;
* $fields (string) - название возвращаемых полей, '*' - все&lt;br /&gt;
* $limitfrom (int) - начиная с какой записи в выборке возвращать результат&lt;br /&gt;
* $limitnum (int) - сколько записей вернуть&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object), если записи нашлась&lt;br /&gt;
* (bool), false если операция не удалась&lt;br /&gt;
&lt;br /&gt;
====get_records_select($select, array $params=null, $sort='', $fields='*', $limitfrom=0, $limitnum=0)====&lt;br /&gt;
Получает записи из БД по sql-запросу после WHERE.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $select (string) - sql-запрос после WHERE&lt;br /&gt;
* $params (array) - маска значений&lt;br /&gt;
* $sort (string) - сортировка полей&lt;br /&gt;
* $fields (string) - название возвращаемых полей, '*' - все&lt;br /&gt;
* $limitfrom (int) - начиная с какой записи в выборке возвращать результат&lt;br /&gt;
* $limitnum (int) - сколько записей вернуть&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object), если записи нашлась&lt;br /&gt;
* (bool), false если операция не удалась&lt;br /&gt;
&lt;br /&gt;
====get_records_sql($sql, array $params=null, $limitfrom=0, $limitnum=0)====&lt;br /&gt;
Получает записи из БД по sql-запросу.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $sql (string) - sql-запрос&lt;br /&gt;
* $params (array) - маска значений&lt;br /&gt;
* $limitfrom (int) - начиная с какой записи в выборке возвращать результат&lt;br /&gt;
* $limitnum (int) - сколько записей вернуть&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object), если записи нашлась&lt;br /&gt;
* (bool), false если операция не удалась&lt;/div&gt;</summary>
		<author><name>Konovalov</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/soap&amp;diff=2831</id>
		<title>Разработка:sync/soap</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/soap&amp;diff=2831"/>
				<updated>2014-09-30T13:53:40Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = soap&lt;br /&gt;
| type = sync&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Описание=&lt;br /&gt;
&lt;br /&gt;
Веб-сервис для интеграции с другими системами по протоколу SOAP.&lt;br /&gt;
Плагин использует инфраструктуру [[Разработка:storages/sync | storages/sync ]] для хранения соответствия внутренних и внешних id объектов и [[Разработка:storages/synclog | storages/synclog ]] для логирования всех операций синхронизации.&lt;br /&gt;
&lt;br /&gt;
Плагин объявляет SOAP-сервис, который располагается по адресам:&lt;br /&gt;
* /sync/soap/soap.php?do=wsdl - wsdl-файл&lt;br /&gt;
* /sync/soap/soap.php?do=service - сам сервис&lt;br /&gt;
&lt;br /&gt;
У каждого метода присутствуют следующие обязательные служебные параметры:&lt;br /&gt;
* requestime - время генерации запроса, используется для устаревания запроса с целью защиты от атаки на &amp;quot;повторение перехваченного запроса&amp;quot;&lt;br /&gt;
* requestlogin - идентифицирует систему-отправитель запроса (задается в sync/soap/cfg/clients.php, вместе с паролем requestpassword и необязательными параметрами)&lt;br /&gt;
* requesthash - sha1-хеш от всех полей запроса в алфавитном порядке, включая предыдущие два, а так же поля requestpassword (в самом запросе не участвует). Используется для подтверждения подлинности запроса.&lt;br /&gt;
&lt;br /&gt;
Имена полей soap-запросов должны совпадать с именами полей в справочниках: [[Разработка:storages/metacontracts | storages/metacontracts ]], [[Разработка:storages/persons | storages/persons ]], [[Разработка:storages/contracts | storages/contracts ]]&lt;br /&gt;
&lt;br /&gt;
Во всех запросах используются только внешние id. Например, при создании персоны новая система передает свой уникальный id, которым она её обозначает. Этот id сохраняется в [[Разработка:storages/sync | storages/sync ]]. При создании контракта на обучение, внешняя система передает свой собственный id персоны (которая была создана ранее), плагин [[Разработка:sync/soap | sync/soap ]] конвертирует этот id во внутренний через справочник [[Разработка:storages/sync | storages/sync ]] и создает запись в [[Разработка:storages/contracts | storages/contracts ]]. Если внешний id объекта не передан, запрос возвращает ошибку (объект не создается и не обновляется).&lt;br /&gt;
&lt;br /&gt;
Служебные, специальные и автоматически-вычисляемые поля справочников не доступны для редактирования через SOAP-запросы (например adddate, status). Действия, которые запрещены пользователям системы через интерфейс, запрещены и через SOAP-запросы (например, нельзя сменить персону в уже созданном контракте).&lt;br /&gt;
&lt;br /&gt;
Все запросы обрабатывают вложенный объект cov. Все поля внутри объекта cov сохраняются (обновляются) в справочнике [[Разработка:storages/cov | storages/cov ]]. Не упомянутые в запросе поля (ранее сохраненные в cov) игнорируются. Все имена полей, присутствующие в соответствующем справочнике зарезервированы и не могут быть переданы через объект cov (например, нельзя сохранить поле cov/status для объекта persons, потому что в нем уже есть поле status).&lt;br /&gt;
&lt;br /&gt;
Подразделение для размещения объекта передается в SOAP-запросах через его код (code), а не id.&lt;br /&gt;
Успешная операция для методов типа 'set_' возвращает следующую структуру данных:&lt;br /&gt;
* id - переданный в запросе id объекта&lt;br /&gt;
* dofid - внутренний id объекта&lt;br /&gt;
* modified - время изменения объекта&lt;br /&gt;
* hash - контрольная сумма из storages/sync&lt;br /&gt;
* errorcode - код ошибки, помогающий идентифицировать проблему при исполнении запроса&lt;br /&gt;
&lt;br /&gt;
Для проверки SOAP-запросов используется хеширование по следующему алгоритму:&lt;br /&gt;
&lt;br /&gt;
* requesthash == sha1(requestpassword + requesttime + requestlogin + json(vars) + json(cvars)), где&lt;br /&gt;
&lt;br /&gt;
** vars формируется следующим образом:&lt;br /&gt;
*** Из полей объекта для SOAP-запроса исключаются служебные данные — requesthash, requestlogin, requesttime и дополнительный массив cov&lt;br /&gt;
*** Поля сортируются в алфавитном порядке;&lt;br /&gt;
** cvars — вложенный объект cov, поля которого так же сортируются в алфавитном порядке;&lt;br /&gt;
** json() - функция для преобразования массива/объекта в json-строку.&lt;br /&gt;
** Знаком &amp;quot;+&amp;quot; указана конкатенация строк.&lt;br /&gt;
'''Примечание''': XML-структура SOAP-запроса для вложенных объектов, таких как cov, должна выглядеть следующим образом:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfield&amp;gt;RU&amp;lt;/addfield&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtwo&amp;gt;RU-MOS&amp;lt;/addfieldtwo&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;addfieldtthree&amp;gt;Москва&amp;lt;/addfieldtthree&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
При использовании ассоциативных массивов, например, на PHP, при попытке передать их SOAP-клиенту произойдёт искажение представления:&lt;br /&gt;
*&amp;lt;cov&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfield&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldtwo&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;RU-MOS&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;key&amp;gt;addfieldthree&amp;lt;/key&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;value&amp;gt;Москва&amp;lt;/value&amp;gt;&lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
*&amp;lt;/cov&amp;gt;&lt;br /&gt;
Поэтому при проверке на сервере хэш не совпадёт.&lt;br /&gt;
&lt;br /&gt;
=API=&lt;br /&gt;
&lt;br /&gt;
==='''set_meta_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные метаконтракта, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id метаконтракта&lt;br /&gt;
** num - Номер метаконтракта&lt;br /&gt;
** departmentcode - Код подразделения&lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_person($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные персоны, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id метаконтракта&lt;br /&gt;
** firstname - Имя&lt;br /&gt;
** middlename - Отчество&lt;br /&gt;
** lastname - Фамилия&lt;br /&gt;
** preferredname - Префикс для имения (Mr. Dr. Г-н, Г-а)&lt;br /&gt;
** dateofbirth - Дата рождения в UTS&lt;br /&gt;
** gender - Пол (male, female, unknown)&lt;br /&gt;
** email - Основной адрес электронной почты&lt;br /&gt;
** phonehome - Домашний телефон&lt;br /&gt;
** phonework - Рабочий телефон&lt;br /&gt;
** phonecell - Сотовый телефон&lt;br /&gt;
** passtypeid - Тип удостоверения личности (1 - свидетельство о рождении, 2 - паспорт гражданина РФ, 3 - загранпасспорт, 4 - разрешение на временное проживание лица без гражданства, 5 - вид на жительство, 6 - военный билет, 7 - водительсткое удостоверение пластиковое, 8 - вод. удостоверение форма 1, 9 - вод. удостоверение международное)&lt;br /&gt;
** passportserial - Серия удостоверения личности (если предусмотрена типом документа)&lt;br /&gt;
** passportnum - Номер удостоверения личности&lt;br /&gt;
** passportdate - Дата выдачи удостоверения личности в UTS&lt;br /&gt;
** passportem - Название организации, выдавшей удостоверение личности&lt;br /&gt;
** citizenship - Гражданство&lt;br /&gt;
** departmentcode - Основной отдел, к которому приписан человек (может редактировать его данные в persons)&lt;br /&gt;
** about - Характеристика личности&lt;br /&gt;
** skype - Уникальный идентификатор в Skype&lt;br /&gt;
** phoneadd1 - Дополнительный телефон 1&lt;br /&gt;
** phoneadd2 - Дополнительный телефон 2&lt;br /&gt;
** phoneadd3 - Дополнительный телефон 3&lt;br /&gt;
** emailadd1 - Дополнительная электронная почта 1&lt;br /&gt;
** emailadd2 - Дополнительная электронная почта 2&lt;br /&gt;
** emailadd3 - Дополнительная электронная почта 3&lt;br /&gt;
** passportadd(object) - Адрес прописки по паспорту (для генерации документов)&lt;br /&gt;
** address(object) - Текущий адрес (почтовый адрес)&lt;br /&gt;
** birthaddress(object) - Адрес рождения персоны&lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Формат объектов: passportadd, address, birthaddress''&lt;br /&gt;
* postalcode - Почтовый индекс&lt;br /&gt;
* country - Код страны проживания (по предъявленному паспорту) в ICO 3166-1:1997 (RU)&lt;br /&gt;
* region - Код региона по ISO 3166-2 (RU-NGR, RU-MOS)&lt;br /&gt;
* county - Административный район&lt;br /&gt;
* city - Город&lt;br /&gt;
* streetname - Название улицы&lt;br /&gt;
* streettype - Тип улицы&lt;br /&gt;
* number - Номер дома&lt;br /&gt;
* gate - Подъезд&lt;br /&gt;
* floor - Этаж&lt;br /&gt;
* apartment - Квартира&lt;br /&gt;
* latitude - Широта в градусах&lt;br /&gt;
* longitude - Долгота в градусах&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные договора, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id договора&lt;br /&gt;
** typeid - Тип договора, если у учебного заведения предусмотрено несколько разных типов договоров&lt;br /&gt;
** num - Номер договора&lt;br /&gt;
** numpass - Номер пропуска, студенческого билета и т.п.&lt;br /&gt;
** date - Дата заключения&lt;br /&gt;
** sellerid - Менеджер по работе с клиентами (приемная комиссия, партнер) - добавляет договор, меняет статус до &amp;quot;подписан клиентом&amp;quot;, отслеживает статус договора и ход обучения (id по таблице persons)&lt;br /&gt;
** clientid - Клиент, оплачивающий обучение (законный представитель, сам совершеннолетний ученик или куратор от организации, может принимать значение 0 или null, если клиент создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** studentid - Ученик (может принимать значение 0, если ученик создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** notes - Заметки&lt;br /&gt;
** departmentcode - Подразделение в таблице departments, к которому приписан контракт на обучение (например, принявшее ученика)&lt;br /&gt;
** contractform - Форма договора (шаблон) &lt;br /&gt;
** organizationid - Юридическое лицо в таблице organizations, оплачивающее договор, если ученик платит за себя сам - то не указывается.&lt;br /&gt;
** curatorid - Куратор или классный руководитель данного ученика (по таблице persons или не указан), отслеживает учебный процесс, держит связь с учеником, является посредником между учеником и системой, может быть внешней персоной.&lt;br /&gt;
** enddate - Дата окончания договора&lt;br /&gt;
** metacontractid - id метаконтракта, к которому привязан договор, в таблице metacontracts &lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы=&lt;br /&gt;
&lt;br /&gt;
===='''check_cov($cov, $fields = null)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить дополнительный массив на предмет соответствия формату&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* cov(array) - дополнительный вложенный массив.&lt;br /&gt;
* fields(object) - поля объекта для проверки дублирующихся полей.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [PI6-PI8], [SC3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_department($code)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли такое подразделение и актуальный ли у него статус&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* code(string) - код подразделения.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP5-SP7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_email($email)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет, можно ли использовать переданный e-mail в системе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* email(string) - электронная почта.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SP2], [PI4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_fields_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом проверяют объект SOAP-запроса на предмет некорректных значений полей&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - содержит поля запроса&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_hash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет входящий запрос по sha1-хешу, сверяя наличие требуемых полей и выдаёт код ошибки при её наличии&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - содержит поля запроса, а так же обязательные поля - id, requesttime, requestlogin, requesthash.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true в случае успеха,&lt;br /&gt;
* (string) - иначе - код ошибки: [PR0-PR4], [PI3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''connect_sync($pcode, $provider, $substorage = null)'''====&lt;br /&gt;
&lt;br /&gt;
Создать соединение с объектом синхронизации по названию справочника и поставщику данных&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* pcode(string) - название плагина для синхронизации (metacontracts, persons, ...)&lt;br /&gt;
* provider(string) - название поставщика синхронизации&lt;br /&gt;
* substorage(string) - код внутреннего субсправочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки, или&lt;br /&gt;
* (object) - объект подключения к синхронизации dof_storage_sync_connect&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_($input)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют действия, сопутствующие SOAP-запросу&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#set_method($input, $methodname)|set_method()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''execute_additional_($input, $operation, $dofid = null)'''====&lt;br /&gt;
&lt;br /&gt;
Методы с таким префиксом исполняют дополнительные действия в SOAP-запросе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' см. метод [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* input(object) - запрос, должен содержать поля справочника&lt;br /&gt;
* operation(string) - название операции: 'insert', 'update', ...&lt;br /&gt;
* dofid(int) - id объекта из справочника (если не null, то операция 'update', иначе - 'insert')&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - операция прошла успешно&lt;br /&gt;
* (object) - возвращает дополнительные поля, которые надо присоединить к объекту в методе [[#insert_object($input, $method, $table)|insert_object()]]&lt;br /&gt;
* (string) - или код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_fields($input, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить поля для вставки или обновления таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с определёнными полями одного из справочника&lt;br /&gt;
* storage(string) - название справочника: 'cov', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, в случае ошибки&lt;br /&gt;
* (object) - объект с полями для вставки/обновления записи в таблице&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_key($requestlogin)'''====&lt;br /&gt;
&lt;br /&gt;
Получить ключ идентификатора системы, используя логин.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* requestlogin(string) - идентификатор системы (логин)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если ключ не найден,&lt;br /&gt;
* (string) - ключ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_response($type, $errorcode = 'OK')'''====&lt;br /&gt;
&lt;br /&gt;
Получить каркас объекта ответа для разных типов методов.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* type(string) - тип запроса ('set', 'get', ...)&lt;br /&gt;
* errorcode(string) - код ошибки&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если произошла ошибка&lt;br /&gt;
* (object) - объект для передачи ответа в SOAP-сообщениях&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_storage_error($method, $storage)'''====&lt;br /&gt;
&lt;br /&gt;
Получить код ошибки справочника по названию метода и таблицы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название операции со справочником: 'insert', 'update', ...&lt;br /&gt;
* storage(string) - название справочника: 'cov', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого сочетания &amp;quot;метод-справочник&amp;quot; не найдено&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_table($method)'''====&lt;br /&gt;
&lt;br /&gt;
Получить название таблицы (справочника), с которым работает переданный метод&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* method(string) - название метода&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если такого метода не найдено&lt;br /&gt;
* (string) - название справочника&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_object($input, $requestpassword)'''====&lt;br /&gt;
&lt;br /&gt;
Получить sha1-хеш пришедшего SOAP-запроса по описанному ранее алгоритму&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с обязательными полями id, requesttime, requestlogin, requesthash, массивом cov.&lt;br /&gt;
* requestpassword(string) - ключ идентификатора системы.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_uphash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить хеширование объекта для сравнения с uphash в storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с полями справочника, без специальных полей request*&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_address($input)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить новый адрес&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_object($input, $method, $table)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить объект в базу:&lt;br /&gt;
* Получить из запроса поля для вставки в таблицу: [[#get_fields($input, $storage)|get_fields()]]&lt;br /&gt;
* Выполнить дополнительные действия: [[#execute_additional_($input, $operation, $dofid = null)|execute_additional_()]], в случае ошибок сгенерировать ответ&lt;br /&gt;
* Вставить объект в базу, обработать ошибки&lt;br /&gt;
* Обработать массив cov: [[#update_cov($dofid, $inputcov, $plugincode)|update_cov()]], добавить поля в базу, обработать ошибки&lt;br /&gt;
* В соответствии с настройками выставить статус через [[#set_status_route($table, $dofid, $departmentid)|set_status_route()]], ошибки только логировать&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект с полями справочника и другими дополнительными полями&lt;br /&gt;
* method(string) - внутренний id объекта в таблице $plugincode&lt;br /&gt;
* table(string) - название справочника: 'cov', 'persons', ...&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''normalize_array($item)'''====&lt;br /&gt;
&lt;br /&gt;
Нормализует ошибочно переданный ассоциативный массив в объект&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* item(object) - объект с вложенным массивом item[], в котором находятся объекты:&lt;br /&gt;
** item[0] = stdClass(),&lt;br /&gt;
** item[0]-&amp;gt;key, &lt;br /&gt;
** item[0]-&amp;gt;value, &lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект, в котором поля {item[0]-&amp;gt;key}, а значения: {item[0]-&amp;gt;value}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_method($input, $methodname)'''====&lt;br /&gt;
&lt;br /&gt;
Выполняет базовую проверку переданных параметров (контрольная сумма), проверяет, реализованы ли функции для проверки входных параметров и исполнения запроса, вызывает 'set' метод для переданного в качестве аргумента объекта запроса и метода. В случае возникновения ошибок составляет ответный запрос и выполняет логирование.&lt;br /&gt;
Вызывает следующие методы:&lt;br /&gt;
* [[#check_hash($input)|-&amp;gt;check_hash()]]&lt;br /&gt;
* [[#check_fields_($input)|-&amp;gt;check_fields_$methodname()]]&lt;br /&gt;
* [[#execute_($input)|-&amp;gt;execute_$methodname()]]&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - объект SOAP-запроса (должны присутствовать служебные поля request*)&lt;br /&gt;
* methodname(string) - название функции, которую необходимо исполнить&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект содерщаший поля:&lt;br /&gt;
** id - переданный в запросе id объекта&lt;br /&gt;
** dofid - внутренний id объекта&lt;br /&gt;
** modified - время изменения объекта&lt;br /&gt;
** hash - контрольная сумма из storages/sync&lt;br /&gt;
** errorcode - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_status_route($table, $dofid, $departmentid)'''====&lt;br /&gt;
&lt;br /&gt;
Установить статус согласно маршруту, заданному в конфиге&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* table(string) - название справочника: 'cov', 'persons', ...&lt;br /&gt;
* dofid(int) - внутренний id объекта из таблицы $storage&lt;br /&gt;
* departmentid(int) - id из таблицы departments&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id добавленного объекта&lt;br /&gt;
* (string) - код ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Коды ошибок=&lt;br /&gt;
&lt;br /&gt;
При успешном выполнении операции синхронизации возвращается код ошибки 'OK'.&lt;br /&gt;
В ином случае, возвращается одна из следующих ошибок:&lt;br /&gt;
&lt;br /&gt;
* Ошибки параметров запроса [P]:&lt;br /&gt;
* Обязательные [PR]&lt;br /&gt;
** PR0 - Данные запроса пришли в некорректном формате&lt;br /&gt;
** PR1 - Отсутствует идентификатор системы [requestlogin]&lt;br /&gt;
** PR2 - Отсутствует время запроса [requesttime]&lt;br /&gt;
** PR3 - Отсутствует контрольная сумма [requesthash]&lt;br /&gt;
** PR4 - Отсутствует идентификатор объекта [id]&lt;br /&gt;
* Некорректные [PI]&lt;br /&gt;
** PI3 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** PI4 - Недопустимые символы в e-mail&lt;br /&gt;
** PI5 - Тип переменной подразделения должен быть строковый&lt;br /&gt;
** PI6 - Тип переменной cov должен быть массивом&lt;br /&gt;
** PI7 - Поля внутри переменной cov не должны быть массивами или объектами&lt;br /&gt;
** PI8 - Поля внутри переменной cov не должны совпадать с полями справочника (например, status, adddate)&lt;br /&gt;
* Ошибки внутренние [S]:&lt;br /&gt;
* Некорректные параметры [SP]&lt;br /&gt;
** SP1 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** SP2 - Данный e-mail не допустим в системе&lt;br /&gt;
** SP3 - Данный e-mail уже зарегистрирован в системе&lt;br /&gt;
** SP4 - Название подразделения не может быть пустым&lt;br /&gt;
** SP5 - Подразделения с таким кодом не существует&lt;br /&gt;
** SP6 - Подразделение не актуально&lt;br /&gt;
** SP7 - Код подразделения должен быть строкового типа&lt;br /&gt;
** SP8 - Неверно передан параметр с запросом&lt;br /&gt;
* Ошибки кодирования [SC]&lt;br /&gt;
** SC1 - Не зарегистрирована функция проверки параметров запроса для данного метода&lt;br /&gt;
** SC2 - Не зарегистрирована функция исполнения запроса для данного метода&lt;br /&gt;
** SC3 - Не верно передан формат проверки полей вложенного массива cov&lt;br /&gt;
** SC4 - Для этого метода не задана таблица, с которой он работает&lt;br /&gt;
** SC5 - Неверно указано название операции&lt;br /&gt;
* Ошибки целостности структуры (базы) [SI]&lt;br /&gt;
** SI1 - Не удалось добавить запись в справочник metacontracts&lt;br /&gt;
** SI2 - Не удалось обновить запись в справочнике metacontracts&lt;br /&gt;
** SI3 - Не удалось добавить запись в справочник persons&lt;br /&gt;
** SI4 - Не удалось обновить запись в справочнике persons&lt;br /&gt;
** SI5 - Не удалось добавить запись в справочник contracts&lt;br /&gt;
** SI6 - Не удалось обновить запись в справочнике contracts&lt;br /&gt;
** SI7 - Не удалось обновить запись в справочнике cov&lt;br /&gt;
** SI8 - Не удалось обновить запись в справочнике addresses&lt;br /&gt;
** SI9 - Не удалось найти запись в справочнике addresses для обновления&lt;br /&gt;
&lt;br /&gt;
=Замечания, возможные проблемы=&lt;br /&gt;
&lt;br /&gt;
* Не совпадает контрольная сумма, ошибка [PI3]&lt;br /&gt;
** Необходимо обязательно проверять наличие всех полей, описанных в параметрах функций. Все типы параметров должны соответствовать описанным в wsdl-файле. К примеру, если в PHP попытаться передать массив в параметр, принимающий только строки, произойдёт конвертация массива в строку.&lt;br /&gt;
* Ошибки при выполнении запроса, если не передан какой-либо параметр, либо передан лишний параметр&lt;br /&gt;
** Желательно создавать класс (объект), в котором определены все поля и типы запроса, указанные в wsdl. От него создаётся экземпляр класса и поверх этих полей записываются значения. Таким образом, если поля не указаны, они автоматически должны заполняться значением null. Это позволит упростить процедуру хеширования и взаимодействия с сервером.&lt;/div&gt;</summary>
		<author><name>Konovalov</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/soap&amp;diff=2827</id>
		<title>Разработка:sync/soap</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/soap&amp;diff=2827"/>
				<updated>2014-09-22T14:20:25Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Дополнительные методы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = soap&lt;br /&gt;
| type = sync&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Описание=&lt;br /&gt;
&lt;br /&gt;
Веб-сервис для интеграции с другими системами по протоколу SOAP.&lt;br /&gt;
Плагин использует инфраструктуру [[Разработка:storages/sync | storages/sync ]] для хранения соответствия внутренних и внешних id объектов и [[Разработка:storages/synclog | storages/synclog ]] для логирования всех операций синхронизации.&lt;br /&gt;
&lt;br /&gt;
Плагин объявляет SOAP-сервис, который располагается по адресам:&lt;br /&gt;
* /sync/soap/soap.php?do=wsdl - wsdl-файл&lt;br /&gt;
* /sync/soap/soap.php?do=service - сам сервис&lt;br /&gt;
&lt;br /&gt;
У каждого метода присутствуют следующие обязательные служебные параметры:&lt;br /&gt;
* requestime - время генерации запроса, используется для устаревания запроса с целью защиты от атаки на &amp;quot;повторение перехваченного запроса&amp;quot;&lt;br /&gt;
* requestlogin - идентифицирует систему-отправитель запроса (задается в sync/soap/cfg/clients.php, вместе с паролем requestpassword и необязательными параметрами)&lt;br /&gt;
* requesthash - sha1-хеш от всех полей запроса в алфавитном порядке, включая предыдущие два, а так же поля requestpassword (в самом запросе не участвует). Используется для подтверждения подлинности запроса.&lt;br /&gt;
&lt;br /&gt;
Имена полей soap-запросов должны совпадать с именами полей в справочниках: [[Разработка:storages/metacontracts | storages/metacontracts ]], [[Разработка:storages/persons | storages/persons ]], [[Разработка:storages/contracts | storages/contracts ]]&lt;br /&gt;
&lt;br /&gt;
Во всех запросах используются только внешние id. Например, при создании персоны новая система передает свой уникальный id, которым она её обозначает. Этот id сохраняется в [[Разработка:storages/sync | storages/sync ]]. При создании контракта на обучение, внешняя система передает свой собственный id персоны (которая была создана ранее), плагин [[Разработка:sync/soap | sync/soap ]] конвертирует этот id во внутренний через справочник [[Разработка:storages/sync | storages/sync ]] и создает запись в [[Разработка:storages/contracts | storages/contracts ]]. Если внешний id объекта не передан, запрос возвращает ошибку (объект не создается и не обновляется).&lt;br /&gt;
&lt;br /&gt;
Служебные, специальные и автоматически-вычисляемые поля справочников не доступны для редактирования через SOAP-запросы (например adddate, status). Действия, которые запрещены пользователям системы через интерфейс, запрещены и через SOAP-запросы (например, нельзя сменить персону в уже созданном контракте).&lt;br /&gt;
&lt;br /&gt;
Все запросы обрабатывают вложенный массив cov. Все поля внутри массива cov сохраняются (обновляются) в справочнике [[Разработка:storages/cov | storages/cov ]]. Не упомянутые в запросе поля (ранее сохраненные в cov) игнорируются. Все имена полей, присутствующие в соответствующем справочнике зарезервированы и не могут быть переданы через массив cov (например, нельзя сохранить поле cov/status для объекта persons, потому что в нем уже есть поле status).&lt;br /&gt;
&lt;br /&gt;
Подразделение для размещения объекта передается в SOAP-запросах через его код (code), а не id.&lt;br /&gt;
Успешная операция для методов типа 'set_' возвращает следующую структуру данных:&lt;br /&gt;
* id - переданный в запросе id объекта&lt;br /&gt;
* dofid - внутренний id объекта&lt;br /&gt;
* modified - время изменения объекта&lt;br /&gt;
* hash - контрольная сумма из storages/sync&lt;br /&gt;
* errorcode - код ошибки, помогающий идентифицировать проблему при исполнении запроса&lt;br /&gt;
&lt;br /&gt;
Для проверки SOAP-запросов используется хеширование по следующему алгоритму:&lt;br /&gt;
&lt;br /&gt;
* requesthash == sha1(requestpassword + requesttime + requestlogin + json(vars) + json(cvars)), где&lt;br /&gt;
&lt;br /&gt;
** vars формируется следующим образом:&lt;br /&gt;
*** Из полей объекта для SOAP-запроса исключаются служебные данные — requesthash, requestlogin, requesttime и дополнительный массив cov&lt;br /&gt;
*** Поля сортируются в алфавитном порядке;&lt;br /&gt;
** cvars — вложенный массив cov, поля которого так же сортируются в алфавитном порядке;&lt;br /&gt;
** json() - функция для преобразования массива/объекта в json-строку.&lt;br /&gt;
** Знаком &amp;quot;+&amp;quot; указана конкатенация строк.&lt;br /&gt;
&lt;br /&gt;
=API=&lt;br /&gt;
&lt;br /&gt;
==='''set_meta_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные метаконтракта, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id метаконтракта&lt;br /&gt;
** num - Номер метаконтракта&lt;br /&gt;
** departmentcode - Код подразделения&lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_person($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные персоны, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id метаконтракта&lt;br /&gt;
** firstname - Имя&lt;br /&gt;
** middlename - Отчество&lt;br /&gt;
** lastname - Фамилия&lt;br /&gt;
** preferredname - Префикс для имения (Mr. Dr. Г-н, Г-а)&lt;br /&gt;
** dateofbirth - Дата рождения в UTS&lt;br /&gt;
** gender - Пол (male, female, unknown)&lt;br /&gt;
** email - Основной адрес электронной почты&lt;br /&gt;
** phonehome - Домашний телефон&lt;br /&gt;
** phonework - Рабочий телефон&lt;br /&gt;
** phonecell - Сотовый телефон&lt;br /&gt;
** passtypeid - Тип удостоверения личности (1 - свидетельство о рождении, 2 - паспорт гражданина РФ, 3 - загранпасспорт, 4 - разрешение на временное проживание лица без гражданства, 5 - вид на жительство, 6 - военный билет, 7 - водительсткое удостоверение пластиковое, 8 - вод. удостоверение форма 1, 9 - вод. удостоверение международное)&lt;br /&gt;
** passportserial - Серия удостоверения личности (если предусмотрена типом документа)&lt;br /&gt;
** passportnum - Номер удостоверения личности&lt;br /&gt;
** passportdate - Дата выдачи удостоверения личности в UTS&lt;br /&gt;
** passportem - Название организации, выдавшей удостоверение личности&lt;br /&gt;
** citizenship - Гражданство&lt;br /&gt;
** departmentcode - Основной отдел, к которому приписан человек (может редактировать его данные в persons)&lt;br /&gt;
** about - Характеристика личности&lt;br /&gt;
** skype - Уникальный идентификатор в Skype&lt;br /&gt;
** phoneadd1 - Дополнительный телефон 1&lt;br /&gt;
** phoneadd2 - Дополнительный телефон 2&lt;br /&gt;
** phoneadd3 - Дополнительный телефон 3&lt;br /&gt;
** emailadd1 - Дополнительная электронная почта 1&lt;br /&gt;
** emailadd2 - Дополнительная электронная почта 2&lt;br /&gt;
** emailadd3 - Дополнительная электронная почта 3&lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные договора, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id договора&lt;br /&gt;
** typeid - Тип договора, если у учебного заведения предусмотрено несколько разных типов договоров&lt;br /&gt;
** num - Номер договора&lt;br /&gt;
** numpass - Номер пропуска, студенческого билета и т.п.&lt;br /&gt;
** date - Дата заключения&lt;br /&gt;
** sellerid - Менеджер по работе с клиентами (приемная комиссия, партнер) - добавляет договор, меняет статус до &amp;quot;подписан клиентом&amp;quot;, отслеживает статус договора и ход обучения (id по таблице persons)&lt;br /&gt;
** clientid - Клиент, оплачивающий обучение (законный представитель, сам совершеннолетний ученик или куратор от организации, может принимать значение 0 или null, если клиент создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** studentid - Ученик (может принимать значение 0, если ученик создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** notes - Заметки&lt;br /&gt;
** departmentcode - Подразделение в таблице departments, к которому приписан контракт на обучение (например, принявшее ученика)&lt;br /&gt;
** contractform - Форма договора (шаблон) &lt;br /&gt;
** organizationid - Юридическое лицо в таблице organizations, оплачивающее договор, если ученик платит за себя сам - то не указывается.&lt;br /&gt;
** curatorid - Куратор или классный руководитель данного ученика (по таблице persons или не указан), отслеживает учебный процесс, держит связь с учеником, является посредником между учеником и системой, может быть внешней персоной.&lt;br /&gt;
** enddate - Дата окончания договора&lt;br /&gt;
** metacontractid - id метаконтракта, к которому привязан договор, в таблице metacontracts &lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы=&lt;br /&gt;
&lt;br /&gt;
===='''check_cov($cov, $fields = null)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить дополнительный массив на предмет соответствия формату&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* cov(array) - дополнительный вложенный массив.&lt;br /&gt;
* fields(object) - поля объекта для проверки дублирующихся полей.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [PI6-PI8], [SC3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_department($code)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли такое подразделение и актуальный ли у него статус&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* code(string) - код подразделения.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SI5-SI7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_email($email)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет, можно ли использовать переданный e-mail в системе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* email(string) - электронная почта.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SI2], [PI4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_fields_set_meta_contract($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет объект SOAP-запроса на предмет некорректных значений полей&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - запрос, должен содержать следующие поля:&lt;br /&gt;
** id - Внешний id метаконтракта&lt;br /&gt;
** num - Номер метаконтракта&lt;br /&gt;
** departmentcode - Код подразделения&lt;br /&gt;
** cov [optional] - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SI4-SI7], [PI5-PI8], [SC3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_hash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет входящий запрос по sha1-хешу, сверяя наличие требуемых полей и выдаёт код ошибки при её наличии&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - содержит поля запроса, а так же обязательные поля - id, requesttime, requestlogin, requesthash.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true в случае успеха,&lt;br /&gt;
* (string) - иначе - код ошибки: [PR0-PR4], [PI3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''connect_sync($pcode, $provider, $substorage = null)'''====&lt;br /&gt;
&lt;br /&gt;
Создать соединение с объектом синхронизации по названию справочника и поставщику данных&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* pcode(string) - название плагина для синхронизации (metacontracts, persons, ...)&lt;br /&gt;
* provider(string) - название поставщика синхронизации&lt;br /&gt;
* substorage(string) - код внутреннего субсправочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки, или&lt;br /&gt;
* (object) - объект подключения к синхронизации dof_storage_sync_connect&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_key($requestlogin)'''====&lt;br /&gt;
&lt;br /&gt;
Получить ключ идентификатора системы, используя логин.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* requestlogin(string) - идентификатор системы (логин)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если ключ не найден,&lt;br /&gt;
* (string) - ключ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_response($type, $errorcode = 'OK')'''====&lt;br /&gt;
&lt;br /&gt;
Получить каркас объекта ответа для разных типов методов.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* type(string) - тип запроса ('set', 'get', ...)&lt;br /&gt;
* errorcode(string) - код ошибки&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если произошла ошибка&lt;br /&gt;
* (object) - объект для передачи ответа в SOAP-сообщениях&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_object($input, $requestpassword)'''====&lt;br /&gt;
&lt;br /&gt;
Получить sha1-хеш пришедшего SOAP-запроса по описанному ранее алгоритму&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с обязательными полями id, requesttime, requestlogin, requesthash, массивом cov.&lt;br /&gt;
* requestpassword(string) - ключ идентификатора системы.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_uphash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Выполнить хеширование объекта для сравнения с uphash в storage/sync&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с полями справочника, без специальных полей .&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
=Коды ошибок=&lt;br /&gt;
&lt;br /&gt;
При успешном выполнении операции синхронизации возвращается код ошибки 'OK'.&lt;br /&gt;
В ином случае, возвращается одна из следующих ошибок:&lt;br /&gt;
&lt;br /&gt;
* Ошибки параметров запроса [P]:&lt;br /&gt;
* Обязательные [PR]&lt;br /&gt;
** PR0 - Данные запроса пришли в некорректном формате&lt;br /&gt;
** PR1 - Отсутствует идентификатор системы [requestlogin]&lt;br /&gt;
** PR2 - Отсутствует время запроса [requesttime]&lt;br /&gt;
** PR3 - Отсутствует контрольная сумма [requesthash]&lt;br /&gt;
** PR4 - Отсутствует идентификатор объекта [id]&lt;br /&gt;
* Некорректные [PI]&lt;br /&gt;
** PI3 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** PI4 - Недопустимые символы в e-mail&lt;br /&gt;
** PI5 - Тип переменной подразделения должен быть строковый&lt;br /&gt;
** PI6 - Тип переменной cov должен быть массивом&lt;br /&gt;
** PI7 - Поля внутри переменной cov не должны быть массивами или объектами&lt;br /&gt;
** PI8 - Поля внутри переменной cov не должны совпадать с полями справочника (например, status, adddate)&lt;br /&gt;
* Ошибки внутренние [S]:&lt;br /&gt;
* Некорректные параметры [SI]&lt;br /&gt;
** SI1 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** SI2 - Данный e-mail не допустим в системе&lt;br /&gt;
** SI3 - Данный e-mail уже зарегистрирован в системе&lt;br /&gt;
** SI4 - Название подразделения не может быть пустым&lt;br /&gt;
** SI5 - Подразделения с таким кодом не существует&lt;br /&gt;
** SI6 - Подразделение не актуально&lt;br /&gt;
** SI7 - Код подразделения должен быть строкового типа&lt;br /&gt;
* Ошибки кодирования [SC]&lt;br /&gt;
** SC1 - Не зарегистрирована функция проверки параметров запроса для данного метода&lt;br /&gt;
** SC2 - Не зарегистрирована функция исполнения запроса для данного метода&lt;br /&gt;
** SC3 - Не верно передан формат проверки полей вложенного массива cov&lt;br /&gt;
&lt;br /&gt;
=Замечания, возможные проблемы=&lt;br /&gt;
&lt;br /&gt;
* Не совпадает контрольная сумма, ошибка [PI3]&lt;br /&gt;
** Необходимо обязательно проверять наличие всех полей, описанных в параметрах функций. Все типы параметров должны соответствовать описанным в wsdl-файле. К примеру, если в PHP попытаться передать массив в параметр, принимающий только строки, произойдёт конвертация массива в строку.&lt;br /&gt;
* Ошибки при выполнении запроса, если не передан какой-либо параметр, либо передан лишний параметр&lt;br /&gt;
** Желательно создавать класс (объект), в котором определены все поля и типы запроса, указанные в wsdl. От него создаётся экземпляр класса и поверх этих полей записываются значения. Таким образом, если поля не указаны, они автоматически должны заполняться значением null. Это позволит упростить процедуру хеширования и взаимодействия с сервером.&lt;/div&gt;</summary>
		<author><name>Konovalov</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/soap&amp;diff=2826</id>
		<title>Разработка:sync/soap</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/soap&amp;diff=2826"/>
				<updated>2014-09-22T14:18:10Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Дополнительные методы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = soap&lt;br /&gt;
| type = sync&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Описание=&lt;br /&gt;
&lt;br /&gt;
Веб-сервис для интеграции с другими системами по протоколу SOAP.&lt;br /&gt;
Плагин использует инфраструктуру [[Разработка:storages/sync | storages/sync ]] для хранения соответствия внутренних и внешних id объектов и [[Разработка:storages/synclog | storages/synclog ]] для логирования всех операций синхронизации.&lt;br /&gt;
&lt;br /&gt;
Плагин объявляет SOAP-сервис, который располагается по адресам:&lt;br /&gt;
* /sync/soap/soap.php?do=wsdl - wsdl-файл&lt;br /&gt;
* /sync/soap/soap.php?do=service - сам сервис&lt;br /&gt;
&lt;br /&gt;
У каждого метода присутствуют следующие обязательные служебные параметры:&lt;br /&gt;
* requestime - время генерации запроса, используется для устаревания запроса с целью защиты от атаки на &amp;quot;повторение перехваченного запроса&amp;quot;&lt;br /&gt;
* requestlogin - идентифицирует систему-отправитель запроса (задается в sync/soap/cfg/clients.php, вместе с паролем requestpassword и необязательными параметрами)&lt;br /&gt;
* requesthash - sha1-хеш от всех полей запроса в алфавитном порядке, включая предыдущие два, а так же поля requestpassword (в самом запросе не участвует). Используется для подтверждения подлинности запроса.&lt;br /&gt;
&lt;br /&gt;
Имена полей soap-запросов должны совпадать с именами полей в справочниках: [[Разработка:storages/metacontracts | storages/metacontracts ]], [[Разработка:storages/persons | storages/persons ]], [[Разработка:storages/contracts | storages/contracts ]]&lt;br /&gt;
&lt;br /&gt;
Во всех запросах используются только внешние id. Например, при создании персоны новая система передает свой уникальный id, которым она её обозначает. Этот id сохраняется в [[Разработка:storages/sync | storages/sync ]]. При создании контракта на обучение, внешняя система передает свой собственный id персоны (которая была создана ранее), плагин [[Разработка:sync/soap | sync/soap ]] конвертирует этот id во внутренний через справочник [[Разработка:storages/sync | storages/sync ]] и создает запись в [[Разработка:storages/contracts | storages/contracts ]]. Если внешний id объекта не передан, запрос возвращает ошибку (объект не создается и не обновляется).&lt;br /&gt;
&lt;br /&gt;
Служебные, специальные и автоматически-вычисляемые поля справочников не доступны для редактирования через SOAP-запросы (например adddate, status). Действия, которые запрещены пользователям системы через интерфейс, запрещены и через SOAP-запросы (например, нельзя сменить персону в уже созданном контракте).&lt;br /&gt;
&lt;br /&gt;
Все запросы обрабатывают вложенный массив cov. Все поля внутри массива cov сохраняются (обновляются) в справочнике [[Разработка:storages/cov | storages/cov ]]. Не упомянутые в запросе поля (ранее сохраненные в cov) игнорируются. Все имена полей, присутствующие в соответствующем справочнике зарезервированы и не могут быть переданы через массив cov (например, нельзя сохранить поле cov/status для объекта persons, потому что в нем уже есть поле status).&lt;br /&gt;
&lt;br /&gt;
Подразделение для размещения объекта передается в SOAP-запросах через его код (code), а не id.&lt;br /&gt;
Успешная операция для методов типа 'set_' возвращает следующую структуру данных:&lt;br /&gt;
* id - переданный в запросе id объекта&lt;br /&gt;
* dofid - внутренний id объекта&lt;br /&gt;
* modified - время изменения объекта&lt;br /&gt;
* hash - контрольная сумма из storages/sync&lt;br /&gt;
* errorcode - код ошибки, помогающий идентифицировать проблему при исполнении запроса&lt;br /&gt;
&lt;br /&gt;
Для проверки SOAP-запросов используется хеширование по следующему алгоритму:&lt;br /&gt;
&lt;br /&gt;
* requesthash == sha1(requestpassword + requesttime + requestlogin + json(vars) + json(cvars)), где&lt;br /&gt;
&lt;br /&gt;
** vars формируется следующим образом:&lt;br /&gt;
*** Из полей объекта для SOAP-запроса исключаются служебные данные — requesthash, requestlogin, requesttime и дополнительный массив cov&lt;br /&gt;
*** Поля сортируются в алфавитном порядке;&lt;br /&gt;
** cvars — вложенный массив cov, поля которого так же сортируются в алфавитном порядке;&lt;br /&gt;
** json() - функция для преобразования массива/объекта в json-строку.&lt;br /&gt;
** Знаком &amp;quot;+&amp;quot; указана конкатенация строк.&lt;br /&gt;
&lt;br /&gt;
=API=&lt;br /&gt;
&lt;br /&gt;
==='''set_meta_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные метаконтракта, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id метаконтракта&lt;br /&gt;
** num - Номер метаконтракта&lt;br /&gt;
** departmentcode - Код подразделения&lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_person($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные персоны, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id метаконтракта&lt;br /&gt;
** firstname - Имя&lt;br /&gt;
** middlename - Отчество&lt;br /&gt;
** lastname - Фамилия&lt;br /&gt;
** preferredname - Префикс для имения (Mr. Dr. Г-н, Г-а)&lt;br /&gt;
** dateofbirth - Дата рождения в UTS&lt;br /&gt;
** gender - Пол (male, female, unknown)&lt;br /&gt;
** email - Основной адрес электронной почты&lt;br /&gt;
** phonehome - Домашний телефон&lt;br /&gt;
** phonework - Рабочий телефон&lt;br /&gt;
** phonecell - Сотовый телефон&lt;br /&gt;
** passtypeid - Тип удостоверения личности (1 - свидетельство о рождении, 2 - паспорт гражданина РФ, 3 - загранпасспорт, 4 - разрешение на временное проживание лица без гражданства, 5 - вид на жительство, 6 - военный билет, 7 - водительсткое удостоверение пластиковое, 8 - вод. удостоверение форма 1, 9 - вод. удостоверение международное)&lt;br /&gt;
** passportserial - Серия удостоверения личности (если предусмотрена типом документа)&lt;br /&gt;
** passportnum - Номер удостоверения личности&lt;br /&gt;
** passportdate - Дата выдачи удостоверения личности в UTS&lt;br /&gt;
** passportem - Название организации, выдавшей удостоверение личности&lt;br /&gt;
** citizenship - Гражданство&lt;br /&gt;
** departmentcode - Основной отдел, к которому приписан человек (может редактировать его данные в persons)&lt;br /&gt;
** about - Характеристика личности&lt;br /&gt;
** skype - Уникальный идентификатор в Skype&lt;br /&gt;
** phoneadd1 - Дополнительный телефон 1&lt;br /&gt;
** phoneadd2 - Дополнительный телефон 2&lt;br /&gt;
** phoneadd3 - Дополнительный телефон 3&lt;br /&gt;
** emailadd1 - Дополнительная электронная почта 1&lt;br /&gt;
** emailadd2 - Дополнительная электронная почта 2&lt;br /&gt;
** emailadd3 - Дополнительная электронная почта 3&lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные договора, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id договора&lt;br /&gt;
** typeid - Тип договора, если у учебного заведения предусмотрено несколько разных типов договоров&lt;br /&gt;
** num - Номер договора&lt;br /&gt;
** numpass - Номер пропуска, студенческого билета и т.п.&lt;br /&gt;
** date - Дата заключения&lt;br /&gt;
** sellerid - Менеджер по работе с клиентами (приемная комиссия, партнер) - добавляет договор, меняет статус до &amp;quot;подписан клиентом&amp;quot;, отслеживает статус договора и ход обучения (id по таблице persons)&lt;br /&gt;
** clientid - Клиент, оплачивающий обучение (законный представитель, сам совершеннолетний ученик или куратор от организации, может принимать значение 0 или null, если клиент создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** studentid - Ученик (может принимать значение 0, если ученик создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** notes - Заметки&lt;br /&gt;
** departmentcode - Подразделение в таблице departments, к которому приписан контракт на обучение (например, принявшее ученика)&lt;br /&gt;
** contractform - Форма договора (шаблон) &lt;br /&gt;
** organizationid - Юридическое лицо в таблице organizations, оплачивающее договор, если ученик платит за себя сам - то не указывается.&lt;br /&gt;
** curatorid - Куратор или классный руководитель данного ученика (по таблице persons или не указан), отслеживает учебный процесс, держит связь с учеником, является посредником между учеником и системой, может быть внешней персоной.&lt;br /&gt;
** enddate - Дата окончания договора&lt;br /&gt;
** metacontractid - id метаконтракта, к которому привязан договор, в таблице metacontracts &lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы=&lt;br /&gt;
&lt;br /&gt;
===='''check_cov($cov, $fields = null)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить дополнительный массив на предмет соответствия формату&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* cov(array) - дополнительный вложенный массив.&lt;br /&gt;
* fields(object) - поля объекта для проверки дублирующихся полей.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [PI6-PI8], [SC3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_department($code)'''====&lt;br /&gt;
&lt;br /&gt;
Проверить, существует ли такое подразделение и актуальный ли у него статус&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* code(string) - код подразделения.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SI5-SI7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_email($email)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет, можно ли использовать переданный e-mail в системе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* email(string) - электронная почта.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SI2], [PI4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_fields_set_meta_contract($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет объект SOAP-запроса на предмет некорректных значений полей&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - запрос, должен содержать следующие поля:&lt;br /&gt;
** id - Внешний id метаконтракта&lt;br /&gt;
** num - Номер метаконтракта&lt;br /&gt;
** departmentcode - Код подразделения&lt;br /&gt;
** cov [optional] - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SI4-SI7], [PI5-PI8], [SC3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_hash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет входящий запрос по sha1-хешу, сверяя наличие требуемых полей и выдаёт код ошибки при её наличии&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - содержит поля запроса, а так же обязательные поля - id, requesttime, requestlogin, requesthash.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true в случае успеха,&lt;br /&gt;
* (string) - иначе - код ошибки: [PR0-PR4], [PI3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''connect_sync($pcode, $provider, $substorage = null)'''====&lt;br /&gt;
&lt;br /&gt;
Создать соединение с объектом синхронизации по названию справочника и поставщику данных&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* pcode(string) - название плагина для синхронизации (metacontracts, persons, ...)&lt;br /&gt;
* provider(string) - название поставщика синхронизации&lt;br /&gt;
* substorage(string) - код внутреннего субсправочника&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки, или&lt;br /&gt;
* (object) - объект подключения к синхронизации dof_storage_sync_connect&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_key($requestlogin)'''====&lt;br /&gt;
&lt;br /&gt;
Получить ключ идентификатора системы, используя логин.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* requestlogin(string) - идентификатор системы (логин)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если ключ не найден,&lt;br /&gt;
* (string) - ключ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_response($type, $errorcode = 'OK')'''====&lt;br /&gt;
&lt;br /&gt;
Получить каркас объекта ответа для разных типов методов.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* type(string) - тип запроса ('set', 'get', ...)&lt;br /&gt;
* errorcode(string) - код ошибки&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если произошла ошибка&lt;br /&gt;
* (object) - объект для передачи ответа в SOAP-сообщениях&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_object($input, $requestpassword)'''====&lt;br /&gt;
&lt;br /&gt;
Получить sha1-хеш пришедшего SOAP-запроса по описанному ранее алгоритму&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с обязательными полями id, requesttime, requestlogin, requesthash, массивом cov.&lt;br /&gt;
* requestpassword(string) - ключ идентификатора системы.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
=Коды ошибок=&lt;br /&gt;
&lt;br /&gt;
При успешном выполнении операции синхронизации возвращается код ошибки 'OK'.&lt;br /&gt;
В ином случае, возвращается одна из следующих ошибок:&lt;br /&gt;
&lt;br /&gt;
* Ошибки параметров запроса [P]:&lt;br /&gt;
* Обязательные [PR]&lt;br /&gt;
** PR0 - Данные запроса пришли в некорректном формате&lt;br /&gt;
** PR1 - Отсутствует идентификатор системы [requestlogin]&lt;br /&gt;
** PR2 - Отсутствует время запроса [requesttime]&lt;br /&gt;
** PR3 - Отсутствует контрольная сумма [requesthash]&lt;br /&gt;
** PR4 - Отсутствует идентификатор объекта [id]&lt;br /&gt;
* Некорректные [PI]&lt;br /&gt;
** PI3 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** PI4 - Недопустимые символы в e-mail&lt;br /&gt;
** PI5 - Тип переменной подразделения должен быть строковый&lt;br /&gt;
** PI6 - Тип переменной cov должен быть массивом&lt;br /&gt;
** PI7 - Поля внутри переменной cov не должны быть массивами или объектами&lt;br /&gt;
** PI8 - Поля внутри переменной cov не должны совпадать с полями справочника (например, status, adddate)&lt;br /&gt;
* Ошибки внутренние [S]:&lt;br /&gt;
* Некорректные параметры [SI]&lt;br /&gt;
** SI1 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** SI2 - Данный e-mail не допустим в системе&lt;br /&gt;
** SI3 - Данный e-mail уже зарегистрирован в системе&lt;br /&gt;
** SI4 - Название подразделения не может быть пустым&lt;br /&gt;
** SI5 - Подразделения с таким кодом не существует&lt;br /&gt;
** SI6 - Подразделение не актуально&lt;br /&gt;
** SI7 - Код подразделения должен быть строкового типа&lt;br /&gt;
* Ошибки кодирования [SC]&lt;br /&gt;
** SC1 - Не зарегистрирована функция проверки параметров запроса для данного метода&lt;br /&gt;
** SC2 - Не зарегистрирована функция исполнения запроса для данного метода&lt;br /&gt;
** SC3 - Не верно передан формат проверки полей вложенного массива cov&lt;br /&gt;
&lt;br /&gt;
=Замечания, возможные проблемы=&lt;br /&gt;
&lt;br /&gt;
* Не совпадает контрольная сумма, ошибка [PI3]&lt;br /&gt;
** Необходимо обязательно проверять наличие всех полей, описанных в параметрах функций. Все типы параметров должны соответствовать описанным в wsdl-файле. К примеру, если в PHP попытаться передать массив в параметр, принимающий только строки, произойдёт конвертация массива в строку.&lt;br /&gt;
* Ошибки при выполнении запроса, если не передан какой-либо параметр, либо передан лишний параметр&lt;br /&gt;
** Желательно создавать класс (объект), в котором определены все поля и типы запроса, указанные в wsdl. От него создаётся экземпляр класса и поверх этих полей записываются значения. Таким образом, если поля не указаны, они автоматически должны заполняться значением null. Это позволит упростить процедуру хеширования и взаимодействия с сервером.&lt;/div&gt;</summary>
		<author><name>Konovalov</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/soap&amp;diff=2825</id>
		<title>Разработка:sync/soap</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/soap&amp;diff=2825"/>
				<updated>2014-09-22T14:10:17Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Коды ошибок */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = soap&lt;br /&gt;
| type = sync&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Описание=&lt;br /&gt;
&lt;br /&gt;
Веб-сервис для интеграции с другими системами по протоколу SOAP.&lt;br /&gt;
Плагин использует инфраструктуру [[Разработка:storages/sync | storages/sync ]] для хранения соответствия внутренних и внешних id объектов и [[Разработка:storages/synclog | storages/synclog ]] для логирования всех операций синхронизации.&lt;br /&gt;
&lt;br /&gt;
Плагин объявляет SOAP-сервис, который располагается по адресам:&lt;br /&gt;
* /sync/soap/soap.php?do=wsdl - wsdl-файл&lt;br /&gt;
* /sync/soap/soap.php?do=service - сам сервис&lt;br /&gt;
&lt;br /&gt;
У каждого метода присутствуют следующие обязательные служебные параметры:&lt;br /&gt;
* requestime - время генерации запроса, используется для устаревания запроса с целью защиты от атаки на &amp;quot;повторение перехваченного запроса&amp;quot;&lt;br /&gt;
* requestlogin - идентифицирует систему-отправитель запроса (задается в sync/soap/cfg/clients.php, вместе с паролем requestpassword и необязательными параметрами)&lt;br /&gt;
* requesthash - sha1-хеш от всех полей запроса в алфавитном порядке, включая предыдущие два, а так же поля requestpassword (в самом запросе не участвует). Используется для подтверждения подлинности запроса.&lt;br /&gt;
&lt;br /&gt;
Имена полей soap-запросов должны совпадать с именами полей в справочниках: [[Разработка:storages/metacontracts | storages/metacontracts ]], [[Разработка:storages/persons | storages/persons ]], [[Разработка:storages/contracts | storages/contracts ]]&lt;br /&gt;
&lt;br /&gt;
Во всех запросах используются только внешние id. Например, при создании персоны новая система передает свой уникальный id, которым она её обозначает. Этот id сохраняется в [[Разработка:storages/sync | storages/sync ]]. При создании контракта на обучение, внешняя система передает свой собственный id персоны (которая была создана ранее), плагин [[Разработка:sync/soap | sync/soap ]] конвертирует этот id во внутренний через справочник [[Разработка:storages/sync | storages/sync ]] и создает запись в [[Разработка:storages/contracts | storages/contracts ]]. Если внешний id объекта не передан, запрос возвращает ошибку (объект не создается и не обновляется).&lt;br /&gt;
&lt;br /&gt;
Служебные, специальные и автоматически-вычисляемые поля справочников не доступны для редактирования через SOAP-запросы (например adddate, status). Действия, которые запрещены пользователям системы через интерфейс, запрещены и через SOAP-запросы (например, нельзя сменить персону в уже созданном контракте).&lt;br /&gt;
&lt;br /&gt;
Все запросы обрабатывают вложенный массив cov. Все поля внутри массива cov сохраняются (обновляются) в справочнике [[Разработка:storages/cov | storages/cov ]]. Не упомянутые в запросе поля (ранее сохраненные в cov) игнорируются. Все имена полей, присутствующие в соответствующем справочнике зарезервированы и не могут быть переданы через массив cov (например, нельзя сохранить поле cov/status для объекта persons, потому что в нем уже есть поле status).&lt;br /&gt;
&lt;br /&gt;
Подразделение для размещения объекта передается в SOAP-запросах через его код (code), а не id.&lt;br /&gt;
Успешная операция для методов типа 'set_' возвращает следующую структуру данных:&lt;br /&gt;
* id - переданный в запросе id объекта&lt;br /&gt;
* dofid - внутренний id объекта&lt;br /&gt;
* modified - время изменения объекта&lt;br /&gt;
* hash - контрольная сумма из storages/sync&lt;br /&gt;
* errorcode - код ошибки, помогающий идентифицировать проблему при исполнении запроса&lt;br /&gt;
&lt;br /&gt;
Для проверки SOAP-запросов используется хеширование по следующему алгоритму:&lt;br /&gt;
&lt;br /&gt;
* requesthash == sha1(requestpassword + requesttime + requestlogin + json(vars) + json(cvars)), где&lt;br /&gt;
&lt;br /&gt;
** vars формируется следующим образом:&lt;br /&gt;
*** Из полей объекта для SOAP-запроса исключаются служебные данные — requesthash, requestlogin, requesttime и дополнительный массив cov&lt;br /&gt;
*** Поля сортируются в алфавитном порядке;&lt;br /&gt;
** cvars — вложенный массив cov, поля которого так же сортируются в алфавитном порядке;&lt;br /&gt;
** json() - функция для преобразования массива/объекта в json-строку.&lt;br /&gt;
** Знаком &amp;quot;+&amp;quot; указана конкатенация строк.&lt;br /&gt;
&lt;br /&gt;
=API=&lt;br /&gt;
&lt;br /&gt;
==='''set_meta_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные метаконтракта, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id метаконтракта&lt;br /&gt;
** num - Номер метаконтракта&lt;br /&gt;
** departmentcode - Код подразделения&lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_person($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные персоны, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id метаконтракта&lt;br /&gt;
** firstname - Имя&lt;br /&gt;
** middlename - Отчество&lt;br /&gt;
** lastname - Фамилия&lt;br /&gt;
** preferredname - Префикс для имения (Mr. Dr. Г-н, Г-а)&lt;br /&gt;
** dateofbirth - Дата рождения в UTS&lt;br /&gt;
** gender - Пол (male, female, unknown)&lt;br /&gt;
** email - Основной адрес электронной почты&lt;br /&gt;
** phonehome - Домашний телефон&lt;br /&gt;
** phonework - Рабочий телефон&lt;br /&gt;
** phonecell - Сотовый телефон&lt;br /&gt;
** passtypeid - Тип удостоверения личности (1 - свидетельство о рождении, 2 - паспорт гражданина РФ, 3 - загранпасспорт, 4 - разрешение на временное проживание лица без гражданства, 5 - вид на жительство, 6 - военный билет, 7 - водительсткое удостоверение пластиковое, 8 - вод. удостоверение форма 1, 9 - вод. удостоверение международное)&lt;br /&gt;
** passportserial - Серия удостоверения личности (если предусмотрена типом документа)&lt;br /&gt;
** passportnum - Номер удостоверения личности&lt;br /&gt;
** passportdate - Дата выдачи удостоверения личности в UTS&lt;br /&gt;
** passportem - Название организации, выдавшей удостоверение личности&lt;br /&gt;
** citizenship - Гражданство&lt;br /&gt;
** departmentcode - Основной отдел, к которому приписан человек (может редактировать его данные в persons)&lt;br /&gt;
** about - Характеристика личности&lt;br /&gt;
** skype - Уникальный идентификатор в Skype&lt;br /&gt;
** phoneadd1 - Дополнительный телефон 1&lt;br /&gt;
** phoneadd2 - Дополнительный телефон 2&lt;br /&gt;
** phoneadd3 - Дополнительный телефон 3&lt;br /&gt;
** emailadd1 - Дополнительная электронная почта 1&lt;br /&gt;
** emailadd2 - Дополнительная электронная почта 2&lt;br /&gt;
** emailadd3 - Дополнительная электронная почта 3&lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные договора, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id договора&lt;br /&gt;
** typeid - Тип договора, если у учебного заведения предусмотрено несколько разных типов договоров&lt;br /&gt;
** num - Номер договора&lt;br /&gt;
** numpass - Номер пропуска, студенческого билета и т.п.&lt;br /&gt;
** date - Дата заключения&lt;br /&gt;
** sellerid - Менеджер по работе с клиентами (приемная комиссия, партнер) - добавляет договор, меняет статус до &amp;quot;подписан клиентом&amp;quot;, отслеживает статус договора и ход обучения (id по таблице persons)&lt;br /&gt;
** clientid - Клиент, оплачивающий обучение (законный представитель, сам совершеннолетний ученик или куратор от организации, может принимать значение 0 или null, если клиент создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** studentid - Ученик (может принимать значение 0, если ученик создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** notes - Заметки&lt;br /&gt;
** departmentcode - Подразделение в таблице departments, к которому приписан контракт на обучение (например, принявшее ученика)&lt;br /&gt;
** contractform - Форма договора (шаблон) &lt;br /&gt;
** organizationid - Юридическое лицо в таблице organizations, оплачивающее договор, если ученик платит за себя сам - то не указывается.&lt;br /&gt;
** curatorid - Куратор или классный руководитель данного ученика (по таблице persons или не указан), отслеживает учебный процесс, держит связь с учеником, является посредником между учеником и системой, может быть внешней персоной.&lt;br /&gt;
** enddate - Дата окончания договора&lt;br /&gt;
** metacontractid - id метаконтракта, к которому привязан договор, в таблице metacontracts &lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы=&lt;br /&gt;
&lt;br /&gt;
===='''check_email($email)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет, можно ли использовать переданный e-mail в системе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* email(string) - электронная почта.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SI2], [PI4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_hash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет входящий запрос по sha1-хешу, сверяя наличие требуемых полей и выдаёт код ошибки при её наличии&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $input(object) - содержит поля запроса, а так же обязательные поля - id, requesttime, requestlogin, requesthash.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true в случае успеха,&lt;br /&gt;
* (string) - иначе - код ошибки: [PR0-PR4], [PI3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_key($requestlogin)'''====&lt;br /&gt;
&lt;br /&gt;
Получить ключ идентификатора системы, используя логин.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $requestlogin(string) - идентификатор системы (логин)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если ключ не найден,&lt;br /&gt;
* (string) - ключ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_response($type, $errorcode = 'OK')'''====&lt;br /&gt;
&lt;br /&gt;
Получить каркас объекта ответа для разных типов методов.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип запроса ('set', 'get', ...)&lt;br /&gt;
* $errorcode(string) - код ошибки&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если произошла ошибка&lt;br /&gt;
* (object) - объект для передачи ответа в SOAP-сообщениях&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_object($input, $requestpassword)'''====&lt;br /&gt;
&lt;br /&gt;
Получить sha1-хеш пришедшего SOAP-запроса по описанному ранее алгоритму&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с обязательными полями id, requesttime, requestlogin, requesthash, массивом cov.&lt;br /&gt;
* requestpassword(string) - ключ идентификатора системы.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Коды ошибок=&lt;br /&gt;
&lt;br /&gt;
При успешном выполнении операции синхронизации возвращается код ошибки 'OK'.&lt;br /&gt;
В ином случае, возвращается одна из следующих ошибок:&lt;br /&gt;
&lt;br /&gt;
* Ошибки параметров запроса [P]:&lt;br /&gt;
* Обязательные [PR]&lt;br /&gt;
** PR0 - Данные запроса пришли в некорректном формате&lt;br /&gt;
** PR1 - Отсутствует идентификатор системы [requestlogin]&lt;br /&gt;
** PR2 - Отсутствует время запроса [requesttime]&lt;br /&gt;
** PR3 - Отсутствует контрольная сумма [requesthash]&lt;br /&gt;
** PR4 - Отсутствует идентификатор объекта [id]&lt;br /&gt;
* Некорректные [PI]&lt;br /&gt;
** PI3 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** PI4 - Недопустимые символы в e-mail&lt;br /&gt;
** PI5 - Тип переменной подразделения должен быть строковый&lt;br /&gt;
** PI6 - Тип переменной cov должен быть массивом&lt;br /&gt;
** PI7 - Поля внутри переменной cov не должны быть массивами или объектами&lt;br /&gt;
** PI8 - Поля внутри переменной cov не должны совпадать с полями справочника (например, status, adddate)&lt;br /&gt;
* Ошибки внутренние [S]:&lt;br /&gt;
* Некорректные параметры [SI]&lt;br /&gt;
** SI1 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** SI2 - Данный e-mail не допустим в системе&lt;br /&gt;
** SI3 - Данный e-mail уже зарегистрирован в системе&lt;br /&gt;
** SI4 - Название подразделения не может быть пустым&lt;br /&gt;
** SI5 - Подразделения с таким кодом не существует&lt;br /&gt;
** SI6 - Подразделение не актуально&lt;br /&gt;
** SI7 - Код подразделения должен быть строкового типа&lt;br /&gt;
* Ошибки кодирования [SC]&lt;br /&gt;
** SC1 - Не зарегистрирована функция проверки параметров запроса для данного метода&lt;br /&gt;
** SC2 - Не зарегистрирована функция исполнения запроса для данного метода&lt;br /&gt;
** SC3 - Не верно передан формат проверки полей вложенного массива cov&lt;br /&gt;
&lt;br /&gt;
=Замечания, возможные проблемы=&lt;br /&gt;
&lt;br /&gt;
* Не совпадает контрольная сумма, ошибка [PI3]&lt;br /&gt;
** Необходимо обязательно проверять наличие всех полей, описанных в параметрах функций. Все типы параметров должны соответствовать описанным в wsdl-файле. К примеру, если в PHP попытаться передать массив в параметр, принимающий только строки, произойдёт конвертация массива в строку.&lt;br /&gt;
* Ошибки при выполнении запроса, если не передан какой-либо параметр, либо передан лишний параметр&lt;br /&gt;
** Желательно создавать класс (объект), в котором определены все поля и типы запроса, указанные в wsdl. От него создаётся экземпляр класса и поверх этих полей записываются значения. Таким образом, если поля не указаны, они автоматически должны заполняться значением null. Это позволит упростить процедуру хеширования и взаимодействия с сервером.&lt;/div&gt;</summary>
		<author><name>Konovalov</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:workflows/departments&amp;diff=2824</id>
		<title>Разработка:workflows/departments</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:workflows/departments&amp;diff=2824"/>
				<updated>2014-09-22T07:52:39Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = departments&lt;br /&gt;
| type = workflows&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=workflow/departments - Статусы подразделений=&lt;br /&gt;
Плагин рабочих процессов предназначенный для смены статусов подразделений.&lt;br /&gt;
Работает в паре с модулем storage/departments.&lt;br /&gt;
Позволяет организовать смену статуса подразделения в зависимости от текущего статуса и статусов объектов, связанных с таблицей departments.&lt;br /&gt;
==Возможные статусы:==&lt;br /&gt;
* Активен (active) - подразделение создано и отображается в списке подразделений&lt;br /&gt;
* Черновик (plan) - создан черновик подразделения&lt;br /&gt;
* Удалён (deleted) - подразделение удалено, нигде не отображается, не производится поиск&lt;br /&gt;
&lt;br /&gt;
=== Метастатусы ===&lt;br /&gt;
* Активный: active&lt;br /&gt;
* Актуальный: active&lt;br /&gt;
* Реальный: active, plan&lt;br /&gt;
* Мусорный: deleted&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;/div&gt;</summary>
		<author><name>Konovalov</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/soap&amp;diff=2823</id>
		<title>Разработка:sync/soap</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/soap&amp;diff=2823"/>
				<updated>2014-09-17T10:19:04Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: Новая страница: «{{Infobox_Plugin | name = soap | type = sync }}  =Описание=  Веб-сервис для интеграции с другими системами по про...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = soap&lt;br /&gt;
| type = sync&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Описание=&lt;br /&gt;
&lt;br /&gt;
Веб-сервис для интеграции с другими системами по протоколу SOAP.&lt;br /&gt;
Плагин использует инфраструктуру [[Разработка:storages/sync | storages/sync ]] для хранения соответствия внутренних и внешних id объектов и [[Разработка:storages/synclog | storages/synclog ]] для логирования всех операций синхронизации.&lt;br /&gt;
&lt;br /&gt;
Плагин объявляет SOAP-сервис, который располагается по адресам:&lt;br /&gt;
* /sync/soap/soap.php?do=wsdl - wsdl-файл&lt;br /&gt;
* /sync/soap/soap.php?do=service - сам сервис&lt;br /&gt;
&lt;br /&gt;
У каждого метода присутствуют следующие обязательные служебные параметры:&lt;br /&gt;
* requestime - время генерации запроса, используется для устаревания запроса с целью защиты от атаки на &amp;quot;повторение перехваченного запроса&amp;quot;&lt;br /&gt;
* requestlogin - идентифицирует систему-отправитель запроса (задается в sync/soap/cfg/clients.php, вместе с паролем requestpassword и необязательными параметрами)&lt;br /&gt;
* requesthash - sha1-хеш от всех полей запроса в алфавитном порядке, включая предыдущие два, а так же поля requestpassword (в самом запросе не участвует). Используется для подтверждения подлинности запроса.&lt;br /&gt;
&lt;br /&gt;
Имена полей soap-запросов должны совпадать с именами полей в справочниках: [[Разработка:storages/metacontracts | storages/metacontracts ]], [[Разработка:storages/persons | storages/persons ]], [[Разработка:storages/contracts | storages/contracts ]]&lt;br /&gt;
&lt;br /&gt;
Во всех запросах используются только внешние id. Например, при создании персоны новая система передает свой уникальный id, которым она её обозначает. Этот id сохраняется в [[Разработка:storages/sync | storages/sync ]]. При создании контракта на обучение, внешняя система передает свой собственный id персоны (которая была создана ранее), плагин [[Разработка:sync/soap | sync/soap ]] конвертирует этот id во внутренний через справочник [[Разработка:storages/sync | storages/sync ]] и создает запись в [[Разработка:storages/contracts | storages/contracts ]]. Если внешний id объекта не передан, запрос возвращает ошибку (объект не создается и не обновляется).&lt;br /&gt;
&lt;br /&gt;
Служебные, специальные и автоматически-вычисляемые поля справочников не доступны для редактирования через SOAP-запросы (например adddate, status). Действия, которые запрещены пользователям системы через интерфейс, запрещены и через SOAP-запросы (например, нельзя сменить персону в уже созданном контракте).&lt;br /&gt;
&lt;br /&gt;
Все запросы обрабатывают вложенный массив cov. Все поля внутри массива cov сохраняются (обновляются) в справочнике [[Разработка:storages/cov | storages/cov ]]. Не упомянутые в запросе поля (ранее сохраненные в cov) игнорируются. Все имена полей, присутствующие в соответствующем справочнике зарезервированы и не могут быть переданы через массив cov (например, нельзя сохранить поле cov/status для объекта persons, потому что в нем уже есть поле status).&lt;br /&gt;
&lt;br /&gt;
Подразделение для размещения объекта передается в SOAP-запросах через его код (code), а не id.&lt;br /&gt;
Успешная операция для методов типа 'set_' возвращает следующую структуру данных:&lt;br /&gt;
* id - переданный в запросе id объекта&lt;br /&gt;
* dofid - внутренний id объекта&lt;br /&gt;
* modified - время изменения объекта&lt;br /&gt;
* hash - контрольная сумма из storages/sync&lt;br /&gt;
* errorcode - код ошибки, помогающий идентифицировать проблему при исполнении запроса&lt;br /&gt;
&lt;br /&gt;
Для проверки SOAP-запросов используется хеширование по следующему алгоритму:&lt;br /&gt;
&lt;br /&gt;
* requesthash == sha1(requestpassword + requesttime + requestlogin + json(vars) + json(cvars)), где&lt;br /&gt;
&lt;br /&gt;
** vars формируется следующим образом:&lt;br /&gt;
*** Из полей объекта для SOAP-запроса исключаются служебные данные — requesthash, requestlogin, requesttime и дополнительный массив cov&lt;br /&gt;
*** Поля сортируются в алфавитном порядке;&lt;br /&gt;
** cvars — вложенный массив cov, поля которого так же сортируются в алфавитном порядке;&lt;br /&gt;
** json() - функция для преобразования массива/объекта в json-строку.&lt;br /&gt;
** Знаком &amp;quot;+&amp;quot; указана конкатенация строк.&lt;br /&gt;
&lt;br /&gt;
=API=&lt;br /&gt;
&lt;br /&gt;
==='''set_meta_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные метаконтракта, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id метаконтракта&lt;br /&gt;
** num - Номер метаконтракта&lt;br /&gt;
** departmentcode - Код подразделения&lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_person($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные персоны, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id метаконтракта&lt;br /&gt;
** firstname - Имя&lt;br /&gt;
** middlename - Отчество&lt;br /&gt;
** lastname - Фамилия&lt;br /&gt;
** preferredname - Префикс для имения (Mr. Dr. Г-н, Г-а)&lt;br /&gt;
** dateofbirth - Дата рождения в UTS&lt;br /&gt;
** gender - Пол (male, female, unknown)&lt;br /&gt;
** email - Основной адрес электронной почты&lt;br /&gt;
** phonehome - Домашний телефон&lt;br /&gt;
** phonework - Рабочий телефон&lt;br /&gt;
** phonecell - Сотовый телефон&lt;br /&gt;
** passtypeid - Тип удостоверения личности (1 - свидетельство о рождении, 2 - паспорт гражданина РФ, 3 - загранпасспорт, 4 - разрешение на временное проживание лица без гражданства, 5 - вид на жительство, 6 - военный билет, 7 - водительсткое удостоверение пластиковое, 8 - вод. удостоверение форма 1, 9 - вод. удостоверение международное)&lt;br /&gt;
** passportserial - Серия удостоверения личности (если предусмотрена типом документа)&lt;br /&gt;
** passportnum - Номер удостоверения личности&lt;br /&gt;
** passportdate - Дата выдачи удостоверения личности в UTS&lt;br /&gt;
** passportem - Название организации, выдавшей удостоверение личности&lt;br /&gt;
** citizenship - Гражданство&lt;br /&gt;
** departmentcode - Основной отдел, к которому приписан человек (может редактировать его данные в persons)&lt;br /&gt;
** about - Характеристика личности&lt;br /&gt;
** skype - Уникальный идентификатор в Skype&lt;br /&gt;
** phoneadd1 - Дополнительный телефон 1&lt;br /&gt;
** phoneadd2 - Дополнительный телефон 2&lt;br /&gt;
** phoneadd3 - Дополнительный телефон 3&lt;br /&gt;
** emailadd1 - Дополнительная электронная почта 1&lt;br /&gt;
** emailadd2 - Дополнительная электронная почта 2&lt;br /&gt;
** emailadd3 - Дополнительная электронная почта 3&lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''set_contract($input)'''===&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - данные договора, переданные по SOAP. Содержит следующие поля&lt;br /&gt;
** requestlogin - Идентификатор системы-отправителя запроса&lt;br /&gt;
** requesttime - Время генерации запроса&lt;br /&gt;
** requesthash - sha1-хеш&lt;br /&gt;
** id - Внешний id договора&lt;br /&gt;
** typeid - Тип договора, если у учебного заведения предусмотрено несколько разных типов договоров&lt;br /&gt;
** num - Номер договора&lt;br /&gt;
** numpass - Номер пропуска, студенческого билета и т.п.&lt;br /&gt;
** date - Дата заключения&lt;br /&gt;
** sellerid - Менеджер по работе с клиентами (приемная комиссия, партнер) - добавляет договор, меняет статус до &amp;quot;подписан клиентом&amp;quot;, отслеживает статус договора и ход обучения (id по таблице persons)&lt;br /&gt;
** clientid - Клиент, оплачивающий обучение (законный представитель, сам совершеннолетний ученик или куратор от организации, может принимать значение 0 или null, если клиент создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** studentid - Ученик (может принимать значение 0, если ученик создается, а контракт имеет черновой вариант) (по таблице persons)&lt;br /&gt;
** notes - Заметки&lt;br /&gt;
** departmentcode - Подразделение в таблице departments, к которому приписан контракт на обучение (например, принявшее ученика)&lt;br /&gt;
** contractform - Форма договора (шаблон) &lt;br /&gt;
** organizationid - Юридическое лицо в таблице organizations, оплачивающее договор, если ученик платит за себя сам - то не указывается.&lt;br /&gt;
** curatorid - Куратор или классный руководитель данного ученика (по таблице persons или не указан), отслеживает учебный процесс, держит связь с учеником, является посредником между учеником и системой, может быть внешней персоной.&lt;br /&gt;
** enddate - Дата окончания договора&lt;br /&gt;
** metacontractid - id метаконтракта, к которому привязан договор, в таблице metacontracts &lt;br /&gt;
** cov - Дополнительный массив cov, содержащий дополнительные поля к объекту&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект со следующими полями&lt;br /&gt;
** id - Внешний id объекта (переданный в запросе id)&lt;br /&gt;
** dofid - Внутренний id объекта&lt;br /&gt;
** modified - Дата модификации созданного или обновлённого объекта&lt;br /&gt;
** hash - Хеш операции в storage/sync&lt;br /&gt;
** errorcode - Код ошибки, если таковые возникли&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы=&lt;br /&gt;
&lt;br /&gt;
===='''check_email($email)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет, можно ли использовать переданный e-mail в системе&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* email(string) - электронная почта.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true если ошибок не нашли,&lt;br /&gt;
* (string) - или код ошибки: [SI2], [PI4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_hash($input)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет входящий запрос по sha1-хешу, сверяя наличие требуемых полей и выдаёт код ошибки при её наличии&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $input(object) - содержит поля запроса, а так же обязательные поля - id, requesttime, requestlogin, requesthash.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true в случае успеха,&lt;br /&gt;
* (string) - иначе - код ошибки: [PR0-PR4], [PI3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_key($requestlogin)'''====&lt;br /&gt;
&lt;br /&gt;
Получить ключ идентификатора системы, используя логин.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $requestlogin(string) - идентификатор системы (логин)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если ключ не найден,&lt;br /&gt;
* (string) - ключ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_response($type, $errorcode = 'OK')'''====&lt;br /&gt;
&lt;br /&gt;
Получить каркас объекта ответа для разных типов методов.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип запроса ('set', 'get', ...)&lt;br /&gt;
* $errorcode(string) - код ошибки&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false, если произошла ошибка&lt;br /&gt;
* (object) - объект для передачи ответа в SOAP-сообщениях&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''hash_object($input, $requestpassword)'''====&lt;br /&gt;
&lt;br /&gt;
Получить sha1-хеш пришедшего SOAP-запроса по описанному ранее алгоритму&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* input(object) - SOAP-запрос с обязательными полями id, requesttime, requestlogin, requesthash, массивом cov.&lt;br /&gt;
* requestpassword(string) - ключ идентификатора системы.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - sha1-хеш&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Коды ошибок=&lt;br /&gt;
&lt;br /&gt;
При успешном выполнении операции синхронизации возвращается код ошибки 'OK'.&lt;br /&gt;
В ином случае, возвращается одна из следующих ошибок:&lt;br /&gt;
&lt;br /&gt;
* Ошибки параметров запроса [P]:&lt;br /&gt;
* Обязательные [PR]&lt;br /&gt;
** PR0 - Данные запроса пришли в некорректном формате&lt;br /&gt;
** PR1 - Отсутствует идентификатор системы [requestlogin]&lt;br /&gt;
** PR2 - Отсутствует время запроса [requesttime]&lt;br /&gt;
** PR3 - Отсутствует контрольная сумма [requesthash]&lt;br /&gt;
** PR4 - Отсутствует идентификатор объекта [id]&lt;br /&gt;
* Некорректные [PI]&lt;br /&gt;
** PI3 - Контрольная сумма запроса не совпадает&lt;br /&gt;
** PI4 - Недопустимые символы в e-mail&lt;br /&gt;
* Ошибки внутренние [S]:&lt;br /&gt;
* Некорректные параметры [SI]&lt;br /&gt;
** SI2 - Данный e-mail не допустим в системе&lt;br /&gt;
* Ошибки кодирования [SC]&lt;br /&gt;
** SC1 - Не зарегистрирована функция проверки параметров запроса для данного метода&lt;br /&gt;
** SC2 - Не зарегистрирована функция исполнения запроса для данного метода&lt;br /&gt;
&lt;br /&gt;
=Замечания, возможные проблемы=&lt;br /&gt;
&lt;br /&gt;
* Не совпадает контрольная сумма, ошибка [PI3]&lt;br /&gt;
** Необходимо обязательно проверять наличие всех полей, описанных в параметрах функций. Все типы параметров должны соответствовать описанным в wsdl-файле. К примеру, если в PHP попытаться передать массив в параметр, принимающий только строки, произойдёт конвертация массива в строку.&lt;br /&gt;
* Ошибки при выполнении запроса, если не передан какой-либо параметр, либо передан лишний параметр&lt;br /&gt;
** Желательно создавать класс (объект), в котором определены все поля и типы запроса, указанные в wsdl. От него создаётся экземпляр класса и поверх этих полей записываются значения. Таким образом, если поля не указаны, они автоматически должны заполняться значением null. Это позволит упростить процедуру хеширования и взаимодействия с сервером.&lt;/div&gt;</summary>
		<author><name>Konovalov</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/ages&amp;diff=2822</id>
		<title>Разработка:storages/ages</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/ages&amp;diff=2822"/>
				<updated>2014-08-28T09:39:38Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = ages&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
===Таблица в базе данных===&lt;br /&gt;
''ages'' - учебные периоды (учебный год в школе, семестр в ВУЗе). Каждый учебный поток и итоговая отметка по курсу принадлежат какому-то одному учебному периоду.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* name - название учебного периода&lt;br /&gt;
* begindate - дата и время начала по UTC&lt;br /&gt;
* enddate  - дата и время окончания по UTC&lt;br /&gt;
* eduweeks - количество учебных недель/циклов (каждая соответствует одному циклу в расписании) продолжительности курса, которые помещаются в этом учебном периоде.&lt;br /&gt;
* departmentid - структурное подразделение в таблице [[Разработка:storages/departments | departments ]], объявившее учебный период&lt;br /&gt;
* previousid - предыдущий учебный период&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/ages | ages ]]&lt;br /&gt;
* schdays - количество дней в учебной неделе (по-умолчанию - 7)&lt;br /&gt;
* schedudays - список учебных дней в учебной неделе (по-умолчанию 1,2,3,4,5)&lt;br /&gt;
* schstartdaynum - номер первого дня в периоде (по умолчанию - пустое; если оставить пустым, при сохранении туда подставится номер дня недели на дату начала периода, по календарю).&lt;br /&gt;
&lt;br /&gt;
===Дополнительные методы:===&lt;br /&gt;
&lt;br /&gt;
* '''+''' Получить список текущих учебных периодов для структурного подразделения. Возвращает массив объектов. По умолчанию - все периоды в статусе &amp;quot;идет учебный процесс&amp;quot;. Если второй параметр null - возвращаются все периоды, если строка - периоды в этом статусе, если массив - все периоды в таких статусах. Для удобства нужно сделать заготовку, которая принимает такой параметр и имя sql-колонки и возвращает соответствующий фрагмент sql-запроса - и поместить ее защищенным методом в storage_base.&lt;br /&gt;
* '''+''' Получить id учебного периода, являющегося x по счету после периода с заданным id. При этом x=1 - это сам исходный период (период для &amp;quot;первого класса), x=2 - это период, для которого период x=1 был предыдущим. Метод возвращает id или false, если однозначно установить id периода не удалось.&lt;br /&gt;
* Создать период для структурного подразделения: получает параметры &amp;quot;структурное подразделение&amp;quot;, &amp;quot;дата начала&amp;quot;, &amp;quot;дата конца&amp;quot;, &amp;quot;количество учебных недель&amp;quot;, &amp;quot;название&amp;quot;, &amp;quot;предыдущий период&amp;quot; - по умолчанию 0. Не указывать предыдущий период допускается только если для этого структурного подразделения еще не было создано периодов. Если для периода уже есть один &amp;quot;последующий период&amp;quot;, то больше его указывать в качестве &amp;quot;предыдущего&amp;quot; нельзя. Метод возвращает id созданного периода или false.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_next_ageid($ageid, $agenum)'''====&lt;br /&gt;
&lt;br /&gt;
Находит один из дочерних учебных периодов&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $ageid(int) - id учебного периода в таблице [[Разработка:storages/ages | ages ]].&lt;br /&gt;
* $agenum(int) - сколько периодов вперед отсчитать относительно переданного ageid. При этом переданный id считается первым.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* int - id периода&lt;br /&gt;
* bool - false, если установить id не удалось&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_previous_ageid($ageid, $agenum)'''====&lt;br /&gt;
&lt;br /&gt;
Находит предшествующий указанному в ageid учебный период&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $ageid(int) - id учебного периода в таблице [[Разработка:storages/ages | ages ]].&lt;br /&gt;
* $agenum(int) - сколько периодов назад отсчитать относительно переданного ageid. При этом переданный ageid считается последним.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* int - id периода или&lt;br /&gt;
* bool - false, если установить id не удалось&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''create_period_for_department($deptid, $datebegin, $dateend, $numweeks, $name, $previousid=null)'''====&lt;br /&gt;
&lt;br /&gt;
Создаёт период для структурного подразделения&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $deptid(int) - id учебного подразделения в таблице [[Разработка:storages/departments | departments ]].&lt;br /&gt;
* $datebegin(int) - время начала периода в формате [http://ru.wikipedia.org/wiki/UNIX-время unixtime].&lt;br /&gt;
* $dateend(int) - время окончания периода в формате [http://ru.wikipedia.org/wiki/UNIX-время unixtime].&lt;br /&gt;
* $numweeks(int) - количество недель в учебном периоде.&lt;br /&gt;
* $name(string) - название учебного периода.&lt;br /&gt;
* $previosid(int) - id предыдущего учебного периода в таблице [[Разработка:storages/ages | ages ]] или null, если нет предыдущего периода, по умолчанию null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* int - id созданного периода.&lt;br /&gt;
* bool - false, если период создать нельзя.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_ages_by_idrange($minid, $maxid)'''====&lt;br /&gt;
&lt;br /&gt;
Получает список записей по диапазону id&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $minid(int) - минимальный id.&lt;br /&gt;
* $maxid(int) - максимальный id.&lt;br /&gt;
''Возвращает значения:''&lt;br /&gt;
* array - массив записей.&lt;br /&gt;
* bool - false, если ни один не найден.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_agenum_byageid($startageid, $currentageid, $maxagenum)'''====&lt;br /&gt;
&lt;br /&gt;
Находит порядковый номер периода, считая от заданного периода&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $startageid(int) - id периода на котором нужно остановить поиск.&lt;br /&gt;
* $currentageid(int) - id периода, порядковый номер которого нам надо узнать.&lt;br /&gt;
* $maxagenum(int) - максимально возможный порядковый номер периода.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* int - порядковый номер периода.&lt;br /&gt;
* bool - 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;
 |ages&lt;br /&gt;
 |insert&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;new&amp;quot; объект с данными для вставки в таблицу.&lt;br /&gt;
''Пример:'' array('new' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при вставке новой записи в таблицу ages.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |ages&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;
 |Генерируется каждый раз при обновлении записи в таблице ages.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |ages&lt;br /&gt;
 |delete&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;old&amp;quot; объект с данными, которые удаляются из таблицы&lt;br /&gt;
''Пример:'' array('old' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при удалении записи из таблицы ages.&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Konovalov</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:moodleQuickForm&amp;diff=2821</id>
		<title>Разработка:moodleQuickForm</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:moodleQuickForm&amp;diff=2821"/>
				<updated>2014-08-21T07:35:48Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Проверка на стороне сервера */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Общие сведения ==&lt;br /&gt;
Библиотека ''moodleQuickForm'' (она же ''moodleform'') построена на основе библиотеки PEAR [http://pear.php.net/package/HTML_QuickForm HTML_QuickForm]. Описание работы всех функций moodleQuickForm следует искать именно по этой ссылке.&lt;br /&gt;
&lt;br /&gt;
При помощи ''moodleQuickForm'' можно описать большинство стандартных форм. Эта библиотека значительно облегчает время и силы, потраченные на разработку формы.&lt;br /&gt;
&lt;br /&gt;
Перечисление всего того, что доступно в ''moodleQuickForm'' заняло бы слишком много места, поэтому перечислим только те задачи, которые при помощи этой библиотеки решить нельзя:&lt;br /&gt;
* создать форму в виде таблицы, в которой более 2-х столбцов&lt;br /&gt;
* создать длинную горизонтальную форму&lt;br /&gt;
Для всех остальных случаев построения форм следует использовать именно эту библиотеку.&lt;br /&gt;
== Внешний вид ==&lt;br /&gt;
Внешне все формы класса moodleform выглядят одинаково: это таблица из 2-х столбцов, и некоторого количества строк:&lt;br /&gt;
&lt;br /&gt;
== Правила объявления формы ==&lt;br /&gt;
Установка всех элементов формы происходит либо в функции [[Разработка:moodleQuickForm#definition()|definition()]] (для статических форм), либо в функции [[Разработка:moodleQuickForm#definition_after_data()|definition_after_data()]] (для динамических форм). &lt;br /&gt;
== Описание стандартных методов moodleform ==&lt;br /&gt;
===== __construct($action, $customdata, $method, $target, $attributes, $editable) =====&lt;br /&gt;
Этот метод вызывается когда вы создаете новый объект формы.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
* ''$action'' - какая страница будет обрабатывать данные это формы. Работает аналогично &amp;lt;form action=&amp;quot;...&amp;quot;&amp;gt;. По умолчанию - адрес той страницы, на которой находится форма.&lt;br /&gt;
* ''$customdata'' - дополнительные данные для формы. Эти параметры будут записаны во внутреннюю переменную '''$this-&amp;gt;_customdata''' доступны из всех внутренних методов формы. Передать можно все что угодно, никаних ограничений нет, тип переменной - на ваше усмотрение, но если вам нужно передать несколько значений, то рекомендуется использовать объект. По умолчанию null.&lt;br /&gt;
* ''$method'' - метод формы, GET или POST. По умолчанию POST.&lt;br /&gt;
* ''$target'' - только для фреймов. Имя фрейма, обрабатывающего эту форму. Используется крайне редко. По умолчанию пустая строка.&lt;br /&gt;
* ''$attributes'' - строка атрибутов для тега &amp;lt;form&amp;gt;. Будет добавлена внутрь тега. Разрешены любые атрибуты, предусмотренные стандартом HTML 4.01. По умолчанию null.&lt;br /&gt;
* ''$editable'' - доступна ли форма для редактирования. По умолчанию true (в противном случае все поля в форме будут неактивными).&lt;br /&gt;
&lt;br /&gt;
===== definition() =====&lt;br /&gt;
Этот абстрактный метод обязательно должен быть переопределен. В нем содержится всё объявление формы. &lt;br /&gt;
&lt;br /&gt;
Существует несколько основных правил, которых следует придерживаться при написании функции definition():&lt;br /&gt;
* Описание каждой формы должно начинаться со ссылки на HTML_QuickForm:&lt;br /&gt;
* Если используются глобальные переменные - их объявление также происходит в начале.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    class myform extends dof_modlib_widgets_form&lt;br /&gt;
    {&lt;br /&gt;
        function definition()&lt;br /&gt;
        {&lt;br /&gt;
            // делаем глобальные переменные видимыми&lt;br /&gt;
            global $DOF;&lt;br /&gt;
            // создаем ссылку на HTML_QuickForm&lt;br /&gt;
            $mform =&amp;amp; $this-&amp;gt;_form;&lt;br /&gt;
            ...&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* При использовании этого метода все данные собираются ДО объявления формы. Сама форма только отображает и отправляет данные.&lt;br /&gt;
* В случае, если необходимо создать динамическую форму следует воспользоваться методом definition_after_data()&lt;br /&gt;
===== definition_after_data() =====&lt;br /&gt;
Этот метод следует использовать в случае, если вам требуется создать динамическую форму, т. е. форму, которая конструируется в зависимости от различных исходных данных. Этот метод вызывается после definition(), отправки данных в форму и set_data(), но до display().&lt;br /&gt;
Этот метод работает также как и definition(), но используется для динамических форм, в случаях, когда вам нужно добавить дополнительные поля в форму после отправки данных пользователем.&lt;br /&gt;
===== elementExists($name) =====&lt;br /&gt;
Только для использования внутри definition_after_data(). Проверяет существование элемента с указанным именем в форме.&lt;br /&gt;
* $elementName - имя элемента для проверки&lt;br /&gt;
===== removeElement($name) =====&lt;br /&gt;
Только для использования внутри definition_after_data(). Удалить ранее созданный элемент с указанным именем из формы.&lt;br /&gt;
* $elementName - имя элемента для удаления&lt;br /&gt;
===== getElementValue($name) =====&lt;br /&gt;
Только для использования внутри definition_after_data(). Получить введенное значение из указанного элемента формы.&lt;br /&gt;
* $elementName - имя элемента, значение из которого вы хотите получить&lt;br /&gt;
===== getElement($name) =====&lt;br /&gt;
Только для использования внутри definition_after_data(). Получить объект уже ранее созданного элемента формы для изменения. Используется для того, чтобы записать новые значения в форму после отправки данных пользователем.&lt;br /&gt;
&lt;br /&gt;
Пример 1: Установка нового значения поля после отправки данных пользователем.&lt;br /&gt;
    // получаем новое значение&lt;br /&gt;
    $newvalue = 'foo';&lt;br /&gt;
    // получаем ранее созданный элемент (например типа &amp;quot;text&amp;quot;)&lt;br /&gt;
    $element =&amp;amp; $mform-&amp;gt;getElement('my_element');&lt;br /&gt;
    // устанавливаем в него новое значение&lt;br /&gt;
    $element-&amp;gt;setValue($newvalue);&lt;br /&gt;
&lt;br /&gt;
Пример 2: установка новых вариантов в поле select после отправки данных пользователем.&lt;br /&gt;
    // создаем новые варианты для элемента&lt;br /&gt;
    $options = array();&lt;br /&gt;
    $options[-1] = 'Новый вариант1';&lt;br /&gt;
    $options[-2] = 'Новый вариант2';&lt;br /&gt;
    // получаем ранее созданный элемент типа &amp;quot;select&amp;quot;&lt;br /&gt;
    $element =&amp;amp; $mform-&amp;gt;getElement('my_element');&lt;br /&gt;
    // загружаем новые данные в элемент&lt;br /&gt;
    $element-&amp;gt;load($options);&lt;br /&gt;
===== display() =====&lt;br /&gt;
Вывести форму на экран. Вызывается непосредственно в том месте, где должна быть форма.&lt;br /&gt;
===== get_data($slashed) =====&lt;br /&gt;
Получить данные формы после всех проверок на стороне клиента и сервера. Данные получаются в виде объекта, именами полей которого являются имена заданных в функции definition() объектов, а значениями - значения полей в форме (по умолчанию или введенные). Любой другой способ получения данных, кроме как через эту функцию, не допускается.&lt;br /&gt;
* $slashed - экранировать кавычки. По умолчанию true.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
    $data = $form-&amp;gt;get_data();&lt;br /&gt;
===== set_data($data) =====&lt;br /&gt;
Добавить в форму значения по умолчанию для всех перечисленных полей. Значения полей по умолчанию также можно передать в параметре конструктора $customdata, если вы имеете дело с динамической формой. Любой другой способ передачи значений по умолчанию в форму не допускается.&lt;br /&gt;
* $data - объект вида (имя_поля -&amp;gt; значение)&lt;br /&gt;
&lt;br /&gt;
''Пример:''&lt;br /&gt;
    $data = new Object();&lt;br /&gt;
    // заполняем объект значениями по умолчанию&lt;br /&gt;
    $data-&amp;gt;field1 = 'value1';&lt;br /&gt;
    $data-&amp;gt;field2 = 'value2';&lt;br /&gt;
    // Отправляем значения в форму&lt;br /&gt;
    $form-&amp;gt;set_data($data);&lt;br /&gt;
&lt;br /&gt;
===== setDefault('elementName', $value) =====&lt;br /&gt;
Установить значение ''$value'' по умолчанию для элемента ''elementName''. &lt;br /&gt;
    $mform-&amp;gt;addElement('hidden', 'имяэлемента');&lt;br /&gt;
    $mform-&amp;gt;setDefault('имяэлемента', $value);&lt;br /&gt;
В случае, если нужно установить значение по умолчанию для элемента внутри группы, то нужно использовать такой синтаксис&lt;br /&gt;
    $mform-&amp;gt;setDefault('имягруппы[имяэлемента]', $value);&lt;br /&gt;
Для элемента ''hierselect'' в качестве второго аргумента нужно указывать массив со значениями по умолчанию для каждого уровня:&lt;br /&gt;
    $mform-&amp;gt;setDefault('имяэлемента', array(14, 2, 8));&lt;br /&gt;
&lt;br /&gt;
===== setConstant('elementName', $value) =====&lt;br /&gt;
Установить постоянную переменную ''$value'' по умолчанию для элемента ''elementName''. &lt;br /&gt;
    $mform-&amp;gt;addElement('textarea', 'имяэлемента','Текстовое поле');&lt;br /&gt;
    $mform-&amp;gt;setDefault('имяэлемента', $value);&lt;br /&gt;
Не перекрывается _GET и _POST. Возможно использование, когда setDefault не помогает.&lt;br /&gt;
&lt;br /&gt;
===== get_submitted_data($slashed) =====&lt;br /&gt;
Получить данные из формы, к которым еще не применены никакие проверки.&lt;br /&gt;
* $slashed - экранировать кавычки. По умолчанию true.&lt;br /&gt;
===== add_element($type, $name, $description, $attributes, $options) =====&lt;br /&gt;
Добавить элемент в форму. Наиболее часто используемая функция при построении формы.&lt;br /&gt;
$type - Тип элемента&lt;br /&gt;
$name - Имя элемента в форме. Только латинские буквы.&lt;br /&gt;
$description - Описание элемента. Выведется слева от него.&lt;br /&gt;
$attributes - строка с параметрами, вставляемая в html-тег элемента.&lt;br /&gt;
$options - массив с дополнительными параметрами. Назначение параметров зависит от типа элемента. &lt;br /&gt;
&lt;br /&gt;
Поведение самой функции ''add_element'' также зависит от типа добавляемого элемента. Подробнее об этом - см. раздел [[Разработка:moodleQuickForm#Элементы формы|Элементы формы]].&lt;br /&gt;
&lt;br /&gt;
===== create_element($type, $name, $description, $attributes, $options) =====&lt;br /&gt;
Этот метод используется для добавления группы элементов. Созданные элементы добавляются в массив. Отличие этой функции от ''add_element()'' состоит в том, что ''add_element()'' добавляет уже полностью готовый элемент в форму, а ''create_element()'' только создает элемент в памяти для последующего добавления. Назначение аргументов этой функции аналогично функции ''add_element()''.&lt;br /&gt;
&lt;br /&gt;
Обращение к функции создания элемента происходит по ссылке для ускорения быстродействия. &lt;br /&gt;
&lt;br /&gt;
Способ интерпретации входных параметров и поведение этой функции также зависят от указанного типа элемента. Подробнее об этом - см. раздел [[Разработка:moodleQuickForm#Элементы формы|Элементы формы]].&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
    // создаем массив&lt;br /&gt;
    $objs = array();&lt;br /&gt;
    // Создаем элементы формы&lt;br /&gt;
    $objs[] =&amp;amp; $mform-&amp;gt;createElement('text', 'testname1', 'Пояснение к полю 1');&lt;br /&gt;
    $objs[] =&amp;amp; $mform-&amp;gt;createElement('text', 'testname2', 'Пояснение к полю 2');&lt;br /&gt;
    $objs[] =&amp;amp; $mform-&amp;gt;createElement('text', 'testname3', 'Пояснение к полю 3');&lt;br /&gt;
    // добавляем элементы в форму&lt;br /&gt;
    $grp =&amp;amp; $mform-&amp;gt;addElement('group', 'groupname', 'Пояснение для группы элементов', $objs);&lt;br /&gt;
===== insertElementBefore($element, $nameAfter) =====&lt;br /&gt;
Вставляет элемент перед уже ранее добавленным функцией [[Разработка:moodleQuickForm#add_element($type, $name, $description, $attributes, $options) | add_element()]]. Этот метод полезно применять в динамических формах, внутри функции [[Разработка:moodleQuickForm#definition()|definition()]] или [[Разработка:moodleQuickForm#definition_after_data()|definition_after_data()]].&lt;br /&gt;
* $element - Объект вставляемого элемента. Для создания объекта используйте функцию create_element(); &lt;br /&gt;
* $nameAfter - Имя элемента перед которым будет вставлен элемент&lt;br /&gt;
Помните, что имя каждого элемента в форме должно быть уникальным (кроме элементов типа radio).&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
    // создаем элемент&lt;br /&gt;
    $element =&amp;amp; $mform-&amp;gt;createElement('text', 'my_new_text', 'Пояснение к текстовому полю');&lt;br /&gt;
    // добавляем его перед уже ранее созданным элементом&lt;br /&gt;
    $mform-&amp;gt;insertElementBefore($element, 'my_old_text');&lt;br /&gt;
===== addRule($element, $message, $type, $format, $validation, $reset, $force) =====&lt;br /&gt;
Добавить правило для отдельного поля. Эту функцию следует использовать для проверок на стороне клиента и простых проверок на стороне сервера. Для сложных проверок данных (например с использованием обращения к БД) используйте функцию [[Разработка:moodleQuickForm#validation($data, $files) | validation()]].&lt;br /&gt;
&lt;br /&gt;
* $element - имя элемента, к которому применяется проверка&lt;br /&gt;
* $message - сообщение, в случае если проверка не пройдена&lt;br /&gt;
* $type - тип правила проверки (см. таблицу ниже)&lt;br /&gt;
* $format - дополнительные данные, требующиеся для некоторых проверок. По умолчанию null.&lt;br /&gt;
* $validation - на какой стороне производить проверку. Возможные значения:&lt;br /&gt;
** server - на стороне сервера (по умолчанию)&lt;br /&gt;
** client - на стороне клиента&lt;br /&gt;
* $reset - используется при проверке на стороне клиента. Сбрасывать ли данные в этом поле на значение по умолчанию, если введены неправильные данные? по умолчанию false (не сбрасывать).&lt;br /&gt;
* $force - применять ли проверку даже если проверяемый элемент не существует? По умолчанию false (не применять). Этот параметр используется для проверок в динамических формах.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 |+ Таблица типов правил для полей формы&lt;br /&gt;
 ! Имя&lt;br /&gt;
 ! Описание&lt;br /&gt;
 ! width=&amp;quot;50%&amp;quot; |Пример кода&lt;br /&gt;
 |-&lt;br /&gt;
 |required&lt;br /&gt;
 |Обязательное поле&lt;br /&gt;
 |&amp;lt;pre&amp;gt;$mform-&amp;gt;addRule('testname','Это поле является обязательным', 'required',null,'client');&amp;lt;/pre&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |minlength&lt;br /&gt;
 |Минимальная длина значения в поле.&lt;br /&gt;
 |&amp;lt;pre&amp;gt;$mform-&amp;gt;addRule('testname','Слишком короткое значение', 'minlength', 10,'client');&amp;lt;/pre&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |maxlength&lt;br /&gt;
 |Максимальная длина значения в поле.&lt;br /&gt;
 |&amp;lt;pre&amp;gt;$mform-&amp;gt;addRule('testname','Слишком длинное значение', 'maxlength', 256,'client');&amp;lt;/pre&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |rangelength&lt;br /&gt;
 |Проверка длины значения с обеих сторон: например не больше 5 и не меньше 7. Параметры задаются массивом из двух элементов. В данном примере от 111 до 222.&lt;br /&gt;
 |&amp;lt;pre&amp;gt;$mform-&amp;gt;addRule('testname','Длина значения неправильна', 'rangelength', array(111, 222),'client');&amp;lt;/pre&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |email&lt;br /&gt;
 |Проверка email-адреса&lt;br /&gt;
 |&amp;lt;pre&amp;gt;$mform-&amp;gt;addRule('testname','неправильный email', 'email',null,'client');&amp;lt;/pre&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |regex&lt;br /&gt;
 |Проверка данных регулярными выражениями. Используется редко, в случае, когда обычных проверок недостаточно.&lt;br /&gt;
 |&lt;br /&gt;
 |-&lt;br /&gt;
 |lettersonly&lt;br /&gt;
 |Только латинские буквы.&lt;br /&gt;
 |&amp;lt;pre&amp;gt;$mform-&amp;gt;addRule('testname','Ошибка', 'lettersonly', null,'client');&amp;lt;/pre&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |alphanumeric&lt;br /&gt;
 |Только латинские буквы и цифры&lt;br /&gt;
 |&amp;lt;pre&amp;gt;$mform-&amp;gt;addRule('testname','Ошибка', 'alphanumeric', null,'client');&amp;lt;/pre&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |numeric&lt;br /&gt;
 |Целое или дробное число&lt;br /&gt;
 |&amp;lt;pre&amp;gt;$mform-&amp;gt;addRule('testname', 'В этом поле разрешены только числа', 'numeric', null, 'client');&amp;lt;/pre&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |nopunctuation&lt;br /&gt;
 |В строке не должны присутствовать специальные символы. Список: '''()./*^?#!@$%+=,&amp;quot;'&amp;gt;&amp;lt;~[]{}'''&lt;br /&gt;
 |&amp;lt;pre&amp;gt;$mform-&amp;gt;addRule('testname', 'Введены запрещенные символы', 'nopunctuation', null, 'client');&amp;lt;/pre&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |nonzero&lt;br /&gt;
 |Ненулевое значение&lt;br /&gt;
 |&amp;lt;pre&amp;gt;$mform-&amp;gt;addRule('testname', 'Только ненулевые значения', 'nonzero', null, 'client');&amp;lt;/pre&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |callback&lt;br /&gt;
 |Использовать пользовательскую функцию для проверки данных. Используется крайне редко, если у вас есть сложные проверки - то лучше используйте для них функцию [[Разработка:moodleQuickForm#validation($data, $files) | validation()]].&lt;br /&gt;
 |&lt;br /&gt;
 |-&lt;br /&gt;
 |compare&lt;br /&gt;
 |Сравнить два значения. Может использоваться для сравнения чисел и строк. Операторы, используемые для сравнения:&lt;br /&gt;
* '''==''' равно&lt;br /&gt;
* '''!=''' не равно&lt;br /&gt;
* '''&amp;gt;'''  больше&lt;br /&gt;
* '''&amp;gt;=''' больше или равно&lt;br /&gt;
* '''&amp;lt;'''  меньше&lt;br /&gt;
* '''&amp;lt;=''' меньше или равно&lt;br /&gt;
 |&amp;lt;pre&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |uploadedfile&lt;br /&gt;
 |&lt;br /&gt;
 |&lt;br /&gt;
 |-&lt;br /&gt;
 |maxfilesize&lt;br /&gt;
 |Проверка максимального значения файла для конкретного поля&lt;br /&gt;
 |&lt;br /&gt;
 |-&lt;br /&gt;
 |mimetype&lt;br /&gt;
 |Проверка mime-типа загруженного файла.&lt;br /&gt;
 |&lt;br /&gt;
 |-&lt;br /&gt;
 |filename&lt;br /&gt;
 |Проверка имени файла. Убираются все потенциально опасные символы. &lt;br /&gt;
 |&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== is_submitted() =====&lt;br /&gt;
Возвращает ''true'' если форма подтверждена кнопкой типа &amp;quot;submit&amp;quot;, и ''false'' в противном случае. Обратите внимание, что кнопка &amp;quot;отмена&amp;quot; в форме также является кнопкой типа &amp;quot;submit&amp;quot;, поэтому используйте для этих целей функцию is_canceled(). &lt;br /&gt;
Для проверки того, что данные отправлены в форму, и корректно прошли все проверки на стороне сервера и клиента, можно использовать такую конструкцию: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ( $form-&amp;gt;is_submitted() AND confirm_sesskey() AND $formdata = $form-&amp;gt;get_data() AND ! $form-&amp;gt;is_cancelled() )&lt;br /&gt;
{//даные переданы и прошли все проверки&lt;br /&gt;
&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
}elseif( $form-&amp;gt;is_cancelled() )&lt;br /&gt;
{// ввод данных отменен&lt;br /&gt;
&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Здесь:&lt;br /&gt;
* ''$form-&amp;gt;is_submitted()'' - проверка того, что данные в форме были отправлены кнопкой типа &amp;quot;submit&amp;quot;&lt;br /&gt;
* ''confirm_sesskey()'' - проверка того, что данные отправлены внутри текущей сессии (встроенная функция moodle)&lt;br /&gt;
* ''$formdata = $form-&amp;gt;get_data()'' - получение данных формы, и одновременное подтверждение того, что данные прошли все проверки, не не нажата кнопка &amp;quot;отмена&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Также возможно сначала проверять is_canceled(), а потом is_submitted().&lt;br /&gt;
&lt;br /&gt;
===== is_cancelled() =====&lt;br /&gt;
Возвращает ''true'' если форма отменена, и ''false'' в противном случае.&lt;br /&gt;
===== setAdvanced($elementName, $advanced) =====&lt;br /&gt;
Устанавливает поля формы как &amp;quot;дополнительные&amp;quot; - то есть они по умолчанию скрыты, и появляются по щелчку на кнопке &amp;quot;показать дополнительные&amp;quot;.&lt;br /&gt;
* $elementName - имя элемента, который вы хотите пометить как дополнительные&lt;br /&gt;
* $advanced - включить/отключить признак дополнительности. Полезно при построении динамических форм: если в зависимости от какого-либо параметра поля должны быть обязательными или необязательными.&lt;br /&gt;
===== setShowAdvanced($showadvancedNow) ===== &lt;br /&gt;
Используется как дополнение к методу setAdvanced(). Изменить текст на кнопке с &amp;quot;Показать дополнительные&amp;quot; на что-нибудь более оригинальное.&lt;br /&gt;
* $showadvancedNow - Тип:строка, текст который вы хотите поместить на кнопке&lt;br /&gt;
===== add_action_buttons($cancel, $submitlabel) =====&lt;br /&gt;
Показывает две кнопки &amp;quot;Сохранить изменения&amp;quot; и &amp;quot;Отменить&amp;quot;.&lt;br /&gt;
* $cancel - показывать ли кнопку &amp;quot;отменить&amp;quot;. По умолчанию true.&lt;br /&gt;
* $submitlabel - Надпись на кнопке сохранения данных. Значение переменной по умолчанию - null. Надпись по умолчанию &amp;quot;Сохранить изменения&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== add_checkbox_controller($groupid, $buttontext, $attributes, $originalValue) =====&lt;br /&gt;
Добавляет переключатель (ссылку или кнопку), контролирующий состояние нескольких элементов типа advcheckbox. &lt;br /&gt;
* $groupid - id группы элементов типа advcheckbox, которую контролирует этот переключатель&lt;br /&gt;
* $buttontext - текст на кнопке переключателя. По умолчанию &amp;quot;выделить все&amp;quot;.&lt;br /&gt;
* $attributes - ассоциативный массив html-атрибутов для тега, описывающего переключатель&lt;br /&gt;
* $originalValue - Возможные состояния: 0 или 1. Изначальное состояние всех переключателей контролируемой группы. По умолчанию 0 (все галочки сняты).&lt;br /&gt;
&lt;br /&gt;
===== setType($elementname, $paramtype) =====&lt;br /&gt;
Отвечает за первичную проверку значений, которые вы получаете из формы. Всегда используйте этот метод при получении данных из формы.&lt;br /&gt;
* $elementname - имя элемента в форме&lt;br /&gt;
* $paramtype - ожидаемый тип получаемых данных&lt;br /&gt;
Список возможных значений для $paramtype можно посмотреть в статье [[Разработка:Константы_Moodle#Константы типов данных|константы типов данных]]&lt;br /&gt;
&lt;br /&gt;
===== validation($data, $files) =====&lt;br /&gt;
Вызывается автоматически, после отправки данных на сервер. Не вызывайте эту функцию вручную. &lt;br /&gt;
&lt;br /&gt;
Используется для дополнительной проверки данных на стороне сервера. Все необходимые сложные проверки должны быть проведены именно здесь. Для простых проверок (на тип данных, проверка email-адреса и т. п.) используйте функцию [[Разработка:moodleQuickForm#addRule($element, $message, $type, $format, $validation, $reset, $force)  | addRule()]]&lt;br /&gt;
* $data - массив вида array('имя_поля' =&amp;gt; 'значение') из отправленных данных&lt;br /&gt;
* $files - массив загруженных в форму файлов. Имеет вид array('имя_поля' =&amp;gt; 'путь_к_временному_файлу')&lt;br /&gt;
&lt;br /&gt;
В случае возникших ошибок возвращает массив вида array('имя_поля' =&amp;gt; 'текст_сообщения_об_ошибке'). По умолчанию (или в случае отсутствия ошибок при проверке) эта функция '''обязательно должна''' вернуть пустой массив.&lt;br /&gt;
&lt;br /&gt;
===== disabledIf($elementName, $dependentOn, $condition, $value) =====&lt;br /&gt;
Эта функция используется для того чтобы установить зависимости между полями формы. До тех пор пока одно поле формы не будет выделено, или в него не будет введено нужное значение, другое не станет активным.&lt;br /&gt;
&lt;br /&gt;
К одному элементу формы можно применять несколько правил disabledIf. Несколько элементов могут зависеть от одного поля.&lt;br /&gt;
* $elementName - имя зависимого элемента.&lt;br /&gt;
* $dependentOn - имя элемента, чье состояние должно быть проверено условием $condition.&lt;br /&gt;
* $condition -  по умолчанию 'notchecked'.&lt;br /&gt;
* $value - значение, используемое для проверки условия. По умолчанию &amp;quot;1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 |+ Таблица вариантов условий для параметра $condition&lt;br /&gt;
 ! Значение&lt;br /&gt;
 ! Пояснение&lt;br /&gt;
 |-&lt;br /&gt;
 |''checked''&lt;br /&gt;
 |Элемент выделен. Используется для элементов radio и checkbox. Не работает с элементами advcheckbox.&lt;br /&gt;
 |-&lt;br /&gt;
 |''notchecked''&lt;br /&gt;
 |Элемент не выделен. Используется для элементов radio и checkbox. Не работает с элементами advcheckbox.&lt;br /&gt;
 |-&lt;br /&gt;
 |''eq''&lt;br /&gt;
 |Значение указанного элемента равно значению указанному в параметре $value.&lt;br /&gt;
 |-&lt;br /&gt;
 |''noteq''&lt;br /&gt;
 |Значение указанного элемента не равно значению указанному в параметре $value.&lt;br /&gt;
 |-&lt;br /&gt;
 |''noitemselected''&lt;br /&gt;
 |В указанном html-элементе &amp;quot;select&amp;quot; ничего не выбрано.&lt;br /&gt;
 |}&lt;br /&gt;
===== applyFilter($elementName, $functionName); =====&lt;br /&gt;
Применить проверку элементу формы. &lt;br /&gt;
&lt;br /&gt;
Параметры&lt;br /&gt;
* ''$elementName'' - название элемента внутри формы. В качестве имени можно использовать специальное значение '''__ALL__''' чтобы применить проверку ко всем элементам.&lt;br /&gt;
* ''$functionName'' - название функции (без скобок и аргументов), которая должна быть применена к этому элементу&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
    // применение проверки ко всем элементам&lt;br /&gt;
    $mform-&amp;gt;applyFilter('__ALL__', 'trim');&lt;br /&gt;
    &lt;br /&gt;
    // применение проверки к одному элементу&lt;br /&gt;
    $mform-&amp;gt;applyFilter('lastname', 'addslashes');&lt;br /&gt;
===== closeHeaderBefore($elementName) =====&lt;br /&gt;
Закрыть рамку формы до элемента с указанным именем. Эта функция позволит вам выносить нижние элементы &amp;quot;за пределы&amp;quot; визуальной рамки формы, а также добавлять элементы без заголовка.&lt;br /&gt;
Иными словами, эта функция закрывает тег [http://htmlbook.ru/html/fieldset.html &amp;lt;FIELDSET&amp;gt;].&lt;br /&gt;
Эта функция должна быть обязательно вызвана ПОСЛЕ добавления элемента, перед которым закрывается рамка формы.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
    // добавляем элемент формы&lt;br /&gt;
    $mform-&amp;gt;addElement('text', 'name', $this-&amp;gt;dof-&amp;gt;get_string('name','plans').':');&lt;br /&gt;
    // Выносим его, и следующие элементы за рамку формы&lt;br /&gt;
    $mform-&amp;gt;closeHeaderBefore('name')&lt;br /&gt;
&lt;br /&gt;
== Элементы формы ==&lt;br /&gt;
Во всех приведенных примерах переменная $form обозначает ссылку на объект HTML_QuickForm. Подробнее об этом в описании функции [[Разработка:moodleQuickForm#definition() |definition()]]. Во всех текстовых полях (кроме кнопок) можно использовать html-теги форматирования.&lt;br /&gt;
&lt;br /&gt;
=== header ===&lt;br /&gt;
Заголовок формы. Этот заголовок будет говорить об общем содержании данных в форме. Также он используется в случае, когда вам нужно разбить форму на несколько частей.&lt;br /&gt;
Если вам нужно закрыть рамку заголовка перед каким-либо элементом, используйте функцию [[#closeHeaderBefore($elementName) |closeHeaderBefore()]]&lt;br /&gt;
&amp;lt;pre&amp;gt;$mform-&amp;gt;addElement('header','testname', 'Текст заголовка');&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== checkbox ===&lt;br /&gt;
Стандартный html-элемент checkbox.&lt;br /&gt;
&amp;lt;pre&amp;gt;$mform-&amp;gt;addElement('checkbox', 'testname', 'Текст_перед_галочкой', 'Текст_после галочки');&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== file ===&lt;br /&gt;
Стандартное диалоговое окно загрузки файла.&lt;br /&gt;
&amp;lt;pre&amp;gt;$mform-&amp;gt;addElement('file', 'userfile', 'Текст перед окном загрузки файла');&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== group ===&lt;br /&gt;
Добавление группы элементов. Для того, чтобы добавить группу элементов, их нужно предварительно создать при помощи функции [[Разработка:moodleQuickForm#create_element($type, $name, $description, $attributes, $options)|create_element()]]&lt;br /&gt;
Параметры (в порядке перечисления):&lt;br /&gt;
* тип&lt;br /&gt;
* название элемента&lt;br /&gt;
* пояснение&lt;br /&gt;
* массив с элементами&lt;br /&gt;
* разделитель для элементов (в примере - тег &amp;amp;lt;br&amp;amp;gt;)&lt;br /&gt;
* добавить ли имя группы к имени элемента (true - добавить)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // создаем массив&lt;br /&gt;
    $objs = array();&lt;br /&gt;
    // Создаем элементы формы&lt;br /&gt;
    $objs[] =&amp;amp; $mform-&amp;gt;createElement('text', 'testname1', 'Пояснение к полю 1');&lt;br /&gt;
    $objs[] =&amp;amp; $mform-&amp;gt;createElement('text', 'testname2', 'Пояснение к полю 2');&lt;br /&gt;
    $objs[] =&amp;amp; $mform-&amp;gt;createElement('text', 'testname3', 'Пояснение к полю 3');&lt;br /&gt;
    // добавляем элементы в форму&lt;br /&gt;
    $grp =&amp;amp; $mform-&amp;gt;addElement('group', 'groupname', 'Пояснение для группы элементов', $objs, '&amp;lt;br&amp;gt;', true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== password ===&lt;br /&gt;
Стандартный html-элемент password&lt;br /&gt;
&amp;lt;pre&amp;gt;mform-&amp;gt;addElement('password', 'testname', 'Текст перед окном с паролем');&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== passwordunmask ===&lt;br /&gt;
То же самое, что и элемент password, но с дополнительной галочкой &amp;quot;отобразить пароль&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;$mform-&amp;gt;addElement('passwordunmask', 'testname', 'Текст перед окном с паролем');&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== radio ===&lt;br /&gt;
Стандартный html-элемент radio. Единственный элемент в quickform, несколько объектов которого можно добавить, используя одинаковое значение name.&lt;br /&gt;
&amp;lt;pre&amp;gt;$mform-&amp;gt;addElement('radio', 'testname', 'Текст до переключателя 1', &lt;br /&gt;
'Текст после переключателя 1', 'Значение1');&lt;br /&gt;
$mform-&amp;gt;addElement('radio', 'testname', 'Текст до переключателля 2', &lt;br /&gt;
'Текст после переключателя 2', 'Значение2');&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== select ===&lt;br /&gt;
Стандартный html-элемент select. Массив $choices содержит варианты для оператора select. Значениями массива являются текстовые надписи в списке выбора, а ключами - значения этих вариантов.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // создаем массив с вариантами выбора&lt;br /&gt;
    $choices = array('a' =&amp;gt; 'Текст варианта 1', 'b' =&amp;gt; 'Текст варианта 2');&lt;br /&gt;
&lt;br /&gt;
    // Добавляем элемент формы&lt;br /&gt;
    $mform-&amp;gt;addElement('select', 'testname', 'Пояснение для строки выбора', $choices);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== Дополнительные функции ====&lt;br /&gt;
Элемент select обладает дополнительными методами, которые &lt;br /&gt;
* addOption($text, $value, $attributes=null) - добавить новый вариант к select-элементу, уже после того как он был создан, и в него были установлены значения. Параметры:&lt;br /&gt;
** $text - текст, который отображается пользователю&lt;br /&gt;
** $value - значение, которое передается из формы&lt;br /&gt;
** $attributes - дополнительные html-атрибуты тега OPTION (если требуется). Передаются строкой, либо массивом в формате ключ-значение.&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$select = $mform-&amp;gt;getElement('testname');&lt;br /&gt;
$select-&amp;gt;addOption('Текст для отображения', 555);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== selectgroups ===&lt;br /&gt;
=== submitlink ===&lt;br /&gt;
=== text ===&lt;br /&gt;
Стандартный html-элемент text. Последний параметр - строка html-атрибутов. В данном примере длина поля задана 100%. Это гарантирует, что элемент будет нормально выглядеть и умещаться в форму при любых размерах экрана.&lt;br /&gt;
&amp;lt;pre&amp;gt;$mform-&amp;gt;addElement('text', 'testname', 'Пояснение для текстового поля', ' width=&amp;quot;100%&amp;quot; ');&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== textarea ===&lt;br /&gt;
Стандартный html-элемент textarea. Значения ширины и высоты задаются в виде массива, последним аргументом. Ширину поля также рекомендуется задавать 100%.&lt;br /&gt;
&amp;lt;pre&amp;gt;$mform-&amp;gt;addElement('textarea', 'testname', 'Пояснение:', array('width'=&amp;gt;'100%', 'height'=&amp;gt;'100px'));&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== date_selector ===&lt;br /&gt;
Диалоговое окно с выбором даты. Обратите внимание, что при получении данных через [[Разработка:moodleQuickForm#get_data($slashed)|get_data()]] значение этого поля автоматически трансформируется в метку unixtime на 12:00:00 дня выбранной даты. По умолчанию выставляется текущая дата и время. Другое начальное значение может быть задано при помощи функции [[Разработка:moodleQuickForm#setDefault($elementName, $defaultValue, $slashed)|setDefault()]].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$options = array();// объявляем массив для установки значений по умолчанию&lt;br /&gt;
$options['startyear'] = 1980; // устанавливаем год, с которого начинать вывод списка&lt;br /&gt;
$options['stopyear']  = 2001; // устанавливаем год, которым заканчивается список&lt;br /&gt;
$options['optional']  = false; // убираем галочку, делающую возможным отключение этого поля&lt;br /&gt;
&lt;br /&gt;
$mform-&amp;gt;addElement('date_selector', 'testname', 'Пояснение для поля даты', $options);&lt;br /&gt;
// устанавливаем время по умолчанию на год вперед&lt;br /&gt;
$mform-&amp;gt;setDefault('testname', time()+3600*24*365);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== date_time_selector ===&lt;br /&gt;
Этот элемент аналогичен элементу date_selector, только добавлены параметры часов и минут. Полученные данные также трансформируются в unixtime, но уже для выбранных значений часов и минут. По умолчанию выставляется текущая дата и время. Другое начальное значение может быть задано при помощи функции [[Разработка:moodleQuickForm#setDefault($elementName, $defaultValue, $slashed)|setDefault()]].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$options = array();// объявляем массив для установки значений по умолчанию&lt;br /&gt;
$options['startyear'] = 1980; // устанавливаем год, с которого начинать вывод списка&lt;br /&gt;
$options['stopyear']  = 2001; // устанавливаем год, которым заканчивается список&lt;br /&gt;
$options['optional']  = false; // убираем галочку, делающую возможным отключение этого поля&lt;br /&gt;
&lt;br /&gt;
$mform-&amp;gt;addElement('date_time_selector', 'testname', 'Пояснение для поля даты', $options);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== htmleditor ===&lt;br /&gt;
Полноценный html-редактор для редактирования страниц. Его вид (обычный или расширенный) настраивается индивидуально каждым пользователем для себя (в настройках профиля moodle). Обратите внимание, что в качестве дополнительных параметров можно массивом передать значения ширины и высоты текстового поля.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$mform-&amp;gt;addElement('htmleditor', 'testname', 'Пояснение:', array('width'=&amp;gt;'100%', 'height'=&amp;gt;'200px')&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== format ===&lt;br /&gt;
Выбор формата для редактирования сообщения. Полезно использовать вместе со встроенным html-редактором.&lt;br /&gt;
&amp;lt;pre&amp;gt;$mform-&amp;gt;addElement('format', 'testname', 'Текст пояснения');&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== static ===&lt;br /&gt;
Обычное текстовое поле, не передает никаких данных. Полезно использовать для различных пояснений и отображения текущей информации о каком-либо объекте. Вы также можете использовать этот элемент для разбиения формы на небольшие смысловые блоки, не разрывая рамку формы. Для более явного разбиения используйте элемент header.&lt;br /&gt;
&amp;lt;pre&amp;gt;$mform-&amp;gt;addElement('static', 'testname', 'Пояснение:', '&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;Само текстовое значение&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;');&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== hidden ===&lt;br /&gt;
Стандартный html-элемент hidden, скрытое поле для передачи служебных id, адресов для перенаправления и т. д. Помните о необходимости проверки значений из этого поля. &lt;br /&gt;
&amp;lt;pre&amp;gt;$mform-&amp;gt;addElement('hidden','testname', 'Значение скрытого поля');&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== modvisible ===&lt;br /&gt;
Установить модуль видимым/скрытым. Только для использования внутри Mooodle.&lt;br /&gt;
=== selectyesno ===&lt;br /&gt;
Элемент с двумя стандартными select-вариантами выбора: да и нет.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    $mform-&amp;gt;addElement('selectyesno', 'testname', 'Текст пояснения');&lt;br /&gt;
    // установить значение по умолчанию &amp;quot;да&amp;quot;&lt;br /&gt;
    $mform-&amp;gt;setDefault('stoponerror', 1);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== modgrade ===&lt;br /&gt;
Шкала выставление оценки за задание. Только для использования внутри Moodle.&lt;br /&gt;
=== cancel ===&lt;br /&gt;
Кнопка &amp;quot;отменить форму&amp;quot;. При нажатии на нее происходит отмена всех произведенных в форме действий.&lt;br /&gt;
&amp;lt;pre&amp;gt;$mform-&amp;gt;addElement('cancel', 'testname', 'Надпись на кнопке'); &amp;lt;/pre&amp;gt;&lt;br /&gt;
=== button ===&lt;br /&gt;
Элемент аналогичен кнопке типа submit, но при использовании button пропускается проверка данных на стороне клиента. &lt;br /&gt;
&amp;lt;pre&amp;gt;$mform-&amp;gt;addElement('button', 'testname', 'Надпись на кнопке');&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== choosecoursefile ===&lt;br /&gt;
Выбрать файл из курса. Только для использования внутри курса Moodle.&lt;br /&gt;
=== submit ===&lt;br /&gt;
Кнопка отправки данных из формы. Обязательно ставьте ее в конце, иначе все введенные данные нельзя будет отправить. Существует также альтернативный способ задать такую кнопку - это функция [[Разработка:moodleQuickForm#add_action_buttons($cancel, $submitlabel)|get_data()]]&lt;br /&gt;
&amp;lt;pre&amp;gt;$mform-&amp;gt;addElement('submit', 'testname', 'Текст на кнопке');&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== questioncategory ===&lt;br /&gt;
Выбрать вопрос из категории. Только при редактировании теста и только внутри курса Moodle.&lt;br /&gt;
=== advcheckbox ===&lt;br /&gt;
Элемент checkbox c расширенными функциями - такие элементы можно объединять в группы и устанавливать им контрольный переключатель (делает либо все галочки поставлеными либо снятыми) при помощи функции [[Разработка:moodleQuickForm#add_checkbox_controller($groupid, $buttontext, $attributes, $originalValue) |add_checkbox_controller()]].&lt;br /&gt;
&lt;br /&gt;
Поскольку таких галочек всегда задается несколько - то целесообразно в указании имени элемента использовать квадратные скобки, чтобы собрать значения всех элементов в один массив. Последним аргументом задается группа, к которой принадлежит созданный элемент. Именно это значение должно быть указано в первом параметре функции [[Разработка:moodleQuickForm#add_checkbox_controller($groupid, $buttontext, $attributes, $originalValue) |add_checkbox_controller()]].&lt;br /&gt;
&lt;br /&gt;
Несовместим с функцией [[Разработка:moodleQuickForm#disabledIf($elementName, $dependentOn, $condition, $value) | disabledIf()]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$mform-&amp;gt;addElement('advcheckbox', 'testname[1]', 'Описание:', 'Текст за галочкой', array('group' =&amp;gt; 'id_группы'));&lt;br /&gt;
&lt;br /&gt;
$mform-&amp;gt;addElement('advcheckbox', 'testname[2]', 'Описание:', 'Текст за галочкой', array('group' =&amp;gt; 'id_группы'));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== recaptcha ===&lt;br /&gt;
Окно с картинкой для использования Capcha проверки. Обратите внимание, что для того чтобы использовать этот элемент вы сначала должны получить уникальный ключ с на сайте &amp;lt;nowiki&amp;gt;http://recaptcha.net/api/getkey&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;$mform-&amp;gt;addElement('recaptcha', 'testname', 'Текст с пояснением');&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== hierselect ===&lt;br /&gt;
Несколько зависимых друг от друга html-элементов типа &amp;quot;select&amp;quot;. В зависимости от выбранной опции в первом элементе, меняются значения остальных.&lt;br /&gt;
При вызове функции addElement в последнем параметре указывается, какими символами разделять операторы select.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// для начала создадим два массива - по количеству операторов select&lt;br /&gt;
// которые нам предстоит создать&lt;br /&gt;
&lt;br /&gt;
// Первый, главный элемент select&lt;br /&gt;
$select1[0] = 'Pop';&lt;br /&gt;
$select1[1] = 'Classical';&lt;br /&gt;
$select1[2] = 'Funeral doom';&lt;br /&gt;
&lt;br /&gt;
// второй элемент select - его варианты зависят от первого&lt;br /&gt;
$select2[0][0] = '--- Artist ---';&lt;br /&gt;
$select2[0][1] = 'Red Hot Chil Peppers';&lt;br /&gt;
$select2[0][2] = 'The Pixies';&lt;br /&gt;
      &lt;br /&gt;
$select2[1][0] = '--- Artist ---';&lt;br /&gt;
$select2[1][1] = 'Wagner';&lt;br /&gt;
$select2[1][2] = 'Strauss';&lt;br /&gt;
      &lt;br /&gt;
$select2[2][0] = '--- Artist ---';&lt;br /&gt;
$select2[2][1] = 'Pantheist';&lt;br /&gt;
$select2[2][2] = 'Skepticism';&lt;br /&gt;
&lt;br /&gt;
// добавляем новый элемент в форму&lt;br /&gt;
$myselect =&amp;amp; $mform-&amp;gt;addElement('hierselect', 'testname', 'Текст с пояснением:',null,'&amp;lt;br&amp;gt;');&lt;br /&gt;
// устанавливаем для него варианты ответа&lt;br /&gt;
$myselect-&amp;gt;setOptions(array($select1, $select2));&lt;br /&gt;
// устанавливаем значения по умолчанию: 'Funeral doom'-&amp;gt;'Pantheist'&lt;br /&gt;
$mform-&amp;gt;setDefault('testname', array(2, 1));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== html ===&lt;br /&gt;
Добавить собственный html-код. Используйте этот тип элементов формы, только в случае, если ни один из перечисленных элементов вам не подходит, или нужно решить какую-либо нетривиальную задачу с форматированием.&lt;br /&gt;
Может помочь в случае решения задачи разбиения формы на 3, или более колонок ([http://docs.moodle.org/en/User:Frank_Ralf/Moodle_forms3] [http://moodle.org/mod/forum/discuss.php?d=126935]).&lt;br /&gt;
&amp;lt;pre&amp;gt;$mform-&amp;gt;addElement('html', '&amp;lt;div class=&amp;quot;qheader&amp;quot;&amp;gt;');&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== autocomplete ===&lt;br /&gt;
Элемент, который автоматически подсказывает варианты по мере набора текста. Выглядит как обычный элемент text, но имеет встроенный javascript. Значение по умолчанию устанавливается стандартным образом.&lt;br /&gt;
&amp;lt;pre&amp;gt;// Создаем массив подсказок&lt;br /&gt;
$options = array('апельсин', 'ананас', 'авокадо');&lt;br /&gt;
// добавляем новый элемент в форму&lt;br /&gt;
$element =&amp;amp; $mform-&amp;gt;addElement('autocomplete', 'testname', 'Текст с пояснением:', 'size=12');&lt;br /&gt;
// устанавливаем массив подсказок&lt;br /&gt;
$element-&amp;gt;setOptions($options);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== dof_calendar ===&lt;br /&gt;
Элемент, который автоматически отображает 2 календаря для выбора диапазона дат. Календари находятся на одной линии. Под каждым календарем поле-указывает в формате д.м.гг дату, которая выбрана на календаре. В скрытое поле каждого календаря помещается время в unixtime, причем первый календарь (слева) отсчитывает время от 00.00.01, а второй (справа) с 23.59.59. Если на правом и на левом календарях отмечена одна дата, то диапазон, соответственно, равен 00.00.01-23.59.59, что полностью охватывает выбранный день.&lt;br /&gt;
Так же, у этого элемента есть возможность удаления тегов, как правил это select-поля(старый вариант выбора дат). Для этого нужно в $options указать имена этих полей&lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// добавляем новый элемент в форму&lt;br /&gt;
$element = $mform-&amp;gt;addElement('dof_calendar', 'calendarname', 'Текст с пояснением:', $options),где &lt;br /&gt;
'Текст с пояснением:' - Текст, который будет выведен выше календарей&lt;br /&gt;
$options - массив, с указанием дат(левый и правый календарь)&lt;br /&gt;
* $options['date_from'] - с какой даты брать отсчет(левый календарь)(unix time)&lt;br /&gt;
* $options['date_to']  - по какую дату брать отсчет(правый календарь)(unix time)&lt;br /&gt;
-------------&lt;br /&gt;
* $options[] = 'field_from'; (элемент будет удален  $mform-&amp;gt;addElement('date_selector', 'field_from',$this-&amp;gt;dof-&amp;gt;modlib('ig')-&amp;gt;igs('from'),$options); )&lt;br /&gt;
* $options[] = 'field_to';   (элемент будет удален  $mform-&amp;gt;addElement('date_selector', 'field_to',$this-&amp;gt;dof-&amp;gt;modlib('ig')-&amp;gt;igs('from'),$options); )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Если параметр options опущен, то берется текущая дата.&lt;br /&gt;
Важно !! При объявлении времени, нужно брать массив именно с этими параметры(date_from, date_to).&lt;br /&gt;
Выходные данные имеют вид &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 [calendarname] = Array&lt;br /&gt;
       [date_from] = ... (unux time)&lt;br /&gt;
       [date_to] = ... (unux time)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== dof_autocomplete ===&lt;br /&gt;
Элемент с выпадающим списком подсказок по мере набора текста. Выглядит как обычный элемент text, но имеет встроенный javascript. В помощь с ним создается автоматически hidden поле, значение которого будет равно индексу выбранного элемента (name=&amp;quot;id_autocomplete&amp;quot; id=&amp;quot;id_hidden_auto&amp;quot;). В dof_autocomplete есть обязательные параметры, работа без которых невозможна. Записываются они в переменную массив &amp;lt;b&amp;gt;$options&amp;lt;/b&amp;gt;. В неё же и помещается массив $options(ключ=&amp;gt;значение), это так называемые значения по умолчанию (необязательные).&lt;br /&gt;
*Список обязательных полей для переменной $options: &lt;br /&gt;
**plugintype - тип плагина (например storage)  &lt;br /&gt;
**plugincode - код плагина (например plans) &lt;br /&gt;
**querytype  - тип запроса, именно по нему и определяется, что надо делать( например plans_name ). Этот тип должен совпадать с типом, который будет находиться в этом в плагине в методе widgets_field_variants_list&lt;br /&gt;
**sesskey    - ключ сессии(чтоб идентифицировать запрос) задается методом sesskey()&lt;br /&gt;
**type       - тип действия ( например autocomplete ). Есть ещё тип savefield &lt;br /&gt;
*Необязательные поля:&lt;br /&gt;
**default    - массив значений по умолчания( например $a[19]= &amp;quot;primer&amp;quot;), где ключ - это id элемента из бд &lt;br /&gt;
**departmentid - id подразделения, из которого пришел запрос&lt;br /&gt;
**extoptions - подключает расширенные возможности dof_autocomplete&lt;br /&gt;
==== Простой пример ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$mform-&amp;gt;addElement('dof_autocomplete', $elementName = null, $elementLabel = null, $attributes = null, $options = null);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== Более подробный пример ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    //Создаем массив входных данных&lt;br /&gt;
    $options = array();&lt;br /&gt;
    $options['plugintype'] =   &amp;quot;storage&amp;quot;;&lt;br /&gt;
    $options['plugincode'] =   &amp;quot;plans&amp;quot;;&lt;br /&gt;
    $options['querytype']  =   &amp;quot;plans_name&amp;quot;;&lt;br /&gt;
    $options['sesskey']    =   sesskey();&lt;br /&gt;
    $options['type']       =   'autocomplete'; &lt;br /&gt;
    $options['departmentid'] = $departmentid;&lt;br /&gt;
    // установим значение по умолчанию&lt;br /&gt;
    $default = array( 19 =&amp;gt; 'Test text' );&lt;br /&gt;
    $options['default'] = $default;&lt;br /&gt;
&lt;br /&gt;
    // добавляем новый элемент в форму&lt;br /&gt;
    $mform-&amp;gt;addElement('dof_autocomplete', 'testname', 'Надпись перед полем:', array('width' =&amp;gt; '100%'), $options);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Замечение: &lt;br /&gt;
**следует помнить, что элемент autocomplete сам в себе подключает js-библиотеки, и потому, объявление класса формы на странице должно быть ''раньше'', чем печать шапки страницы&lt;br /&gt;
**выходные данные имеют вид&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 [testname] = Array&lt;br /&gt;
       [text] = выбранное в меню значение (текст, который отображается в поле формы)&lt;br /&gt;
       [id] = id выбранного объекта (как правило число)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Необходимые методы:&lt;br /&gt;
Плагин, данные которого будут составлять автозаполнение должен иметь метод &amp;lt;b&amp;gt;widgets_field_variants_list($querytype, $data=&amp;quot;&amp;quot;)&amp;lt;/b&amp;gt;, который возвращает массив объектов в формате&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
$a = array();&lt;br /&gt;
a[1] = object(&lt;br /&gt;
          name -&amp;gt; ЗНАЧЕНИЕ_1 ДЛЯ ВЫПАДАЮЩЕГО СПИСКА&lt;br /&gt;
            id -&amp;gt; id элемента_1&lt;br /&gt;
             );&lt;br /&gt;
a[2] = object( &lt;br /&gt;
          name -&amp;gt; ЗНАЧЕНИЕ_2 ВЫПАДАЮЩЕГО СПИСКА&lt;br /&gt;
            id -&amp;gt; id элемента_2&lt;br /&gt;
             ); &lt;br /&gt;
   ...  &lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь: &lt;br /&gt;
* $querytype - тип запроса (только маленькие латинские буквы, цифры и знак подчеркивания)&lt;br /&gt;
* $data - входные данные, (как правило строка) набранные данные в поле autocomplete&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Замечания:''' &lt;br /&gt;
* поля name и id обязательны в возвращаемых объектах&lt;br /&gt;
* рекомендуется возвращать не более 15 записей для быстрой работы AJAX-запроса, пользуйтесь ограничением SQL-выборки&lt;br /&gt;
&lt;br /&gt;
==== Расширенный autocomplete ====&lt;br /&gt;
&lt;br /&gt;
Добавляет к возможностям dof_autocomplete не только выбирать значения, но и создавать их, переименовывать и удалять.&lt;br /&gt;
Активируется при помощи дополнительного параметра extoptions, который имеет свои настройки:&lt;br /&gt;
*empty - активирует пустое значение(для удаления)&lt;br /&gt;
*create - активирует создание записи&lt;br /&gt;
*rename - активирует переименование записи&lt;br /&gt;
Сами по себе настройки не взаимосвязаны, поэтому можно задавать только необходимые нам расширения. Отсутствие всех настроек не активирует ни одного расширения. Настройки empty и create активируются передачей обычного булевского значения true, для активации rename понадобится передача id переименовываемого обьекта.&lt;br /&gt;
==== Пример активизации расширенного autocomplete====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$options['extoptions'] = new stdClass;&lt;br /&gt;
$options['extoptions']-&amp;gt;create = true;&lt;br /&gt;
if (!empty($id))&lt;br /&gt;
{&lt;br /&gt;
    $options['extoptions']-&amp;gt;empty = true;&lt;br /&gt;
    $options['default'] = array($id =&amp;gt; $name.' ['.$id.']');&lt;br /&gt;
    $options['extoptions']-&amp;gt;rename = $id;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для обработки значений autocomplete используется метод из modlib/widgets '''get_extvalues_autocomplete($name,$autocomplite)''', где &lt;br /&gt;
*name - имя поля dof_autocomplete,&lt;br /&gt;
*autocomplite - данные полученыые из [[Разработка:moodleQuickForm#get_data.28.24slashed.29|get_data()]] формы поля dof_autocomplete.&lt;br /&gt;
&lt;br /&gt;
'''Замечания:'''&lt;br /&gt;
* Использовать расширенные возможности можно только выбрав соответствующий пункт из меню. Обычное &amp;quot;стирание&amp;quot; или &amp;quot;вбивание&amp;quot; данных не дадут никакого эффекта.&lt;br /&gt;
&lt;br /&gt;
==== Работа dof_autocomplete с id ====&lt;br /&gt;
&lt;br /&gt;
=== dof_duration ===&lt;br /&gt;
Элемент для задания длительности временного интервала в часах, днях, неделях, и т. п.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// задаем возможные единицы измерения: часы и минуты&lt;br /&gt;
$options['availableunits'] = array(60   =&amp;gt; $this-&amp;gt;dof-&amp;gt;modlib('ig')-&amp;gt;igs('minutes'),&lt;br /&gt;
                                   3600 =&amp;gt; $this-&amp;gt;dof-&amp;gt;modlib('ig')-&amp;gt;igs('hours'));&lt;br /&gt;
// добавляем сам элемент&lt;br /&gt;
$mform-&amp;gt;addElement('dof_duration', 'testname', 'Текст с пояснением:', $minutesoptions);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== dof_single_use_submit ===&lt;br /&gt;
Одноразовая submit-кнопка. Отправляет данные формы и сразу же становится неактивной, для того чтобы избежать повторного нажатия и отправки данных (doubleclick). Имеет дополнительный метод setPleaseWaitText(), при помощи которого можно устанавливать надпись, которая появляется после нажатия на кнопку.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// создаем кнопку, с надписью &amp;quot;сохранить&amp;quot;&lt;br /&gt;
$submit = &amp;amp;$mform-&amp;gt;addElement('dof_single_use_submit', 'testsinglesubmit', $this-&amp;gt;dof-&amp;gt;modlib('ig')-&amp;gt;igs('save'));&lt;br /&gt;
// Устанавливаем сообщение после нажатия - &amp;quot;обработка&amp;quot;&lt;br /&gt;
$submit-&amp;gt;setPleaseWaitText($this-&amp;gt;dof-&amp;gt;modlib('ig')-&amp;gt;igs('processing'));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Решение наиболее распространенных задач ==&lt;br /&gt;
&lt;br /&gt;
=== Установка обязательных полей ===&lt;br /&gt;
Установка обязательных полей происходит при помощи функции [[Разработка:moodleQuickForm#addRule($element, $message, $type, $format, $validation, $reset, $force)|addRule()]].&lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
    // устанавливаем поле &amp;quot;город&amp;quot;&lt;br /&gt;
    $mform-&amp;gt;addElement('text', 'city', 'Город :', 'maxlength=&amp;quot;100&amp;quot; size=&amp;quot;30&amp;quot;');&lt;br /&gt;
    // делаем поле обязательным&lt;br /&gt;
    $mform-&amp;gt;addRule('city','Это поле является обязательным', 'required',null,'client');&lt;br /&gt;
&lt;br /&gt;
=== Установка дополнительных полей ===&lt;br /&gt;
Установка дополнительных полей производится при помощи функции [[Разработка:moodleQuickForm#setAdvanced($elementName, $advanced)|setAdvanced()]]. Необязательные элементы должны располагаться один за другим.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
    // устанавливаем два текстовых поля и делаем их необязательными&lt;br /&gt;
    $mform-&amp;gt;addElement('text', 'my_field1', 'Пояснение :');&lt;br /&gt;
    $mform-&amp;gt;setAdvanced('my_field1');&lt;br /&gt;
    $mform-&amp;gt;addElement('text', 'my_field2', 'Пояснение :');&lt;br /&gt;
    $mform-&amp;gt;setAdvanced('my_field2');&lt;br /&gt;
&lt;br /&gt;
=== Установка проверки на стороне клиента или сервера ===&lt;br /&gt;
По умолчанию все данные из формы подлежат проверке на стороне сервера. Существует возможность добавить проверку на стороне клиента. Не забывайте при этом, что эти данные нужно потом все равно еще раз проверить на стороне сервера, так как всегда существует возможность послать данные в обход формы.&lt;br /&gt;
==== Проверка на стороне сервера ====&lt;br /&gt;
Если вам требуется дополнительная проверка данных на стороне сервера, то используйте стандартный метод [[Разработка:moodleQuickForm#validation($data, $files) | validation()]]. Любые другие способы проверки данных после формы должны использоваться только в исключительных случаях.&lt;br /&gt;
&lt;br /&gt;
==== Проверка на стороне клиента ====&lt;br /&gt;
Все малозначимые проверки желательно производить на стороне клиента для увеличения быстродействия приложения. Все проверки на стороне клиента производятся при помощи функции [[Разработка:moodleQuickForm#addRule($element, $message, $type, $format, $validation, $reset, $force)|addRule()]].&lt;br /&gt;
&lt;br /&gt;
В параметре validation обязательно нужно указать 'client'.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
    // устанавливаем поле &amp;quot;фамилия&amp;quot;&lt;br /&gt;
    $mform-&amp;gt;addElement('text', 'lastname', 'Фамилия :');&lt;br /&gt;
    // делаем его обязательным&lt;br /&gt;
    $mform-&amp;gt;addRule('lastname','Это поле является обязательным', 'required',null,'client');&lt;br /&gt;
=== Установка зависимых полей ===&lt;br /&gt;
==== Стандартный вариант ====&lt;br /&gt;
Установка зависимых полей производится при помощи функции [[Разработка:moodleQuickForm#disabledIf($elementName, $dependentOn, $condition, $value)|disabledIf()]].&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
    // Устанавливаем элемент checkbox&lt;br /&gt;
    $mform-&amp;gt;addElement('checkbox', 'my_checkbox', get_string('forcedownload', 'resource'));&lt;br /&gt;
    // устанавливаем текстовое поле&lt;br /&gt;
    $mform-&amp;gt;addElement('text', 'my_field', 'Пояснение :');&lt;br /&gt;
    // устанавливаем зависимость&lt;br /&gt;
    $mform-&amp;gt;disabledIf('my_field', 'my_checkbox', 'checked');&lt;br /&gt;
==== Расширенный вариант ====&lt;br /&gt;
Для html-элеметов &amp;quot;select&amp;quot;, есть возможность установить иерархическую зависимость элементов (то есть в зависимости от того, что было выбрано в первом &amp;quot;select&amp;quot;, меняются значения в остальных). Синтаксис этого элемента указан в разделе [[Разработка:moodleQuickForm#Элементы формы|Элементы формы]] (в самом конце, он называется hierselect).&lt;br /&gt;
&lt;br /&gt;
== Известные проблемы ==&lt;br /&gt;
В этом разделе собраны обнаруженные проблемы с элементами формы и способы их решения.&lt;br /&gt;
=== Данные не приходят из поля формы, даже в validation ===&lt;br /&gt;
Возможно на странице обработчика формы есть функция optional_param (или required_param) которая называется точно также как поле в форме. Если это так, то указанное поле из данных формы пропадет.&lt;br /&gt;
=== text ===&lt;br /&gt;
* Поле ввода слишком широкое, слишком узкое, или вылезает за границы заголовка&lt;br /&gt;
** Решение: Нужно в свойства элемента добавить style=&amp;quot;width:100%;&amp;quot;. В этом случае элемент растянется до конца формы, и не будет вылезать за границы формы вне зависимости от того - большой монитор у пользователя или маленький.&lt;br /&gt;
** Пример:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$mform-&amp;gt;addElement('select', 'my_select', 'Description...', $options, ' style=&amp;quot;max-width:400px;width:100%;&amp;quot; ');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== textarea ===&lt;br /&gt;
* Поле ввода слишком широкое, слишком узкое, или вылезает за границы заголовка&lt;br /&gt;
** Решение: Нужно в свойства элемента добавить style=&amp;quot;width:100%;&amp;quot;. В этом случае элемент растянется до конца формы, и не будет вылезать за границы формы вне зависимости от того - большой монитор у пользователя или маленький.&lt;br /&gt;
** Пример:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$mform-&amp;gt;addElement('textarea', 'name', 'Description...',  array('style' =&amp;gt; 'width:100%;max-width:400px;height:150px;'));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== hierselect ===&lt;br /&gt;
* Не работает Javascript если в качестве значения hierselect используются цифры&lt;br /&gt;
** Решение: в списке значений после цифры добавлять пробел, или любой другой символ.&lt;br /&gt;
** Пример: array('1' =&amp;gt; '''&amp;quot;1 &amp;quot;'''); вместо array('1' =&amp;gt; '''&amp;quot;1&amp;quot;''');&lt;br /&gt;
* Невозможно отключить только одно поле hierselect не отключая при этом остальные&lt;br /&gt;
** Решение: отсутствует.&lt;br /&gt;
* При количестве select-элементов 3 или больше портится верстка. Подписи к select-элементам не совпадают с самими элементами.&lt;br /&gt;
** Решение: до элемента hierselect вставить html-элемент который содержит div, устанавливающий фиксированный межстрочный интервал (см. пример). После добавления hierselect-элемента закрыть div.&lt;br /&gt;
** Пример:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // выравниваем строки по высоте&lt;br /&gt;
    $mform-&amp;gt;addElement('html', '&amp;lt;div style=&amp;quot; line-height: 1.9; &amp;quot;&amp;gt;');&lt;br /&gt;
    &lt;br /&gt;
    // Дальше идет объявление hierselect...&lt;br /&gt;
    // ...&lt;br /&gt;
    &lt;br /&gt;
    // закрываем тег выравнивания строк&lt;br /&gt;
    $mform-&amp;gt;addElement('html', '&amp;lt;/div&amp;gt;');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* При указании строковых ключей массива hierselect не работает. Это происходит из-за того что в Javascript мы можем иметь дело либо с индексированными массивами, либо с объектами. Ассоциативные массивы там не предусмотрены.&lt;br /&gt;
** Решение: не использовать ассоциативные ключи массивов при создании элементов hierselect. Если же обойтись без них никак нельзя - то можно закодировать ассоциативные элементы числами ('option1' - 1, 'option2' - 2 и т. д.), а на стороне обработчика раскодировать обратно.&lt;br /&gt;
* По неизвестным причинам иногда перестает работать переключение с одной опции на другую.&lt;br /&gt;
** Решение: скорее всего в списке дочерних опций присутствуют элементы не для всех родительских опций (см. пример). Для каждой опции верхнего уровня должен присутствовать хотя бы один элемент нижнего уровня.&lt;br /&gt;
** Пример: &lt;br /&gt;
'''Неправильный код:''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$level1 = array();&lt;br /&gt;
$level1[0] = 'option0';&lt;br /&gt;
$level1[1] = 'option1';&lt;br /&gt;
&lt;br /&gt;
$level2 = array();&lt;br /&gt;
$level2[1][0] = 'option1_0';&lt;br /&gt;
$level2[1][1] = 'option1_1';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Правильный код:''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$level1 = array();&lt;br /&gt;
$level1[0] = 'option0';&lt;br /&gt;
$level1[1] = 'option1';&lt;br /&gt;
&lt;br /&gt;
$level2 = array();&lt;br /&gt;
$level2[0][0] = 'option0_0'; // без этой строки ничего не будет работать&lt;br /&gt;
$level2[1][0] = 'option1_0';&lt;br /&gt;
$level2[1][1] = 'option1_1';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Данные из поля hierselect передаются вне зависимости от того, было отключено поле или нет.&lt;br /&gt;
** Решение: отсутствует.&lt;br /&gt;
* При проверке данных в функции validation() нельзя сообщить о том, что ошибка произошла внутри какого-то конкретного select-элемента. &lt;br /&gt;
** Решение: отсутствует. Можно указать только указывать сам hierselect-элемент как источник ошибки, и сообщить подробности в сообщении.&lt;br /&gt;
&lt;br /&gt;
=== hidden ===&lt;br /&gt;
* Не работает правило disabledif. Невозможно установить значение из hidden-поля для использования disabledif-правила.&lt;br /&gt;
** Решение: создать другой элемент (например checkbox), записать в него нужное значение, и в стилях установить ему display:none&lt;br /&gt;
** Пример:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$mform-&amp;gt;addElement('radio', 'hidden_hack', '', '', 'true', 'style' =&amp;gt; 'display:none;');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://pear.php.net/manual/en/package.html.html-quickform.php Справка по базовым методам класса HTML_QuickForm]&lt;br /&gt;
* [http://docs.moodle.org/en/Development:lib/formslib.php_Form_Definition Справки по элементам класса moodleform]&lt;br /&gt;
* [http://web.archive.org/web/20080214041550/http://www.midnighthax.com/quickform.php Getting Started Guide по элементам оригинального класса HTML_QuickForm. Некоторые обращения к методам могут отличаться от moodleform.]&lt;br /&gt;
* [http://wiki.triangle-solutions.com/index.php/PEAR_HTML_QuickForm] Примеры объявления элементов.&lt;/div&gt;</summary>
		<author><name>Konovalov</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:workflows/cpassed&amp;diff=2820</id>
		<title>Разработка:workflows/cpassed</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:workflows/cpassed&amp;diff=2820"/>
				<updated>2014-08-20T15:30:16Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Возможные статусы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = cpassed&lt;br /&gt;
| type = workflows&lt;br /&gt;
}}&lt;br /&gt;
==Возможные статусы== &lt;br /&gt;
* Запланирован (plan) - слушатель подписан на обучение данной дисциплине в данном учебном процессе, но обучение еще не началось.&lt;br /&gt;
* Идет обучение (active) - слушатель обучается в составе учебного процесса.&lt;br /&gt;
* Приостановлен (suspend) - обучение приостановлено по тем или иным причинам (например, непоступление оплаты или приостановка всего процесса)&lt;br /&gt;
* Отменен (canceled) - обучение отменено до его завершения (слушатель отчислен, учебный процесс отменен, слушатель перевелся или отказался от дисциплины).&lt;br /&gt;
* Успешно завершен (completed) - учебный процесс был проведен и успешно завершен. Студент считается сдавшим данную дисциплину, а текущая оценка считается окончательным результатом студента. Каждая запись с таким статусом считается отдельной итоговой оценкой, поэтому нужно заботиться о том, чтобы не было дублирования (при пересдачи старые оценки переводить в статус &amp;quot;неуспешно завершен&amp;quot;). Считаем, что в рамках одной подписки на программу может быть только одна подписка на каждую дисциплину с таким статусом (но могут быть в других статусах).&lt;br /&gt;
* Перезачет из другой программы или учебного заведения (reoffset) - оценка была выставлена по результатам учебного процесса в другой подписке или по предъявленным документам из другого учебного заведения. Обучения не проводилось, но оценка выставлена.&lt;br /&gt;
* Неуспешно завершен (failed) - обучение было проведено, но студент не сдал предмет или предмет был пересдан в другой подписке (cpassed). Оценка из текущей записи не является окончательной, отображается только в истории пересдач и в сохраненных приказах-ведомостях. Если пересдачи со статусом completed нет, дисциплина считается не сданной. Если дисциплина была передана, то окончательной является оценка из другой записи, в которой поле repeatid ссылается на текущую запись.&lt;br /&gt;
* Академическая разница (задолженность) (academicdebt) - академическая разница, образовавшаяся при приеме сразу на 2-ой/3-ий курс с перезачетом сданных дисциплин из другого учебного заведения. Этот статус равносилен &amp;quot;неуспешному перезачету&amp;quot; (перезачету на неудовлетворительную оценку), который требуется пересдать вне основного учебного плана. Конечный, реальный статус неуспешного перезачета дисциплины, противоположный reoffset (успешному перезачету на положительную оценку). Обозначает обязанность ученика пересдать эту дисциплину вне индивидуального учебного плана (в произвольное время за период обучения) без изучения данной дисциплины.&lt;br /&gt;
&lt;br /&gt;
=== Метастатусы ===&lt;br /&gt;
* Активный: active&lt;br /&gt;
* Актуальный: plan, active, suspend&lt;br /&gt;
* Реальный:plan, active, suspend, completed, reoffset, failed, academicdebt&lt;br /&gt;
* Мусорный: canceled&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;
* Приостановлен - этот переход нужен для того, чтобы при переводе учебного процесса из статуса &amp;quot;запланирован&amp;quot; в статус &amp;quot;идет&amp;quot; данная подписка не активировалась.&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;
* Приостановлен&lt;br /&gt;
* Отменен&lt;br /&gt;
&lt;br /&gt;
Переход в статус &amp;quot;перезачет&amp;quot; из статуса &amp;quot;идет обучение&amp;quot; невозможен, потому что преподаватель уже затратил работу на данного ученика, которую нужно учесть, чтобы не было неоднозначности в тарификации. Если преподаватель принял &amp;quot;перезачет&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;
==== Отменен ====&lt;br /&gt;
Конечный статус&lt;br /&gt;
&lt;br /&gt;
==== Успешно завершен ====&lt;br /&gt;
Возможные переходы ИЗ этого статуса:&lt;br /&gt;
* Неуспешно завершен - в случае, если студент пересдал итоговую оценку, то старая подписка должна быть переведена в статус &amp;quot;неуспешно завершен&amp;quot;, а новая ссылаться на старую через repeatid&lt;br /&gt;
&lt;br /&gt;
==== Перезачет ====&lt;br /&gt;
Возможные переходы ИЗ этого статуса:&lt;br /&gt;
* Неуспешно завершен - в случае, если студент пересдал итоговую оценку, то старая подписка должна быть переведена в статус &amp;quot;неуспешно завершен&amp;quot;, а новая ссылаться на старую через repeatid&lt;br /&gt;
&lt;br /&gt;
==== Неуспешно завершен ====&lt;br /&gt;
Конечный статус&lt;br /&gt;
&lt;br /&gt;
==== Академическая разница ====&lt;br /&gt;
Конечный статус&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
==== get_list() ====&lt;br /&gt;
Получить список всех возможных статусов для подписки на предмет&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* (нет)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* Массив, со списком всех возможных статусов в формате &amp;quot;обозначение&amp;quot; =&amp;gt; &amp;quot;Перевод&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== get_name() ====&lt;br /&gt;
Получить название статуса по его обозначению в базе данных&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* (string) $status - обозначение статуса латинскими буквами&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (string|bool) - перевод для этого статуса, либо false, если он не обнаружен в списке допустимых&lt;br /&gt;
&lt;br /&gt;
==== get_available() ====&lt;br /&gt;
Получить список статусов, в которые может перейти указанная подписка на предмет&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id - id подписки на предмет в таблице [[Разработка:storages/cpassed|cpassed]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array|bool) - массив возможных состояний в формате ('обозначение' =&amp;gt; 'первод') или false в случае когда запись не найдена. В случае, когда переход из этого статуса невозможен - возвращается пустой массив.&lt;br /&gt;
&lt;br /&gt;
==== change() ====&lt;br /&gt;
Сменить статус подписки на предмет на указанный.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* (int) $id - id подписки на предмет в таблице [[Разработка:storages/cpassed|cpassed]]&lt;br /&gt;
* (string) $status - обозначение статуса латинскими буквами&lt;br /&gt;
* (array) $opt - Массив, где содержатся дополнительные параметры для смены статуса. По умолчанию null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) true - если статус удалось изменить, или false в случае ошибки &lt;br /&gt;
&lt;br /&gt;
При обращении к функции change() выполняются дополнительные действия, указанные выше, в разделе &amp;quot;Маршруты статусов&amp;quot;. При каждом изменении статуса данные записываются в таблицу [[Разработка:storages/statushistory|statushistory]].&lt;br /&gt;
==== init() ====&lt;br /&gt;
Запускается при вставке в таблицу [[Разработка:storages/cpassed|cpassed]] новой записи. Автоматически назначает созданной подписке на предмет статус &amp;quot;запланирован&amp;quot; (plan).&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id - id только что созданной подписки на предмет в таблице [[Разработка:storages/cpassed|cpassed]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) true если статус успешно назначен или false в случае ошибки&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;
 |storage&lt;br /&gt;
 |[[Разработка:storages/cpassed|cpassed]]&lt;br /&gt;
 |insert&lt;br /&gt;
 |Каждая новая созданная подписка на предмет автоматически переводится в статус &amp;quot;запланирована&amp;quot; (plan), путем вызова функции [[#init()|init()]].&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Konovalov</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/learninghistory&amp;diff=2819</id>
		<title>Разработка:storages/learninghistory</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/learninghistory&amp;diff=2819"/>
				<updated>2014-08-20T09:55:07Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Дополнительные методы: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = learninghistory&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
===Таблица в базе данных===&lt;br /&gt;
''learninghistory'' - таблица хранит историю изменений учебных процессов для каждого ученика.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* '''programmsbcsid''' - id подписки ученика на учебную программу в таблице [[Разработка:storages/programmsbcs|programmsbcs]].&lt;br /&gt;
* '''ageid''' - id учебного периода в таблице [[Разработка:storages/ages|ages]], в котором были пройдены дисциплины данной параллели&lt;br /&gt;
* '''agenum''' - номер параллели (класс или семестр и т. п.)&lt;br /&gt;
* '''changedate''' - дата создания записи в формате unixtimestamp&lt;br /&gt;
* '''orderid''' - id приказа, в результате которого учащийся был записан на данную параллель (таблица [[Разработка:storages/orders|orders]]). Возможно null-значение, если изменения не были связаны ни с каким приказом.&lt;br /&gt;
&lt;br /&gt;
===Дополнительные методы:===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_ageid_agenum($programmsbcid, $agenum)'''====&lt;br /&gt;
&lt;br /&gt;
Получить id учебного периода подписки на программу по номеру семестра&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbcid(int) - id из таблицы [[Разработка:storages/programmsbcs | programmsbcs ]]&lt;br /&gt;
* $agenum(int) - номер параллели&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* int - id периода из таблицы [[Разработка:storages/ages | ages ]] или&lt;br /&gt;
* bool - false, если найти не удалось&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_first_learning_data($programmsbcid)''' ====&lt;br /&gt;
&lt;br /&gt;
Получить первую запись на момент начала обучения&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $programmsbcid - id подписки ученика на учебную программу (таблица [[Разработка:storages/programmsbcs|programmsbcs]]), по которой запрашивается история&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* (mix) object|bool - объект из таблицы [[Разработка:storages/learninghistory|learninghistory]], или false&lt;br /&gt;
&lt;br /&gt;
===='''get_actual_learning_data($programmsbcid)'''====&lt;br /&gt;
&lt;br /&gt;
Получение текущую информацию об учебных подписках и периодах &lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $programmsbcid - id подписки ученика на учебную программу (таблица [[Разработка:storages/programmsbcs|programmsbcs]]), по которой запрашивается история&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* (mix) object|bool - объект из таблицы [[Разработка:storages/learninghistory|learninghistory]], или false&lt;br /&gt;
&lt;br /&gt;
===='''get_history($programmsbcid, $timefrom=null, $timeto=null)'''====&lt;br /&gt;
&lt;br /&gt;
Получение истории изменения подписок по времени&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $programmsbcid - id подписки ученика на учебную программу (таблица [[Разработка:storages/programmsbcs|programmsbcs]]), по которой запрашивается история &lt;br /&gt;
* $timefrom - начало временного периода, за который запрашивается история изменения подписок, по умолчанию null&lt;br /&gt;
* $timeto - конец временного периода, за который запрашивается история изменения подписок, по умолчанию null&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* (mix) object|bool - объект из таблицы [[Разработка:storages/learninghistory|learninghistory]], или false&lt;br /&gt;
&lt;br /&gt;
===='''get_subscribe_ages($programmsbcid)'''====&lt;br /&gt;
&lt;br /&gt;
Выводит все учебные периоды, в которых проходила указанная учебная программа(без повторений)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbcid - id подписки ученика на учебную программу (таблица [[Разработка:storages/programmsbcs|programmsbcs]]), по которой запрашивается история&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* array - массив записей из таблицы [[Разработка:storages/learninghistory|learninghistory]]&lt;br /&gt;
&lt;br /&gt;
===='''add($programmsbc)'''====&lt;br /&gt;
&lt;br /&gt;
Добавляет историю изменения учебного процесса для ученика. &lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbc - id в таблице [[Разработка:storages/programmsbcs|programmsbcs]]) или сам объект с таким id&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* array - массив записей или false&lt;br /&gt;
&lt;br /&gt;
===='''set_actual_learninghistoryid($cpassed)'''====&lt;br /&gt;
&lt;br /&gt;
Устанавливает learninghistoryid для записей cpassed, если есть актуальные данные в истории обучения&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* (object|int) $cpassed - изучаемый или пройденный курс&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* bool - результат операции&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;
 |storage&lt;br /&gt;
 |cpassed&lt;br /&gt;
 |insert&lt;br /&gt;
 |Стандартные&lt;br /&gt;
 |&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |cpassed&lt;br /&gt;
 |update&lt;br /&gt;
 |Стандартные&lt;br /&gt;
 |&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |cpassed&lt;br /&gt;
 |delete&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;
 |storage&lt;br /&gt;
 |learninghistory&lt;br /&gt;
 |insert&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;new&amp;quot; объект с данными для вставки в таблицу.&lt;br /&gt;
''Пример:'' array('new' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при вставке новой записи в таблицу learninghistory.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |learninghistory&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;
 |Генерируется каждый раз при обновлении записи в таблице learninghistory.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |learninghistory&lt;br /&gt;
 |delete&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;old&amp;quot; объект с данными, которые удаляются из таблицы&lt;br /&gt;
''Пример:'' array('old' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при удалении записи из таблицы learninghistory.&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Konovalov</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/ages&amp;diff=2818</id>
		<title>Разработка:storages/ages</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/ages&amp;diff=2818"/>
				<updated>2014-08-20T09:54:33Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Дополнительные методы: */ исправил различия в коде и документации&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = ages&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
===Таблица в базе данных===&lt;br /&gt;
''ages'' - учебные периоды (учебный год в школе, семестр в ВУЗе). Каждый учебный поток и итоговая отметка по курсу принадлежат какому-то одному учебному периоду.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* name - название учебного периода&lt;br /&gt;
* begindate - дата и время начала по UTC&lt;br /&gt;
* enddate  - дата и время окончания по UTC&lt;br /&gt;
* eduweeks - количество учебных недель/циклов (каждая соответствует одному циклу в расписании) продолжительности курса, которые помещаются в этом учебном периоде.&lt;br /&gt;
* departmentid - структурное подразделение в таблице [[Разработка:storages/departments | departments ]], объявившее учебный период&lt;br /&gt;
* previousid - предыдущий учебный период&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/ages | ages ]]&lt;br /&gt;
&lt;br /&gt;
===Дополнительные методы:===&lt;br /&gt;
&lt;br /&gt;
* '''+''' Получить список текущих учебных периодов для структурного подразделения. Возвращает массив объектов. По умолчанию - все периоды в статусе &amp;quot;идет учебный процесс&amp;quot;. Если второй параметр null - возвращаются все периоды, если строка - периоды в этом статусе, если массив - все периоды в таких статусах. Для удобства нужно сделать заготовку, которая принимает такой параметр и имя sql-колонки и возвращает соответствующий фрагмент sql-запроса - и поместить ее защищенным методом в storage_base.&lt;br /&gt;
* '''+''' Получить id учебного периода, являющегося x по счету после периода с заданным id. При этом x=1 - это сам исходный период (период для &amp;quot;первого класса), x=2 - это период, для которого период x=1 был предыдущим. Метод возвращает id или false, если однозначно установить id периода не удалось.&lt;br /&gt;
* Создать период для структурного подразделения: получает параметры &amp;quot;структурное подразделение&amp;quot;, &amp;quot;дата начала&amp;quot;, &amp;quot;дата конца&amp;quot;, &amp;quot;количество учебных недель&amp;quot;, &amp;quot;название&amp;quot;, &amp;quot;предыдущий период&amp;quot; - по умолчанию 0. Не указывать предыдущий период допускается только если для этого структурного подразделения еще не было создано периодов. Если для периода уже есть один &amp;quot;последующий период&amp;quot;, то больше его указывать в качестве &amp;quot;предыдущего&amp;quot; нельзя. Метод возвращает id созданного периода или false.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_next_ageid($ageid, $agenum)'''====&lt;br /&gt;
&lt;br /&gt;
Находит один из дочерних учебных периодов&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $ageid(int) - id учебного периода в таблице [[Разработка:storages/ages | ages ]].&lt;br /&gt;
* $agenum(int) - сколько периодов вперед отсчитать относительно переданного ageid. При этом переданный id считается первым.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* int - id периода&lt;br /&gt;
* bool - false, если установить id не удалось&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_previous_ageid($ageid, $agenum)'''====&lt;br /&gt;
&lt;br /&gt;
Находит предшествующий указанному в ageid учебный период&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $ageid(int) - id учебного периода в таблице [[Разработка:storages/ages | ages ]].&lt;br /&gt;
* $agenum(int) - сколько периодов назад отсчитать относительно переданного ageid. При этом переданный ageid считается последним.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* int - id периода или&lt;br /&gt;
* bool - false, если установить id не удалось&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''create_period_for_department($deptid, $datebegin, $dateend, $numweeks, $name, $previousid=null)'''====&lt;br /&gt;
&lt;br /&gt;
Создаёт период для структурного подразделения&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $deptid(int) - id учебного подразделения в таблице [[Разработка:storages/departments | departments ]].&lt;br /&gt;
* $datebegin(int) - время начала периода в формате [http://ru.wikipedia.org/wiki/UNIX-время unixtime].&lt;br /&gt;
* $dateend(int) - время окончания периода в формате [http://ru.wikipedia.org/wiki/UNIX-время unixtime].&lt;br /&gt;
* $numweeks(int) - количество недель в учебном периоде.&lt;br /&gt;
* $name(string) - название учебного периода.&lt;br /&gt;
* $previosid(int) - id предыдущего учебного периода в таблице [[Разработка:storages/ages | ages ]] или null, если нет предыдущего периода, по умолчанию null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* int - id созданного периода.&lt;br /&gt;
* bool - false, если период создать нельзя.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_ages_by_idrange($minid, $maxid)'''====&lt;br /&gt;
&lt;br /&gt;
Получает список записей по диапазону id&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $minid(int) - минимальный id.&lt;br /&gt;
* $maxid(int) - максимальный id.&lt;br /&gt;
''Возвращает значения:''&lt;br /&gt;
* array - массив записей.&lt;br /&gt;
* bool - false, если ни один не найден.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_agenum_byageid($startageid, $currentageid, $maxagenum)'''====&lt;br /&gt;
&lt;br /&gt;
Находит порядковый номер периода, считая от заданного периода&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $startageid(int) - id периода на котором нужно остановить поиск.&lt;br /&gt;
* $currentageid(int) - id периода, порядковый номер которого нам надо узнать.&lt;br /&gt;
* $maxagenum(int) - максимально возможный порядковый номер периода.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* int - порядковый номер периода.&lt;br /&gt;
* bool - 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;
 |ages&lt;br /&gt;
 |insert&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;new&amp;quot; объект с данными для вставки в таблицу.&lt;br /&gt;
''Пример:'' array('new' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при вставке новой записи в таблицу ages.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |ages&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;
 |Генерируется каждый раз при обновлении записи в таблице ages.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |ages&lt;br /&gt;
 |delete&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;old&amp;quot; объект с данными, которые удаляются из таблицы&lt;br /&gt;
''Пример:'' array('old' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при удалении записи из таблицы ages.&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Konovalov</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:workflows/cpassed&amp;diff=2816</id>
		<title>Разработка:workflows/cpassed</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:workflows/cpassed&amp;diff=2816"/>
				<updated>2014-08-14T09:03:19Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Метастатусы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = cpassed&lt;br /&gt;
| type = workflows&lt;br /&gt;
}}&lt;br /&gt;
==Возможные статусы== &lt;br /&gt;
* Запланирован (plan) - слушатель подписан на обучение данной дисциплине в данном учебном процессе, но обучение еще не началось.&lt;br /&gt;
* Идет обучение (active) - слушатель обучается в составе учебного процесса.&lt;br /&gt;
* Приостановлен (suspend) - обучение приостановлено по тем или иным причинам (например, не поступление оплаты или приостановка всего процесса)&lt;br /&gt;
* Отменен (canceled) - обучение отменено до его завершения (слушатель отчислен, учебный процесс отменен, слушатель перевелся или отказался от дисциплины).&lt;br /&gt;
* Успешно завершен (completed) - учебный процесс был проведен и успешно завершен. Студент считается сдавшим данную дисциплину, а текущая оценка считается окончательным результатом студента. Каждая запись с таким статусом считается отдельной итоговой оценкой, поэтому нужно заботиться о том, чтобы не было дублирования (при пересдачи старые оценки переводить в статус &amp;quot;неуспешно завершен&amp;quot;). Считаем, что в рамках одной подписки на программу может быть только одна подписка на каждую дисциплину с таким статусом (но могут быть в других статусах).&lt;br /&gt;
* Перезачет из другой программы или учебного заведения (reoffset) - оценка была выставлена по результатам учебного процесса в другой подписке или по предъявленным документам из другого учебного заведения. Обучения не проводилось, но оценка выставлена.&lt;br /&gt;
* Неуспешно завершен (failed) - обучение было проведено, но студент не сдал предмет или предмет был пересдан в другой подписке (cpassed). Оценка из текущей записи не является окончательной, отображается только в истории пересдач и в сохраненных приказах-ведомостях. Если пересдачи со статусом completed нет, дисциплина считается не сданной. Если дисциплина была передана, то окончательной является оценка из другой записи, в которой поле repeatid ссылается на текущую запись.&lt;br /&gt;
* Академическая разница (academicdebt) - слушателю добавили дисциплину в качестве разницы учебного плана, возникшей в результате перезачётов (reoffset). Подписка на дисциплину с этим статусом используется при назначении слушателю пересдачи с конкретным преподавателем и учебным периодом.&lt;br /&gt;
&lt;br /&gt;
=== Метастатусы ===&lt;br /&gt;
* Активный: active&lt;br /&gt;
* Актуальный: plan, active, suspend&lt;br /&gt;
* Реальный:plan, active, suspend, completed, reoffset, failed, academicdebt&lt;br /&gt;
* Мусорный: canceled&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;
* Приостановлен - этот переход нужен для того, чтобы при переводе учебного процесса из статуса &amp;quot;запланирован&amp;quot; в статус &amp;quot;идет&amp;quot; данная подписка не активировалась.&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;
* Приостановлен&lt;br /&gt;
* Отменен&lt;br /&gt;
&lt;br /&gt;
Переход в статус &amp;quot;перезачет&amp;quot; из статуса &amp;quot;идет обучение&amp;quot; невозможен, потому что преподаватель уже затратил работу на данного ученика, которую нужно учесть, чтобы не было неоднозначности в тарификации. Если преподаватель принял &amp;quot;перезачет&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;
==== Отменен ====&lt;br /&gt;
Конечный статус&lt;br /&gt;
&lt;br /&gt;
==== Успешно завершен ====&lt;br /&gt;
Возможные переходы ИЗ этого статуса:&lt;br /&gt;
* Неуспешно завершен - в случае, если студент пересдал итоговую оценку, то старая подписка должна быть переведена в статус &amp;quot;неуспешно завершен&amp;quot;, а новая ссылаться на старую через repeatid&lt;br /&gt;
&lt;br /&gt;
==== Перезачет ====&lt;br /&gt;
Возможные переходы ИЗ этого статуса:&lt;br /&gt;
* Неуспешно завершен - в случае, если студент пересдал итоговую оценку, то старая подписка должна быть переведена в статус &amp;quot;неуспешно завершен&amp;quot;, а новая ссылаться на старую через repeatid&lt;br /&gt;
&lt;br /&gt;
==== Неуспешно завершен ====&lt;br /&gt;
Конечный статус&lt;br /&gt;
&lt;br /&gt;
==== Академическая разница ====&lt;br /&gt;
Конечный статус&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
==== get_list() ====&lt;br /&gt;
Получить список всех возможных статусов для подписки на предмет&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* (нет)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* Массив, со списком всех возможных статусов в формате &amp;quot;обозначение&amp;quot; =&amp;gt; &amp;quot;Перевод&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== get_name() ====&lt;br /&gt;
Получить название статуса по его обозначению в базе данных&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* (string) $status - обозначение статуса латинскими буквами&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (string|bool) - перевод для этого статуса, либо false, если он не обнаружен в списке допустимых&lt;br /&gt;
&lt;br /&gt;
==== get_available() ====&lt;br /&gt;
Получить список статусов, в которые может перейти указанная подписка на предмет&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id - id подписки на предмет в таблице [[Разработка:storages/cpassed|cpassed]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array|bool) - массив возможных состояний в формате ('обозначение' =&amp;gt; 'первод') или false в случае когда запись не найдена. В случае, когда переход из этого статуса невозможен - возвращается пустой массив.&lt;br /&gt;
&lt;br /&gt;
==== change() ====&lt;br /&gt;
Сменить статус подписки на предмет на указанный.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* (int) $id - id подписки на предмет в таблице [[Разработка:storages/cpassed|cpassed]]&lt;br /&gt;
* (string) $status - обозначение статуса латинскими буквами&lt;br /&gt;
* (array) $opt - Массив, где содержатся дополнительные параметры для смены статуса. По умолчанию null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) true - если статус удалось изменить, или false в случае ошибки &lt;br /&gt;
&lt;br /&gt;
При обращении к функции change() выполняются дополнительные действия, указанные выше, в разделе &amp;quot;Маршруты статусов&amp;quot;. При каждом изменении статуса данные записываются в таблицу [[Разработка:storages/statushistory|statushistory]].&lt;br /&gt;
==== init() ====&lt;br /&gt;
Запускается при вставке в таблицу [[Разработка:storages/cpassed|cpassed]] новой записи. Автоматически назначает созданной подписке на предмет статус &amp;quot;запланирован&amp;quot; (plan).&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id - id только что созданной подписки на предмет в таблице [[Разработка:storages/cpassed|cpassed]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) true если статус успешно назначен или false в случае ошибки&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;
 |storage&lt;br /&gt;
 |[[Разработка:storages/cpassed|cpassed]]&lt;br /&gt;
 |insert&lt;br /&gt;
 |Каждая новая созданная подписка на предмет автоматически переводится в статус &amp;quot;запланирована&amp;quot; (plan), путем вызова функции [[#init()|init()]].&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Konovalov</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:workflows/cpassed&amp;diff=2815</id>
		<title>Разработка:workflows/cpassed</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:workflows/cpassed&amp;diff=2815"/>
				<updated>2014-08-14T08:47:24Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Возможные статусы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = cpassed&lt;br /&gt;
| type = workflows&lt;br /&gt;
}}&lt;br /&gt;
==Возможные статусы== &lt;br /&gt;
* Запланирован (plan) - слушатель подписан на обучение данной дисциплине в данном учебном процессе, но обучение еще не началось.&lt;br /&gt;
* Идет обучение (active) - слушатель обучается в составе учебного процесса.&lt;br /&gt;
* Приостановлен (suspend) - обучение приостановлено по тем или иным причинам (например, не поступление оплаты или приостановка всего процесса)&lt;br /&gt;
* Отменен (canceled) - обучение отменено до его завершения (слушатель отчислен, учебный процесс отменен, слушатель перевелся или отказался от дисциплины).&lt;br /&gt;
* Успешно завершен (completed) - учебный процесс был проведен и успешно завершен. Студент считается сдавшим данную дисциплину, а текущая оценка считается окончательным результатом студента. Каждая запись с таким статусом считается отдельной итоговой оценкой, поэтому нужно заботиться о том, чтобы не было дублирования (при пересдачи старые оценки переводить в статус &amp;quot;неуспешно завершен&amp;quot;). Считаем, что в рамках одной подписки на программу может быть только одна подписка на каждую дисциплину с таким статусом (но могут быть в других статусах).&lt;br /&gt;
* Перезачет из другой программы или учебного заведения (reoffset) - оценка была выставлена по результатам учебного процесса в другой подписке или по предъявленным документам из другого учебного заведения. Обучения не проводилось, но оценка выставлена.&lt;br /&gt;
* Неуспешно завершен (failed) - обучение было проведено, но студент не сдал предмет или предмет был пересдан в другой подписке (cpassed). Оценка из текущей записи не является окончательной, отображается только в истории пересдач и в сохраненных приказах-ведомостях. Если пересдачи со статусом completed нет, дисциплина считается не сданной. Если дисциплина была передана, то окончательной является оценка из другой записи, в которой поле repeatid ссылается на текущую запись.&lt;br /&gt;
* Академическая разница (academicdebt) - слушателю добавили дисциплину в качестве разницы учебного плана, возникшей в результате перезачётов (reoffset). Подписка на дисциплину с этим статусом используется при назначении слушателю пересдачи с конкретным преподавателем и учебным периодом.&lt;br /&gt;
&lt;br /&gt;
=== Метастатусы ===&lt;br /&gt;
* Активный: active&lt;br /&gt;
* Актуальный: plan, active, suspend&lt;br /&gt;
* Реальный:plan, active, suspend, completed, reoffset, failed&lt;br /&gt;
* Мусорный: canceled&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;
* Приостановлен - этот переход нужен для того, чтобы при переводе учебного процесса из статуса &amp;quot;запланирован&amp;quot; в статус &amp;quot;идет&amp;quot; данная подписка не активировалась.&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;
* Приостановлен&lt;br /&gt;
* Отменен&lt;br /&gt;
&lt;br /&gt;
Переход в статус &amp;quot;перезачет&amp;quot; из статуса &amp;quot;идет обучение&amp;quot; невозможен, потому что преподаватель уже затратил работу на данного ученика, которую нужно учесть, чтобы не было неоднозначности в тарификации. Если преподаватель принял &amp;quot;перезачет&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;
==== Отменен ====&lt;br /&gt;
Конечный статус&lt;br /&gt;
&lt;br /&gt;
==== Успешно завершен ====&lt;br /&gt;
Возможные переходы ИЗ этого статуса:&lt;br /&gt;
* Неуспешно завершен - в случае, если студент пересдал итоговую оценку, то старая подписка должна быть переведена в статус &amp;quot;неуспешно завершен&amp;quot;, а новая ссылаться на старую через repeatid&lt;br /&gt;
&lt;br /&gt;
==== Перезачет ====&lt;br /&gt;
Возможные переходы ИЗ этого статуса:&lt;br /&gt;
* Неуспешно завершен - в случае, если студент пересдал итоговую оценку, то старая подписка должна быть переведена в статус &amp;quot;неуспешно завершен&amp;quot;, а новая ссылаться на старую через repeatid&lt;br /&gt;
&lt;br /&gt;
==== Неуспешно завершен ====&lt;br /&gt;
Конечный статус&lt;br /&gt;
&lt;br /&gt;
==== Академическая разница ====&lt;br /&gt;
Конечный статус&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
==== get_list() ====&lt;br /&gt;
Получить список всех возможных статусов для подписки на предмет&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* (нет)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* Массив, со списком всех возможных статусов в формате &amp;quot;обозначение&amp;quot; =&amp;gt; &amp;quot;Перевод&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== get_name() ====&lt;br /&gt;
Получить название статуса по его обозначению в базе данных&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* (string) $status - обозначение статуса латинскими буквами&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (string|bool) - перевод для этого статуса, либо false, если он не обнаружен в списке допустимых&lt;br /&gt;
&lt;br /&gt;
==== get_available() ====&lt;br /&gt;
Получить список статусов, в которые может перейти указанная подписка на предмет&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id - id подписки на предмет в таблице [[Разработка:storages/cpassed|cpassed]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array|bool) - массив возможных состояний в формате ('обозначение' =&amp;gt; 'первод') или false в случае когда запись не найдена. В случае, когда переход из этого статуса невозможен - возвращается пустой массив.&lt;br /&gt;
&lt;br /&gt;
==== change() ====&lt;br /&gt;
Сменить статус подписки на предмет на указанный.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* (int) $id - id подписки на предмет в таблице [[Разработка:storages/cpassed|cpassed]]&lt;br /&gt;
* (string) $status - обозначение статуса латинскими буквами&lt;br /&gt;
* (array) $opt - Массив, где содержатся дополнительные параметры для смены статуса. По умолчанию null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) true - если статус удалось изменить, или false в случае ошибки &lt;br /&gt;
&lt;br /&gt;
При обращении к функции change() выполняются дополнительные действия, указанные выше, в разделе &amp;quot;Маршруты статусов&amp;quot;. При каждом изменении статуса данные записываются в таблицу [[Разработка:storages/statushistory|statushistory]].&lt;br /&gt;
==== init() ====&lt;br /&gt;
Запускается при вставке в таблицу [[Разработка:storages/cpassed|cpassed]] новой записи. Автоматически назначает созданной подписке на предмет статус &amp;quot;запланирован&amp;quot; (plan).&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id - id только что созданной подписки на предмет в таблице [[Разработка:storages/cpassed|cpassed]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) true если статус успешно назначен или false в случае ошибки&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;
 |storage&lt;br /&gt;
 |[[Разработка:storages/cpassed|cpassed]]&lt;br /&gt;
 |insert&lt;br /&gt;
 |Каждая новая созданная подписка на предмет автоматически переводится в статус &amp;quot;запланирована&amp;quot; (plan), путем вызова функции [[#init()|init()]].&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Konovalov</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:workflows/cpassed&amp;diff=2814</id>
		<title>Разработка:workflows/cpassed</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:workflows/cpassed&amp;diff=2814"/>
				<updated>2014-08-14T08:35:58Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Маршруты статусов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = cpassed&lt;br /&gt;
| type = workflows&lt;br /&gt;
}}&lt;br /&gt;
==Возможные статусы== &lt;br /&gt;
* Запланирован (plan) - слушатель подписан на обучение данной дисциплине в данном учебном процессе, но обучение еще не началось.&lt;br /&gt;
* Идет обучение (active) - слушатель обучается в составе учебного процесса.&lt;br /&gt;
* Приостановлен (suspend) - обучение приостановлено по тем или иным причинам (например, не поступление оплаты или приостановка всего процесса)&lt;br /&gt;
* Отменен (canceled) - обучение отменено до его завершения (слушатель отчислен, учебный процесс отменен, слушатель перевелся или отказался от дисциплины).&lt;br /&gt;
* Успешно завершен (completed) - учебный процесс был проведен и успешно завершен. Студент считается сдавшим данную дисциплину, а текущая оценка считается окончательным результатом студента. Каждая запись с таким статусом считается отдельной итоговой оценкой, поэтому нужно заботиться о том, чтобы не было дублирования (при пересдачи старые оценки переводить в статус &amp;quot;неуспешно завершен&amp;quot;). Считаем, что в рамках одной подписки на программу может быть только одна подписка на каждую дисциплину с таким статусом (но могут быть в других статусах).&lt;br /&gt;
* Перезачет из другой программы или учебного заведения (reoffset) - оценка была выставлена по результатам учебного процесса в другой подписке или по предъявленным документам из другого учебного заведения. Обучения не проводилось, но оценка выставлена.&lt;br /&gt;
* Неуспешно завершен (failed) - обучение было проведено, но студент не сдал предмет или предмет был пересдан в другой подписке (cpassed). Оценка из текущей записи не является окончательной, отображается только в истории пересдач и в сохраненных приказах-ведомостях. Если пересдачи со статусом completed нет, дисциплина считается не сданной. Если дисциплина была передана, то окончательной является оценка из другой записи, в которой поле repeatid ссылается на текущую запись. &lt;br /&gt;
&lt;br /&gt;
=== Метастатусы ===&lt;br /&gt;
* Активный: active&lt;br /&gt;
* Актуальный: plan, active, suspend&lt;br /&gt;
* Реальный:plan, active, suspend, completed, reoffset, failed&lt;br /&gt;
* Мусорный: canceled&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;
* Приостановлен - этот переход нужен для того, чтобы при переводе учебного процесса из статуса &amp;quot;запланирован&amp;quot; в статус &amp;quot;идет&amp;quot; данная подписка не активировалась.&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;
* Приостановлен&lt;br /&gt;
* Отменен&lt;br /&gt;
&lt;br /&gt;
Переход в статус &amp;quot;перезачет&amp;quot; из статуса &amp;quot;идет обучение&amp;quot; невозможен, потому что преподаватель уже затратил работу на данного ученика, которую нужно учесть, чтобы не было неоднозначности в тарификации. Если преподаватель принял &amp;quot;перезачет&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;
==== Отменен ====&lt;br /&gt;
Конечный статус&lt;br /&gt;
&lt;br /&gt;
==== Успешно завершен ====&lt;br /&gt;
Возможные переходы ИЗ этого статуса:&lt;br /&gt;
* Неуспешно завершен - в случае, если студент пересдал итоговую оценку, то старая подписка должна быть переведена в статус &amp;quot;неуспешно завершен&amp;quot;, а новая ссылаться на старую через repeatid&lt;br /&gt;
&lt;br /&gt;
==== Перезачет ====&lt;br /&gt;
Возможные переходы ИЗ этого статуса:&lt;br /&gt;
* Неуспешно завершен - в случае, если студент пересдал итоговую оценку, то старая подписка должна быть переведена в статус &amp;quot;неуспешно завершен&amp;quot;, а новая ссылаться на старую через repeatid&lt;br /&gt;
&lt;br /&gt;
==== Неуспешно завершен ====&lt;br /&gt;
Конечный статус&lt;br /&gt;
&lt;br /&gt;
==== Академическая разница ====&lt;br /&gt;
Конечный статус&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
==== get_list() ====&lt;br /&gt;
Получить список всех возможных статусов для подписки на предмет&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* (нет)&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* Массив, со списком всех возможных статусов в формате &amp;quot;обозначение&amp;quot; =&amp;gt; &amp;quot;Перевод&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== get_name() ====&lt;br /&gt;
Получить название статуса по его обозначению в базе данных&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* (string) $status - обозначение статуса латинскими буквами&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (string|bool) - перевод для этого статуса, либо false, если он не обнаружен в списке допустимых&lt;br /&gt;
&lt;br /&gt;
==== get_available() ====&lt;br /&gt;
Получить список статусов, в которые может перейти указанная подписка на предмет&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id - id подписки на предмет в таблице [[Разработка:storages/cpassed|cpassed]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array|bool) - массив возможных состояний в формате ('обозначение' =&amp;gt; 'первод') или false в случае когда запись не найдена. В случае, когда переход из этого статуса невозможен - возвращается пустой массив.&lt;br /&gt;
&lt;br /&gt;
==== change() ====&lt;br /&gt;
Сменить статус подписки на предмет на указанный.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* (int) $id - id подписки на предмет в таблице [[Разработка:storages/cpassed|cpassed]]&lt;br /&gt;
* (string) $status - обозначение статуса латинскими буквами&lt;br /&gt;
* (array) $opt - Массив, где содержатся дополнительные параметры для смены статуса. По умолчанию null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) true - если статус удалось изменить, или false в случае ошибки &lt;br /&gt;
&lt;br /&gt;
При обращении к функции change() выполняются дополнительные действия, указанные выше, в разделе &amp;quot;Маршруты статусов&amp;quot;. При каждом изменении статуса данные записываются в таблицу [[Разработка:storages/statushistory|statushistory]].&lt;br /&gt;
==== init() ====&lt;br /&gt;
Запускается при вставке в таблицу [[Разработка:storages/cpassed|cpassed]] новой записи. Автоматически назначает созданной подписке на предмет статус &amp;quot;запланирован&amp;quot; (plan).&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id - id только что созданной подписки на предмет в таблице [[Разработка:storages/cpassed|cpassed]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) true если статус успешно назначен или false в случае ошибки&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;
 |storage&lt;br /&gt;
 |[[Разработка:storages/cpassed|cpassed]]&lt;br /&gt;
 |insert&lt;br /&gt;
 |Каждая новая созданная подписка на предмет автоматически переводится в статус &amp;quot;запланирована&amp;quot; (plan), путем вызова функции [[#init()|init()]].&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Konovalov</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/cpassed&amp;diff=2813</id>
		<title>Разработка:storages/cpassed</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/cpassed&amp;diff=2813"/>
				<updated>2014-08-14T08:34:05Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Подробный формат полей в таблице: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = cpassed&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
=Таблица в базе данных=&lt;br /&gt;
''cpassed'' - изучаемые и пройденные курсы: отражает ход изучения учащимися выбранной учебной программы, итоговые отметки.&lt;br /&gt;
&lt;br /&gt;
===Подробный формат полей в таблице:===&lt;br /&gt;
* cstreamid - id учебного процесса в таблице [[Разработка:storages/cstreams | cstreams ]], по которому велось обучение.&lt;br /&gt;
* programmsbcid - id подписки контракта в таблице [[Разработка:storages/contracts | contracts ]] на программу обучения.&lt;br /&gt;
* programmitemid - id дисциплины в таблице [[Разработка:storages/programmitems | programmitems ]].&lt;br /&gt;
* studentid - id слушателя по таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* agroupid - id академической группы в таблице [[Разработка:storages/agroups | agroups ]]. Не обязательное поле (для заполнения). По умолчанию NULL. При зачислении и отчислении из группы изменяется его значение автоматически. При отчислении из группы поле становится равным нулю (0). При индивидуальном обучении - NULL. На основании этого принимается решение подписке/отписке на предмет. &lt;br /&gt;
* grade - итоговая отметка по курсу.&lt;br /&gt;
* gradelevel - уровень оценки (оценка не идет в кондуит, дисциплина, курсовая работа, практика, междисциплинарный экзамен, дипломная работа). Берется из [[Разработка:storages/programmitems | programmitems ]].&lt;br /&gt;
* credit - количество кредитов, полученное за прохождение дисциплины.&lt;br /&gt;
* notice - текстовое пояснение об источнике оценки при перезачете.&lt;br /&gt;
* repeatid - id предыдущей подписки на дисциплину, если обучение выполняется повторно (пересдача или повторное обучение - при этом подписка, на которую выполняется ссылка должна иметь статус &amp;quot;пересдан&amp;quot;). Пересдачей может считаться только пересдача дисциплины, пройденной в рамках этой же подписки на учебную программу. Если было несколько пересдач данной дисциплины в данной учебной программе, то все они ссылаются на один и тот же исходный cpassedid.&lt;br /&gt;
* typesync - тип синхронизации (выставление вручную, синхронизация с moodle).&lt;br /&gt;
* mdlinstance - id задания в moodle, с которым выполнялась синхронизация.&lt;br /&gt;
* teacherid - id сотрудника по справочнику [[Разработка:storages/persons | persons ]], вручную выставившего итоговую отметку.&lt;br /&gt;
* ageid - id периода в таблице [[Разработка:storages/ages | ages ]] по которому велось обучение.&lt;br /&gt;
* orderid - id приказа в таблице [[Разработка:storages/orders | orders ]], согласно которому была выставлена оценка.&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов [[Разработка:workflows/cpassed | cpassed ]].&lt;br /&gt;
* begindate - дата начала действия подписки.&lt;br /&gt;
* enddate - дата окончания действия подписки.&lt;br /&gt;
* sbcorderid - id приказа в таблице [[Разработка:storages/orders | orders ]], которым учащийся был подписан на дисциплину.&lt;br /&gt;
* learninghistoryid - id записи в таблице [[Разработка:storages/learninghistory | learninghistory ]], соответствующая текущей параллели данной подписки.&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы:=&lt;br /&gt;
&lt;br /&gt;
===='''get_actual_reoffset_cpassed($cpasseds)'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает только последнюю пересдачу (по времени) из массива пересдач.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cpasseds(array) - записи, полученные по одной подписке и дисциплине.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект последней пересдачи&lt;br /&gt;
* (bool) - false, в случае ошибки&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
# в эту функцию должны передаваться только cpassed-&amp;gt;status == 'reoffset'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cstream_students($csid, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получает список всех подписок студентов, приписаных к одному предмето-потоку.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $csid(int) - id учебного потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
* $status(string) - статус подписки, по умолчанию - 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;
** если статус не указывается или указывается как null - подписки с любым статусом.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cstream_agroup($cstreamid, $agroupid, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получаеть список всех подписок студентов к указанному учебному потоку или только подписок с указанным статусом.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cstreamid(int) - id учебного потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
* $agroupid(int) - id академической группы в таблице [[Разработка:storages/cstreams | agroups ]].&lt;br /&gt;
* $status(string) - статус учебной дисциплины. по умолчанию - null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив записей из таблица.&lt;br /&gt;
* (bool) - false, если записи не найдены.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cpasseds_student($stid, $status = 'active')'''====&lt;br /&gt;
&lt;br /&gt;
Получает список всех подписок для слушателя.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $stid(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_cpassed_programm($stid, $prid, $status = 'complete')'''====&lt;br /&gt;
&lt;br /&gt;
Получает список дисциплин, изученных слушателем в рамках учебной программы.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $stid(int) - id студента в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $prid(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $status(string) - статус подписки, по умолчанию - 'complete'.&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;
** если статус не указывается - подписки со статусом complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cpasseds_programmitem($stid, $prid, $status = 'complete', $levelgrade = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получает подписки на дисциплину по id слушателя и id дисциплины.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $stid(int) - id студента в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $prid(int) - id дисциплины в таблице [[Разработка:storages/programmitems | programmitems ]].&lt;br /&gt;
* $status(string) - название статуса подписки, по умолчанию - 'complete'&lt;br /&gt;
* $levelgrade(string) - уровень оценки, по умолчанию - 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;
** если уровень оценки не указывается или указывается как null - подписки с любым уровнем оценки.&lt;br /&gt;
** если указывается статус - подписки с указанным статусом, если статус не указан, то возвращаются подписки со статусом 'complete'&lt;br /&gt;
** если статус указан как null или false, то вернутся подписки с любым статусом&lt;br /&gt;
&lt;br /&gt;
===='''get_cpasseds_reoffset($conds=null, $countonly=false, $limitfrom, $limitnum)'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает список учебных потоков по заданным критериям, упрощённая версия get_listing() с поиском только по таблице cpassed для &amp;quot;Ведомости перезачёта оценок&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $limitfrom(int) - начиная с какой записи просматривается фрагмент списка записей.&lt;br /&gt;
* $limitnum(int) - сколько записей нужно извлечь из базы.&lt;br /&gt;
* $conds(object) - объект со списком свойств, по которым будет происходить поиск.&lt;br /&gt;
* $countonly(bool) - Если указано true, то функция вернет только количество записей, соответствующих переданным условиям. По умолчанию - false.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив записей из базы.&lt;br /&gt;
* (int) - количество записей, если $countonly=true.&lt;br /&gt;
* (bool) - false, в случае ошибки.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
# составляем запрос по переданным параметрам при помощи собственной protected-функции get_select_listing()&lt;br /&gt;
# Проверяем условие $countonly. Если оно истинно - то возвращаем только количество записей&lt;br /&gt;
# Поиск производится только по таблице cpassed, без проверки на целостность базы данных (с помощью выборки из других таблиц)&lt;br /&gt;
# Если ложно - то возвращаем список записей&lt;br /&gt;
&lt;br /&gt;
===='''insert_grade_reoffset($stid, $prid, $cpid, $grade, $status, $comment, $initialid)'''====&lt;br /&gt;
&lt;br /&gt;
Добавляет оценку в режиме &amp;quot;перезачета&amp;quot;.(в перспективе, когда будет реализован справочник с историей изменения отметок - вызов функции протоколирования).&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $stid(int) - id студента в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $prid(int) - id дисциплины в таблице [[Разработка:storages/departments | departments ]].&lt;br /&gt;
* $cpid(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $grade(int) - итоговая оценка.&lt;br /&gt;
* $comment(string) - коментарий.&lt;br /&gt;
* $status(string) - статус - перезачет(reoffset) или пересдача(repeating).&lt;br /&gt;
* $initialid(int) - id исходной подписки.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) id добавленной записи.&lt;br /&gt;
* (bool) false если добавление не удалось.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
# если дисиплина пересдается (статус = repeating), статус исходной подписки меняем на пересдан и обновляем запись в БД.&lt;br /&gt;
# формируем новый объект в БД.&lt;br /&gt;
# вставляем сформированную запись в таблицу БД.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_grade_register_reoffset($programmsbcid, $programmitemid, $studentid, $grade, $orderid, $teacherid, $date)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить оценку в режиме &amp;quot;перезачета&amp;quot; (для приказа &amp;quot;Ведомость для перезачёта&amp;quot;). В случае если была активная подписка -- она закрывается.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbcid(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $programmitemid(int) - id дисциплины в таблице [[Разработка:storages/programmitems | programmitems ]].&lt;br /&gt;
* $studentid(int) - id студента (personid) в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $grade(int) - итоговая оценка.&lt;br /&gt;
* $orderid(int) - id приказа в таблице [[Разработка:storages/orders | orders ]], по которому выставляется перезачёт.&lt;br /&gt;
* $teacherid(int) - personid из таблицы [[Разработка:storages/persons | persons ]], кто ставил оценку&lt;br /&gt;
* $date(int) - дата перезачёта&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) id добавленной записи.&lt;br /&gt;
* (bool) false если добавление не удалось.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
# Cоздаются cpassed-ы не привязанные к периоду (ageid=0).&lt;br /&gt;
# Если у студента уже был cpassed по этой дисциплине, перезачет ссылается на него полем repeatid (если несколько - то на самый первый, если старая подписка была активна - закрывается с неуспешным статусом).&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 - начиная с какой записи просматривается фрагмент списка записей.&lt;br /&gt;
* $limitnum - сколько записей нужно извлечь из базы.&lt;br /&gt;
* $conds - объект со списком свойств, по которым будет происходить поиск.&lt;br /&gt;
* $countonly - Если указано true, то функция вернет только количество записей, соответствующих переданным условиям. По умолчанию - false.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив записей из базы.&lt;br /&gt;
* (int) - количество записей, если $countonly=true.&lt;br /&gt;
* (bool) - false, в случае ошибки.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
# составляем запрос по переданным параметрам при помощи собственной protected-функции get_select_listing()&lt;br /&gt;
# Проверяем условие $countonly. Если оно истинно - то возвращаем только количество записей&lt;br /&gt;
# Если ложно - то возвращаем список записей&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''unsign_student_one_cpassed($studentid, $cstreamid)'''====&lt;br /&gt;
&lt;br /&gt;
Отписывает заданного студента от заданного учебного потока&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $studentid(int) - id студента в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $cstreamid(int) - id учебного потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (boоl) - true, в случае успеха и falsе, в остальных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''unsign_agroups_from_cstream($cstreamid)'''====&lt;br /&gt;
&lt;br /&gt;
Удаляет всех &amp;quot;лишних&amp;quot; подписок из потока, которые были записаны в составе группы, связи с которой сейчас нет.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cstreamid(int) - id учебного потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (boоl) - true, в случае успеха и falsе, в остальных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsign_student_all_cpassed($studentid, $programmsbcid)&lt;br /&gt;
&lt;br /&gt;
Отписывает студента от всех потоков программы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $studentid(int) - id студента в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $programmsbcid(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (boоl) - true, в случае успеха и falsе, в остальных&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''unsign_students_all_cpassed($students)'''====&lt;br /&gt;
&lt;br /&gt;
Отписывает нескольких студентов от всех потоков программы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $students(array) - массив (id подписки на программу студента в таблице [[Разработка:storages/programmsbcs | programmsbcs ]]=&amp;gt;id студента в таблице [[Разработка:storages/persons | persons ]]).&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (boоl) - true, в случае успеха и falsе, в остальных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_students_without_agroup()'''====&lt;br /&gt;
&lt;br /&gt;
Получить список всех подписок, которые не принадлежат ни к одной группе.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* ''(нет)''&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array)&lt;br /&gt;
* (bool) - false, если ничего не нашлось.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
* Возвращаются все записи таблицы cpassed, имеющие статус plan или active в которых поле agroupid равно: &lt;br /&gt;
** NULL (null-значение)&lt;br /&gt;
** &amp;quot;&amp;quot; (пустой строке) &lt;br /&gt;
** 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''unsign_students_without_agroup()'''====&lt;br /&gt;
&lt;br /&gt;
Отписать всех учеников, не имеющих подписки ни на одну группу&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* ''(нет)''&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если изменение всех статусов прошло нормально или false, если в процессе работы произошли ошибки.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
* Для получения списка подписок, не имеющих связи с группой вызывается функция get_students_without_agroup()&lt;br /&gt;
** Если таких подписок нет - возвращается true&lt;br /&gt;
** Если подписки есть - то в цикле выставляем каждой записи статус &amp;quot;canceled&amp;quot; (через обращение к плагину workflow)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
is_already_enroled($studentid, $cstreamid, $status = null)&lt;br /&gt;
&lt;br /&gt;
Проверяет, подписан ли уже этот ученик на переданный поток из поиска исключаются записи с переданным статусом.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $studentid(int) - id ученика в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $cstreamid(int) - id учебного потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
* $status(string) - код статуса&lt;br /&gt;
* $status(array) - массив статусов, или null, если их нет, по умолчанию - null. &lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id записи если такая запись уже есть.&lt;br /&gt;
* (bool) - false, если ученик еще не подписан.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
===='''sign_student_on_cstream($cstreamid, $programmsbcid)'''====&lt;br /&gt;
&lt;br /&gt;
Подписывает одного ученика на один учебный поток. &lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cstreamid(int) - id учебного потока в таблице в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
* $programmsbcid(int) - id подписки студента на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id записи если подписка произошла успешно (или уже существует).&lt;br /&gt;
* (bool) - false, в случае ошибки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''sign_student_on_all_cstreams($programmsbcid, $ageid = null)'''====&lt;br /&gt;
&lt;br /&gt;
Подписыает студента на все потоки программы по данному периоду &lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbcid(int) - id подписку студента на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $ageid(int) - id текущего периода в таблице [[Разработка:storages/ages | ages ]], по умолчанию - null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если ученик успешно подписан на потоки, или потоков в программе посто нет и false, в остальных случаях.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''sign_all_agroups_on_all_cstreams($programmid, $ageid)'''====&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;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если все операции прошли успешно и false, в случае ошибки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''sign_agroup_on_all_cstreams($agroupid, $programmid, $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;
* $programmid(int) - id учебной программы в таблице [[Разработка:storages/programms | programms ]].&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;
&lt;br /&gt;
===='''unsign_students_without_real_agroup($cstreamlink)'''====&lt;br /&gt;
&lt;br /&gt;
Отменяет подписки учеников, у которых группа, указанная в подписке на программу ([[Разработка:storages/programmsbcs | programmsbcs ]]), не совпадает с группой, указанной в таблице связей учебных потоков с группами ([[Разработка:storages/cstreamlinks | cstreamlinks ]]).&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* (object)$cstreamlink - объект в таблице [[Разработка:storages/cstreamlinks | cstreamlinks ]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если все операции завершились успешно и false, в случае возникновения ошибок.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''syncronize_agroups_with_cstream($cstreamid)'''====&lt;br /&gt;
&lt;br /&gt;
Синхронизирует все группы, связанные с данным потоком.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cstreamid(int) - id потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если все операции завершились успешно и false, в случае возникновения ошибок.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''syncronize_agroup_with_cstreams($agroupid)'''====&lt;br /&gt;
&lt;br /&gt;
Синхронизирует группу, со связанными с нею потоками.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $agroupid(int) - id группы в таблице [[Разработка:storages/agroups | agroups ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если все операции завершились успешно и false, в случае возникновения ошибок.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_final_grade($cpassedid, $grade = null, $orderid = null)'''====&lt;br /&gt;
&lt;br /&gt;
Выставляет итоговую оценку, и в зависимости от нее перевести подписку в новый статус.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cpassedid(int) - id подписки.&lt;br /&gt;
* $grade(string) - выставляемая итоговая оценка, если не указана, то подписка автоматически переходит в статус неуспешно завершен, по умолчанию - null.&lt;br /&gt;
* $orderid(int) - id приказа в таблице [[Разработка:storages/orders | orders ]], на основании которого происходит выставление оценки, по умолчанию - null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если все прошло успешно и false, в случае ошибки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_last_successor($cpassedid)'''====&lt;br /&gt;
&lt;br /&gt;
Находит последнего наследника данной подписки.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cpassedid(int) - id подписки.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id последнего наследника подписки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cpassed_on_programmsbcid($id, $status = 'active')'''====&lt;br /&gt;
&lt;br /&gt;
Получает информацию о подписках на дисциплину по подписке на программу.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $status(string) - статус подписок, информацию о которых требуется найти, по умолчанию - null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив с информацией о подписках на дисциплину.&lt;br /&gt;
* (bool) - false, если произошла ошибка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cpassed_on_studentid_programmsbcid_active_complete($programmsbcid, $programmitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает список активных или завершённых подписок на дисциплину по номеру подписки (номер студента берётся из неё) на программу.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbcid(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $programmitemid(int) - id дисциплины в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив с информацией о подписках на дисциплину.&lt;br /&gt;
* (bool) - false, если произошла ошибка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Планы:===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;метод создает одному студенту подписку на все потоки программы (sign_student_on_all_cstreams)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;метод создает нескольким студентам подписку на все потоки программы (sign_agroup_on_all_cstreams)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;метод создает всем студентам группы подписку на все потоки рограммы (sign_all_agroups_on_all_cstreams)&amp;lt;/s&amp;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;
 |storage&lt;br /&gt;
 |[[Разработка:storages/programmsbcs|programmsbcs]]&lt;br /&gt;
 |changeagroup&lt;br /&gt;
 |Массив, содержащий:&lt;br /&gt;
* в поле 'oldagroup' id старой группы&lt;br /&gt;
* в поле 'newagroup' id новой группы&lt;br /&gt;
* в поле 'programmsbc' объект из таблицы programmsbcs&lt;br /&gt;
''Пример:'' array('oldagroup' =&amp;gt; $oldid, 'newagroup' =&amp;gt; $newid, 'programmsbc' =&amp;gt; $object)&lt;br /&gt;
 |Обрабатывается событие изменения группы, вызывается функция [[#change_group()|change_group()]]&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |[[Разработка:storages/programmsbcs|cstreamlinks]]&lt;br /&gt;
 |insert&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;new&amp;quot; объект с данными для вставки в таблицу.&lt;br /&gt;
''Пример:'' array('new' =&amp;gt; $dataobject)&lt;br /&gt;
 |По этому событию выполняется синхронизация подписок группы при помощи функции [[#syncronize_agroup_with_cstream()|syncronize_agroup_with_cstream()]]&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |[[Разработка:storages/programmsbcs|cstreamlinks]]&lt;br /&gt;
 |delete&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;old&amp;quot; объект с данными, которые удаляются из таблицы&lt;br /&gt;
''Пример:'' array('old' =&amp;gt; $dataobject)&lt;br /&gt;
 |По этому событию удаляются подписки при помощи функции [[#unsign_agroups_from_cstream()|unsign_agroups_from_cstream()]]&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |[[Разработка:storages/cstreams|cstreams]]&lt;br /&gt;
 |changestatus&lt;br /&gt;
 |&lt;br /&gt;
 |При изменении статуса учебного потока изменяет статус всех подписок на этот поток, через обращение к [[Разработка:workflows/cpassed|workflows/cpassed]].&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;
 |storage&lt;br /&gt;
 |cpassed&lt;br /&gt;
 |insert&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;new&amp;quot; объект с данными для вставки в таблицу.&lt;br /&gt;
''Пример:'' array('new' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при вставке новой записи в таблицу cpassed.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |cpassed&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;
 |Генерируется каждый раз при обновлении записи в таблице cpassed.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |cpassed&lt;br /&gt;
 |delete&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;old&amp;quot; объект с данными, которые удаляются из таблицы&lt;br /&gt;
''Пример:'' array('old' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при удалении записи из таблицы cpassed.&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;
 |resync_age_cpassed&lt;br /&gt;
 |Обязателен. Указывается id периода из таблицы [[Разработка:storages/ages | ages ]]&lt;br /&gt;
 |Находит все активные подписки на дисциплины в указанном периоде, после чего каждую из них приостанавливает и заново возобновляет. Необходимо для записи учащихся на курс Moodle, если курс Moodle был присвоен дисциплинам во время учебного процесса.&lt;br /&gt;
 |-&lt;br /&gt;
 |active_to_suspend_cpassed&lt;br /&gt;
 |Обязателен. Указывается id периода из таблицы [[Разработка:storages/ages | ages ]]&lt;br /&gt;
 |Находит все активные подписки на дисциплины в указанном периоде, после чего каждую из них приостанавливает. Необходимо для отписывания учащихся с курса Moodle, если необходимо сменить курс Moodle в дисциплинах. Работает в паре с '''suspend_to_active_cpassed'''.&lt;br /&gt;
 |-&lt;br /&gt;
 |suspend_to_active_cpassed&lt;br /&gt;
 |Обязателен. Указывается id периода из таблицы [[Разработка:storages/ages | ages ]]&lt;br /&gt;
 |Находит все приостановленные подписки на дисциплины в указанном периоде, после чего каждую из них активирует. Необходимо для записи учащихся на курс Moodle, если после смены курса Moodle в дисциплинах. Работает в паре с '''active_to_suspend_cpassed'''.&lt;br /&gt;
 |-&lt;br /&gt;
 |comparecpassed&lt;br /&gt;
 |Необязателен&lt;br /&gt;
 |Находит все незавершенные подписки на дисциплины, после чего каждую из них синхронизирует с учебным процессом, выставляя в подписке тот же id дисциплины, что и в процессе. Необходимо для сопоставления правильной дисциплины в подписке и процессе, если дисциплину в процессе сменили уже во время обучения.&lt;br /&gt;
 |-&lt;br /&gt;
 |cancaled_repeatid_to_null&lt;br /&gt;
 |Необязателен&lt;br /&gt;
 |Находит все отмененные подписки на дисциплины, у которых есть родители, и разрывает с ними связь. Необходимо для разрыва связи активный родитель-&amp;gt;отмененный наследник, если по какой-то причине такие связи были созданы.&lt;br /&gt;
 |-&lt;br /&gt;
 |fill_learninghistoryid&lt;br /&gt;
 |Необязателен&lt;br /&gt;
 |Находит все подписки с пустым learninghistoryid и обновляет это поле, связывая его с записью в таблице [[Разработка:storages/learninghistory | learninghistory ]].&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Плагины обработки todo | storages/cpassed]]&lt;/div&gt;</summary>
		<author><name>Konovalov</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/learningplan&amp;diff=2812</id>
		<title>Разработка:storages/learningplan</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/learningplan&amp;diff=2812"/>
				<updated>2014-08-14T08:33:37Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Дополнительные методы: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = learningplan&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
=Таблица в базе данных=&lt;br /&gt;
''learningplan'' - запланированные на будущие периоды дисциплины.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* type - тип объекта, на которого запланирована дисциплина (programmsbc, agroup).&lt;br /&gt;
* programmsbcid - id слушателя из таблицы [[Разработка:storages/programmsbcs | programmsbcs ]], type=programmsbc или NULL&lt;br /&gt;
* agroupid - id группы из таблицы [[Разработка:storages/agroups | agroups ]], если type=agroup или NULL&lt;br /&gt;
* agenum - номер параллели, для которой задан план. Если слушатель обязан пройти дисциплину в любой период обучения 0. Уточнение: ageid мы не планируем, так как он пока не известен.&lt;br /&gt;
* programmitemid - id запланированной дисциплины из таблицы [[Разработка:storages/programmitems | programmitems ]] (дисциплина должна относится к той программе, на которую подписан слушатель или группа и быть активной на момент перевода в соответствующую параллель, чтобы произошла подписка).&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы:=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''add_to_planned($type, $typeid, $agenum, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить к учебному плану запланированную дисциплину $pitemid для параллели $agenum&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции (false - ошибка, true - запись уже существует)&lt;br /&gt;
* (int) - id добавленной записи&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''add_to_planned_required_agenum($type, $typeid, $agenum = false)'''====&lt;br /&gt;
&lt;br /&gt;
Метод для планирования всех обязательных дисциплин для одной указанной параллели $agenum или всех обязательных дисциплин программы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_programmitems_delete($intvar)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет целостность таблицы, исключая из неё те дисциплины, которые были удалены&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $intvar(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_programmitems_update($intvar, $new)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет целостность таблицы, исключая из неё те дисциплины, которые стали неактивными&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $intvar(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
* $new(object) - объект дисциплины после обновления&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''remove_from_planned($type, $typeid, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Убрать из учебного плана запланированную дисциплину&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции (false - ошибка, true - запись удалена)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''change_planned_agenum($type, $typeid, $agenum, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Изменить в учебном плане запланированной дисциплине $pitemid параллель на $agenum&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''create_learningplan($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Создать начальную конфигурацию учебного плана: добавление всех обязательных дисциплин в соответствии с указанными семестрами.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_all_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить все дисциплины программы, кроме запланированных в виде академической разницы (agenum=0), для всех параллелей, или только указанной&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать строку (в этом случае условие меняется на отрицательное: status != $status) массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - дисциплины программы, исключая запланированные&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_current_agenum_type_typeid($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить номер текущего семестра по типу и номеру индивидуального плана&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (int) - номер текущего семестра.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learned_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить список изученных, активных и перезачтённых дисциплин учебного плана для указанной параллели (или для всех)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать строку (в этом случае условие меняется на отрицательное: status != $status) массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - изученные, активные и перезачтённые дисциплины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learningplan_info($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить информацию об учебном плане: тип, код, имя, программа, текущий семестр, период, количество семестров.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - возвращаемый объект с полями&lt;br /&gt;
** type - тип учебного плана ('programmsbc' или 'agroup')&lt;br /&gt;
** typeid - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
** code - код объекта&lt;br /&gt;
** name - имя объекта (содержит либо имя группы, либо полное имя персоны с номером договора)&lt;br /&gt;
** programm - учебная программа, на которую планируются дисциплины - объект с полями id, code, name&lt;br /&gt;
** agenum - текущий семестр&lt;br /&gt;
** age - текущий период - объект с полями id, name, begindate, eduweeks&lt;br /&gt;
** agenums - количество семестров в программе&lt;br /&gt;
* (bool) - false в случае возникновения ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learningplan_pitems($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить объект, содержащий в себе начальную конфигурацию учебного плана: добавление всех обязательных дисциплин в соответствии с указанными семестрами&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - возвращаемый объект с полями&lt;br /&gt;
** planning(array) - дисциплины, предусмотренные программной на эту параллель, которые возможно запланировать&lt;br /&gt;
** planned(array) - запланированные дисциплины&lt;br /&gt;
** learned(array) - изученные дисциплины&lt;br /&gt;
** all(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_pitem_grade($type, $typeid, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить оценку дисциплины учебного плана по подписке&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (null) - оценки не получено&lt;br /&gt;
* (int) - оценка&lt;br /&gt;
* (string) - оценка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====''' get_pitem_status($type, $typeid, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить статус дисциплины учебного плана (запланирована, в программе, изучена)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - одно из трёх возможных значений: 'planned', 'programm', 'learned'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_planned_pitems($type, $typeid, $agenum = false)'''====&lt;br /&gt;
&lt;br /&gt;
Получить запланированные для указанной параллели дисцплины ($agenum = 0 - академическая разница)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - запланированные дисциплины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_planning_pitems($type, $typeid, $agenum)'''====&lt;br /&gt;
&lt;br /&gt;
Получить дисциплины, предусмотренные программной на эту параллель, которые возможно запланировать&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - планируемые дисциплины (которые можно добавить в план).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_programmid_type_typeid($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить номер программы по типу и номеру индивидуального плана&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (int) - номер программы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_reoffset_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить список всех перезачтённых дисциплин учебного плана или только для указанной параллели&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать строку (в этом случае условие меняется на отрицательное: status != $status) массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - перезачтённые дисциплины.&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;
&lt;br /&gt;
===='''get_signed_pitems($type, $typeid, $agenum = false)'''====&lt;br /&gt;
&lt;br /&gt;
Получить запланированные и изученные (поиск во всех семестрах get_learned_pitems) для указанной параллели дисцплины ($agenum = 0 - академическая разница)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - запланированные и изученные дисциплины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_subscribe_current_agenum_pitems($type, $typeid, $options = array())'''====&lt;br /&gt;
&lt;br /&gt;
Получить запланированные на текущую параллель дисциплины с учётом дополнительных настроек (используется для передачи в функцию автоподписки)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - дисциплины для подписки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_unsigned_pitems($type, $typeid, $agenum = false)'''====&lt;br /&gt;
&lt;br /&gt;
Получить запланированные, но не изученные (поиск во всех семестрах get_learned_pitems) для указанной параллели дисцплины ($agenum = 0 - академическая разница)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - запланированные, но не изученные дисциплины.&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;
 |storage&lt;br /&gt;
 |[[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
 |update&lt;br /&gt;
 |Только $mixedvar['new'] и $intvar&lt;br /&gt;
 |Обрабатывается событие добавления дисциплины, вызывается функция [[#check_programmitems_update($intvar, $new)|check_programmitems_update($intvar, $new)]]&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |[[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
 |delete&lt;br /&gt;
 |Только $intvar&lt;br /&gt;
 |Обрабатывается событие добавления дисциплины, вызывается функция [[#check_programmitems_delete($intvar)|check_programmitems_delete($intvar)]]&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;
=Задания=&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;
 |colspan=4 align=center | ''Этот плагин не выполняет никаких заданий''&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Konovalov</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/learningplan&amp;diff=2811</id>
		<title>Разработка:storages/learningplan</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/learningplan&amp;diff=2811"/>
				<updated>2014-07-31T13:35:32Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Дополнительные методы: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = learningplan&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
=Таблица в базе данных=&lt;br /&gt;
''learningplan'' - запланированные на будущие периоды дисциплины.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* type - тип объекта, на которого запланирована дисциплина (programmsbc, agroup).&lt;br /&gt;
* programmsbcid - id слушателя из таблицы [[Разработка:storages/programmsbcs | programmsbcs ]], type=programmsbc или NULL&lt;br /&gt;
* agroupid - id группы из таблицы [[Разработка:storages/agroups | agroups ]], если type=agroup или NULL&lt;br /&gt;
* agenum - номер параллели, для которой задан план. Если слушатель обязан пройти дисциплину в любой период обучения 0. Уточнение: ageid мы не планируем, так как он пока не известен.&lt;br /&gt;
* programmitemid - id запланированной дисциплины из таблицы [[Разработка:storages/programmitems | programmitems ]] (дисциплина должна относится к той программе, на которую подписан слушатель или группа и быть активной на момент перевода в соответствующую параллель, чтобы произошла подписка).&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы:=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''add_to_planned($type, $typeid, $agenum, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить к учебному плану запланированную дисциплину $pitemid для параллели $agenum&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции (false - ошибка, true - запись уже существует)&lt;br /&gt;
* (int) - id добавленной записи&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''add_to_planned_required_agenum($type, $typeid, $agenum = false)'''====&lt;br /&gt;
&lt;br /&gt;
Метод для планирования всех обязательных дисциплин для одной указанной параллели $agenum или всех обязательных дисциплин программы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_programmitems_delete($intvar)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет целостность таблицы, исключая из неё те дисциплины, которые были удалены&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $intvar(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_programmitems_update($intvar, $new)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет целостность таблицы, исключая из неё те дисциплины, которые стали неактивными&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $intvar(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
* $new(object) - объект дисциплины после обновления&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''remove_from_planned($type, $typeid, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Убрать из учебного плана запланированную дисциплину&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции (false - ошибка, true - запись удалена)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''change_planned_agenum($type, $typeid, $agenum, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Изменить в учебном плане запланированной дисциплине $pitemid параллель на $agenum&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''create_learningplan($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Создать начальную конфигурацию учебного плана: добавление всех обязательных дисциплин в соответствии с указанными семестрами.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_all_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить все дисциплины программы, кроме запланированных в виде академической разницы (agenum=0), для всех параллелей, или только указанной&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать строку (в этом случае условие меняется на отрицательное: status != $status) массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - дисциплины программы, исключая запланированные&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_current_agenum_type_typeid($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить номер текущего семестра по типу и номеру индивидуального плана&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (int) - номер текущего семестра.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learned_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить список изученных, активных и перезачтённых дисциплин учебного плана для указанной параллели (или для всех)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать строку (в этом случае условие меняется на отрицательное: status != $status) массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - изученные, активные и перезачтённые дисциплины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learningplan_info($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить информацию об учебном плане: тип, код, имя, программа, текущий семестр, период, количество семестров.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - возвращаемый объект с полями&lt;br /&gt;
** type - тип учебного плана ('programmsbc' или 'agroup')&lt;br /&gt;
** typeid - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
** code - код объекта&lt;br /&gt;
** name - имя объекта (содержит либо имя группы, либо полное имя персоны с номером договора)&lt;br /&gt;
** programm - учебная программа, на которую планируются дисциплины - объект с полями id, code, name&lt;br /&gt;
** agenum - текущий семестр&lt;br /&gt;
** age - текущий период - объект с полями id, name, begindate, eduweeks&lt;br /&gt;
** agenums - количество семестров в программе&lt;br /&gt;
* (bool) - false в случае возникновения ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learningplan_pitems($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить объект, содержащий в себе начальную конфигурацию учебного плана: добавление всех обязательных дисциплин в соответствии с указанными семестрами&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - возвращаемый объект с полями&lt;br /&gt;
** planning(array) - дисциплины, предусмотренные программной на эту параллель, которые возможно запланировать&lt;br /&gt;
** planned(array) - запланированные дисциплины&lt;br /&gt;
** learned(array) - изученные дисциплины&lt;br /&gt;
** all(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_pitem_grade($type, $typeid, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить оценку дисциплины учебного плана по подписке&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (null) - оценки не получено&lt;br /&gt;
* (int) - оценка&lt;br /&gt;
* (string) - оценка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====''' get_pitem_status($type, $typeid, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить статус дисциплины учебного плана (запланирована, в программе, изучена)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - одно из трёх возможных значений: 'planned', 'programm', 'learned'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_planned_pitems($type, $typeid, $agenum = false)'''====&lt;br /&gt;
&lt;br /&gt;
Получить запланированные для указанной параллели дисцплины ($agenum = 0 - академическая разница)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - запланированные дисциплины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_planning_pitems($type, $typeid, $agenum)'''====&lt;br /&gt;
&lt;br /&gt;
Получить дисциплины, предусмотренные программной на эту параллель, которые возможно запланировать&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - планируемые дисциплины (которые можно добавить в план).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_programmid_type_typeid($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить номер программы по типу и номеру индивидуального плана&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (int) - номер программы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_reoffset_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить список всех перезачтённых дисциплин учебного плана или только для указанной параллели&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать строку (в этом случае условие меняется на отрицательное: status != $status) массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - перезачтённые дисциплины.&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;
&lt;br /&gt;
===='''get_signed_pitems($type, $typeid, $agenum = false)'''====&lt;br /&gt;
&lt;br /&gt;
Получить запланированные и изученные (поиск во всех семестрах get_learned_pitems) для указанной параллели дисцплины ($agenum = 0 - академическая разница)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - запланированные и изученные дисциплины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_unsigned_pitems($type, $typeid, $agenum = false)'''====&lt;br /&gt;
&lt;br /&gt;
Получить запланированные, но не изученные (поиск во всех семестрах get_learned_pitems) для указанной параллели дисцплины ($agenum = 0 - академическая разница)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - запланированные, но не изученные дисциплины.&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;
 |storage&lt;br /&gt;
 |[[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
 |update&lt;br /&gt;
 |Только $mixedvar['new'] и $intvar&lt;br /&gt;
 |Обрабатывается событие добавления дисциплины, вызывается функция [[#check_programmitems_update($intvar, $new)|check_programmitems_update($intvar, $new)]]&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |[[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
 |delete&lt;br /&gt;
 |Только $intvar&lt;br /&gt;
 |Обрабатывается событие добавления дисциплины, вызывается функция [[#check_programmitems_delete($intvar)|check_programmitems_delete($intvar)]]&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;
=Задания=&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;
 |colspan=4 align=center | ''Этот плагин не выполняет никаких заданий''&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Konovalov</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/cpassed&amp;diff=2810</id>
		<title>Разработка:storages/cpassed</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/cpassed&amp;diff=2810"/>
				<updated>2014-07-24T09:31:17Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Задания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = cpassed&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
=Таблица в базе данных=&lt;br /&gt;
''cpassed'' - изучаемые и пройденные курсы: отражает ход изучения учащимися выбранной учебной программы, итоговые отметки.&lt;br /&gt;
&lt;br /&gt;
===Подробный формат полей в таблице:===&lt;br /&gt;
* cstreamid - id учебного процесса в таблице [[Разработка:storages/cstreams | cstreams ]], по которому велось обучение.&lt;br /&gt;
* programmsbcid - id подписки контракта в таблице [[Разработка:storages/contracts | contracts ]] на программу обучения.&lt;br /&gt;
* programmitemid - id дисциплины в таблице [[Разработка:storages/programmitems | programmitems ]].&lt;br /&gt;
* studentid - id слушателя по таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* agroupid - id академической группы в таблице [[Разработка:storages/agroups | agroups ]]. Не обязательное поле (для заполнения). По умолчанию NULL. При зачислении и отчислении из группы изменяется его значение автоматически. При отчислении из группы поле становится равным нулю (0). При индивидуальном обучении - NULL. На основании этого принимается решение подписке/отписке на предмет. &lt;br /&gt;
* grade - итоговая отметка по курсу.&lt;br /&gt;
* gradelevel - уровень оценки (оценка не идет в кондуит, дисциплина, курсовая работа, практика, междисциплинарный экзамин, дипломная работа). Берется из [[Разработка:storages/programmitems | programmitems ]].&lt;br /&gt;
* credit - количество кредитов, полученное за прохождение дисциплины.&lt;br /&gt;
* notice - текстовое пояснение об источнике оценки при перезачете.&lt;br /&gt;
* repeatid - id предыдущей подписки на дисциплину, если обучение выполняется повторно (пересдача или повторное обучение - при этом подписка, на которую выполняется ссылка должна иметь статус &amp;quot;пересдан&amp;quot;). Пересдачей может считаться только пересдача дисциплины, пройденной в рамках этой же подписки на учебную программу. Если было несколько пересдач данной дисциплины в данной учебной программе, то все они ссылаются на один и тот же исходный cpassedid.&lt;br /&gt;
* typesync - тип синхронизации (выставление вручную, синхронизация с moodle).&lt;br /&gt;
* mdlinstance - id задания в moodle, с которым выполнялась синхронизация.&lt;br /&gt;
* teacherid - id сотрудника по справочнику [[Разработка:storages/persons | persons ]], вручную выставившего итоговую отметку.&lt;br /&gt;
* ageid - id периода в таблице [[Разработка:storages/ages | ages ]] по которому велось обучение.&lt;br /&gt;
* orderid - id приказа в таблице [[Разработка:storages/orders | orders ]], согласно которому была выставлена оценка.&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов [[Разработка:workflows/cpassed | cpassed ]].&lt;br /&gt;
* begindate - дата начала действия подписки.&lt;br /&gt;
* enddate - дата окончания действия подписки.&lt;br /&gt;
* sbcorderid - id приказа в таблице [[Разработка:storages/orders | orders ]], которым учащийся был подписан на дисциплину.&lt;br /&gt;
* learninghistoryid - id записи в таблице [[Разработка:storages/learninghistory | learninghistory ]], соответствующая текущей параллели данной подписки.&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы:=&lt;br /&gt;
&lt;br /&gt;
===='''get_actual_reoffset_cpassed($cpasseds)'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает только последнюю пересдачу (по времени) из массива пересдач.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cpasseds(array) - записи, полученные по одной подписке и дисциплине.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект последней пересдачи&lt;br /&gt;
* (bool) - false, в случае ошибки&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
# в эту функцию должны передаваться только cpassed-&amp;gt;status == 'reoffset'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cstream_students($csid, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получает список всех подписок студентов, приписаных к одному предмето-потоку.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $csid(int) - id учебного потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
* $status(string) - статус подписки, по умолчанию - 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;
** если статус не указывается или указывается как null - подписки с любым статусом.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cstream_agroup($cstreamid, $agroupid, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получаеть список всех подписок студентов к указанному учебному потоку или только подписок с указанным статусом.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cstreamid(int) - id учебного потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
* $agroupid(int) - id академической группы в таблице [[Разработка:storages/cstreams | agroups ]].&lt;br /&gt;
* $status(string) - статус учебной дисциплины. по умолчанию - null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив записей из таблица.&lt;br /&gt;
* (bool) - false, если записи не найдены.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cpasseds_student($stid, $status = 'active')'''====&lt;br /&gt;
&lt;br /&gt;
Получает список всех подписок для слушателя.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $stid(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_cpassed_programm($stid, $prid, $status = 'complete')'''====&lt;br /&gt;
&lt;br /&gt;
Получает список дисциплин, изученных слушателем в рамках учебной программы.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $stid(int) - id студента в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $prid(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $status(string) - статус подписки, по умолчанию - 'complete'.&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;
** если статус не указывается - подписки со статусом complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cpasseds_programmitem($stid, $prid, $status = 'complete', $levelgrade = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получает подписки на дисциплину по id слушателя и id дисциплины.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $stid(int) - id студента в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $prid(int) - id дисциплины в таблице [[Разработка:storages/programmitems | programmitems ]].&lt;br /&gt;
* $status(string) - название статуса подписки, по умолчанию - 'complete'&lt;br /&gt;
* $levelgrade(string) - уровень оценки, по умолчанию - 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;
** если уровень оценки не указывается или указывается как null - подписки с любым уровнем оценки.&lt;br /&gt;
** если указывается статус - подписки с указанным статусом, если статус не указан, то возвращаются подписки со статусом 'complete'&lt;br /&gt;
** если статус указан как null или false, то вернутся подписки с любым статусом&lt;br /&gt;
&lt;br /&gt;
===='''get_cpasseds_reoffset($conds=null, $countonly=false, $limitfrom, $limitnum)'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает список учебных потоков по заданным критериям, упрощённая версия get_listing() с поиском только по таблице cpassed для &amp;quot;Ведомости перезачёта оценок&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $limitfrom(int) - начиная с какой записи просматривается фрагмент списка записей.&lt;br /&gt;
* $limitnum(int) - сколько записей нужно извлечь из базы.&lt;br /&gt;
* $conds(object) - объект со списком свойств, по которым будет происходить поиск.&lt;br /&gt;
* $countonly(bool) - Если указано true, то функция вернет только количество записей, соответствующих переданным условиям. По умолчанию - false.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив записей из базы.&lt;br /&gt;
* (int) - количество записей, если $countonly=true.&lt;br /&gt;
* (bool) - false, в случае ошибки.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
# составляем запрос по переданным параметрам при помощи собственной protected-функции get_select_listing()&lt;br /&gt;
# Проверяем условие $countonly. Если оно истинно - то возвращаем только количество записей&lt;br /&gt;
# Поиск производится только по таблице cpassed, без проверки на целостность базы данных (с помощью выборки из других таблиц)&lt;br /&gt;
# Если ложно - то возвращаем список записей&lt;br /&gt;
&lt;br /&gt;
===='''insert_grade_reoffset($stid, $prid, $cpid, $grade, $status, $comment, $initialid)'''====&lt;br /&gt;
&lt;br /&gt;
Добавляет оценку в режиме &amp;quot;перезачета&amp;quot;.(в перспективе, когда будет реализован справочник с историей изменения отметок - вызов функции протоколирования).&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $stid(int) - id студента в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $prid(int) - id дисциплины в таблице [[Разработка:storages/departments | departments ]].&lt;br /&gt;
* $cpid(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $grade(int) - итоговая оценка.&lt;br /&gt;
* $comment(string) - коментарий.&lt;br /&gt;
* $status(string) - статус - перезачет(reoffset) или пересдача(repeating).&lt;br /&gt;
* $initialid(int) - id исходной подписки.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) id добавленной записи.&lt;br /&gt;
* (bool) false если добавление не удалось.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
# если дисиплина пересдается (статус = repeating), статус исходной подписки меняем на пересдан и обновляем запись в БД.&lt;br /&gt;
# формируем новый объект в БД.&lt;br /&gt;
# вставляем сформированную запись в таблицу БД.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_grade_register_reoffset($programmsbcid, $programmitemid, $studentid, $grade, $orderid, $teacherid, $date)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить оценку в режиме &amp;quot;перезачета&amp;quot; (для приказа &amp;quot;Ведомость для перезачёта&amp;quot;). В случае если была активная подписка -- она закрывается.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbcid(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $programmitemid(int) - id дисциплины в таблице [[Разработка:storages/programmitems | programmitems ]].&lt;br /&gt;
* $studentid(int) - id студента (personid) в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $grade(int) - итоговая оценка.&lt;br /&gt;
* $orderid(int) - id приказа в таблице [[Разработка:storages/orders | orders ]], по которому выставляется перезачёт.&lt;br /&gt;
* $teacherid(int) - personid из таблицы [[Разработка:storages/persons | persons ]], кто ставил оценку&lt;br /&gt;
* $date(int) - дата перезачёта&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) id добавленной записи.&lt;br /&gt;
* (bool) false если добавление не удалось.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
# Cоздаются cpassed-ы не привязанные к периоду (ageid=0).&lt;br /&gt;
# Если у студента уже был cpassed по этой дисциплине, перезачет ссылается на него полем repeatid (если несколько - то на самый первый, если старая подписка была активна - закрывается с неуспешным статусом).&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 - начиная с какой записи просматривается фрагмент списка записей.&lt;br /&gt;
* $limitnum - сколько записей нужно извлечь из базы.&lt;br /&gt;
* $conds - объект со списком свойств, по которым будет происходить поиск.&lt;br /&gt;
* $countonly - Если указано true, то функция вернет только количество записей, соответствующих переданным условиям. По умолчанию - false.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив записей из базы.&lt;br /&gt;
* (int) - количество записей, если $countonly=true.&lt;br /&gt;
* (bool) - false, в случае ошибки.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
# составляем запрос по переданным параметрам при помощи собственной protected-функции get_select_listing()&lt;br /&gt;
# Проверяем условие $countonly. Если оно истинно - то возвращаем только количество записей&lt;br /&gt;
# Если ложно - то возвращаем список записей&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''unsign_student_one_cpassed($studentid, $cstreamid)'''====&lt;br /&gt;
&lt;br /&gt;
Отписывает заданного студента от заданного учебного потока&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $studentid(int) - id студента в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $cstreamid(int) - id учебного потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (boоl) - true, в случае успеха и falsе, в остальных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''unsign_agroups_from_cstream($cstreamid)'''====&lt;br /&gt;
&lt;br /&gt;
Удаляет всех &amp;quot;лишних&amp;quot; подписок из потока, которые были записаны в составе группы, связи с которой сейчас нет.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cstreamid(int) - id учебного потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (boоl) - true, в случае успеха и falsе, в остальных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsign_student_all_cpassed($studentid, $programmsbcid)&lt;br /&gt;
&lt;br /&gt;
Отписывает студента от всех потоков программы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $studentid(int) - id студента в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $programmsbcid(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (boоl) - true, в случае успеха и falsе, в остальных&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''unsign_students_all_cpassed($students)'''====&lt;br /&gt;
&lt;br /&gt;
Отписывает нескольких студентов от всех потоков программы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $students(array) - массив (id подписки на программу студента в таблице [[Разработка:storages/programmsbcs | programmsbcs ]]=&amp;gt;id студента в таблице [[Разработка:storages/persons | persons ]]).&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (boоl) - true, в случае успеха и falsе, в остальных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_students_without_agroup()'''====&lt;br /&gt;
&lt;br /&gt;
Получить список всех подписок, которые не принадлежат ни к одной группе.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* ''(нет)''&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array)&lt;br /&gt;
* (bool) - false, если ничего не нашлось.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
* Возвращаются все записи таблицы cpassed, имеющие статус plan или active в которых поле agroupid равно: &lt;br /&gt;
** NULL (null-значение)&lt;br /&gt;
** &amp;quot;&amp;quot; (пустой строке) &lt;br /&gt;
** 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''unsign_students_without_agroup()'''====&lt;br /&gt;
&lt;br /&gt;
Отписать всех учеников, не имеющих подписки ни на одну группу&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* ''(нет)''&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если изменение всех статусов прошло нормально или false, если в процессе работы произошли ошибки.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
* Для получения списка подписок, не имеющих связи с группой вызывается функция get_students_without_agroup()&lt;br /&gt;
** Если таких подписок нет - возвращается true&lt;br /&gt;
** Если подписки есть - то в цикле выставляем каждой записи статус &amp;quot;canceled&amp;quot; (через обращение к плагину workflow)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
is_already_enroled($studentid, $cstreamid, $status = null)&lt;br /&gt;
&lt;br /&gt;
Проверяет, подписан ли уже этот ученик на переданный поток из поиска исключаются записи с переданным статусом.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $studentid(int) - id ученика в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $cstreamid(int) - id учебного потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
* $status(string) - код статуса&lt;br /&gt;
* $status(array) - массив статусов, или null, если их нет, по умолчанию - null. &lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id записи если такая запись уже есть.&lt;br /&gt;
* (bool) - false, если ученик еще не подписан.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
===='''sign_student_on_cstream($cstreamid, $programmsbcid)'''====&lt;br /&gt;
&lt;br /&gt;
Подписывает одного ученика на один учебный поток. &lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cstreamid(int) - id учебного потока в таблице в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
* $programmsbcid(int) - id подписки студента на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id записи если подписка произошла успешно (или уже существует).&lt;br /&gt;
* (bool) - false, в случае ошибки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''sign_student_on_all_cstreams($programmsbcid, $ageid = null)'''====&lt;br /&gt;
&lt;br /&gt;
Подписыает студента на все потоки программы по данному периоду &lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbcid(int) - id подписку студента на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $ageid(int) - id текущего периода в таблице [[Разработка:storages/ages | ages ]], по умолчанию - null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если ученик успешно подписан на потоки, или потоков в программе посто нет и false, в остальных случаях.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''sign_all_agroups_on_all_cstreams($programmid, $ageid)'''====&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;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если все операции прошли успешно и false, в случае ошибки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''sign_agroup_on_all_cstreams($agroupid, $programmid, $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;
* $programmid(int) - id учебной программы в таблице [[Разработка:storages/programms | programms ]].&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;
&lt;br /&gt;
===='''unsign_students_without_real_agroup($cstreamlink)'''====&lt;br /&gt;
&lt;br /&gt;
Отменяет подписки учеников, у которых группа, указанная в подписке на программу ([[Разработка:storages/programmsbcs | programmsbcs ]]), не совпадает с группой, указанной в таблице связей учебных потоков с группами ([[Разработка:storages/cstreamlinks | cstreamlinks ]]).&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* (object)$cstreamlink - объект в таблице [[Разработка:storages/cstreamlinks | cstreamlinks ]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если все операции завершились успешно и false, в случае возникновения ошибок.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''syncronize_agroups_with_cstream($cstreamid)'''====&lt;br /&gt;
&lt;br /&gt;
Синхронизирует все группы, связанные с данным потоком.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cstreamid(int) - id потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если все операции завершились успешно и false, в случае возникновения ошибок.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''syncronize_agroup_with_cstreams($agroupid)'''====&lt;br /&gt;
&lt;br /&gt;
Синхронизирует группу, со связанными с нею потоками.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $agroupid(int) - id группы в таблице [[Разработка:storages/agroups | agroups ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если все операции завершились успешно и false, в случае возникновения ошибок.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_final_grade($cpassedid, $grade = null, $orderid = null)'''====&lt;br /&gt;
&lt;br /&gt;
Выставляет итоговую оценку, и в зависимости от нее перевести подписку в новый статус.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cpassedid(int) - id подписки.&lt;br /&gt;
* $grade(string) - выставляемая итоговая оценка, если не указана, то подписка автоматически переходит в статус неуспешно завершен, по умолчанию - null.&lt;br /&gt;
* $orderid(int) - id приказа в таблице [[Разработка:storages/orders | orders ]], на основании которого происходит выставление оценки, по умолчанию - null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если все прошло успешно и false, в случае ошибки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_last_successor($cpassedid)'''====&lt;br /&gt;
&lt;br /&gt;
Находит последнего наследника данной подписки.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cpassedid(int) - id подписки.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id последнего наследника подписки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cpassed_on_programmsbcid($id, $status = 'active')'''====&lt;br /&gt;
&lt;br /&gt;
Получает информацию о подписках на дисциплину по подписке на программу.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $status(string) - статус подписок, информацию о которых требуется найти, по умолчанию - null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив с информацией о подписках на дисциплину.&lt;br /&gt;
* (bool) - false, если произошла ошибка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cpassed_on_studentid_programmsbcid_active_complete($programmsbcid, $programmitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает список активных или завершённых подписок на дисциплину по номеру подписки (номер студента берётся из неё) на программу.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbcid(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $programmitemid(int) - id дисциплины в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив с информацией о подписках на дисциплину.&lt;br /&gt;
* (bool) - false, если произошла ошибка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Планы:===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;метод создает одному студенту подписку на все потоки программы (sign_student_on_all_cstreams)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;метод создает нескольким студентам подписку на все потоки программы (sign_agroup_on_all_cstreams)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;метод создает всем студентам группы подписку на все потоки рограммы (sign_all_agroups_on_all_cstreams)&amp;lt;/s&amp;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;
 |storage&lt;br /&gt;
 |[[Разработка:storages/programmsbcs|programmsbcs]]&lt;br /&gt;
 |changeagroup&lt;br /&gt;
 |Массив, содержащий:&lt;br /&gt;
* в поле 'oldagroup' id старой группы&lt;br /&gt;
* в поле 'newagroup' id новой группы&lt;br /&gt;
* в поле 'programmsbc' объект из таблицы programmsbcs&lt;br /&gt;
''Пример:'' array('oldagroup' =&amp;gt; $oldid, 'newagroup' =&amp;gt; $newid, 'programmsbc' =&amp;gt; $object)&lt;br /&gt;
 |Обрабатывается событие изменения группы, вызывается функция [[#change_group()|change_group()]]&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |[[Разработка:storages/programmsbcs|cstreamlinks]]&lt;br /&gt;
 |insert&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;new&amp;quot; объект с данными для вставки в таблицу.&lt;br /&gt;
''Пример:'' array('new' =&amp;gt; $dataobject)&lt;br /&gt;
 |По этому событию выполняется синхронизация подписок группы при помощи функции [[#syncronize_agroup_with_cstream()|syncronize_agroup_with_cstream()]]&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |[[Разработка:storages/programmsbcs|cstreamlinks]]&lt;br /&gt;
 |delete&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;old&amp;quot; объект с данными, которые удаляются из таблицы&lt;br /&gt;
''Пример:'' array('old' =&amp;gt; $dataobject)&lt;br /&gt;
 |По этому событию удаляются подписки при помощи функции [[#unsign_agroups_from_cstream()|unsign_agroups_from_cstream()]]&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |[[Разработка:storages/cstreams|cstreams]]&lt;br /&gt;
 |changestatus&lt;br /&gt;
 |&lt;br /&gt;
 |При изменении статуса учебного потока изменяет статус всех подписок на этот поток, через обращение к [[Разработка:workflows/cpassed|workflows/cpassed]].&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;
 |storage&lt;br /&gt;
 |cpassed&lt;br /&gt;
 |insert&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;new&amp;quot; объект с данными для вставки в таблицу.&lt;br /&gt;
''Пример:'' array('new' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при вставке новой записи в таблицу cpassed.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |cpassed&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;
 |Генерируется каждый раз при обновлении записи в таблице cpassed.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |cpassed&lt;br /&gt;
 |delete&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;old&amp;quot; объект с данными, которые удаляются из таблицы&lt;br /&gt;
''Пример:'' array('old' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при удалении записи из таблицы cpassed.&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;
 |resync_age_cpassed&lt;br /&gt;
 |Обязателен. Указывается id периода из таблицы [[Разработка:storages/ages | ages ]]&lt;br /&gt;
 |Находит все активные подписки на дисциплины в указанном периоде, после чего каждую из них приостанавливает и заново возобновляет. Необходимо для записи учащихся на курс Moodle, если курс Moodle был присвоен дисциплинам во время учебного процесса.&lt;br /&gt;
 |-&lt;br /&gt;
 |active_to_suspend_cpassed&lt;br /&gt;
 |Обязателен. Указывается id периода из таблицы [[Разработка:storages/ages | ages ]]&lt;br /&gt;
 |Находит все активные подписки на дисциплины в указанном периоде, после чего каждую из них приостанавливает. Необходимо для отписывания учащихся с курса Moodle, если необходимо сменить курс Moodle в дисциплинах. Работает в паре с '''suspend_to_active_cpassed'''.&lt;br /&gt;
 |-&lt;br /&gt;
 |suspend_to_active_cpassed&lt;br /&gt;
 |Обязателен. Указывается id периода из таблицы [[Разработка:storages/ages | ages ]]&lt;br /&gt;
 |Находит все приостановленные подписки на дисциплины в указанном периоде, после чего каждую из них активирует. Необходимо для записи учащихся на курс Moodle, если после смены курса Moodle в дисциплинах. Работает в паре с '''active_to_suspend_cpassed'''.&lt;br /&gt;
 |-&lt;br /&gt;
 |comparecpassed&lt;br /&gt;
 |Необязателен&lt;br /&gt;
 |Находит все незавершенные подписки на дисциплины, после чего каждую из них синхронизирует с учебным процессом, выставляя в подписке тот же id дисциплины, что и в процессе. Необходимо для сопоставления правильной дисциплины в подписке и процессе, если дисциплину в процессе сменили уже во время обучения.&lt;br /&gt;
 |-&lt;br /&gt;
 |cancaled_repeatid_to_null&lt;br /&gt;
 |Необязателен&lt;br /&gt;
 |Находит все отмененные подписки на дисциплины, у которых есть родители, и разрывает с ними связь. Необходимо для разрыва связи активный родитель-&amp;gt;отмененный наследник, если по какой-то причине такие связи были созданы.&lt;br /&gt;
 |-&lt;br /&gt;
 |fill_learninghistoryid&lt;br /&gt;
 |Необязателен&lt;br /&gt;
 |Находит все подписки с пустым learninghistoryid и обновляет это поле, связывая его с записью в таблице [[Разработка:storages/learninghistory | learninghistory ]].&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Плагины обработки todo | storages/cpassed]]&lt;/div&gt;</summary>
		<author><name>Konovalov</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/learninghistory&amp;diff=2809</id>
		<title>Разработка:storages/learninghistory</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/learninghistory&amp;diff=2809"/>
				<updated>2014-07-24T08:24:08Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Дополнительные методы: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = learninghistory&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
===Таблица в базе данных===&lt;br /&gt;
''learninghistory'' - таблица хранит историю изменений учебных процессов для каждого ученика.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* '''programmsbcsid''' - id подписки ученика на учебную программу в таблице [[Разработка:storages/programmsbcs|programmsbcs]].&lt;br /&gt;
* '''ageid''' - id учебного периода в таблице [[Разработка:storages/ages|ages]], в котором были пройдены дисциплины данной параллели&lt;br /&gt;
* '''agenum''' - номер параллели (класс или семестр и т. п.)&lt;br /&gt;
* '''changedate''' - дата создания записи в формате unixtimestamp&lt;br /&gt;
* '''orderid''' - id приказа, в результате которого учащийся был записан на данную параллель (таблица [[Разработка:storages/orders|orders]]). Возможно null-значение, если изменения не были связаны ни с каким приказом.&lt;br /&gt;
&lt;br /&gt;
===Дополнительные методы:===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_first_learning_data($programmsbcid)''' ====&lt;br /&gt;
&lt;br /&gt;
Получить первую запись на момент начала обучения&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $programmsbcid - id подписки ученика на учебную программу (таблица [[Разработка:storages/programmsbcs|programmsbcs]]), по которой запрашивается история&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* (mix) object|bool - объект из таблицы [[Разработка:storages/learninghistory|learninghistory]], или false&lt;br /&gt;
&lt;br /&gt;
===='''get_actual_learning_data($programmsbcid)'''====&lt;br /&gt;
&lt;br /&gt;
Получение текущую информацию об учебных подписках и периодах &lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $programmsbcid - id подписки ученика на учебную программу (таблица [[Разработка:storages/programmsbcs|programmsbcs]]), по которой запрашивается история&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* (mix) object|bool - объект из таблицы [[Разработка:storages/learninghistory|learninghistory]], или false&lt;br /&gt;
&lt;br /&gt;
===='''get_history($programmsbcid, $timefrom=null, $timeto=null)'''====&lt;br /&gt;
&lt;br /&gt;
Получение истории изменения подписок по времени&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $programmsbcid - id подписки ученика на учебную программу (таблица [[Разработка:storages/programmsbcs|programmsbcs]]), по которой запрашивается история &lt;br /&gt;
* $timefrom - начало временного периода, за который запрашивается история изменения подписок, по умолчанию null&lt;br /&gt;
* $timeto - конец временного периода, за который запрашивается история изменения подписок, по умолчанию null&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* (mix) object|bool - объект из таблицы [[Разработка:storages/learninghistory|learninghistory]], или false&lt;br /&gt;
&lt;br /&gt;
===='''get_subscribe_ages($programmsbcid)'''====&lt;br /&gt;
&lt;br /&gt;
Выводит все учебные периоды, в которых проходила указанная учебная программа(без повторений)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbcid - id подписки ученика на учебную программу (таблица [[Разработка:storages/programmsbcs|programmsbcs]]), по которой запрашивается история&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* array - массив записей из таблицы [[Разработка:storages/learninghistory|learninghistory]]&lt;br /&gt;
&lt;br /&gt;
===='''add($programmsbc)'''====&lt;br /&gt;
&lt;br /&gt;
Добавляет историю изменения учебного процесса для ученика. &lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbc - id в таблице [[Разработка:storages/programmsbcs|programmsbcs]]) или сам объект с таким id&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* array - массив записей или false&lt;br /&gt;
&lt;br /&gt;
===='''set_actual_learninghistoryid($cpassed)'''====&lt;br /&gt;
&lt;br /&gt;
Устанавливает learninghistoryid для записей cpassed, если есть актуальные данные в истории обучения&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* (object|int) $cpassed - изучаемый или пройденный курс&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* bool - результат операции&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;
 |storage&lt;br /&gt;
 |cpassed&lt;br /&gt;
 |insert&lt;br /&gt;
 |Стандартные&lt;br /&gt;
 |&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |cpassed&lt;br /&gt;
 |update&lt;br /&gt;
 |Стандартные&lt;br /&gt;
 |&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |cpassed&lt;br /&gt;
 |delete&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;
 |storage&lt;br /&gt;
 |learninghistory&lt;br /&gt;
 |insert&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;new&amp;quot; объект с данными для вставки в таблицу.&lt;br /&gt;
''Пример:'' array('new' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при вставке новой записи в таблицу learninghistory.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |learninghistory&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;
 |Генерируется каждый раз при обновлении записи в таблице learninghistory.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |learninghistory&lt;br /&gt;
 |delete&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;old&amp;quot; объект с данными, которые удаляются из таблицы&lt;br /&gt;
''Пример:'' array('old' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при удалении записи из таблицы learninghistory.&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Konovalov</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/cpassed&amp;diff=2808</id>
		<title>Разработка:storages/cpassed</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/cpassed&amp;diff=2808"/>
				<updated>2014-07-24T07:39:10Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Подробный формат полей в таблице: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = cpassed&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
=Таблица в базе данных=&lt;br /&gt;
''cpassed'' - изучаемые и пройденные курсы: отражает ход изучения учащимися выбранной учебной программы, итоговые отметки.&lt;br /&gt;
&lt;br /&gt;
===Подробный формат полей в таблице:===&lt;br /&gt;
* cstreamid - id учебного процесса в таблице [[Разработка:storages/cstreams | cstreams ]], по которому велось обучение.&lt;br /&gt;
* programmsbcid - id подписки контракта в таблице [[Разработка:storages/contracts | contracts ]] на программу обучения.&lt;br /&gt;
* programmitemid - id дисциплины в таблице [[Разработка:storages/programmitems | programmitems ]].&lt;br /&gt;
* studentid - id слушателя по таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* agroupid - id академической группы в таблице [[Разработка:storages/agroups | agroups ]]. Не обязательное поле (для заполнения). По умолчанию NULL. При зачислении и отчислении из группы изменяется его значение автоматически. При отчислении из группы поле становится равным нулю (0). При индивидуальном обучении - NULL. На основании этого принимается решение подписке/отписке на предмет. &lt;br /&gt;
* grade - итоговая отметка по курсу.&lt;br /&gt;
* gradelevel - уровень оценки (оценка не идет в кондуит, дисциплина, курсовая работа, практика, междисциплинарный экзамин, дипломная работа). Берется из [[Разработка:storages/programmitems | programmitems ]].&lt;br /&gt;
* credit - количество кредитов, полученное за прохождение дисциплины.&lt;br /&gt;
* notice - текстовое пояснение об источнике оценки при перезачете.&lt;br /&gt;
* repeatid - id предыдущей подписки на дисциплину, если обучение выполняется повторно (пересдача или повторное обучение - при этом подписка, на которую выполняется ссылка должна иметь статус &amp;quot;пересдан&amp;quot;). Пересдачей может считаться только пересдача дисциплины, пройденной в рамках этой же подписки на учебную программу. Если было несколько пересдач данной дисциплины в данной учебной программе, то все они ссылаются на один и тот же исходный cpassedid.&lt;br /&gt;
* typesync - тип синхронизации (выставление вручную, синхронизация с moodle).&lt;br /&gt;
* mdlinstance - id задания в moodle, с которым выполнялась синхронизация.&lt;br /&gt;
* teacherid - id сотрудника по справочнику [[Разработка:storages/persons | persons ]], вручную выставившего итоговую отметку.&lt;br /&gt;
* ageid - id периода в таблице [[Разработка:storages/ages | ages ]] по которому велось обучение.&lt;br /&gt;
* orderid - id приказа в таблице [[Разработка:storages/orders | orders ]], согласно которому была выставлена оценка.&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов [[Разработка:workflows/cpassed | cpassed ]].&lt;br /&gt;
* begindate - дата начала действия подписки.&lt;br /&gt;
* enddate - дата окончания действия подписки.&lt;br /&gt;
* sbcorderid - id приказа в таблице [[Разработка:storages/orders | orders ]], которым учащийся был подписан на дисциплину.&lt;br /&gt;
* learninghistoryid - id записи в таблице [[Разработка:storages/learninghistory | learninghistory ]], соответствующая текущей параллели данной подписки.&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы:=&lt;br /&gt;
&lt;br /&gt;
===='''get_actual_reoffset_cpassed($cpasseds)'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает только последнюю пересдачу (по времени) из массива пересдач.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cpasseds(array) - записи, полученные по одной подписке и дисциплине.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - объект последней пересдачи&lt;br /&gt;
* (bool) - false, в случае ошибки&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
# в эту функцию должны передаваться только cpassed-&amp;gt;status == 'reoffset'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cstream_students($csid, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получает список всех подписок студентов, приписаных к одному предмето-потоку.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $csid(int) - id учебного потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
* $status(string) - статус подписки, по умолчанию - 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;
** если статус не указывается или указывается как null - подписки с любым статусом.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cstream_agroup($cstreamid, $agroupid, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получаеть список всех подписок студентов к указанному учебному потоку или только подписок с указанным статусом.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cstreamid(int) - id учебного потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
* $agroupid(int) - id академической группы в таблице [[Разработка:storages/cstreams | agroups ]].&lt;br /&gt;
* $status(string) - статус учебной дисциплины. по умолчанию - null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив записей из таблица.&lt;br /&gt;
* (bool) - false, если записи не найдены.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cpasseds_student($stid, $status = 'active')'''====&lt;br /&gt;
&lt;br /&gt;
Получает список всех подписок для слушателя.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $stid(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_cpassed_programm($stid, $prid, $status = 'complete')'''====&lt;br /&gt;
&lt;br /&gt;
Получает список дисциплин, изученных слушателем в рамках учебной программы.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $stid(int) - id студента в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $prid(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $status(string) - статус подписки, по умолчанию - 'complete'.&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;
** если статус не указывается - подписки со статусом complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cpasseds_programmitem($stid, $prid, $status = 'complete', $levelgrade = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получает подписки на дисциплину по id слушателя и id дисциплины.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $stid(int) - id студента в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $prid(int) - id дисциплины в таблице [[Разработка:storages/programmitems | programmitems ]].&lt;br /&gt;
* $status(string) - название статуса подписки, по умолчанию - 'complete'&lt;br /&gt;
* $levelgrade(string) - уровень оценки, по умолчанию - 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;
** если уровень оценки не указывается или указывается как null - подписки с любым уровнем оценки.&lt;br /&gt;
** если указывается статус - подписки с указанным статусом, если статус не указан, то возвращаются подписки со статусом 'complete'&lt;br /&gt;
** если статус указан как null или false, то вернутся подписки с любым статусом&lt;br /&gt;
&lt;br /&gt;
===='''get_cpasseds_reoffset($conds=null, $countonly=false, $limitfrom, $limitnum)'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает список учебных потоков по заданным критериям, упрощённая версия get_listing() с поиском только по таблице cpassed для &amp;quot;Ведомости перезачёта оценок&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $limitfrom(int) - начиная с какой записи просматривается фрагмент списка записей.&lt;br /&gt;
* $limitnum(int) - сколько записей нужно извлечь из базы.&lt;br /&gt;
* $conds(object) - объект со списком свойств, по которым будет происходить поиск.&lt;br /&gt;
* $countonly(bool) - Если указано true, то функция вернет только количество записей, соответствующих переданным условиям. По умолчанию - false.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив записей из базы.&lt;br /&gt;
* (int) - количество записей, если $countonly=true.&lt;br /&gt;
* (bool) - false, в случае ошибки.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
# составляем запрос по переданным параметрам при помощи собственной protected-функции get_select_listing()&lt;br /&gt;
# Проверяем условие $countonly. Если оно истинно - то возвращаем только количество записей&lt;br /&gt;
# Поиск производится только по таблице cpassed, без проверки на целостность базы данных (с помощью выборки из других таблиц)&lt;br /&gt;
# Если ложно - то возвращаем список записей&lt;br /&gt;
&lt;br /&gt;
===='''insert_grade_reoffset($stid, $prid, $cpid, $grade, $status, $comment, $initialid)'''====&lt;br /&gt;
&lt;br /&gt;
Добавляет оценку в режиме &amp;quot;перезачета&amp;quot;.(в перспективе, когда будет реализован справочник с историей изменения отметок - вызов функции протоколирования).&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $stid(int) - id студента в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $prid(int) - id дисциплины в таблице [[Разработка:storages/departments | departments ]].&lt;br /&gt;
* $cpid(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $grade(int) - итоговая оценка.&lt;br /&gt;
* $comment(string) - коментарий.&lt;br /&gt;
* $status(string) - статус - перезачет(reoffset) или пересдача(repeating).&lt;br /&gt;
* $initialid(int) - id исходной подписки.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) id добавленной записи.&lt;br /&gt;
* (bool) false если добавление не удалось.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
# если дисиплина пересдается (статус = repeating), статус исходной подписки меняем на пересдан и обновляем запись в БД.&lt;br /&gt;
# формируем новый объект в БД.&lt;br /&gt;
# вставляем сформированную запись в таблицу БД.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''insert_grade_register_reoffset($programmsbcid, $programmitemid, $studentid, $grade, $orderid, $teacherid, $date)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить оценку в режиме &amp;quot;перезачета&amp;quot; (для приказа &amp;quot;Ведомость для перезачёта&amp;quot;). В случае если была активная подписка -- она закрывается.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbcid(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $programmitemid(int) - id дисциплины в таблице [[Разработка:storages/programmitems | programmitems ]].&lt;br /&gt;
* $studentid(int) - id студента (personid) в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $grade(int) - итоговая оценка.&lt;br /&gt;
* $orderid(int) - id приказа в таблице [[Разработка:storages/orders | orders ]], по которому выставляется перезачёт.&lt;br /&gt;
* $teacherid(int) - personid из таблицы [[Разработка:storages/persons | persons ]], кто ставил оценку&lt;br /&gt;
* $date(int) - дата перезачёта&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) id добавленной записи.&lt;br /&gt;
* (bool) false если добавление не удалось.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
# Cоздаются cpassed-ы не привязанные к периоду (ageid=0).&lt;br /&gt;
# Если у студента уже был cpassed по этой дисциплине, перезачет ссылается на него полем repeatid (если несколько - то на самый первый, если старая подписка была активна - закрывается с неуспешным статусом).&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 - начиная с какой записи просматривается фрагмент списка записей.&lt;br /&gt;
* $limitnum - сколько записей нужно извлечь из базы.&lt;br /&gt;
* $conds - объект со списком свойств, по которым будет происходить поиск.&lt;br /&gt;
* $countonly - Если указано true, то функция вернет только количество записей, соответствующих переданным условиям. По умолчанию - false.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив записей из базы.&lt;br /&gt;
* (int) - количество записей, если $countonly=true.&lt;br /&gt;
* (bool) - false, в случае ошибки.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
# составляем запрос по переданным параметрам при помощи собственной protected-функции get_select_listing()&lt;br /&gt;
# Проверяем условие $countonly. Если оно истинно - то возвращаем только количество записей&lt;br /&gt;
# Если ложно - то возвращаем список записей&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''unsign_student_one_cpassed($studentid, $cstreamid)'''====&lt;br /&gt;
&lt;br /&gt;
Отписывает заданного студента от заданного учебного потока&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $studentid(int) - id студента в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $cstreamid(int) - id учебного потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (boоl) - true, в случае успеха и falsе, в остальных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''unsign_agroups_from_cstream($cstreamid)'''====&lt;br /&gt;
&lt;br /&gt;
Удаляет всех &amp;quot;лишних&amp;quot; подписок из потока, которые были записаны в составе группы, связи с которой сейчас нет.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cstreamid(int) - id учебного потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (boоl) - true, в случае успеха и falsе, в остальных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsign_student_all_cpassed($studentid, $programmsbcid)&lt;br /&gt;
&lt;br /&gt;
Отписывает студента от всех потоков программы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $studentid(int) - id студента в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $programmsbcid(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (boоl) - true, в случае успеха и falsе, в остальных&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''unsign_students_all_cpassed($students)'''====&lt;br /&gt;
&lt;br /&gt;
Отписывает нескольких студентов от всех потоков программы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $students(array) - массив (id подписки на программу студента в таблице [[Разработка:storages/programmsbcs | programmsbcs ]]=&amp;gt;id студента в таблице [[Разработка:storages/persons | persons ]]).&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (boоl) - true, в случае успеха и falsе, в остальных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_students_without_agroup()'''====&lt;br /&gt;
&lt;br /&gt;
Получить список всех подписок, которые не принадлежат ни к одной группе.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* ''(нет)''&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array)&lt;br /&gt;
* (bool) - false, если ничего не нашлось.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
* Возвращаются все записи таблицы cpassed, имеющие статус plan или active в которых поле agroupid равно: &lt;br /&gt;
** NULL (null-значение)&lt;br /&gt;
** &amp;quot;&amp;quot; (пустой строке) &lt;br /&gt;
** 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''unsign_students_without_agroup()'''====&lt;br /&gt;
&lt;br /&gt;
Отписать всех учеников, не имеющих подписки ни на одну группу&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* ''(нет)''&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если изменение всех статусов прошло нормально или false, если в процессе работы произошли ошибки.&lt;br /&gt;
''Структура работы:''&lt;br /&gt;
* Для получения списка подписок, не имеющих связи с группой вызывается функция get_students_without_agroup()&lt;br /&gt;
** Если таких подписок нет - возвращается true&lt;br /&gt;
** Если подписки есть - то в цикле выставляем каждой записи статус &amp;quot;canceled&amp;quot; (через обращение к плагину workflow)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
is_already_enroled($studentid, $cstreamid, $status = null)&lt;br /&gt;
&lt;br /&gt;
Проверяет, подписан ли уже этот ученик на переданный поток из поиска исключаются записи с переданным статусом.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $studentid(int) - id ученика в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* $cstreamid(int) - id учебного потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
* $status(string) - код статуса&lt;br /&gt;
* $status(array) - массив статусов, или null, если их нет, по умолчанию - null. &lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id записи если такая запись уже есть.&lt;br /&gt;
* (bool) - false, если ученик еще не подписан.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
===='''sign_student_on_cstream($cstreamid, $programmsbcid)'''====&lt;br /&gt;
&lt;br /&gt;
Подписывает одного ученика на один учебный поток. &lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cstreamid(int) - id учебного потока в таблице в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
* $programmsbcid(int) - id подписки студента на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id записи если подписка произошла успешно (или уже существует).&lt;br /&gt;
* (bool) - false, в случае ошибки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''sign_student_on_all_cstreams($programmsbcid, $ageid = null)'''====&lt;br /&gt;
&lt;br /&gt;
Подписыает студента на все потоки программы по данному периоду &lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbcid(int) - id подписку студента на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $ageid(int) - id текущего периода в таблице [[Разработка:storages/ages | ages ]], по умолчанию - null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если ученик успешно подписан на потоки, или потоков в программе посто нет и false, в остальных случаях.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''sign_all_agroups_on_all_cstreams($programmid, $ageid)'''====&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;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если все операции прошли успешно и false, в случае ошибки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''sign_agroup_on_all_cstreams($agroupid, $programmid, $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;
* $programmid(int) - id учебной программы в таблице [[Разработка:storages/programms | programms ]].&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;
&lt;br /&gt;
===='''unsign_students_without_real_agroup($cstreamlink)'''====&lt;br /&gt;
&lt;br /&gt;
Отменяет подписки учеников, у которых группа, указанная в подписке на программу ([[Разработка:storages/programmsbcs | programmsbcs ]]), не совпадает с группой, указанной в таблице связей учебных потоков с группами ([[Разработка:storages/cstreamlinks | cstreamlinks ]]).&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* (object)$cstreamlink - объект в таблице [[Разработка:storages/cstreamlinks | cstreamlinks ]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если все операции завершились успешно и false, в случае возникновения ошибок.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''syncronize_agroups_with_cstream($cstreamid)'''====&lt;br /&gt;
&lt;br /&gt;
Синхронизирует все группы, связанные с данным потоком.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cstreamid(int) - id потока в таблице [[Разработка:storages/cstreams | cstreams ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если все операции завершились успешно и false, в случае возникновения ошибок.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''syncronize_agroup_with_cstreams($agroupid)'''====&lt;br /&gt;
&lt;br /&gt;
Синхронизирует группу, со связанными с нею потоками.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $agroupid(int) - id группы в таблице [[Разработка:storages/agroups | agroups ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если все операции завершились успешно и false, в случае возникновения ошибок.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''set_final_grade($cpassedid, $grade = null, $orderid = null)'''====&lt;br /&gt;
&lt;br /&gt;
Выставляет итоговую оценку, и в зависимости от нее перевести подписку в новый статус.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cpassedid(int) - id подписки.&lt;br /&gt;
* $grade(string) - выставляемая итоговая оценка, если не указана, то подписка автоматически переходит в статус неуспешно завершен, по умолчанию - null.&lt;br /&gt;
* $orderid(int) - id приказа в таблице [[Разработка:storages/orders | orders ]], на основании которого происходит выставление оценки, по умолчанию - null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - true, если все прошло успешно и false, в случае ошибки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_last_successor($cpassedid)'''====&lt;br /&gt;
&lt;br /&gt;
Находит последнего наследника данной подписки.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $cpassedid(int) - id подписки.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (int) - id последнего наследника подписки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cpassed_on_programmsbcid($id, $status = 'active')'''====&lt;br /&gt;
&lt;br /&gt;
Получает информацию о подписках на дисциплину по подписке на программу.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $status(string) - статус подписок, информацию о которых требуется найти, по умолчанию - null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив с информацией о подписках на дисциплину.&lt;br /&gt;
* (bool) - false, если произошла ошибка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_cpassed_on_studentid_programmsbcid_active_complete($programmsbcid, $programmitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Возвращает список активных или завершённых подписок на дисциплину по номеру подписки (номер студента берётся из неё) на программу.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbcid(int) - id подписки на программу в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
* $programmitemid(int) - id дисциплины в таблице [[Разработка:storages/programmsbcs | programmsbcs ]].&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (array) - массив с информацией о подписках на дисциплину.&lt;br /&gt;
* (bool) - false, если произошла ошибка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Планы:===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;метод создает одному студенту подписку на все потоки программы (sign_student_on_all_cstreams)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;метод создает нескольким студентам подписку на все потоки программы (sign_agroup_on_all_cstreams)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;метод создает всем студентам группы подписку на все потоки рограммы (sign_all_agroups_on_all_cstreams)&amp;lt;/s&amp;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;
 |storage&lt;br /&gt;
 |[[Разработка:storages/programmsbcs|programmsbcs]]&lt;br /&gt;
 |changeagroup&lt;br /&gt;
 |Массив, содержащий:&lt;br /&gt;
* в поле 'oldagroup' id старой группы&lt;br /&gt;
* в поле 'newagroup' id новой группы&lt;br /&gt;
* в поле 'programmsbc' объект из таблицы programmsbcs&lt;br /&gt;
''Пример:'' array('oldagroup' =&amp;gt; $oldid, 'newagroup' =&amp;gt; $newid, 'programmsbc' =&amp;gt; $object)&lt;br /&gt;
 |Обрабатывается событие изменения группы, вызывается функция [[#change_group()|change_group()]]&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |[[Разработка:storages/programmsbcs|cstreamlinks]]&lt;br /&gt;
 |insert&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;new&amp;quot; объект с данными для вставки в таблицу.&lt;br /&gt;
''Пример:'' array('new' =&amp;gt; $dataobject)&lt;br /&gt;
 |По этому событию выполняется синхронизация подписок группы при помощи функции [[#syncronize_agroup_with_cstream()|syncronize_agroup_with_cstream()]]&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |[[Разработка:storages/programmsbcs|cstreamlinks]]&lt;br /&gt;
 |delete&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;old&amp;quot; объект с данными, которые удаляются из таблицы&lt;br /&gt;
''Пример:'' array('old' =&amp;gt; $dataobject)&lt;br /&gt;
 |По этому событию удаляются подписки при помощи функции [[#unsign_agroups_from_cstream()|unsign_agroups_from_cstream()]]&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |[[Разработка:storages/cstreams|cstreams]]&lt;br /&gt;
 |changestatus&lt;br /&gt;
 |&lt;br /&gt;
 |При изменении статуса учебного потока изменяет статус всех подписок на этот поток, через обращение к [[Разработка:workflows/cpassed|workflows/cpassed]].&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;
 |storage&lt;br /&gt;
 |cpassed&lt;br /&gt;
 |insert&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;new&amp;quot; объект с данными для вставки в таблицу.&lt;br /&gt;
''Пример:'' array('new' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при вставке новой записи в таблицу cpassed.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |cpassed&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;
 |Генерируется каждый раз при обновлении записи в таблице cpassed.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |cpassed&lt;br /&gt;
 |delete&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;old&amp;quot; объект с данными, которые удаляются из таблицы&lt;br /&gt;
''Пример:'' array('old' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при удалении записи из таблицы cpassed.&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;
 |resync_age_cpassed&lt;br /&gt;
 |Обязателен. Указывается id периода из таблицы [[Разработка:storages/ages | ages ]]&lt;br /&gt;
 |Находит все активные подписки на дисциплины в указанном периоде, после чего каждую из них приостанавливает и заново возобновляет. Необходимо для записи учащихся на курс Moodle, если курс Moodle был присвоен дисциплинам во время учебного процесса.&lt;br /&gt;
 |-&lt;br /&gt;
 |active_to_suspend_cpassed&lt;br /&gt;
 |Обязателен. Указывается id периода из таблицы [[Разработка:storages/ages | ages ]]&lt;br /&gt;
 |Находит все активные подписки на дисциплины в указанном периоде, после чего каждую из них приостанавливает. Необходимо для отписывания учащихся с курса Moodle, если необходимо сменить курс Moodle в дисциплинах. Работает в паре с '''suspend_to_active_cpassed'''.&lt;br /&gt;
 |-&lt;br /&gt;
 |suspend_to_active_cpassed&lt;br /&gt;
 |Обязателен. Указывается id периода из таблицы [[Разработка:storages/ages | ages ]]&lt;br /&gt;
 |Находит все приостановленные подписки на дисциплины в указанном периоде, после чего каждую из них активирует. Необходимо для записи учащихся на курс Moodle, если после смены курса Moodle в дисциплинах. Работает в паре с '''active_to_suspend_cpassed'''.&lt;br /&gt;
 |-&lt;br /&gt;
 |comparecpassed&lt;br /&gt;
 |Необязателен&lt;br /&gt;
 |Находит все незавершенные подписки на дисциплины, после чего каждую из них синхронизирует с учебным процессом, выставляя в подписке тот же id дисциплины, что и в процессе. Необходимо для сопоставления правильной дисциплины в подписке и процессе, если дисциплину в процессе сменили уже во время обучения.&lt;br /&gt;
 |-&lt;br /&gt;
 |cancaled_repeatid_to_null&lt;br /&gt;
 |Необязателен&lt;br /&gt;
 |Находит все отмененные подписки на дисциплины, у которых есть родители, и разрывает с ними связь. Необходимо для разрыва связи активный родитель-&amp;gt;отмененный наследник, если по какой-то причине такие связи были созданы.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Плагины обработки todo | storages/cpassed]]&lt;/div&gt;</summary>
		<author><name>Konovalov</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/learninghistory&amp;diff=2807</id>
		<title>Разработка:storages/learninghistory</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/learninghistory&amp;diff=2807"/>
				<updated>2014-07-22T12:33:51Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Перехватываемые события */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = learninghistory&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
===Таблица в базе данных===&lt;br /&gt;
''learninghistory'' - таблица хранит историю изменений учебных процессов для каждого ученика.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* '''programmsbcsid''' - id подписки ученика на учебную программу в таблице [[Разработка:storages/programmsbcs|programmsbcs]].&lt;br /&gt;
* '''ageid''' - id учебного периода в таблице [[Разработка:storages/ages|ages]], в котором были пройдены дисциплины данной параллели&lt;br /&gt;
* '''agenum''' - номер параллели (класс или семестр и т. п.)&lt;br /&gt;
* '''changedate''' - дата создания записи в формате unixtimestamp&lt;br /&gt;
* '''orderid''' - id приказа, в результате которого учащийся был записан на данную параллель (таблица [[Разработка:storages/orders|orders]]). Возможно null-значение, если изменения не были связаны ни с каким приказом.&lt;br /&gt;
&lt;br /&gt;
===Дополнительные методы:===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_first_learning_data($programmsbcid)''' ====&lt;br /&gt;
&lt;br /&gt;
Получить первую запись на момент начала обучения&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $programmsbcid - id подписки ученика на учебную программу (таблица [[Разработка:storages/programmsbcs|programmsbcs]]), по которой запрашивается история&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* (mix) object|bool - объект из таблицы [[Разработка:storages/learninghistory|learninghistory]], или false&lt;br /&gt;
&lt;br /&gt;
===='''get_actual_learning_data($programmsbcid)'''====&lt;br /&gt;
&lt;br /&gt;
Получение текущую информацию об учебных подписках и периодах &lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $programmsbcid - id подписки ученика на учебную программу (таблица [[Разработка:storages/programmsbcs|programmsbcs]]), по которой запрашивается история&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* (mix) object|bool - объект из таблицы [[Разработка:storages/learninghistory|learninghistory]], или false&lt;br /&gt;
&lt;br /&gt;
===='''get_history($programmsbcid, $timefrom=null, $timeto=null)'''====&lt;br /&gt;
&lt;br /&gt;
Получение истории изменения подписок по времени&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $programmsbcid - id подписки ученика на учебную программу (таблица [[Разработка:storages/programmsbcs|programmsbcs]]), по которой запрашивается история &lt;br /&gt;
* $timefrom - начало временного периода, за который запрашивается история изменения подписок, по умолчанию null&lt;br /&gt;
* $timeto - конец временного периода, за который запрашивается история изменения подписок, по умолчанию null&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* (mix) object|bool - объект из таблицы [[Разработка:storages/learninghistory|learninghistory]], или false&lt;br /&gt;
&lt;br /&gt;
===='''get_subscribe_ages($programmsbcid)'''====&lt;br /&gt;
&lt;br /&gt;
Выводит все учебные периоды, в которых проходила указанная учебная программа(без повторений)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbcid - id подписки ученика на учебную программу (таблица [[Разработка:storages/programmsbcs|programmsbcs]]), по которой запрашивается история&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* array - массив записей из таблицы [[Разработка:storages/learninghistory|learninghistory]]&lt;br /&gt;
&lt;br /&gt;
===='''add($programmsbc)'''====&lt;br /&gt;
&lt;br /&gt;
Добавляет историю изменения учебного процесса для ученика. &lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbc - id в таблице [[Разработка:storages/programmsbcs|programmsbcs]]) или сам объект с таким id&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* array - массив записей или 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;
 |storage&lt;br /&gt;
 |cpassed&lt;br /&gt;
 |insert&lt;br /&gt;
 |Стандартные&lt;br /&gt;
 |&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |cpassed&lt;br /&gt;
 |update&lt;br /&gt;
 |Стандартные&lt;br /&gt;
 |&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |cpassed&lt;br /&gt;
 |delete&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;
 |storage&lt;br /&gt;
 |learninghistory&lt;br /&gt;
 |insert&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;new&amp;quot; объект с данными для вставки в таблицу.&lt;br /&gt;
''Пример:'' array('new' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при вставке новой записи в таблицу learninghistory.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |learninghistory&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;
 |Генерируется каждый раз при обновлении записи в таблице learninghistory.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |learninghistory&lt;br /&gt;
 |delete&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;old&amp;quot; объект с данными, которые удаляются из таблицы&lt;br /&gt;
''Пример:'' array('old' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при удалении записи из таблицы learninghistory.&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Konovalov</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/learningplan&amp;diff=2806</id>
		<title>Разработка:storages/learningplan</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/learningplan&amp;diff=2806"/>
				<updated>2014-07-21T08:04:17Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = learningplan&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
=Таблица в базе данных=&lt;br /&gt;
''learningplan'' - запланированные на будущие периоды дисциплины.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* type - тип объекта, на которого запланирована дисциплина (programmsbc, agroup).&lt;br /&gt;
* programmsbcid - id слушателя из таблицы [[Разработка:storages/programmsbcs | programmsbcs ]], type=programmsbc или NULL&lt;br /&gt;
* agroupid - id группы из таблицы [[Разработка:storages/agroups | agroups ]], если type=agroup или NULL&lt;br /&gt;
* agenum - номер параллели, для которой задан план. Если слушатель обязан пройти дисциплину в любой период обучения 0. Уточнение: ageid мы не планируем, так как он пока не известен.&lt;br /&gt;
* programmitemid - id запланированной дисциплины из таблицы [[Разработка:storages/programmitems | programmitems ]] (дисциплина должна относится к той программе, на которую подписан слушатель или группа и быть активной на момент перевода в соответствующую параллель, чтобы произошла подписка).&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы:=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''add_to_planned($type, $typeid, $agenum, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить к учебному плану запланированную дисциплину $pitemid для параллели $agenum&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции (false - ошибка, true - запись уже существует)&lt;br /&gt;
* (int) - id добавленной записи&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''add_to_planned_required_agenum($type, $typeid, $agenum = false)'''====&lt;br /&gt;
&lt;br /&gt;
Метод для планирования всех обязательных дисциплин для одной указанной параллели $agenum или всех обязательных дисциплин программы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_programmitems_delete($intvar)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет целостность таблицы, исключая из неё те дисциплины, которые были удалены&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $intvar(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_programmitems_update($intvar, $new)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет целостность таблицы, исключая из неё те дисциплины, которые стали неактивными&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $intvar(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
* $new(object) - объект дисциплины после обновления&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''remove_from_planned($type, $typeid, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Убрать из учебного плана запланированную дисциплину&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции (false - ошибка, true - запись удалена)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''change_planned_agenum($type, $typeid, $agenum, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Изменить в учебном плане запланированной дисциплине $pitemid параллель на $agenum&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''create_learningplan($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Создать начальную конфигурацию учебного плана: добавление всех обязательных дисциплин в соответствии с указанными семестрами.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_all_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить все дисциплины программы, кроме запланированных в виде академической разницы (agenum=0), для всех параллелей, или только указанной&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать строку (в этом случае условие меняется на отрицательное: status != $status) массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - дисциплины программы, исключая запланированные&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_current_agenum_type_typeid($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить номер текущего семестра по типу и номеру индивидуального плана&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (int) - номер текущего семестра.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learned_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить список изученных, активных и перезачтённых дисциплин учебного плана для указанной параллели (или для всех)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать строку (в этом случае условие меняется на отрицательное: status != $status) массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - изученные, активные и перезачтённые дисциплины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learningplan_info($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить информацию об учебном плане: тип, код, имя, программа, текущий семестр, период, количество семестров.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - возвращаемый объект с полями&lt;br /&gt;
** type - тип учебного плана ('programmsbc' или 'agroup')&lt;br /&gt;
** typeid - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
** code - код объекта&lt;br /&gt;
** name - имя объекта (содержит либо имя группы, либо полное имя персоны с номером договора)&lt;br /&gt;
** programm - учебная программа, на которую планируются дисциплины - объект с полями id, code, name&lt;br /&gt;
** agenum - текущий семестр&lt;br /&gt;
** age - текущий период - объект с полями id, name, begindate, eduweeks&lt;br /&gt;
** agenums - количество семестров в программе&lt;br /&gt;
* (bool) - false в случае возникновения ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learningplan_pitems($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить объект, содержащий в себе начальную конфигурацию учебного плана: добавление всех обязательных дисциплин в соответствии с указанными семестрами&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - возвращаемый объект с полями&lt;br /&gt;
** planning(array) - дисциплины, предусмотренные программной на эту параллель, которые возможно запланировать&lt;br /&gt;
** planned(array) - запланированные дисциплины&lt;br /&gt;
** learned(array) - изученные дисциплины&lt;br /&gt;
** all(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_pitem_grade($type, $typeid, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить оценку дисциплины учебного плана по подписке&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (null) - оценки не получено&lt;br /&gt;
* (int) - оценка&lt;br /&gt;
* (string) - оценка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====''' get_pitem_status($type, $typeid, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить статус дисциплины учебного плана (запланирована, в программе, изучена)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - одно из трёх возможных значений: 'planned', 'programm', 'learned'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_planned_pitems($type, $typeid, $agenum = false)'''====&lt;br /&gt;
&lt;br /&gt;
Получить запланированные для указанной параллели дисцплины ($agenum = 0 - академическая разница)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - запланированные дисциплины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_planning_pitems($type, $typeid, $agenum)'''====&lt;br /&gt;
&lt;br /&gt;
Получить дисциплины, предусмотренные программной на эту параллель, которые возможно запланировать&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - планируемые дисциплины (которые можно добавить в план).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_programmid_type_typeid($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить номер программы по типу и номеру индивидуального плана&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (int) - номер программы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_reoffset_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить список всех перезачтённых дисциплин учебного плана или только для указанной параллели&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать строку (в этом случае условие меняется на отрицательное: status != $status) массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - перезачтённые дисциплины.&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;
=События=&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;
 |[[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
 |update&lt;br /&gt;
 |Только $mixedvar['new'] и $intvar&lt;br /&gt;
 |Обрабатывается событие добавления дисциплины, вызывается функция [[#check_programmitems_update($intvar, $new)|check_programmitems_update($intvar, $new)]]&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |[[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
 |delete&lt;br /&gt;
 |Только $intvar&lt;br /&gt;
 |Обрабатывается событие добавления дисциплины, вызывается функция [[#check_programmitems_delete($intvar)|check_programmitems_delete($intvar)]]&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;
=Задания=&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;
 |colspan=4 align=center | ''Этот плагин не выполняет никаких заданий''&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Konovalov</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/learningplan&amp;diff=2805</id>
		<title>Разработка:storages/learningplan</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/learningplan&amp;diff=2805"/>
				<updated>2014-07-17T13:32:18Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Дополнительные методы: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = learningplan&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
=Таблица в базе данных=&lt;br /&gt;
''learningplan'' - запланированные на будущие периоды дисциплины.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* type - тип объекта, на которого запланирована дисциплина (programmsbc, agroup).&lt;br /&gt;
* programmsbcid - id слушателя из таблицы [[Разработка:storages/programmsbcs | programmsbcs ]], type=programmsbc или NULL&lt;br /&gt;
* agroupid - id группы из таблицы [[Разработка:storages/agroups | agroups ]], если type=agroup или NULL&lt;br /&gt;
* agenum - номер параллели, для которой задан план. Если слушатель обязан пройти дисциплину в любой период обучения 0. Уточнение: ageid мы не планируем, так как он пока не известен.&lt;br /&gt;
* programmitemid - id запланированной дисциплины из таблицы [[Разработка:storages/programmitems | programmitems ]] (дисциплина должна относится к той программе, на которую подписан слушатель или группа и быть активной на момент перевода в соответствующую параллель, чтобы произошла подписка).&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы:=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''add_to_planned($type, $typeid, $agenum, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить к учебному плану запланированную дисциплину $pitemid для параллели $agenum&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции (false - ошибка, true - запись уже существует)&lt;br /&gt;
* (int) - id добавленной записи&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''add_to_planned_agenum($type, $typeid, $agenum = false)'''====&lt;br /&gt;
&lt;br /&gt;
Метод для планирования всех обязательных дисциплин для одной указанной параллели $agenum или всех обязательных дисциплин программы&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_programmitems_delete($intvar)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет целостность таблицы, исключая из неё те дисциплины, которые были удалены&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $intvar(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''check_programmitems_update($intvar, $new)'''====&lt;br /&gt;
&lt;br /&gt;
Проверяет целостность таблицы, исключая из неё те дисциплины, которые стали неактивными&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $intvar(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
* $new(object) - объект дисциплины после обновления&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''remove_from_planned($type, $typeid, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Убрать из учебного плана запланированную дисциплину&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции (false - ошибка, true - запись удалена)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''change_planned_agenum($type, $typeid, $agenum, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Изменить в учебном плане запланированной дисциплине $pitemid параллель на $agenum&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''create_learningplan($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Создать начальную конфигурацию учебного плана: добавление всех обязательных дисциплин в соответствии с указанными семестрами.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_all_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить все дисциплины программы, кроме запланированных в виде академической разницы (agenum=0), для всех параллелей, или только указанной&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать строку (в этом случае условие меняется на отрицательное: status != $status) массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - дисциплины программы, исключая запланированные&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_current_agenum_type_typeid($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить номер текущего семестра по типу и номеру индивидуального плана&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (int) - номер текущего семестра.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learned_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить список изученных, активных и перезачтённых дисциплин учебного плана для указанной параллели (или для всех)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать строку (в этом случае условие меняется на отрицательное: status != $status) массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - изученные, активные и перезачтённые дисциплины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learningplan_info($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить информацию об учебном плане: тип, код, имя, программа, текущий семестр, период, количество семестров.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - возвращаемый объект с полями&lt;br /&gt;
** type - тип учебного плана ('programmsbc' или 'agroup')&lt;br /&gt;
** typeid - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
** code - код объекта&lt;br /&gt;
** name - имя объекта (содержит либо имя группы, либо полное имя персоны с номером договора)&lt;br /&gt;
** programm - учебная программа, на которую планируются дисциплины - объект с полями id, code, name&lt;br /&gt;
** agenum - текущий семестр&lt;br /&gt;
** age - текущий период - объект с полями id, name, begindate, eduweeks&lt;br /&gt;
** agenums - количество семестров в программе&lt;br /&gt;
* (bool) - false в случае возникновения ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learningplan_pitems($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить объект, содержащий в себе начальную конфигурацию учебного плана: добавление всех обязательных дисциплин в соответствии с указанными семестрами&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - возвращаемый объект с полями&lt;br /&gt;
** planning(array) - дисциплины, предусмотренные программной на эту параллель, которые возможно запланировать&lt;br /&gt;
** planned(array) - запланированные дисциплины&lt;br /&gt;
** learned(array) - изученные дисциплины&lt;br /&gt;
** all(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_pitem_grade($type, $typeid, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить оценку дисциплины учебного плана по подписке&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (null) - оценки не получено&lt;br /&gt;
* (int) - оценка&lt;br /&gt;
* (string) - оценка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====''' get_pitem_status($type, $typeid, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить статус дисциплины учебного плана (запланирована, в программе, изучена)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - одно из трёх возможных значений: 'planned', 'programm', 'learned'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_planned_pitems($type, $typeid, $agenum = false)'''====&lt;br /&gt;
&lt;br /&gt;
Получить запланированные для указанной параллели дисцплины ($agenum = 0 - академическая разница)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - запланированные дисциплины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_planning_pitems($type, $typeid, $agenum)'''====&lt;br /&gt;
&lt;br /&gt;
Получить дисциплины, предусмотренные программной на эту параллель, которые возможно запланировать&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - планируемые дисциплины (которые можно добавить в план).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_programmid_type_typeid($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить номер программы по типу и номеру индивидуального плана&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (int) - номер программы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_reoffset_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить список всех перезачтённых дисциплин учебного плана или только для указанной параллели&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать строку (в этом случае условие меняется на отрицательное: status != $status) массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - перезачтённые дисциплины.&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;
=События=&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;
 |[[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
 |update&lt;br /&gt;
 |Только $mixedvar['new'] и $intvar&lt;br /&gt;
 |Обрабатывается событие добавления дисциплины, вызывается функция [[#check_programmitems_update($intvar, $new)|check_programmitems_update($intvar, $new)]]&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |[[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
 |delete&lt;br /&gt;
 |Только $intvar&lt;br /&gt;
 |Обрабатывается событие добавления дисциплины, вызывается функция [[#check_programmitems_delete($intvar)|check_programmitems_delete($intvar)]]&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;
=Задания=&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;
 |colspan=4 align=center | ''Этот плагин не выполняет никаких заданий''&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Konovalov</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/learningplan&amp;diff=2804</id>
		<title>Разработка:storages/learningplan</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/learningplan&amp;diff=2804"/>
				<updated>2014-07-16T12:37:36Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Дополнительные методы: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = learningplan&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
=Таблица в базе данных=&lt;br /&gt;
''learningplan'' - запланированные на будущие периоды дисциплины.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* type - тип объекта, на которого запланирована дисциплина (programmsbc, agroup).&lt;br /&gt;
* programmsbcid - id слушателя из таблицы [[Разработка:storages/programmsbcs | programmsbcs ]], type=programmsbc или NULL&lt;br /&gt;
* agroupid - id группы из таблицы [[Разработка:storages/agroups | agroups ]], если type=agroup или NULL&lt;br /&gt;
* agenum - номер параллели, для которой задан план. Если слушатель обязан пройти дисциплину в любой период обучения 0. Уточнение: ageid мы не планируем, так как он пока не известен.&lt;br /&gt;
* programmitemid - id запланированной дисциплины из таблицы [[Разработка:storages/programmitems | programmitems ]] (дисциплина должна относится к той программе, на которую подписан слушатель или группа и быть активной на момент перевода в соответствующую параллель, чтобы произошла подписка).&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы:=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''add_to_planned($type, $typeid, $agenum, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить к учебному плану запланированную дисциплину $pitemid для параллели $agenum&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции (false - ошибка, true - запись уже существует)&lt;br /&gt;
* (int) - id добавленной записи&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''remove_from_planned($type, $typeid, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Убрать из учебного плана запланированную дисциплину&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции (false - ошибка, true - запись удалена)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''change_planned_agenum($type, $typeid, $agenum, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Изменить в учебном плане запланированной дисциплине $pitemid параллель на $agenum&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''create_learningplan($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Создать начальную конфигурацию учебного плана: добавление всех обязательных дисциплин в соответствии с указанными семестрами.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_all_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить все дисциплины программы, кроме запланированных в виде академической разницы (agenum=0), для всех параллелей, или только указанной&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать строку (в этом случае условие меняется на отрицательное: status != $status) массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - дисциплины программы, исключая запланированные&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_current_agenum_type_typeid($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить номер текущего семестра по типу и номеру индивидуального плана&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (int) - номер текущего семестра.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learned_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить список изученных, активных и перезачтённых дисциплин учебного плана для указанной параллели (или для всех)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать строку (в этом случае условие меняется на отрицательное: status != $status) массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - изученные, активные и перезачтённые дисциплины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learningplan_info($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить информацию об учебном плане: тип, код, имя, программа, текущий семестр, период, количество семестров.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - возвращаемый объект с полями&lt;br /&gt;
** type - тип учебного плана ('programmsbc' или 'agroup')&lt;br /&gt;
** typeid - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
** code - код объекта&lt;br /&gt;
** name - имя объекта (содержит либо имя группы, либо полное имя персоны с номером договора)&lt;br /&gt;
** programm - учебная программа, на которую планируются дисциплины - объект с полями id, code, name&lt;br /&gt;
** agenum - текущий семестр&lt;br /&gt;
** age - текущий период - объект с полями id, name, begindate, eduweeks&lt;br /&gt;
** agenums - количество семестров в программе&lt;br /&gt;
* (bool) - false в случае возникновения ошибки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learningplan_pitems($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить объект, содержащий в себе начальную конфигурацию учебного плана: добавление всех обязательных дисциплин в соответствии с указанными семестрами&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - возвращаемый объект с полями&lt;br /&gt;
** planning(array) - дисциплины, предусмотренные программной на эту параллель, которые возможно запланировать&lt;br /&gt;
** planned(array) - запланированные дисциплины&lt;br /&gt;
** learned(array) - изученные дисциплины&lt;br /&gt;
** all(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_pitem_grade($type, $typeid, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить оценку дисциплины учебного плана по подписке&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (null) - оценки не получено&lt;br /&gt;
* (int) - оценка&lt;br /&gt;
* (string) - оценка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====''' get_pitem_status($type, $typeid, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить статус дисциплины учебного плана (запланирована, в программе, изучена)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (string) - одно из трёх возможных значений: 'planned', 'programm', 'learned'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_planned_pitems($type, $typeid, $agenum = false)'''====&lt;br /&gt;
&lt;br /&gt;
Получить запланированные для указанной параллели дисцплины ($agenum = 0 - академическая разница)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - запланированные дисциплины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_planning_pitems($type, $typeid, $agenum)'''====&lt;br /&gt;
&lt;br /&gt;
Получить дисциплины, предусмотренные программной на эту параллель, которые возможно запланировать&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - планируемые дисциплины (которые можно добавить в план).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_programmid_type_typeid($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить номер программы по типу и номеру индивидуального плана&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (int) - номер программы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_reoffset_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить список всех перезачтённых дисциплин учебного плана или только для указанной параллели&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать строку (в этом случае условие меняется на отрицательное: status != $status) массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - перезачтённые дисциплины.&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;/div&gt;</summary>
		<author><name>Konovalov</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/learningplan&amp;diff=2803</id>
		<title>Разработка:storages/learningplan</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/learningplan&amp;diff=2803"/>
				<updated>2014-07-15T05:38:54Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Дополнительные методы: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = learningplan&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
=Таблица в базе данных=&lt;br /&gt;
''learningplan'' - запланированные на будущие периоды дисциплины.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* type - тип объекта, на которого запланирована дисциплина (programmsbc, agroup).&lt;br /&gt;
* programmsbcid - id слушателя из таблицы [[Разработка:storages/programmsbcs | programmsbcs ]], type=programmsbc или NULL&lt;br /&gt;
* agroupid - id группы из таблицы [[Разработка:storages/agroups | agroups ]], если type=agroup или NULL&lt;br /&gt;
* agenum - номер параллели, для которой задан план. Если слушатель обязан пройти дисциплину в любой период обучения 0. Уточнение: ageid мы не планируем, так как он пока не известен.&lt;br /&gt;
* programmitemid - id запланированной дисциплины из таблицы [[Разработка:storages/programmitems | programmitems ]] (дисциплина должна относится к той программе, на которую подписан слушатель или группа и быть активной на момент перевода в соответствующую параллель, чтобы произошла подписка).&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы:=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''add_to_planned($type, $typeid, $agenum, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить к учебному плану запланированную дисциплину $pitemid для параллели $agenum&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции (false - ошибка, true - запись уже существует)&lt;br /&gt;
* (int) - id добавленной записи&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''remove_from_planned($type, $typeid, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Убрать из учебного плана запланированную дисциплину&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции (false - ошибка, true - запись удалена)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''change_planned_agenum($type, $typeid, $agenum, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Изменить в учебном плане запланированной дисциплине $pitemid параллель на $agenum&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''create_learningplan($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Создать начальную конфигурацию учебного плана: добавление всех обязательных дисциплин в соответствии с указанными семестрами.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_all_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить все дисциплины программы, кроме запланированных в виде академической разницы (agenum=0), для всех параллелей, или только указанной&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - дисциплины программы, исключая запланированные&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learned_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить список изученных, активных и перезачтённых дисциплин учебного плана для указанной параллели (или для всех)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - изученные, активные и перезачтённые дисциплины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learningplan_info($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить информацию об учебном плане: тип, код, имя, программа, текущий семестр, период, количество семестров.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - возвращаемый объект с полями&lt;br /&gt;
** type - тип учебного плана ('programmsbc' или 'agroup')&lt;br /&gt;
** typeid - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
** code - код объекта&lt;br /&gt;
** name - имя объекта (содержит либо имя группы, либо полное имя персоны с номером договора)&lt;br /&gt;
** programm - учебная программа, на которую планируются дисциплины - объект с полями id, code, name&lt;br /&gt;
** agenum - текущий семестр&lt;br /&gt;
** age - текущий период - объект с полями id, name, begindate, eduweeks&lt;br /&gt;
** agenums - количество семестров в программе&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;/div&gt;</summary>
		<author><name>Konovalov</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/learningplan&amp;diff=2802</id>
		<title>Разработка:storages/learningplan</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/learningplan&amp;diff=2802"/>
				<updated>2014-07-15T05:29:03Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Дополнительные методы: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = learningplan&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
=Таблица в базе данных=&lt;br /&gt;
''learningplan'' - запланированные на будущие периоды дисциплины.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* type - тип объекта, на которого запланирована дисциплина (programmsbc, agroup).&lt;br /&gt;
* programmsbcid - id слушателя из таблицы [[Разработка:storages/programmsbcs | programmsbcs ]], type=programmsbc или NULL&lt;br /&gt;
* agroupid - id группы из таблицы [[Разработка:storages/agroups | agroups ]], если type=agroup или NULL&lt;br /&gt;
* agenum - номер параллели, для которой задан план. Если слушатель обязан пройти дисциплину в любой период обучения 0. Уточнение: ageid мы не планируем, так как он пока не известен.&lt;br /&gt;
* programmitemid - id запланированной дисциплины из таблицы [[Разработка:storages/programmitems | programmitems ]] (дисциплина должна относится к той программе, на которую подписан слушатель или группа и быть активной на момент перевода в соответствующую параллель, чтобы произошла подписка).&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы:=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''add_to_planned($type, $typeid, $agenum, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Добавить к учебному плану запланированную дисциплину $pitemid для параллели $agenum&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''remove_from_planned($type, $typeid, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Убрать из учебного плана запланированную дисциплину&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''change_planned_agenum($type, $typeid, $agenum, $pitemid)'''====&lt;br /&gt;
&lt;br /&gt;
Изменить в учебном плане запланированной дисциплине $pitemid параллель на $agenum&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $pitemid(int) - id записи в таблице [[Разработка:storages/programmitems|programmitems]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''create_learningplan($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Создать начальную конфигурацию учебного плана: добавление всех обязательных дисциплин в соответствии с указанными семестрами.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_all_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить все дисциплины программы, кроме запланированных в виде академической разницы (agenum=0), для всех параллелей, или только указанной&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - дисциплины программы, исключая запланированные&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learned_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить список изученных, активных и перезачтённых дисциплин учебного плана для указанной параллели (или для всех)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - изученные, активные и перезачтённые дисциплины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learningplan_info($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить информацию об учебном плане: тип, код, имя, программа, текущий семестр, период, количество семестров.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - возвращаемый объект с полями&lt;br /&gt;
** type - тип учебного плана ('programmsbc' или 'agroup')&lt;br /&gt;
** typeid - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
** code - код объекта&lt;br /&gt;
** name - имя объекта (содержит либо имя группы, либо полное имя персоны с номером договора)&lt;br /&gt;
** programm - учебная программа, на которую планируются дисциплины - объект с полями id, code, name&lt;br /&gt;
** agenum - текущий семестр&lt;br /&gt;
** age - текущий период - объект с полями id, name, begindate, eduweeks&lt;br /&gt;
** agenums - количество семестров в программе&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;/div&gt;</summary>
		<author><name>Konovalov</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/learningplan&amp;diff=2801</id>
		<title>Разработка:storages/learningplan</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/learningplan&amp;diff=2801"/>
				<updated>2014-07-08T17:33:28Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Дополнительные методы: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = learningplan&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
=Таблица в базе данных=&lt;br /&gt;
''learningplan'' - запланированные на будущие периоды дисциплины.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* type - тип объекта, на которого запланирована дисциплина (programmsbc, agroup).&lt;br /&gt;
* programmsbcid - id слушателя из таблицы [[Разработка:storages/programmsbcs | programmsbcs ]], type=programmsbc или NULL&lt;br /&gt;
* agroupid - id группы из таблицы [[Разработка:storages/agroups | agroups ]], если type=agroup или NULL&lt;br /&gt;
* agenum - номер параллели, для которой задан план. Если слушатель обязан пройти дисциплину в любой период обучения 0. Уточнение: ageid мы не планируем, так как он пока не известен.&lt;br /&gt;
* programmitemid - id запланированной дисциплины из таблицы [[Разработка:storages/programmitems | programmitems ]] (дисциплина должна относится к той программе, на которую подписан слушатель или группа и быть активной на момент перевода в соответствующую параллель, чтобы произошла подписка).&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы:=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''create_learningplan($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Создать начальную конфигурацию учебного плана: добавление всех обязательных дисциплин в соответствии с указанными семестрами.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_all_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить все дисциплины программы, кроме запланированных в виде академической разницы (agenum=0), для всех параллелей, или только указанной&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - дисциплины программы, исключая запланированные&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learned_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить список изученных, активных и перезачтённых дисциплин учебного плана для указанной параллели (или для всех)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - изученные, активные и перезачтённые дисциплины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learningplan_info($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить информацию об учебном плане: тип, код, имя, программа, текущий семестр, период, количество семестров.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - возвращаемый объект с полями&lt;br /&gt;
** type - тип учебного плана ('programmsbc' или 'agroup')&lt;br /&gt;
** typeid - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
** code - код объекта&lt;br /&gt;
** name - имя объекта (содержит либо имя группы, либо полное имя персоны с номером договора)&lt;br /&gt;
** programm - учебная программа, на которую планируются дисциплины - объект с полями id, code, name&lt;br /&gt;
** agenum - текущий семестр&lt;br /&gt;
** age - текущий период - объект с полями id, name, begindate, eduweeks&lt;br /&gt;
** agenums - количество семестров в программе&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;/div&gt;</summary>
		<author><name>Konovalov</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/ages&amp;diff=2800</id>
		<title>Разработка:storages/ages</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/ages&amp;diff=2800"/>
				<updated>2014-07-08T11:08:24Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Дополнительные методы: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = ages&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
===Таблица в базе данных===&lt;br /&gt;
''ages'' - учебные периоды (учебный год в школе, семестр в ВУЗе). Каждый учебный поток и итоговая отметка по курсу принадлежат какому-то одному учебному периоду.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* name - название учебного периода&lt;br /&gt;
* begindate - дата и время начала по UTC&lt;br /&gt;
* enddate  - дата и время окончания по UTC&lt;br /&gt;
* eduweeks - количество учебных недель/циклов (каждая соответствует одному циклу в расписании) продолжительности курса, которые помещаются в этом учебном периоде.&lt;br /&gt;
* departmentid - структурное подразделение в таблице [[Разработка:storages/departments | departments ]], объявившее учебный период&lt;br /&gt;
* previousid - предыдущий учебный период&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/ages | ages ]]&lt;br /&gt;
&lt;br /&gt;
===Дополнительные методы:===&lt;br /&gt;
&lt;br /&gt;
* '''+''' Получить список текущих учебных периодов для структурного подразделения. Возвращает массив объектов. По умолчанию - все периоды в статусе &amp;quot;идет учебный процесс&amp;quot;. Если второй параметр null - возвращаются все периоды, если строка - периоды в этом статусе, если массив - все периоды в таких статусах. Для удобства нужно сделать заготовку, которая принимает такой параметр и имя sql-колонки и возвращает соответствующий фрагмент sql-запроса - и поместить ее защищенным методом в storage_base.&lt;br /&gt;
* '''+''' Получить id учебного периода, являющегося x по счету после периода с заданным id. При этом x=1 - это сам исходный период (период для &amp;quot;первого класса), x=2 - это период, для которого период x=1 был предыдущим. Метод возвращает id или false, если однозначно установить id периода не удалось.&lt;br /&gt;
* Создать период для структурного подразделения: получает параметры &amp;quot;структурное подразделение&amp;quot;, &amp;quot;дата начала&amp;quot;, &amp;quot;дата конца&amp;quot;, &amp;quot;количество учебных недель&amp;quot;, &amp;quot;название&amp;quot;, &amp;quot;предыдущий период&amp;quot; - по умолчанию 0. Не указывать предыдущий период допускается только если для этого структурного подразделения еще не было создано периодов. Если для периода уже есть один &amp;quot;последующий период&amp;quot;, то больше его указывать в качестве &amp;quot;предыдущего&amp;quot; нельзя. Метод возвращает id созданного периода или false.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_ageid_agenum($programmsbcid, $agenum)'''====&lt;br /&gt;
&lt;br /&gt;
Получить id учебного периода подписки на программу по номеру семестра&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbcid(int) - id из таблицы [[Разработка:storages/programmsbcs | programmsbcs ]]&lt;br /&gt;
* $agenum(int) - номер параллели&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* int - id периода из таблицы [[Разработка:storages/ages | ages ]] или&lt;br /&gt;
* bool - false, если найти не удалось&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_department_ages($departmentid, $status=&amp;quot;active&amp;quot;)'''====&lt;br /&gt;
&lt;br /&gt;
находит список всех или в указанном статусе учебных периодов структурного подразделения&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $departmentid(int) - id учебного подразделения в таблице [[Разработка:storages/departments | departments ]].&lt;br /&gt;
* $status(string) - статус учебного периода, или null если нужны периоды с любым статусом, по умолчанию &amp;quot;active&amp;quot;.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* array - массив объектов из таблицы ages.&lt;br /&gt;
* bool - false, если ничего не найдено.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_next_ageid($ageid, $agenum)'''====&lt;br /&gt;
&lt;br /&gt;
находит один из дочерних учебных периодов&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $ageid(int) - id учебного периода в таблице [[Разработка:storages/ages | ages ]].&lt;br /&gt;
* $agenum(int) - сколько периодов вперед отсчитать относительно переданного ageid. При этом переданный id считается первым.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* int - id периода&lt;br /&gt;
* bool - false, если установить id не удалось&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_previous_ageid($ageid, $agenum)'''====&lt;br /&gt;
&lt;br /&gt;
находит предшествующий указанному в ageid учебный период&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $ageid(int) - id учебного периода в таблице [[Разработка:storages/ages | ages ]].&lt;br /&gt;
* $agenum(int) - сколько периодов назад отсчитать относительно переданного ageid. При этом переданный ageid считается последним.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* int - id периода или&lt;br /&gt;
* bool - false, если установить id не удалось&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''create_period_for_department($deptid, $datebegin, $dateend, $numweeks, $name, $previousid=null)'''====&lt;br /&gt;
&lt;br /&gt;
создаёт период для структурного подразделения&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $deptid(int) - id учебного подразделения в таблице [[Разработка:storages/departments | departments ]].&lt;br /&gt;
* $datebegin(int) - время начала периода в формате [http://ru.wikipedia.org/wiki/UNIX-время unixtime].&lt;br /&gt;
* $dateend(int) - время окончания периода в формате [http://ru.wikipedia.org/wiki/UNIX-время unixtime].&lt;br /&gt;
* $numweeks(int) - количество недель в учебном периоде.&lt;br /&gt;
* $name(string) - название учебного периода.&lt;br /&gt;
* $previosid(int) - id предыдущего учебного периода в таблице [[Разработка:storages/ages | ages ]] или null, если нет предыдущего периода, по умолчанию null.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* int - id созданного периода.&lt;br /&gt;
* bool - false, если период создать нельзя.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_numberof_ages($select)'''====&lt;br /&gt;
&lt;br /&gt;
находит количество периодов&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $select(int) - критерии отбора записей.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* int - количество найденных записей.&lt;br /&gt;
&lt;br /&gt;
===='''get_ages_by_idrange($minid, $maxid)'''====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
получаеть список записей по диапазону id&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $minid(int) - минимальный id.&lt;br /&gt;
* $maxid(int) - максимальный id.&lt;br /&gt;
''Возвращает значения:''&lt;br /&gt;
* array - массив записей.&lt;br /&gt;
* bool - false, если ни один не найден.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_agenum_byageid($startageid, $currentageid, $maxagenum)'''====&lt;br /&gt;
&lt;br /&gt;
находит порядковый номер периода, считая от заданного периода&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $startageid(int) - id периода на котором нужно остановить поиск.&lt;br /&gt;
* $currentageid(int) - id периода, порядковый номер которого нам надо узнать.&lt;br /&gt;
* $maxagenum(int) - максимально возможный порядковый номер периода.&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* int - порядковый номер периода.&lt;br /&gt;
* bool - 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;
 |ages&lt;br /&gt;
 |insert&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;new&amp;quot; объект с данными для вставки в таблицу.&lt;br /&gt;
''Пример:'' array('new' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при вставке новой записи в таблицу ages.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |ages&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;
 |Генерируется каждый раз при обновлении записи в таблице ages.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |ages&lt;br /&gt;
 |delete&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;old&amp;quot; объект с данными, которые удаляются из таблицы&lt;br /&gt;
''Пример:'' array('old' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при удалении записи из таблицы ages.&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Konovalov</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/learningplan&amp;diff=2799</id>
		<title>Разработка:storages/learningplan</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/learningplan&amp;diff=2799"/>
				<updated>2014-07-07T15:24:08Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Дополнительные методы: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = learningplan&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
=Таблица в базе данных=&lt;br /&gt;
''learningplan'' - запланированные на будущие периоды дисциплины.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* type - тип объекта, на которого запланирована дисциплина (programmsbc, agroup).&lt;br /&gt;
* programmsbcid - id слушателя из таблицы [[Разработка:storages/programmsbcs | programmsbcs ]], type=programmsbc или NULL&lt;br /&gt;
* agroupid - id группы из таблицы [[Разработка:storages/agroups | agroups ]], если type=agroup или NULL&lt;br /&gt;
* agenum - номер параллели, для которой задан план. Если слушатель обязан пройти дисциплину в любой период обучения 0. Уточнение: ageid мы не планируем, так как он пока не известен.&lt;br /&gt;
* programmitemid - id запланированной дисциплины из таблицы [[Разработка:storages/programmitems | programmitems ]] (дисциплина должна относится к той программе, на которую подписан слушатель или группа и быть активной на момент перевода в соответствующую параллель, чтобы произошла подписка).&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы:=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''create_learningplan($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Создать начальную конфигурацию учебного плана: добавление всех обязательных дисциплин в соответствии с указанными семестрами.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_all_pitems($type, $typeid, $agenum = false, $status = null)'''====&lt;br /&gt;
&lt;br /&gt;
Получить все дисциплины программы, кроме запланированных в виде академической разницы (agenum=0), для всех параллелей, или только указанной&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
* $agenum(int) - номер семестра (параллели), если false - все семестры&lt;br /&gt;
* $status(string|array) - статус дисциплин, можно передать массив или false для всех&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - false в случае ошибки&lt;br /&gt;
* (array) - дисциплины программы, исключая запланированные&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_learningplan_info($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить информацию об учебном плане: тип, код, имя, программа, текущий семестр, период, количество семестров.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип индивидуального учебного плана (ИП), может быть 'programmsbc' или 'agroup'&lt;br /&gt;
* $typeid(int) - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - возвращаемый объект с полями&lt;br /&gt;
** type - тип учебного плана ('programmsbc' или 'agroup')&lt;br /&gt;
** typeid - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
** code - код объекта&lt;br /&gt;
** name - имя объекта (содержит либо имя группы, либо полное имя персоны с номером договора)&lt;br /&gt;
** programm - учебная программа, на которую планируются дисциплины - объект с полями id, code, name&lt;br /&gt;
** agenum - текущий семестр&lt;br /&gt;
** age - текущий период - объект с полями id, name, begindate, eduweeks&lt;br /&gt;
** agenums - количество семестров в программе&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;/div&gt;</summary>
		<author><name>Konovalov</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/learningplan&amp;diff=2798</id>
		<title>Разработка:storages/learningplan</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/learningplan&amp;diff=2798"/>
				<updated>2014-07-03T13:58:43Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* Дополнительные методы: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = learningplan&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
=Таблица в базе данных=&lt;br /&gt;
''learningplan'' - запланированные на будущие периоды дисциплины.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* type - тип объекта, на которого запланирована дисциплина (programmsbc, agroup).&lt;br /&gt;
* programmsbcid - id слушателя из таблицы [[Разработка:storages/programmsbcs | programmsbcs ]], type=programmsbc или NULL&lt;br /&gt;
* agroupid - id группы из таблицы [[Разработка:storages/agroups | agroups ]], если type=agroup или NULL&lt;br /&gt;
* agenum - номер параллели, для которой задан план. Если слушатель обязан пройти дисциплину в любой период обучения 0. Уточнение: ageid мы не планируем, так как он пока не известен.&lt;br /&gt;
* programmitemid - id запланированной дисциплины из таблицы [[Разработка:storages/programmitems | programmitems ]] (дисциплина должна относится к той программе, на которую подписан слушатель или группа и быть активной на момент перевода в соответствующую параллель, чтобы произошла подписка).&lt;br /&gt;
&lt;br /&gt;
=Дополнительные методы:=&lt;br /&gt;
&lt;br /&gt;
===='''create_learningplan($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Создать начальную конфигурацию учебного плана: добавление всех обязательных дисциплин в соответствии с указанными семестрами.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип учебного плана (programmsbc или agroup)&lt;br /&gt;
* $typeid(int) - id из таблицы programmsbcs или agroups&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (bool) - результат операции&lt;br /&gt;
&lt;br /&gt;
===='''get_learningplan_info($type, $typeid)'''====&lt;br /&gt;
&lt;br /&gt;
Получить информацию об учебном плане: тип, код, имя, программа, текущий семестр, период, количество семестров.&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $type(string) - тип учебного плана ('programmsbc' или 'agroup')&lt;br /&gt;
* $typeid(int) - id из таблицы programmsbcs или agroups&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* (object) - возвращаемый объект с полями&lt;br /&gt;
** type - тип учебного плана ('programmsbc' или 'agroup')&lt;br /&gt;
** typeid - id записи в таблице [[Разработка:storages/programmsbcs|programmsbcs]] или  [[Разработка:storages/agroups|agroups]]&lt;br /&gt;
** code - код объекта&lt;br /&gt;
** name - имя объекта (содержит либо имя группы, либо полное имя персоны с номером договора)&lt;br /&gt;
** programm - учебная программа, на которую планируются дисциплины - объект с полями id, code, name&lt;br /&gt;
** agenum - текущий семестр&lt;br /&gt;
** age - текущий период - объект с полями id, name, begindate, eduweeks&lt;br /&gt;
** agenums - количество семестров в программе&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;/div&gt;</summary>
		<author><name>Konovalov</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/learninghistory&amp;diff=2797</id>
		<title>Разработка:storages/learninghistory</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/learninghistory&amp;diff=2797"/>
				<updated>2014-07-03T13:29:52Z</updated>
		
		<summary type="html">&lt;p&gt;Konovalov: /* get_history(get_history($programmsbcid, $timefrom=null, $timeto=null)) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = learninghistory&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
===Таблица в базе данных===&lt;br /&gt;
''learninghistory'' - таблица хранит историю изменений учебных процессов для каждого ученика.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* '''programmsbcsid''' - id подписки ученика на учебную программу в таблице [[Разработка:storages/programmsbcs|programmsbcs]].&lt;br /&gt;
* '''ageid''' - id учебного периода в таблице [[Разработка:storages/ages|ages]], в котором были пройдены дисциплины данной параллели&lt;br /&gt;
* '''agenum''' - номер параллели (класс или семестр и т. п.)&lt;br /&gt;
* '''changedate''' - дата создания записи в формате unixtimestamp&lt;br /&gt;
* '''orderid''' - id приказа, в результате которого учащийся был записан на данную параллель (таблица [[Разработка:storages/orders|orders]]). Возможно null-значение, если изменения не были связаны ни с каким приказом.&lt;br /&gt;
&lt;br /&gt;
===Дополнительные методы:===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''get_first_learning_data($programmsbcid)''' ====&lt;br /&gt;
&lt;br /&gt;
Получить первую запись на момент начала обучения&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $programmsbcid - id подписки ученика на учебную программу (таблица [[Разработка:storages/programmsbcs|programmsbcs]]), по которой запрашивается история&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* (mix) object|bool - объект из таблицы [[Разработка:storages/learninghistory|learninghistory]], или false&lt;br /&gt;
&lt;br /&gt;
===='''get_actual_learning_data($programmsbcid)'''====&lt;br /&gt;
&lt;br /&gt;
Получение текущую информацию об учебных подписках и периодах &lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $programmsbcid - id подписки ученика на учебную программу (таблица [[Разработка:storages/programmsbcs|programmsbcs]]), по которой запрашивается история&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* (mix) object|bool - объект из таблицы [[Разработка:storages/learninghistory|learninghistory]], или false&lt;br /&gt;
&lt;br /&gt;
===='''get_history($programmsbcid, $timefrom=null, $timeto=null)'''====&lt;br /&gt;
&lt;br /&gt;
Получение истории изменения подписок по времени&lt;br /&gt;
&lt;br /&gt;
''Аргументы:'' &lt;br /&gt;
* $programmsbcid - id подписки ученика на учебную программу (таблица [[Разработка:storages/programmsbcs|programmsbcs]]), по которой запрашивается история &lt;br /&gt;
* $timefrom - начало временного периода, за который запрашивается история изменения подписок, по умолчанию null&lt;br /&gt;
* $timeto - конец временного периода, за который запрашивается история изменения подписок, по умолчанию null&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* (mix) object|bool - объект из таблицы [[Разработка:storages/learninghistory|learninghistory]], или false&lt;br /&gt;
&lt;br /&gt;
===='''get_subscribe_ages($programmsbcid)'''====&lt;br /&gt;
&lt;br /&gt;
Выводит все учебные периоды, в которых проходила указанная учебная программа(без повторений)&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbcid - id подписки ученика на учебную программу (таблица [[Разработка:storages/programmsbcs|programmsbcs]]), по которой запрашивается история&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* array - массив записей из таблицы [[Разработка:storages/learninghistory|learninghistory]]&lt;br /&gt;
&lt;br /&gt;
===='''add($programmsbc)'''====&lt;br /&gt;
&lt;br /&gt;
Добавляет историю изменения учебного процесса для ученика. &lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $programmsbc - id в таблице [[Разработка:storages/programmsbcs|programmsbcs]]) или сам объект с таким id&lt;br /&gt;
''Возвращаемое значение:'' &lt;br /&gt;
* array - массив записей или 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;
 |storage&lt;br /&gt;
 |programmsbcs&lt;br /&gt;
 |insert&lt;br /&gt;
 |Стандартные&lt;br /&gt;
 |&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |programmsbcs&lt;br /&gt;
 |update&lt;br /&gt;
 |Стандартные&lt;br /&gt;
 |&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |programmsbcs&lt;br /&gt;
 |delete&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;
 |storage&lt;br /&gt;
 |learninghistory&lt;br /&gt;
 |insert&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;new&amp;quot; объект с данными для вставки в таблицу.&lt;br /&gt;
''Пример:'' array('new' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при вставке новой записи в таблицу learninghistory.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |learninghistory&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;
 |Генерируется каждый раз при обновлении записи в таблице learninghistory.&lt;br /&gt;
 |-&lt;br /&gt;
 |storage&lt;br /&gt;
 |learninghistory&lt;br /&gt;
 |delete&lt;br /&gt;
 |Массив, содержащий в поле &amp;quot;old&amp;quot; объект с данными, которые удаляются из таблицы&lt;br /&gt;
''Пример:'' array('old' =&amp;gt; $dataobject)&lt;br /&gt;
 |Генерируется каждый раз при удалении записи из таблицы learninghistory.&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Konovalov</name></author>	</entry>

	</feed>