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

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:modlibs/widgets&amp;diff=2543</id>
		<title>Разработка:modlibs/widgets</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/widgets&amp;diff=2543"/>
				<updated>2012-03-06T13:34:58Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* notice_yesno($message, $linkyes, $linkno, $optionsyes=NULL, $optionsno=NULL, $methodyes='post', $methodno='post') */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = widgets&lt;br /&gt;
| type = modlibs&lt;br /&gt;
}}&lt;br /&gt;
== Описание ==&lt;br /&gt;
В этом плагине располагаются все виджеты - дополнительные средства визуального оформления интерфейса. &lt;br /&gt;
=== Структура папок ===&lt;br /&gt;
Для каждого виджета в папке widgets создается отдельная папка с его названием. Внутри этой папки должен лежать файл lib.php, в котором содержится класс виджета. Все дополнительные файлы, относящиеся к этому виджету (если они требуются) - должны лежать в этой же папке.&lt;br /&gt;
=== Стандарт именования классов ===&lt;br /&gt;
Все классы виджетов должны называться по схеме '''dof_modlib_widgets'''_''&amp;lt;название_виджета&amp;gt;''.&lt;br /&gt;
== API ==&lt;br /&gt;
=== webform() ===&lt;br /&gt;
Инициализировать библиотеку форм.&lt;br /&gt;
Этот метод отвечает за подключение библиотеки moodleQuickForm. Если вы хотите использовать moodleQuickForm, то она подключается только при помощи этого метода. Подключение класса moodleQuickForm (или moodleform) напрямую не допускается.&lt;br /&gt;
=== form_classname() === &lt;br /&gt;
Аналог метода webform. В настоящее время '''не используется'''. Он оставлен только для совместимости, не используйте его в новых функциях.&lt;br /&gt;
=== progressbar($name, $percent, $width, $process, $auto_create) === &lt;br /&gt;
Эта функция пригодится, если вам понадобится вывести прогрессбар - полоску, которая в реальном времени отображает ход выполнения какого-либо долгого процесса.&lt;br /&gt;
&lt;br /&gt;
Возвращает экземпляр класса ''dof_modlib_widgets_progress_bar''.&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$name'' - имя html-элемента. Если прогрессбаров несколько на странице, то имена не должны повторяться.&lt;br /&gt;
&lt;br /&gt;
''$percent'' - начальное процентное значение.&lt;br /&gt;
&lt;br /&gt;
''$width'' - длина в пикселях.&lt;br /&gt;
&lt;br /&gt;
''$process'' - название процесса, который выполняется в текущий момент (загрузка... сохранение... и т. п.)&lt;br /&gt;
&lt;br /&gt;
''$auto_create'' - для этого формата возможны два значения:&lt;br /&gt;
&lt;br /&gt;
true - сразу же отправить html-код прогрессбара в выходной поток. &lt;br /&gt;
false - только создать объект, не выводя progressbar.&lt;br /&gt;
По умолчанию true.&lt;br /&gt;
&lt;br /&gt;
=== pages_navigation() ===  - подключает класс pages_navigation. Служит для отображения ссылок на страницы при постраничном выводе списка данных.&lt;br /&gt;
&lt;br /&gt;
''$code'' - код плагина, для которого будут созданы ссылки на страницы.&lt;br /&gt;
&lt;br /&gt;
''$recordscount'' - общее количество записей на всех страницах&lt;br /&gt;
&lt;br /&gt;
''$limitnum'' - по сколько записей нужно выводить на одной странице. По умолчанию NULL (вывести все на одной странице)&lt;br /&gt;
&lt;br /&gt;
''$limitfrom'' - начиная с какой записи начать выводить список.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== notice_yesno($message, $linkyes, $linkno, $optionsyes=NULL, $optionsno=NULL, $methodyes='post', $methodno='post') === &lt;br /&gt;
&lt;br /&gt;
Выводит сообщение подтверждение да/нет для дальнейшей работы с пользователем&lt;br /&gt;
&lt;br /&gt;
* $message - сообщение при выборе действия(Пр: Вы действительно хотите это удалить ???)&lt;br /&gt;
&lt;br /&gt;
* $linkyes - url для перехода(redirect) при нажатии на кнопку &amp;quot;ДА&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* $linkno  - url для перехода(redirect) при нажатии на кнопку &amp;quot;НЕТ&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* $optionsyes - да возможность показать на уведомления при yes&lt;br /&gt;
&lt;br /&gt;
* $optionsno  - да возможность показать на уведомления при no&lt;br /&gt;
&lt;br /&gt;
* $methodyes - метод передачи данных для кноки ДА(по умолчанию &amp;quot;POST&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
* $methodno  - метод передачи данных для кноки НЕТ(по умолчанию &amp;quot;POST&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== print_table($table, $return=false) === &lt;br /&gt;
&lt;br /&gt;
Распечатывает хорошо отформатированную таблицу, использующую текущую тему оформления moodle&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$table'' - стандартный объект со следующими свойствами&lt;br /&gt;
* $table-&amp;gt;head - Массив заголовков таблицы. (если не задан - выведутся только данные)&lt;br /&gt;
* $table-&amp;gt;align - Массив, который хранит параметры горизонтального выравнивания текста в колонках&lt;br /&gt;
* $table-&amp;gt;size  - Массив размеров колонок&lt;br /&gt;
* $table-&amp;gt;wrap - Массив, отвечающий за возможность переноса текста внутри колонки. Возможные значения:&lt;br /&gt;
** wrap (переносить)&lt;br /&gt;
** nowrap (не переносить)&lt;br /&gt;
* $table-&amp;gt;data[] - Массив, каждый элемент которого является массивом значений строки таблицы&lt;br /&gt;
* $table-&amp;gt;width  - ширина таблицы в пикселях или процентах&lt;br /&gt;
* $table-&amp;gt;tablealign  - Расположение всей таблицы&lt;br /&gt;
* $table-&amp;gt;cellpadding  - html-параметр cellpadding&lt;br /&gt;
* $table-&amp;gt;cellspacing  - html-параметр cellspacing&lt;br /&gt;
* $table-&amp;gt;class - html-параметр &amp;quot;class&amp;quot;, отвечающий за то, какой &lt;br /&gt;
** стиль должен быть сопоставлен этой таблице&lt;br /&gt;
* $table-&amp;gt;id - html-параметр &amp;quot;id&amp;quot; для использования getElementById()&lt;br /&gt;
* $table-&amp;gt;rowclass[] - массив названий css-классов для добавления их к специальным рядам&lt;br /&gt;
* $table-&amp;gt;summary - общее описание содержимого таблицы.&lt;br /&gt;
&lt;br /&gt;
''$return'' - если true, то таблица не будет распечатана, а будет возвращен только ее код&lt;br /&gt;
&lt;br /&gt;
=== print_box_start($classes='generalbox', $ids=' ', $return=false) === &lt;br /&gt;
&lt;br /&gt;
Распечатывает начало блока (запуск окна с помощью дива)&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$classes'' - имена классов через пробел(по умолчанию generalbox)&lt;br /&gt;
&lt;br /&gt;
''$ids''     - имена id через пробел&lt;br /&gt;
&lt;br /&gt;
''$return''  - возвращает как строку или просто распечатывает его&lt;br /&gt;
&lt;br /&gt;
Возвращает смешанную строку или ничего&lt;br /&gt;
&lt;br /&gt;
=== print_box_end($return=false) === &lt;br /&gt;
&lt;br /&gt;
Распечатывает конец блока &lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$return''  - возвращает как строку или просто распечатывает его&lt;br /&gt;
&lt;br /&gt;
Возвращает смешанную строку или ничего&lt;br /&gt;
&lt;br /&gt;
=== js_init() === &lt;br /&gt;
Подключить js-библиотеку (вместе со стилями) или набор скриптов, по переданному коду. Все виждеты, которые используют javascript должны использовать эту функцию для подключения своих скриптов.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
- $code - код библиотеки которую следует подключить&lt;br /&gt;
&lt;br /&gt;
В качестве кода используется собственное название библиотеки внутри  FDO, например &amp;quot;jquery&amp;quot;. Функция по коду определяет, какой именно список скриптов и стилей нужно подключить.&lt;br /&gt;
&lt;br /&gt;
=== ifield() === &lt;br /&gt;
Получить объект интерактивно редактируемого поля. То есть текст, на который кликаешь, а он становится полем редактирования и через ajax отправляет сохраненные данные.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
* $plugintype - тип плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $plugincode - код плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $queryname - тип запроса (тип запроса - как правило имя поля)&lt;br /&gt;
* $objectid - id объекта, который редактируется&lt;br /&gt;
* $type - тип элемента. Это параметра type для тега input. Допустимые значения: text, textarea, select&lt;br /&gt;
* $text - текст, который отображается на элементе до редактирования&lt;br /&gt;
* $options - массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования. По умолчанию null.&lt;br /&gt;
&lt;br /&gt;
При обращении к этому методу также автоматически подключаются все js-библиотеки, которые нужны для отображения и работы этого элемента, поэтому его следует вызывать до вывода заголовка (print_header)&lt;br /&gt;
&lt;br /&gt;
=== save_ifield() ===&lt;br /&gt;
Сохранить данные при inline-редактировании. Сохраняет одно поле. Ищет в переданном плагине функцию '''widgets_save_field''', и передает в нее тип запроса ($querytype), id объекта ($objectid) и новое значение поля ($data). Если такой функции нет - возвращает ошибку.&lt;br /&gt;
&lt;br /&gt;
Функция '''widgets_save_field''' должна вернуть либо новое, измененное значение поля, либо html-код ошибки.&lt;br /&gt;
&lt;br /&gt;
* $plugintype - тип плагина, который отвечает за сохранение поля&lt;br /&gt;
* $plugincode - код плагина, который отвечает за редактирование поля&lt;br /&gt;
* $querytype - уникальный код запроса внутри плагина. Как правило - имя сохраняемого поля&lt;br /&gt;
* $objectid - id объекта, поля которого редактируются&lt;br /&gt;
* $data - данные в формате json (или просто строка), пришедшие из формы редактирования объекта. &lt;br /&gt;
 &lt;br /&gt;
Возвращает новое, обновленное значение параметра из базы, или html-код ошибки.&lt;br /&gt;
&lt;br /&gt;
=== load_ifield() ===&lt;br /&gt;
Загрузить данные для inline-редактирования поля. Этот метод вызывается непосредственно перед редактированием поля, загружая значения из базы, для того чтобы пользователю, который редактирует данные, предоставлялась максимально актуальная информация. Ищет в плагине функцию '''widgets_load_field''' , и передает в нее название поля ($querytype), id объекта ($objectid) и новое значение поля ($data). Если такой функции нет - возвращает ошибку.&lt;br /&gt;
&lt;br /&gt;
Функция '''widgets_load_field''' должна вернуть либо значение поля, либо html-код ошибки.&lt;br /&gt;
&lt;br /&gt;
* $plugintype - тип плагина, который отвечает за редактироване поля&lt;br /&gt;
* $plugincode - код плагина, который отвечает за редактироване поля&lt;br /&gt;
* $fieldname - поле объекта, которое нужно запросить&lt;br /&gt;
* $objectid - id объекта, который редактируется&lt;br /&gt;
* $data - дополнительные данные для загрузки объекта&lt;br /&gt;
&lt;br /&gt;
Возвращает значение поля, которое будет отображаться в редактируемом элементе.&lt;br /&gt;
&lt;br /&gt;
== Дополнительные классы ==&lt;br /&gt;
=== dof_modlib_widgets_progress_bar ===&lt;br /&gt;
* '''__construct'''($name, $percent, $width, $process, $auto_create)&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$name'' - имя html-элемента. Если прогрессбаров несколько на странице, то имена не должны повторяться.&lt;br /&gt;
&lt;br /&gt;
''$percent'' - начальное процентное значение.&lt;br /&gt;
&lt;br /&gt;
''$width'' - длина в пикселях.&lt;br /&gt;
&lt;br /&gt;
''$process'' - название процесса, который выполняется в текущий момент (загрузка... сохранение... и т. п.)&lt;br /&gt;
&lt;br /&gt;
''$auto_create'' - для этого формата возможны два значения:&lt;br /&gt;
&lt;br /&gt;
true - сразу же отправить html-код прогрессбара в выходной поток. &lt;br /&gt;
false - только создать объект, не выводя progressbar.&lt;br /&gt;
По умолчанию true.&lt;br /&gt;
* '''create'''() - вывести html-код прогрессбара в браузер. Эту функцию не нужно использовать, в случае если в конструкторе $auto_create стоит true.&lt;br /&gt;
* '''set_name'''($name) - установить имя html-элемента, которым является прогрессбар. Внутренний метод, вызывается из конструктора.&lt;br /&gt;
* '''set_percent'''($percent) - установить начальное процентное значение для полоски прогрессбара. &lt;br /&gt;
$percent - количество начальных процентов, от 0 до 100.&lt;br /&gt;
* '''set_percent_adv'''($cur_amount,$max_amount) - увеличить полоску прогрессбара. Полоска увеличивается в зависимости от того, сколько задач уже выполнено, а сколько еще осталось.&lt;br /&gt;
&lt;br /&gt;
''$cur_amount'' - количество уже выполненных задач&lt;br /&gt;
&lt;br /&gt;
''$max_amount'' - общее количество задач, которое надо выполнить.&lt;br /&gt;
* '''set_width'''($width) - установить длину прогрессбара в пикселях. Внутренний метод, используется из конструктора.&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_form ===&lt;br /&gt;
Класс, наследующий moodleform. Имеет собственные методы, предназначенные для работы с нашими модулями  Подробнее об использовании moodleQuickForm можно прочитать в разделе [[Разработка:Стандарт_кодирования#Работа с moodleQuickForm|Работа с moodleQuickForm]].&lt;br /&gt;
&lt;br /&gt;
==== dof_get_select_values() ====&lt;br /&gt;
&lt;br /&gt;
Получить массив, пригодный для составления элементов select и hierselect.&lt;br /&gt;
&lt;br /&gt;
''Параметры''&lt;br /&gt;
* $records - массив записей из storage. Ожидаемый формат данных - массив объектов. По умолчанию false.&lt;br /&gt;
* $firstelm - (по умолчанию - true) задать первый элемент списка. Возможные значения: &lt;br /&gt;
** true - нужен стандартый первый элемент array(0 =&amp;gt; '--- Выбрать ---')&lt;br /&gt;
** false - первый элемент не нужен&lt;br /&gt;
** массив в формате &amp;quot;ключ&amp;quot;=&amp;gt;&amp;quot;значение&amp;quot; из одного, или нескольких элементов, которые нужно добавить в начало списка&lt;br /&gt;
* $key - какое поле БД использовать в качестве ключа (это значение отправится формой). По умолчанию 'id' &lt;br /&gt;
* $namefields - одно или несколько полей, которые будут видны пользователю в списке. Каждое последующее поле после первого будет заключено в квадратные скобки. По умолчанию 'name'. Формат:&lt;br /&gt;
** строка: если отобразить нужно только одно поле&lt;br /&gt;
** массив, с названиями полей - если полей нужно несколько. Поля выведутся именно в том порядке, в котором вы их указали&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* array - массив для составления select-элемента&lt;br /&gt;
* bool - false в случае ошибки. Возможные ошибки:&lt;br /&gt;
** В переданном списке у объектов нет нужных полей&lt;br /&gt;
** Для ключа массива есть неуникальные значения&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_pages_navigation ===&lt;br /&gt;
* '''__construct'''($dof, $code, $count, $limitnum=NULL, $limitfrom) - конструктор класса. Осуществляет все проверки данных.&lt;br /&gt;
** ''$dof'' - объект класса [[Разработка:lib/dof.php|dof_control]]&lt;br /&gt;
** ''$code'' - код плагина, для которого будут созданы ссылки на страницы.&lt;br /&gt;
** ''$count'' - общее количество записей на всех страницах&lt;br /&gt;
** ''$limitnum'' - по сколько записей нужно выводить на одной странице. По умолчанию NULL (вывести все на одной странице).&lt;br /&gt;
** ''$limitfrom'' - начиная с какой записи начать выводить список.&lt;br /&gt;
* '''get_navpages_list'''($adds, $vars) - Возвращает html-строку навигации, разбивая ленту таблицы или списка на страницы. Нумерация страница всегда начинается с единицы&lt;br /&gt;
** ''$adds'' - дополнительный путь внутри плагина, и список дополнительных параметров для ссылки в виде строки&lt;br /&gt;
** ''$vars'' - список дополнительных параметров для ссылки в виде массива в формате '' &amp;quot;ключ&amp;quot; =&amp;gt; &amp;quot;значение&amp;quot; ''&lt;br /&gt;
* '''get_page_link'''($pagenum, $limitfrom, $adds, $vars) - Возвращает ссылку на страницу или  страницу без ссылки, если она является текущей.&lt;br /&gt;
** $pagenum - номер страницы&lt;br /&gt;
** $limitfrom - номер записи, с которой начинается просмотр&lt;br /&gt;
** $adds - дополнительный путь внутри плагина, и список дополнительных параметров для ссылки в виде строки&lt;br /&gt;
** $vars - список дополнительных параметров для ссылки в виде массива в формате '' &amp;quot;ключ&amp;quot; =&amp;gt; &amp;quot;значение&amp;quot; ''&lt;br /&gt;
* '''get_current_page'''() - Получить номер страницы по номеру текущей записи, и количеству записей на странице&lt;br /&gt;
* '''get_total_pages'''() - Возвращает общее количество страниц для отображения&lt;br /&gt;
* '''get_current_limitfrom'''() - Возвращает исходный параметр номера записи, с которого начинается просмотр&lt;br /&gt;
* '''get_current_limitnum'''() - Возвращает исходный параметр минимального количества записей на странице&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_addremove ===&lt;br /&gt;
Класс для составления стандартного элемента &amp;quot;добавить\удалить&amp;quot;. Элемент представляет собой двусторонний список с двумя html-элементами Select. Используется для автоматизации процесса добавления и удаления элементов из какой-либо категории или группы. Позволяет одновременно передавать несколько элементов.&lt;br /&gt;
* '''__construct'''($DOF, $action='', $formid='dof_modlib_widgets_addremove') - конструктор класса.&lt;br /&gt;
** $DOF объект класса dof_control&lt;br /&gt;
** $action - ссылка на страницу-обработчик формы. По умолчанию - эта же страница.&lt;br /&gt;
** $formid - id html-элемента на странице. Используется для скрипта, который делает кнопки &amp;quot;добавить&amp;quot; или &amp;quot;удалить&amp;quot; неактивными, в зависимости от того, какое из полей select выбрано.&lt;br /&gt;
* '''set_default_strings'''($values)&lt;br /&gt;
* '''set_add_list'''($options, $extradata=null)&lt;br /&gt;
* '''set_remove_list'''($options, $extradata=null)&lt;br /&gt;
* '''set_complex_add_list'''($options)&lt;br /&gt;
* '''set_complex_remove_list'''($options)&lt;br /&gt;
* '''check_add_remove_array'''($data) - проверить пришедший из формы массив элементов для добавления или удаления.&lt;br /&gt;
** $data - массив элементов, пришедший из $_POST&lt;br /&gt;
** Возвращаемое значение: (array) - массив числовых значений идентификаторов.&lt;br /&gt;
* '''print_html'''() - распечатать html-код элемента.&lt;br /&gt;
* '''get_html'''() - получить html-код элемента для последующей распечатки.&lt;br /&gt;
* '''assemble_templater_data'''() - Внутренний метод. &lt;br /&gt;
* '''get_complex_options_template_data'''($groups, $type) - Внутренний метод.&lt;br /&gt;
* '''get_simple_options_template_data'''($options, $extradata=null) - Внутренний метод.&lt;br /&gt;
* '''get_search_default_strings'''()  - Внутренний метод.&lt;br /&gt;
* '''get_form_default_strings'''()  - Внутренний метод.&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_ifield ===&lt;br /&gt;
Класс, отвечающий за элемент inline-редактирования. Создает элемент, который при помощи AJAX-запросов &lt;br /&gt;
&lt;br /&gt;
==== __construct() ====&lt;br /&gt;
&lt;br /&gt;
Параметры&lt;br /&gt;
* $dof - объект класса dof_control&lt;br /&gt;
* $plugintype - тип плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $plugincode - код плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $queryname - тип запроса (тип запроса - как правило имя поля)&lt;br /&gt;
* $objectid - id объекта, который редактируется&lt;br /&gt;
* $type - тип элемента. Это параметра type для тега input. Допустимые значения: text, textarea, select&lt;br /&gt;
* $text - текст, который отображается на элементе до редактирования&lt;br /&gt;
* $options - массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования. По умолчанию null.&lt;br /&gt;
&lt;br /&gt;
В конструкторе также автоматически подключаются все js-библиотеки, которые нужны для отображения и работы этого элемента, поэтому его следует вызывать до вывода заголовка.&lt;br /&gt;
&lt;br /&gt;
==== get_html() ====&lt;br /&gt;
Получить html-код элемента. После создания объекта этот метод можно вызывать несколько раз, каждый раз указывая новый id. Все нужные параметры (текст скрипта, и т. п.) будут пересчитаны автоматически.&lt;br /&gt;
&lt;br /&gt;
Параметры&lt;br /&gt;
* $objectid - id редактируемого объекта&lt;br /&gt;
* $text - текст, который отображается вместо элемента, пока не нажата кнопка &amp;quot;редактировать&amp;quot;. Разрешено html-форматирование&lt;br /&gt;
* $options - Массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования.&lt;br /&gt;
&lt;br /&gt;
==== display() ====&lt;br /&gt;
Вывести элемент.  После создания объекта этот метод можно вызывать несколько раз, каждый раз указывая новый id. Все нужные параметры (текст скрипта, и т. п.) будут пересчитаны автоматически.&lt;br /&gt;
&lt;br /&gt;
Параметры&lt;br /&gt;
* $objectid - id редактируемого объекта&lt;br /&gt;
* $text - текст, который отображается вместо элемента, пока не нажата кнопка &amp;quot;редактировать&amp;quot;. Разрешено html-форматирование&lt;br /&gt;
* $options - Массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования.&lt;br /&gt;
&lt;br /&gt;
==== set_options() ====&lt;br /&gt;
Метод для установки параметров класса вручную. Используется в том случае, когда всех приведенных выше методов недостаточно.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
* $options - массив свойств класса в формате ключ-значение.&lt;br /&gt;
&lt;br /&gt;
== Примеры кода ==&lt;br /&gt;
==== Стандартные формы ====&lt;br /&gt;
Здесь будут приведены примеры работы с классов dof_modlib_widgets_form. Этот класс наследует находящийся в moodle класс moodleform. Подробнее о нем можно посмотреть в разделе: [[Разработка:moodleQuickForm]]&lt;br /&gt;
===== Подключение библиотеки форм =====&lt;br /&gt;
    $DOF-&amp;gt;modlib('widgets')-&amp;gt;'''webform'''();&lt;br /&gt;
===== Получение массива нужного формата для составления select-элементов =====&lt;br /&gt;
&lt;br /&gt;
    ''// получаем список всех учебных периодов из нашей таблицы &amp;quot;ages&amp;quot;&lt;br /&gt;
    // Отсортированных по названию''&lt;br /&gt;
    $ages = $this-&amp;gt;dof-&amp;gt;storage('ages')-&amp;gt;get_list(null, null, &amp;quot;name ASC&amp;quot;)&lt;br /&gt;
    ''// задаем массив из нескольких собственных первых элементов для списка:&lt;br /&gt;
    // они добавятся в начало''&lt;br /&gt;
    $firstelms = array(54 =&amp;gt; 'Элемент 1', 'abc' =&amp;gt; 'Элемент 2');&lt;br /&gt;
    ''// указываем, какое поле из массива объектов нужно брать в качестве ключа &lt;br /&gt;
    // (значения должны быть уникальными!)''&lt;br /&gt;
    $idfield = 'id';&lt;br /&gt;
    ''// указываем, какие поля БД нужно выводить пользователю''&lt;br /&gt;
    $showfields = array('name', 'eduweeks');&lt;br /&gt;
    ''// получаем массив нужной структуры для составления select-элемента.''&lt;br /&gt;
    $selectdata = $this-&amp;gt;'''dof_get_select_values'''($ages, $firstelms, $idfield, $showfields);&lt;br /&gt;
&lt;br /&gt;
==== Использование прогрессбара ====&lt;br /&gt;
&lt;br /&gt;
1. Устанавливаем параметры&lt;br /&gt;
    $name        = 'pbar'; ''// имя html-элемента, только латинские буквы''&lt;br /&gt;
    $percent     = 1;      ''// начинаем с отметки 1%''&lt;br /&gt;
    $width       = 200;    ''// длинна полоски 200 пикселей''&lt;br /&gt;
    $process     = 'Идет сохранение...'; ''// какой процесс происходит''&lt;br /&gt;
    $auto_create = true;   ''// вывести прогрессбар сразу же после создания объекта''&lt;br /&gt;
2. Создаем нужный объект&lt;br /&gt;
    $progressbar = $DOF-&amp;gt;modlib('widgets')-&amp;gt;'''progressbar'''($name, $percent, $width, $process, $auto_create)&lt;br /&gt;
3. Вставляем прогрессбар внутрь цикла с выполняемым процессом&lt;br /&gt;
    for ($i=1; $i&amp;lt;=333; $i++)&lt;br /&gt;
    {&lt;br /&gt;
        ''// номер текущей выполняемой задачи''&lt;br /&gt;
        $cur_task  = $i;&lt;br /&gt;
        ''// общее количество задач, которое надо выполнить их количество можно менять в ходе выполнения процесса''&lt;br /&gt;
        ''(например, если сразу неясно сколько точно шагов будет у цикла)''&lt;br /&gt;
        $num_tasks = 333; &lt;br /&gt;
        ''// внутри цикла производим все трудоемкие операции...''&lt;br /&gt;
        &lt;br /&gt;
        ...&lt;br /&gt;
        &lt;br /&gt;
        sleep(0.1);''// '''для теста''': чтобы было видно как ползет полоска''&lt;br /&gt;
        ''// после того как проведены все операции увеличиваем длину полоски на чуть-чуть''&lt;br /&gt;
        $progressbar-&amp;gt;'''set_percent_adv'''($cur_task,$num_tasks);&lt;br /&gt;
    }&lt;/div&gt;</summary>
		<author><name>Dido86</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/widgets&amp;diff=2542</id>
		<title>Разработка:modlibs/widgets</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/widgets&amp;diff=2542"/>
				<updated>2012-03-06T13:30:34Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* notice_yesno($message, $linkyes, $linkno, $optionsyes=NULL, $optionsno=NULL, $methodyes='post', $methodno='post') */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = widgets&lt;br /&gt;
| type = modlibs&lt;br /&gt;
}}&lt;br /&gt;
== Описание ==&lt;br /&gt;
В этом плагине располагаются все виджеты - дополнительные средства визуального оформления интерфейса. &lt;br /&gt;
=== Структура папок ===&lt;br /&gt;
Для каждого виджета в папке widgets создается отдельная папка с его названием. Внутри этой папки должен лежать файл lib.php, в котором содержится класс виджета. Все дополнительные файлы, относящиеся к этому виджету (если они требуются) - должны лежать в этой же папке.&lt;br /&gt;
=== Стандарт именования классов ===&lt;br /&gt;
Все классы виджетов должны называться по схеме '''dof_modlib_widgets'''_''&amp;lt;название_виджета&amp;gt;''.&lt;br /&gt;
== API ==&lt;br /&gt;
=== webform() ===&lt;br /&gt;
Инициализировать библиотеку форм.&lt;br /&gt;
Этот метод отвечает за подключение библиотеки moodleQuickForm. Если вы хотите использовать moodleQuickForm, то она подключается только при помощи этого метода. Подключение класса moodleQuickForm (или moodleform) напрямую не допускается.&lt;br /&gt;
=== form_classname() === &lt;br /&gt;
Аналог метода webform. В настоящее время '''не используется'''. Он оставлен только для совместимости, не используйте его в новых функциях.&lt;br /&gt;
=== progressbar($name, $percent, $width, $process, $auto_create) === &lt;br /&gt;
Эта функция пригодится, если вам понадобится вывести прогрессбар - полоску, которая в реальном времени отображает ход выполнения какого-либо долгого процесса.&lt;br /&gt;
&lt;br /&gt;
Возвращает экземпляр класса ''dof_modlib_widgets_progress_bar''.&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$name'' - имя html-элемента. Если прогрессбаров несколько на странице, то имена не должны повторяться.&lt;br /&gt;
&lt;br /&gt;
''$percent'' - начальное процентное значение.&lt;br /&gt;
&lt;br /&gt;
''$width'' - длина в пикселях.&lt;br /&gt;
&lt;br /&gt;
''$process'' - название процесса, который выполняется в текущий момент (загрузка... сохранение... и т. п.)&lt;br /&gt;
&lt;br /&gt;
''$auto_create'' - для этого формата возможны два значения:&lt;br /&gt;
&lt;br /&gt;
true - сразу же отправить html-код прогрессбара в выходной поток. &lt;br /&gt;
false - только создать объект, не выводя progressbar.&lt;br /&gt;
По умолчанию true.&lt;br /&gt;
&lt;br /&gt;
=== pages_navigation() ===  - подключает класс pages_navigation. Служит для отображения ссылок на страницы при постраничном выводе списка данных.&lt;br /&gt;
&lt;br /&gt;
''$code'' - код плагина, для которого будут созданы ссылки на страницы.&lt;br /&gt;
&lt;br /&gt;
''$recordscount'' - общее количество записей на всех страницах&lt;br /&gt;
&lt;br /&gt;
''$limitnum'' - по сколько записей нужно выводить на одной странице. По умолчанию NULL (вывести все на одной странице)&lt;br /&gt;
&lt;br /&gt;
''$limitfrom'' - начиная с какой записи начать выводить список.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== notice_yesno($message, $linkyes, $linkno, $optionsyes=NULL, $optionsno=NULL, $methodyes='post', $methodno='post') === &lt;br /&gt;
&lt;br /&gt;
Выводит сообщение подтверждение да/нет для дальнейшей работы с пользователем&lt;br /&gt;
&lt;br /&gt;
* $message - сообщение при выборе действия(Пр: Вы действительно хотите это удалить ???)&lt;br /&gt;
&lt;br /&gt;
* $linkyes - url для перехода(redirect) при нажатии на кнопку &amp;quot;ДА&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* $linkno  - url для перехода(redirect) при нажатии на кнопку &amp;quot;НЕТ&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* $optionsyes - начиная с какой записи начать выводить список.&lt;br /&gt;
&lt;br /&gt;
* $optionsno  - общее количество записей на всех страницах&lt;br /&gt;
&lt;br /&gt;
* $methodyes - метод передачи данных для кноки ДА(по умолчанию &amp;quot;POST&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
* $methodno  - метод передачи данных для кноки НЕТ(по умолчанию &amp;quot;POST&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== print_table($table, $return=false) === &lt;br /&gt;
&lt;br /&gt;
Распечатывает хорошо отформатированную таблицу, использующую текущую тему оформления moodle&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$table'' - стандартный объект со следующими свойствами&lt;br /&gt;
* $table-&amp;gt;head - Массив заголовков таблицы. (если не задан - выведутся только данные)&lt;br /&gt;
* $table-&amp;gt;align - Массив, который хранит параметры горизонтального выравнивания текста в колонках&lt;br /&gt;
* $table-&amp;gt;size  - Массив размеров колонок&lt;br /&gt;
* $table-&amp;gt;wrap - Массив, отвечающий за возможность переноса текста внутри колонки. Возможные значения:&lt;br /&gt;
** wrap (переносить)&lt;br /&gt;
** nowrap (не переносить)&lt;br /&gt;
* $table-&amp;gt;data[] - Массив, каждый элемент которого является массивом значений строки таблицы&lt;br /&gt;
* $table-&amp;gt;width  - ширина таблицы в пикселях или процентах&lt;br /&gt;
* $table-&amp;gt;tablealign  - Расположение всей таблицы&lt;br /&gt;
* $table-&amp;gt;cellpadding  - html-параметр cellpadding&lt;br /&gt;
* $table-&amp;gt;cellspacing  - html-параметр cellspacing&lt;br /&gt;
* $table-&amp;gt;class - html-параметр &amp;quot;class&amp;quot;, отвечающий за то, какой &lt;br /&gt;
** стиль должен быть сопоставлен этой таблице&lt;br /&gt;
* $table-&amp;gt;id - html-параметр &amp;quot;id&amp;quot; для использования getElementById()&lt;br /&gt;
* $table-&amp;gt;rowclass[] - массив названий css-классов для добавления их к специальным рядам&lt;br /&gt;
* $table-&amp;gt;summary - общее описание содержимого таблицы.&lt;br /&gt;
&lt;br /&gt;
''$return'' - если true, то таблица не будет распечатана, а будет возвращен только ее код&lt;br /&gt;
&lt;br /&gt;
=== print_box_start($classes='generalbox', $ids=' ', $return=false) === &lt;br /&gt;
&lt;br /&gt;
Распечатывает начало блока (запуск окна с помощью дива)&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$classes'' - имена классов через пробел(по умолчанию generalbox)&lt;br /&gt;
&lt;br /&gt;
''$ids''     - имена id через пробел&lt;br /&gt;
&lt;br /&gt;
''$return''  - возвращает как строку или просто распечатывает его&lt;br /&gt;
&lt;br /&gt;
Возвращает смешанную строку или ничего&lt;br /&gt;
&lt;br /&gt;
=== print_box_end($return=false) === &lt;br /&gt;
&lt;br /&gt;
Распечатывает конец блока &lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$return''  - возвращает как строку или просто распечатывает его&lt;br /&gt;
&lt;br /&gt;
Возвращает смешанную строку или ничего&lt;br /&gt;
&lt;br /&gt;
=== js_init() === &lt;br /&gt;
Подключить js-библиотеку (вместе со стилями) или набор скриптов, по переданному коду. Все виждеты, которые используют javascript должны использовать эту функцию для подключения своих скриптов.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
- $code - код библиотеки которую следует подключить&lt;br /&gt;
&lt;br /&gt;
В качестве кода используется собственное название библиотеки внутри  FDO, например &amp;quot;jquery&amp;quot;. Функция по коду определяет, какой именно список скриптов и стилей нужно подключить.&lt;br /&gt;
&lt;br /&gt;
=== ifield() === &lt;br /&gt;
Получить объект интерактивно редактируемого поля. То есть текст, на который кликаешь, а он становится полем редактирования и через ajax отправляет сохраненные данные.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
* $plugintype - тип плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $plugincode - код плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $queryname - тип запроса (тип запроса - как правило имя поля)&lt;br /&gt;
* $objectid - id объекта, который редактируется&lt;br /&gt;
* $type - тип элемента. Это параметра type для тега input. Допустимые значения: text, textarea, select&lt;br /&gt;
* $text - текст, который отображается на элементе до редактирования&lt;br /&gt;
* $options - массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования. По умолчанию null.&lt;br /&gt;
&lt;br /&gt;
При обращении к этому методу также автоматически подключаются все js-библиотеки, которые нужны для отображения и работы этого элемента, поэтому его следует вызывать до вывода заголовка (print_header)&lt;br /&gt;
&lt;br /&gt;
=== save_ifield() ===&lt;br /&gt;
Сохранить данные при inline-редактировании. Сохраняет одно поле. Ищет в переданном плагине функцию '''widgets_save_field''', и передает в нее тип запроса ($querytype), id объекта ($objectid) и новое значение поля ($data). Если такой функции нет - возвращает ошибку.&lt;br /&gt;
&lt;br /&gt;
Функция '''widgets_save_field''' должна вернуть либо новое, измененное значение поля, либо html-код ошибки.&lt;br /&gt;
&lt;br /&gt;
* $plugintype - тип плагина, который отвечает за сохранение поля&lt;br /&gt;
* $plugincode - код плагина, который отвечает за редактирование поля&lt;br /&gt;
* $querytype - уникальный код запроса внутри плагина. Как правило - имя сохраняемого поля&lt;br /&gt;
* $objectid - id объекта, поля которого редактируются&lt;br /&gt;
* $data - данные в формате json (или просто строка), пришедшие из формы редактирования объекта. &lt;br /&gt;
 &lt;br /&gt;
Возвращает новое, обновленное значение параметра из базы, или html-код ошибки.&lt;br /&gt;
&lt;br /&gt;
=== load_ifield() ===&lt;br /&gt;
Загрузить данные для inline-редактирования поля. Этот метод вызывается непосредственно перед редактированием поля, загружая значения из базы, для того чтобы пользователю, который редактирует данные, предоставлялась максимально актуальная информация. Ищет в плагине функцию '''widgets_load_field''' , и передает в нее название поля ($querytype), id объекта ($objectid) и новое значение поля ($data). Если такой функции нет - возвращает ошибку.&lt;br /&gt;
&lt;br /&gt;
Функция '''widgets_load_field''' должна вернуть либо значение поля, либо html-код ошибки.&lt;br /&gt;
&lt;br /&gt;
* $plugintype - тип плагина, который отвечает за редактироване поля&lt;br /&gt;
* $plugincode - код плагина, который отвечает за редактироване поля&lt;br /&gt;
* $fieldname - поле объекта, которое нужно запросить&lt;br /&gt;
* $objectid - id объекта, который редактируется&lt;br /&gt;
* $data - дополнительные данные для загрузки объекта&lt;br /&gt;
&lt;br /&gt;
Возвращает значение поля, которое будет отображаться в редактируемом элементе.&lt;br /&gt;
&lt;br /&gt;
== Дополнительные классы ==&lt;br /&gt;
=== dof_modlib_widgets_progress_bar ===&lt;br /&gt;
* '''__construct'''($name, $percent, $width, $process, $auto_create)&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$name'' - имя html-элемента. Если прогрессбаров несколько на странице, то имена не должны повторяться.&lt;br /&gt;
&lt;br /&gt;
''$percent'' - начальное процентное значение.&lt;br /&gt;
&lt;br /&gt;
''$width'' - длина в пикселях.&lt;br /&gt;
&lt;br /&gt;
''$process'' - название процесса, который выполняется в текущий момент (загрузка... сохранение... и т. п.)&lt;br /&gt;
&lt;br /&gt;
''$auto_create'' - для этого формата возможны два значения:&lt;br /&gt;
&lt;br /&gt;
true - сразу же отправить html-код прогрессбара в выходной поток. &lt;br /&gt;
false - только создать объект, не выводя progressbar.&lt;br /&gt;
По умолчанию true.&lt;br /&gt;
* '''create'''() - вывести html-код прогрессбара в браузер. Эту функцию не нужно использовать, в случае если в конструкторе $auto_create стоит true.&lt;br /&gt;
* '''set_name'''($name) - установить имя html-элемента, которым является прогрессбар. Внутренний метод, вызывается из конструктора.&lt;br /&gt;
* '''set_percent'''($percent) - установить начальное процентное значение для полоски прогрессбара. &lt;br /&gt;
$percent - количество начальных процентов, от 0 до 100.&lt;br /&gt;
* '''set_percent_adv'''($cur_amount,$max_amount) - увеличить полоску прогрессбара. Полоска увеличивается в зависимости от того, сколько задач уже выполнено, а сколько еще осталось.&lt;br /&gt;
&lt;br /&gt;
''$cur_amount'' - количество уже выполненных задач&lt;br /&gt;
&lt;br /&gt;
''$max_amount'' - общее количество задач, которое надо выполнить.&lt;br /&gt;
* '''set_width'''($width) - установить длину прогрессбара в пикселях. Внутренний метод, используется из конструктора.&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_form ===&lt;br /&gt;
Класс, наследующий moodleform. Имеет собственные методы, предназначенные для работы с нашими модулями  Подробнее об использовании moodleQuickForm можно прочитать в разделе [[Разработка:Стандарт_кодирования#Работа с moodleQuickForm|Работа с moodleQuickForm]].&lt;br /&gt;
&lt;br /&gt;
==== dof_get_select_values() ====&lt;br /&gt;
&lt;br /&gt;
Получить массив, пригодный для составления элементов select и hierselect.&lt;br /&gt;
&lt;br /&gt;
''Параметры''&lt;br /&gt;
* $records - массив записей из storage. Ожидаемый формат данных - массив объектов. По умолчанию false.&lt;br /&gt;
* $firstelm - (по умолчанию - true) задать первый элемент списка. Возможные значения: &lt;br /&gt;
** true - нужен стандартый первый элемент array(0 =&amp;gt; '--- Выбрать ---')&lt;br /&gt;
** false - первый элемент не нужен&lt;br /&gt;
** массив в формате &amp;quot;ключ&amp;quot;=&amp;gt;&amp;quot;значение&amp;quot; из одного, или нескольких элементов, которые нужно добавить в начало списка&lt;br /&gt;
* $key - какое поле БД использовать в качестве ключа (это значение отправится формой). По умолчанию 'id' &lt;br /&gt;
* $namefields - одно или несколько полей, которые будут видны пользователю в списке. Каждое последующее поле после первого будет заключено в квадратные скобки. По умолчанию 'name'. Формат:&lt;br /&gt;
** строка: если отобразить нужно только одно поле&lt;br /&gt;
** массив, с названиями полей - если полей нужно несколько. Поля выведутся именно в том порядке, в котором вы их указали&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* array - массив для составления select-элемента&lt;br /&gt;
* bool - false в случае ошибки. Возможные ошибки:&lt;br /&gt;
** В переданном списке у объектов нет нужных полей&lt;br /&gt;
** Для ключа массива есть неуникальные значения&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_pages_navigation ===&lt;br /&gt;
* '''__construct'''($dof, $code, $count, $limitnum=NULL, $limitfrom) - конструктор класса. Осуществляет все проверки данных.&lt;br /&gt;
** ''$dof'' - объект класса [[Разработка:lib/dof.php|dof_control]]&lt;br /&gt;
** ''$code'' - код плагина, для которого будут созданы ссылки на страницы.&lt;br /&gt;
** ''$count'' - общее количество записей на всех страницах&lt;br /&gt;
** ''$limitnum'' - по сколько записей нужно выводить на одной странице. По умолчанию NULL (вывести все на одной странице).&lt;br /&gt;
** ''$limitfrom'' - начиная с какой записи начать выводить список.&lt;br /&gt;
* '''get_navpages_list'''($adds, $vars) - Возвращает html-строку навигации, разбивая ленту таблицы или списка на страницы. Нумерация страница всегда начинается с единицы&lt;br /&gt;
** ''$adds'' - дополнительный путь внутри плагина, и список дополнительных параметров для ссылки в виде строки&lt;br /&gt;
** ''$vars'' - список дополнительных параметров для ссылки в виде массива в формате '' &amp;quot;ключ&amp;quot; =&amp;gt; &amp;quot;значение&amp;quot; ''&lt;br /&gt;
* '''get_page_link'''($pagenum, $limitfrom, $adds, $vars) - Возвращает ссылку на страницу или  страницу без ссылки, если она является текущей.&lt;br /&gt;
** $pagenum - номер страницы&lt;br /&gt;
** $limitfrom - номер записи, с которой начинается просмотр&lt;br /&gt;
** $adds - дополнительный путь внутри плагина, и список дополнительных параметров для ссылки в виде строки&lt;br /&gt;
** $vars - список дополнительных параметров для ссылки в виде массива в формате '' &amp;quot;ключ&amp;quot; =&amp;gt; &amp;quot;значение&amp;quot; ''&lt;br /&gt;
* '''get_current_page'''() - Получить номер страницы по номеру текущей записи, и количеству записей на странице&lt;br /&gt;
* '''get_total_pages'''() - Возвращает общее количество страниц для отображения&lt;br /&gt;
* '''get_current_limitfrom'''() - Возвращает исходный параметр номера записи, с которого начинается просмотр&lt;br /&gt;
* '''get_current_limitnum'''() - Возвращает исходный параметр минимального количества записей на странице&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_addremove ===&lt;br /&gt;
Класс для составления стандартного элемента &amp;quot;добавить\удалить&amp;quot;. Элемент представляет собой двусторонний список с двумя html-элементами Select. Используется для автоматизации процесса добавления и удаления элементов из какой-либо категории или группы. Позволяет одновременно передавать несколько элементов.&lt;br /&gt;
* '''__construct'''($DOF, $action='', $formid='dof_modlib_widgets_addremove') - конструктор класса.&lt;br /&gt;
** $DOF объект класса dof_control&lt;br /&gt;
** $action - ссылка на страницу-обработчик формы. По умолчанию - эта же страница.&lt;br /&gt;
** $formid - id html-элемента на странице. Используется для скрипта, который делает кнопки &amp;quot;добавить&amp;quot; или &amp;quot;удалить&amp;quot; неактивными, в зависимости от того, какое из полей select выбрано.&lt;br /&gt;
* '''set_default_strings'''($values)&lt;br /&gt;
* '''set_add_list'''($options, $extradata=null)&lt;br /&gt;
* '''set_remove_list'''($options, $extradata=null)&lt;br /&gt;
* '''set_complex_add_list'''($options)&lt;br /&gt;
* '''set_complex_remove_list'''($options)&lt;br /&gt;
* '''check_add_remove_array'''($data) - проверить пришедший из формы массив элементов для добавления или удаления.&lt;br /&gt;
** $data - массив элементов, пришедший из $_POST&lt;br /&gt;
** Возвращаемое значение: (array) - массив числовых значений идентификаторов.&lt;br /&gt;
* '''print_html'''() - распечатать html-код элемента.&lt;br /&gt;
* '''get_html'''() - получить html-код элемента для последующей распечатки.&lt;br /&gt;
* '''assemble_templater_data'''() - Внутренний метод. &lt;br /&gt;
* '''get_complex_options_template_data'''($groups, $type) - Внутренний метод.&lt;br /&gt;
* '''get_simple_options_template_data'''($options, $extradata=null) - Внутренний метод.&lt;br /&gt;
* '''get_search_default_strings'''()  - Внутренний метод.&lt;br /&gt;
* '''get_form_default_strings'''()  - Внутренний метод.&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_ifield ===&lt;br /&gt;
Класс, отвечающий за элемент inline-редактирования. Создает элемент, который при помощи AJAX-запросов &lt;br /&gt;
&lt;br /&gt;
==== __construct() ====&lt;br /&gt;
&lt;br /&gt;
Параметры&lt;br /&gt;
* $dof - объект класса dof_control&lt;br /&gt;
* $plugintype - тип плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $plugincode - код плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $queryname - тип запроса (тип запроса - как правило имя поля)&lt;br /&gt;
* $objectid - id объекта, который редактируется&lt;br /&gt;
* $type - тип элемента. Это параметра type для тега input. Допустимые значения: text, textarea, select&lt;br /&gt;
* $text - текст, который отображается на элементе до редактирования&lt;br /&gt;
* $options - массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования. По умолчанию null.&lt;br /&gt;
&lt;br /&gt;
В конструкторе также автоматически подключаются все js-библиотеки, которые нужны для отображения и работы этого элемента, поэтому его следует вызывать до вывода заголовка.&lt;br /&gt;
&lt;br /&gt;
==== get_html() ====&lt;br /&gt;
Получить html-код элемента. После создания объекта этот метод можно вызывать несколько раз, каждый раз указывая новый id. Все нужные параметры (текст скрипта, и т. п.) будут пересчитаны автоматически.&lt;br /&gt;
&lt;br /&gt;
Параметры&lt;br /&gt;
* $objectid - id редактируемого объекта&lt;br /&gt;
* $text - текст, который отображается вместо элемента, пока не нажата кнопка &amp;quot;редактировать&amp;quot;. Разрешено html-форматирование&lt;br /&gt;
* $options - Массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования.&lt;br /&gt;
&lt;br /&gt;
==== display() ====&lt;br /&gt;
Вывести элемент.  После создания объекта этот метод можно вызывать несколько раз, каждый раз указывая новый id. Все нужные параметры (текст скрипта, и т. п.) будут пересчитаны автоматически.&lt;br /&gt;
&lt;br /&gt;
Параметры&lt;br /&gt;
* $objectid - id редактируемого объекта&lt;br /&gt;
* $text - текст, который отображается вместо элемента, пока не нажата кнопка &amp;quot;редактировать&amp;quot;. Разрешено html-форматирование&lt;br /&gt;
* $options - Массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования.&lt;br /&gt;
&lt;br /&gt;
==== set_options() ====&lt;br /&gt;
Метод для установки параметров класса вручную. Используется в том случае, когда всех приведенных выше методов недостаточно.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
* $options - массив свойств класса в формате ключ-значение.&lt;br /&gt;
&lt;br /&gt;
== Примеры кода ==&lt;br /&gt;
==== Стандартные формы ====&lt;br /&gt;
Здесь будут приведены примеры работы с классов dof_modlib_widgets_form. Этот класс наследует находящийся в moodle класс moodleform. Подробнее о нем можно посмотреть в разделе: [[Разработка:moodleQuickForm]]&lt;br /&gt;
===== Подключение библиотеки форм =====&lt;br /&gt;
    $DOF-&amp;gt;modlib('widgets')-&amp;gt;'''webform'''();&lt;br /&gt;
===== Получение массива нужного формата для составления select-элементов =====&lt;br /&gt;
&lt;br /&gt;
    ''// получаем список всех учебных периодов из нашей таблицы &amp;quot;ages&amp;quot;&lt;br /&gt;
    // Отсортированных по названию''&lt;br /&gt;
    $ages = $this-&amp;gt;dof-&amp;gt;storage('ages')-&amp;gt;get_list(null, null, &amp;quot;name ASC&amp;quot;)&lt;br /&gt;
    ''// задаем массив из нескольких собственных первых элементов для списка:&lt;br /&gt;
    // они добавятся в начало''&lt;br /&gt;
    $firstelms = array(54 =&amp;gt; 'Элемент 1', 'abc' =&amp;gt; 'Элемент 2');&lt;br /&gt;
    ''// указываем, какое поле из массива объектов нужно брать в качестве ключа &lt;br /&gt;
    // (значения должны быть уникальными!)''&lt;br /&gt;
    $idfield = 'id';&lt;br /&gt;
    ''// указываем, какие поля БД нужно выводить пользователю''&lt;br /&gt;
    $showfields = array('name', 'eduweeks');&lt;br /&gt;
    ''// получаем массив нужной структуры для составления select-элемента.''&lt;br /&gt;
    $selectdata = $this-&amp;gt;'''dof_get_select_values'''($ages, $firstelms, $idfield, $showfields);&lt;br /&gt;
&lt;br /&gt;
==== Использование прогрессбара ====&lt;br /&gt;
&lt;br /&gt;
1. Устанавливаем параметры&lt;br /&gt;
    $name        = 'pbar'; ''// имя html-элемента, только латинские буквы''&lt;br /&gt;
    $percent     = 1;      ''// начинаем с отметки 1%''&lt;br /&gt;
    $width       = 200;    ''// длинна полоски 200 пикселей''&lt;br /&gt;
    $process     = 'Идет сохранение...'; ''// какой процесс происходит''&lt;br /&gt;
    $auto_create = true;   ''// вывести прогрессбар сразу же после создания объекта''&lt;br /&gt;
2. Создаем нужный объект&lt;br /&gt;
    $progressbar = $DOF-&amp;gt;modlib('widgets')-&amp;gt;'''progressbar'''($name, $percent, $width, $process, $auto_create)&lt;br /&gt;
3. Вставляем прогрессбар внутрь цикла с выполняемым процессом&lt;br /&gt;
    for ($i=1; $i&amp;lt;=333; $i++)&lt;br /&gt;
    {&lt;br /&gt;
        ''// номер текущей выполняемой задачи''&lt;br /&gt;
        $cur_task  = $i;&lt;br /&gt;
        ''// общее количество задач, которое надо выполнить их количество можно менять в ходе выполнения процесса''&lt;br /&gt;
        ''(например, если сразу неясно сколько точно шагов будет у цикла)''&lt;br /&gt;
        $num_tasks = 333; &lt;br /&gt;
        ''// внутри цикла производим все трудоемкие операции...''&lt;br /&gt;
        &lt;br /&gt;
        ...&lt;br /&gt;
        &lt;br /&gt;
        sleep(0.1);''// '''для теста''': чтобы было видно как ползет полоска''&lt;br /&gt;
        ''// после того как проведены все операции увеличиваем длину полоски на чуть-чуть''&lt;br /&gt;
        $progressbar-&amp;gt;'''set_percent_adv'''($cur_task,$num_tasks);&lt;br /&gt;
    }&lt;/div&gt;</summary>
		<author><name>Dido86</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/widgets&amp;diff=2541</id>
		<title>Разработка:modlibs/widgets</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/widgets&amp;diff=2541"/>
				<updated>2012-03-06T13:29:11Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* notice_yesno($message, $linkyes, $linkno, $optionsyes=NULL, $optionsno=NULL, $methodyes='post', $methodno='post') */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = widgets&lt;br /&gt;
| type = modlibs&lt;br /&gt;
}}&lt;br /&gt;
== Описание ==&lt;br /&gt;
В этом плагине располагаются все виджеты - дополнительные средства визуального оформления интерфейса. &lt;br /&gt;
=== Структура папок ===&lt;br /&gt;
Для каждого виджета в папке widgets создается отдельная папка с его названием. Внутри этой папки должен лежать файл lib.php, в котором содержится класс виджета. Все дополнительные файлы, относящиеся к этому виджету (если они требуются) - должны лежать в этой же папке.&lt;br /&gt;
=== Стандарт именования классов ===&lt;br /&gt;
Все классы виджетов должны называться по схеме '''dof_modlib_widgets'''_''&amp;lt;название_виджета&amp;gt;''.&lt;br /&gt;
== API ==&lt;br /&gt;
=== webform() ===&lt;br /&gt;
Инициализировать библиотеку форм.&lt;br /&gt;
Этот метод отвечает за подключение библиотеки moodleQuickForm. Если вы хотите использовать moodleQuickForm, то она подключается только при помощи этого метода. Подключение класса moodleQuickForm (или moodleform) напрямую не допускается.&lt;br /&gt;
=== form_classname() === &lt;br /&gt;
Аналог метода webform. В настоящее время '''не используется'''. Он оставлен только для совместимости, не используйте его в новых функциях.&lt;br /&gt;
=== progressbar($name, $percent, $width, $process, $auto_create) === &lt;br /&gt;
Эта функция пригодится, если вам понадобится вывести прогрессбар - полоску, которая в реальном времени отображает ход выполнения какого-либо долгого процесса.&lt;br /&gt;
&lt;br /&gt;
Возвращает экземпляр класса ''dof_modlib_widgets_progress_bar''.&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$name'' - имя html-элемента. Если прогрессбаров несколько на странице, то имена не должны повторяться.&lt;br /&gt;
&lt;br /&gt;
''$percent'' - начальное процентное значение.&lt;br /&gt;
&lt;br /&gt;
''$width'' - длина в пикселях.&lt;br /&gt;
&lt;br /&gt;
''$process'' - название процесса, который выполняется в текущий момент (загрузка... сохранение... и т. п.)&lt;br /&gt;
&lt;br /&gt;
''$auto_create'' - для этого формата возможны два значения:&lt;br /&gt;
&lt;br /&gt;
true - сразу же отправить html-код прогрессбара в выходной поток. &lt;br /&gt;
false - только создать объект, не выводя progressbar.&lt;br /&gt;
По умолчанию true.&lt;br /&gt;
&lt;br /&gt;
=== pages_navigation() ===  - подключает класс pages_navigation. Служит для отображения ссылок на страницы при постраничном выводе списка данных.&lt;br /&gt;
&lt;br /&gt;
''$code'' - код плагина, для которого будут созданы ссылки на страницы.&lt;br /&gt;
&lt;br /&gt;
''$recordscount'' - общее количество записей на всех страницах&lt;br /&gt;
&lt;br /&gt;
''$limitnum'' - по сколько записей нужно выводить на одной странице. По умолчанию NULL (вывести все на одной странице)&lt;br /&gt;
&lt;br /&gt;
''$limitfrom'' - начиная с какой записи начать выводить список.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== notice_yesno($message, $linkyes, $linkno, $optionsyes=NULL, $optionsno=NULL, $methodyes='post', $methodno='post') === &lt;br /&gt;
&lt;br /&gt;
Выводит сообщение подтверждение да/нет для дальнейшей работы с пользователем&lt;br /&gt;
&lt;br /&gt;
''$message'' - сообщение при выборе действия(Пр: Вы действительно хотите это удалить ???)&lt;br /&gt;
&lt;br /&gt;
''$linkyes'' - url для перехода(redirect) при нажатии на кнопку &amp;quot;ДА&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''$linkno''  - url для перехода(redirect) при нажатии на кнопку &amp;quot;НЕТ&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''$optionsyes'' - начиная с какой записи начать выводить список.&lt;br /&gt;
&lt;br /&gt;
''$optionsno''  - общее количество записей на всех страницах&lt;br /&gt;
&lt;br /&gt;
''$methodyes'' - метод передачи данных для кноки ДА(по умолчанию &amp;quot;POST&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
''$methodno''  - метод передачи данных для кноки НЕТ(по умолчанию &amp;quot;POST&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== print_table($table, $return=false) === &lt;br /&gt;
&lt;br /&gt;
Распечатывает хорошо отформатированную таблицу, использующую текущую тему оформления moodle&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$table'' - стандартный объект со следующими свойствами&lt;br /&gt;
* $table-&amp;gt;head - Массив заголовков таблицы. (если не задан - выведутся только данные)&lt;br /&gt;
* $table-&amp;gt;align - Массив, который хранит параметры горизонтального выравнивания текста в колонках&lt;br /&gt;
* $table-&amp;gt;size  - Массив размеров колонок&lt;br /&gt;
* $table-&amp;gt;wrap - Массив, отвечающий за возможность переноса текста внутри колонки. Возможные значения:&lt;br /&gt;
** wrap (переносить)&lt;br /&gt;
** nowrap (не переносить)&lt;br /&gt;
* $table-&amp;gt;data[] - Массив, каждый элемент которого является массивом значений строки таблицы&lt;br /&gt;
* $table-&amp;gt;width  - ширина таблицы в пикселях или процентах&lt;br /&gt;
* $table-&amp;gt;tablealign  - Расположение всей таблицы&lt;br /&gt;
* $table-&amp;gt;cellpadding  - html-параметр cellpadding&lt;br /&gt;
* $table-&amp;gt;cellspacing  - html-параметр cellspacing&lt;br /&gt;
* $table-&amp;gt;class - html-параметр &amp;quot;class&amp;quot;, отвечающий за то, какой &lt;br /&gt;
** стиль должен быть сопоставлен этой таблице&lt;br /&gt;
* $table-&amp;gt;id - html-параметр &amp;quot;id&amp;quot; для использования getElementById()&lt;br /&gt;
* $table-&amp;gt;rowclass[] - массив названий css-классов для добавления их к специальным рядам&lt;br /&gt;
* $table-&amp;gt;summary - общее описание содержимого таблицы.&lt;br /&gt;
&lt;br /&gt;
''$return'' - если true, то таблица не будет распечатана, а будет возвращен только ее код&lt;br /&gt;
&lt;br /&gt;
=== print_box_start($classes='generalbox', $ids=' ', $return=false) === &lt;br /&gt;
&lt;br /&gt;
Распечатывает начало блока (запуск окна с помощью дива)&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$classes'' - имена классов через пробел(по умолчанию generalbox)&lt;br /&gt;
&lt;br /&gt;
''$ids''     - имена id через пробел&lt;br /&gt;
&lt;br /&gt;
''$return''  - возвращает как строку или просто распечатывает его&lt;br /&gt;
&lt;br /&gt;
Возвращает смешанную строку или ничего&lt;br /&gt;
&lt;br /&gt;
=== print_box_end($return=false) === &lt;br /&gt;
&lt;br /&gt;
Распечатывает конец блока &lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$return''  - возвращает как строку или просто распечатывает его&lt;br /&gt;
&lt;br /&gt;
Возвращает смешанную строку или ничего&lt;br /&gt;
&lt;br /&gt;
=== js_init() === &lt;br /&gt;
Подключить js-библиотеку (вместе со стилями) или набор скриптов, по переданному коду. Все виждеты, которые используют javascript должны использовать эту функцию для подключения своих скриптов.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
- $code - код библиотеки которую следует подключить&lt;br /&gt;
&lt;br /&gt;
В качестве кода используется собственное название библиотеки внутри  FDO, например &amp;quot;jquery&amp;quot;. Функция по коду определяет, какой именно список скриптов и стилей нужно подключить.&lt;br /&gt;
&lt;br /&gt;
=== ifield() === &lt;br /&gt;
Получить объект интерактивно редактируемого поля. То есть текст, на который кликаешь, а он становится полем редактирования и через ajax отправляет сохраненные данные.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
* $plugintype - тип плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $plugincode - код плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $queryname - тип запроса (тип запроса - как правило имя поля)&lt;br /&gt;
* $objectid - id объекта, который редактируется&lt;br /&gt;
* $type - тип элемента. Это параметра type для тега input. Допустимые значения: text, textarea, select&lt;br /&gt;
* $text - текст, который отображается на элементе до редактирования&lt;br /&gt;
* $options - массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования. По умолчанию null.&lt;br /&gt;
&lt;br /&gt;
При обращении к этому методу также автоматически подключаются все js-библиотеки, которые нужны для отображения и работы этого элемента, поэтому его следует вызывать до вывода заголовка (print_header)&lt;br /&gt;
&lt;br /&gt;
=== save_ifield() ===&lt;br /&gt;
Сохранить данные при inline-редактировании. Сохраняет одно поле. Ищет в переданном плагине функцию '''widgets_save_field''', и передает в нее тип запроса ($querytype), id объекта ($objectid) и новое значение поля ($data). Если такой функции нет - возвращает ошибку.&lt;br /&gt;
&lt;br /&gt;
Функция '''widgets_save_field''' должна вернуть либо новое, измененное значение поля, либо html-код ошибки.&lt;br /&gt;
&lt;br /&gt;
* $plugintype - тип плагина, который отвечает за сохранение поля&lt;br /&gt;
* $plugincode - код плагина, который отвечает за редактирование поля&lt;br /&gt;
* $querytype - уникальный код запроса внутри плагина. Как правило - имя сохраняемого поля&lt;br /&gt;
* $objectid - id объекта, поля которого редактируются&lt;br /&gt;
* $data - данные в формате json (или просто строка), пришедшие из формы редактирования объекта. &lt;br /&gt;
 &lt;br /&gt;
Возвращает новое, обновленное значение параметра из базы, или html-код ошибки.&lt;br /&gt;
&lt;br /&gt;
=== load_ifield() ===&lt;br /&gt;
Загрузить данные для inline-редактирования поля. Этот метод вызывается непосредственно перед редактированием поля, загружая значения из базы, для того чтобы пользователю, который редактирует данные, предоставлялась максимально актуальная информация. Ищет в плагине функцию '''widgets_load_field''' , и передает в нее название поля ($querytype), id объекта ($objectid) и новое значение поля ($data). Если такой функции нет - возвращает ошибку.&lt;br /&gt;
&lt;br /&gt;
Функция '''widgets_load_field''' должна вернуть либо значение поля, либо html-код ошибки.&lt;br /&gt;
&lt;br /&gt;
* $plugintype - тип плагина, который отвечает за редактироване поля&lt;br /&gt;
* $plugincode - код плагина, который отвечает за редактироване поля&lt;br /&gt;
* $fieldname - поле объекта, которое нужно запросить&lt;br /&gt;
* $objectid - id объекта, который редактируется&lt;br /&gt;
* $data - дополнительные данные для загрузки объекта&lt;br /&gt;
&lt;br /&gt;
Возвращает значение поля, которое будет отображаться в редактируемом элементе.&lt;br /&gt;
&lt;br /&gt;
== Дополнительные классы ==&lt;br /&gt;
=== dof_modlib_widgets_progress_bar ===&lt;br /&gt;
* '''__construct'''($name, $percent, $width, $process, $auto_create)&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$name'' - имя html-элемента. Если прогрессбаров несколько на странице, то имена не должны повторяться.&lt;br /&gt;
&lt;br /&gt;
''$percent'' - начальное процентное значение.&lt;br /&gt;
&lt;br /&gt;
''$width'' - длина в пикселях.&lt;br /&gt;
&lt;br /&gt;
''$process'' - название процесса, который выполняется в текущий момент (загрузка... сохранение... и т. п.)&lt;br /&gt;
&lt;br /&gt;
''$auto_create'' - для этого формата возможны два значения:&lt;br /&gt;
&lt;br /&gt;
true - сразу же отправить html-код прогрессбара в выходной поток. &lt;br /&gt;
false - только создать объект, не выводя progressbar.&lt;br /&gt;
По умолчанию true.&lt;br /&gt;
* '''create'''() - вывести html-код прогрессбара в браузер. Эту функцию не нужно использовать, в случае если в конструкторе $auto_create стоит true.&lt;br /&gt;
* '''set_name'''($name) - установить имя html-элемента, которым является прогрессбар. Внутренний метод, вызывается из конструктора.&lt;br /&gt;
* '''set_percent'''($percent) - установить начальное процентное значение для полоски прогрессбара. &lt;br /&gt;
$percent - количество начальных процентов, от 0 до 100.&lt;br /&gt;
* '''set_percent_adv'''($cur_amount,$max_amount) - увеличить полоску прогрессбара. Полоска увеличивается в зависимости от того, сколько задач уже выполнено, а сколько еще осталось.&lt;br /&gt;
&lt;br /&gt;
''$cur_amount'' - количество уже выполненных задач&lt;br /&gt;
&lt;br /&gt;
''$max_amount'' - общее количество задач, которое надо выполнить.&lt;br /&gt;
* '''set_width'''($width) - установить длину прогрессбара в пикселях. Внутренний метод, используется из конструктора.&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_form ===&lt;br /&gt;
Класс, наследующий moodleform. Имеет собственные методы, предназначенные для работы с нашими модулями  Подробнее об использовании moodleQuickForm можно прочитать в разделе [[Разработка:Стандарт_кодирования#Работа с moodleQuickForm|Работа с moodleQuickForm]].&lt;br /&gt;
&lt;br /&gt;
==== dof_get_select_values() ====&lt;br /&gt;
&lt;br /&gt;
Получить массив, пригодный для составления элементов select и hierselect.&lt;br /&gt;
&lt;br /&gt;
''Параметры''&lt;br /&gt;
* $records - массив записей из storage. Ожидаемый формат данных - массив объектов. По умолчанию false.&lt;br /&gt;
* $firstelm - (по умолчанию - true) задать первый элемент списка. Возможные значения: &lt;br /&gt;
** true - нужен стандартый первый элемент array(0 =&amp;gt; '--- Выбрать ---')&lt;br /&gt;
** false - первый элемент не нужен&lt;br /&gt;
** массив в формате &amp;quot;ключ&amp;quot;=&amp;gt;&amp;quot;значение&amp;quot; из одного, или нескольких элементов, которые нужно добавить в начало списка&lt;br /&gt;
* $key - какое поле БД использовать в качестве ключа (это значение отправится формой). По умолчанию 'id' &lt;br /&gt;
* $namefields - одно или несколько полей, которые будут видны пользователю в списке. Каждое последующее поле после первого будет заключено в квадратные скобки. По умолчанию 'name'. Формат:&lt;br /&gt;
** строка: если отобразить нужно только одно поле&lt;br /&gt;
** массив, с названиями полей - если полей нужно несколько. Поля выведутся именно в том порядке, в котором вы их указали&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* array - массив для составления select-элемента&lt;br /&gt;
* bool - false в случае ошибки. Возможные ошибки:&lt;br /&gt;
** В переданном списке у объектов нет нужных полей&lt;br /&gt;
** Для ключа массива есть неуникальные значения&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_pages_navigation ===&lt;br /&gt;
* '''__construct'''($dof, $code, $count, $limitnum=NULL, $limitfrom) - конструктор класса. Осуществляет все проверки данных.&lt;br /&gt;
** ''$dof'' - объект класса [[Разработка:lib/dof.php|dof_control]]&lt;br /&gt;
** ''$code'' - код плагина, для которого будут созданы ссылки на страницы.&lt;br /&gt;
** ''$count'' - общее количество записей на всех страницах&lt;br /&gt;
** ''$limitnum'' - по сколько записей нужно выводить на одной странице. По умолчанию NULL (вывести все на одной странице).&lt;br /&gt;
** ''$limitfrom'' - начиная с какой записи начать выводить список.&lt;br /&gt;
* '''get_navpages_list'''($adds, $vars) - Возвращает html-строку навигации, разбивая ленту таблицы или списка на страницы. Нумерация страница всегда начинается с единицы&lt;br /&gt;
** ''$adds'' - дополнительный путь внутри плагина, и список дополнительных параметров для ссылки в виде строки&lt;br /&gt;
** ''$vars'' - список дополнительных параметров для ссылки в виде массива в формате '' &amp;quot;ключ&amp;quot; =&amp;gt; &amp;quot;значение&amp;quot; ''&lt;br /&gt;
* '''get_page_link'''($pagenum, $limitfrom, $adds, $vars) - Возвращает ссылку на страницу или  страницу без ссылки, если она является текущей.&lt;br /&gt;
** $pagenum - номер страницы&lt;br /&gt;
** $limitfrom - номер записи, с которой начинается просмотр&lt;br /&gt;
** $adds - дополнительный путь внутри плагина, и список дополнительных параметров для ссылки в виде строки&lt;br /&gt;
** $vars - список дополнительных параметров для ссылки в виде массива в формате '' &amp;quot;ключ&amp;quot; =&amp;gt; &amp;quot;значение&amp;quot; ''&lt;br /&gt;
* '''get_current_page'''() - Получить номер страницы по номеру текущей записи, и количеству записей на странице&lt;br /&gt;
* '''get_total_pages'''() - Возвращает общее количество страниц для отображения&lt;br /&gt;
* '''get_current_limitfrom'''() - Возвращает исходный параметр номера записи, с которого начинается просмотр&lt;br /&gt;
* '''get_current_limitnum'''() - Возвращает исходный параметр минимального количества записей на странице&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_addremove ===&lt;br /&gt;
Класс для составления стандартного элемента &amp;quot;добавить\удалить&amp;quot;. Элемент представляет собой двусторонний список с двумя html-элементами Select. Используется для автоматизации процесса добавления и удаления элементов из какой-либо категории или группы. Позволяет одновременно передавать несколько элементов.&lt;br /&gt;
* '''__construct'''($DOF, $action='', $formid='dof_modlib_widgets_addremove') - конструктор класса.&lt;br /&gt;
** $DOF объект класса dof_control&lt;br /&gt;
** $action - ссылка на страницу-обработчик формы. По умолчанию - эта же страница.&lt;br /&gt;
** $formid - id html-элемента на странице. Используется для скрипта, который делает кнопки &amp;quot;добавить&amp;quot; или &amp;quot;удалить&amp;quot; неактивными, в зависимости от того, какое из полей select выбрано.&lt;br /&gt;
* '''set_default_strings'''($values)&lt;br /&gt;
* '''set_add_list'''($options, $extradata=null)&lt;br /&gt;
* '''set_remove_list'''($options, $extradata=null)&lt;br /&gt;
* '''set_complex_add_list'''($options)&lt;br /&gt;
* '''set_complex_remove_list'''($options)&lt;br /&gt;
* '''check_add_remove_array'''($data) - проверить пришедший из формы массив элементов для добавления или удаления.&lt;br /&gt;
** $data - массив элементов, пришедший из $_POST&lt;br /&gt;
** Возвращаемое значение: (array) - массив числовых значений идентификаторов.&lt;br /&gt;
* '''print_html'''() - распечатать html-код элемента.&lt;br /&gt;
* '''get_html'''() - получить html-код элемента для последующей распечатки.&lt;br /&gt;
* '''assemble_templater_data'''() - Внутренний метод. &lt;br /&gt;
* '''get_complex_options_template_data'''($groups, $type) - Внутренний метод.&lt;br /&gt;
* '''get_simple_options_template_data'''($options, $extradata=null) - Внутренний метод.&lt;br /&gt;
* '''get_search_default_strings'''()  - Внутренний метод.&lt;br /&gt;
* '''get_form_default_strings'''()  - Внутренний метод.&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_ifield ===&lt;br /&gt;
Класс, отвечающий за элемент inline-редактирования. Создает элемент, который при помощи AJAX-запросов &lt;br /&gt;
&lt;br /&gt;
==== __construct() ====&lt;br /&gt;
&lt;br /&gt;
Параметры&lt;br /&gt;
* $dof - объект класса dof_control&lt;br /&gt;
* $plugintype - тип плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $plugincode - код плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $queryname - тип запроса (тип запроса - как правило имя поля)&lt;br /&gt;
* $objectid - id объекта, который редактируется&lt;br /&gt;
* $type - тип элемента. Это параметра type для тега input. Допустимые значения: text, textarea, select&lt;br /&gt;
* $text - текст, который отображается на элементе до редактирования&lt;br /&gt;
* $options - массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования. По умолчанию null.&lt;br /&gt;
&lt;br /&gt;
В конструкторе также автоматически подключаются все js-библиотеки, которые нужны для отображения и работы этого элемента, поэтому его следует вызывать до вывода заголовка.&lt;br /&gt;
&lt;br /&gt;
==== get_html() ====&lt;br /&gt;
Получить html-код элемента. После создания объекта этот метод можно вызывать несколько раз, каждый раз указывая новый id. Все нужные параметры (текст скрипта, и т. п.) будут пересчитаны автоматически.&lt;br /&gt;
&lt;br /&gt;
Параметры&lt;br /&gt;
* $objectid - id редактируемого объекта&lt;br /&gt;
* $text - текст, который отображается вместо элемента, пока не нажата кнопка &amp;quot;редактировать&amp;quot;. Разрешено html-форматирование&lt;br /&gt;
* $options - Массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования.&lt;br /&gt;
&lt;br /&gt;
==== display() ====&lt;br /&gt;
Вывести элемент.  После создания объекта этот метод можно вызывать несколько раз, каждый раз указывая новый id. Все нужные параметры (текст скрипта, и т. п.) будут пересчитаны автоматически.&lt;br /&gt;
&lt;br /&gt;
Параметры&lt;br /&gt;
* $objectid - id редактируемого объекта&lt;br /&gt;
* $text - текст, который отображается вместо элемента, пока не нажата кнопка &amp;quot;редактировать&amp;quot;. Разрешено html-форматирование&lt;br /&gt;
* $options - Массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования.&lt;br /&gt;
&lt;br /&gt;
==== set_options() ====&lt;br /&gt;
Метод для установки параметров класса вручную. Используется в том случае, когда всех приведенных выше методов недостаточно.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
* $options - массив свойств класса в формате ключ-значение.&lt;br /&gt;
&lt;br /&gt;
== Примеры кода ==&lt;br /&gt;
==== Стандартные формы ====&lt;br /&gt;
Здесь будут приведены примеры работы с классов dof_modlib_widgets_form. Этот класс наследует находящийся в moodle класс moodleform. Подробнее о нем можно посмотреть в разделе: [[Разработка:moodleQuickForm]]&lt;br /&gt;
===== Подключение библиотеки форм =====&lt;br /&gt;
    $DOF-&amp;gt;modlib('widgets')-&amp;gt;'''webform'''();&lt;br /&gt;
===== Получение массива нужного формата для составления select-элементов =====&lt;br /&gt;
&lt;br /&gt;
    ''// получаем список всех учебных периодов из нашей таблицы &amp;quot;ages&amp;quot;&lt;br /&gt;
    // Отсортированных по названию''&lt;br /&gt;
    $ages = $this-&amp;gt;dof-&amp;gt;storage('ages')-&amp;gt;get_list(null, null, &amp;quot;name ASC&amp;quot;)&lt;br /&gt;
    ''// задаем массив из нескольких собственных первых элементов для списка:&lt;br /&gt;
    // они добавятся в начало''&lt;br /&gt;
    $firstelms = array(54 =&amp;gt; 'Элемент 1', 'abc' =&amp;gt; 'Элемент 2');&lt;br /&gt;
    ''// указываем, какое поле из массива объектов нужно брать в качестве ключа &lt;br /&gt;
    // (значения должны быть уникальными!)''&lt;br /&gt;
    $idfield = 'id';&lt;br /&gt;
    ''// указываем, какие поля БД нужно выводить пользователю''&lt;br /&gt;
    $showfields = array('name', 'eduweeks');&lt;br /&gt;
    ''// получаем массив нужной структуры для составления select-элемента.''&lt;br /&gt;
    $selectdata = $this-&amp;gt;'''dof_get_select_values'''($ages, $firstelms, $idfield, $showfields);&lt;br /&gt;
&lt;br /&gt;
==== Использование прогрессбара ====&lt;br /&gt;
&lt;br /&gt;
1. Устанавливаем параметры&lt;br /&gt;
    $name        = 'pbar'; ''// имя html-элемента, только латинские буквы''&lt;br /&gt;
    $percent     = 1;      ''// начинаем с отметки 1%''&lt;br /&gt;
    $width       = 200;    ''// длинна полоски 200 пикселей''&lt;br /&gt;
    $process     = 'Идет сохранение...'; ''// какой процесс происходит''&lt;br /&gt;
    $auto_create = true;   ''// вывести прогрессбар сразу же после создания объекта''&lt;br /&gt;
2. Создаем нужный объект&lt;br /&gt;
    $progressbar = $DOF-&amp;gt;modlib('widgets')-&amp;gt;'''progressbar'''($name, $percent, $width, $process, $auto_create)&lt;br /&gt;
3. Вставляем прогрессбар внутрь цикла с выполняемым процессом&lt;br /&gt;
    for ($i=1; $i&amp;lt;=333; $i++)&lt;br /&gt;
    {&lt;br /&gt;
        ''// номер текущей выполняемой задачи''&lt;br /&gt;
        $cur_task  = $i;&lt;br /&gt;
        ''// общее количество задач, которое надо выполнить их количество можно менять в ходе выполнения процесса''&lt;br /&gt;
        ''(например, если сразу неясно сколько точно шагов будет у цикла)''&lt;br /&gt;
        $num_tasks = 333; &lt;br /&gt;
        ''// внутри цикла производим все трудоемкие операции...''&lt;br /&gt;
        &lt;br /&gt;
        ...&lt;br /&gt;
        &lt;br /&gt;
        sleep(0.1);''// '''для теста''': чтобы было видно как ползет полоска''&lt;br /&gt;
        ''// после того как проведены все операции увеличиваем длину полоски на чуть-чуть''&lt;br /&gt;
        $progressbar-&amp;gt;'''set_percent_adv'''($cur_task,$num_tasks);&lt;br /&gt;
    }&lt;/div&gt;</summary>
		<author><name>Dido86</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/widgets&amp;diff=2540</id>
		<title>Разработка:modlibs/widgets</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/widgets&amp;diff=2540"/>
				<updated>2012-03-06T13:23:13Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* notice_yesno($message, $linkyes, $linkno, $optionsyes=NULL, $optionsno=NULL, $methodyes='post', $methodno='post') */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = widgets&lt;br /&gt;
| type = modlibs&lt;br /&gt;
}}&lt;br /&gt;
== Описание ==&lt;br /&gt;
В этом плагине располагаются все виджеты - дополнительные средства визуального оформления интерфейса. &lt;br /&gt;
=== Структура папок ===&lt;br /&gt;
Для каждого виджета в папке widgets создается отдельная папка с его названием. Внутри этой папки должен лежать файл lib.php, в котором содержится класс виджета. Все дополнительные файлы, относящиеся к этому виджету (если они требуются) - должны лежать в этой же папке.&lt;br /&gt;
=== Стандарт именования классов ===&lt;br /&gt;
Все классы виджетов должны называться по схеме '''dof_modlib_widgets'''_''&amp;lt;название_виджета&amp;gt;''.&lt;br /&gt;
== API ==&lt;br /&gt;
=== webform() ===&lt;br /&gt;
Инициализировать библиотеку форм.&lt;br /&gt;
Этот метод отвечает за подключение библиотеки moodleQuickForm. Если вы хотите использовать moodleQuickForm, то она подключается только при помощи этого метода. Подключение класса moodleQuickForm (или moodleform) напрямую не допускается.&lt;br /&gt;
=== form_classname() === &lt;br /&gt;
Аналог метода webform. В настоящее время '''не используется'''. Он оставлен только для совместимости, не используйте его в новых функциях.&lt;br /&gt;
=== progressbar($name, $percent, $width, $process, $auto_create) === &lt;br /&gt;
Эта функция пригодится, если вам понадобится вывести прогрессбар - полоску, которая в реальном времени отображает ход выполнения какого-либо долгого процесса.&lt;br /&gt;
&lt;br /&gt;
Возвращает экземпляр класса ''dof_modlib_widgets_progress_bar''.&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$name'' - имя html-элемента. Если прогрессбаров несколько на странице, то имена не должны повторяться.&lt;br /&gt;
&lt;br /&gt;
''$percent'' - начальное процентное значение.&lt;br /&gt;
&lt;br /&gt;
''$width'' - длина в пикселях.&lt;br /&gt;
&lt;br /&gt;
''$process'' - название процесса, который выполняется в текущий момент (загрузка... сохранение... и т. п.)&lt;br /&gt;
&lt;br /&gt;
''$auto_create'' - для этого формата возможны два значения:&lt;br /&gt;
&lt;br /&gt;
true - сразу же отправить html-код прогрессбара в выходной поток. &lt;br /&gt;
false - только создать объект, не выводя progressbar.&lt;br /&gt;
По умолчанию true.&lt;br /&gt;
&lt;br /&gt;
=== pages_navigation() ===  - подключает класс pages_navigation. Служит для отображения ссылок на страницы при постраничном выводе списка данных.&lt;br /&gt;
&lt;br /&gt;
''$code'' - код плагина, для которого будут созданы ссылки на страницы.&lt;br /&gt;
&lt;br /&gt;
''$recordscount'' - общее количество записей на всех страницах&lt;br /&gt;
&lt;br /&gt;
''$limitnum'' - по сколько записей нужно выводить на одной странице. По умолчанию NULL (вывести все на одной странице)&lt;br /&gt;
&lt;br /&gt;
''$limitfrom'' - начиная с какой записи начать выводить список.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== notice_yesno($message, $linkyes, $linkno, $optionsyes=NULL, $optionsno=NULL, $methodyes='post', $methodno='post') === &lt;br /&gt;
&lt;br /&gt;
Выводит сообщение подтверждение да/нет для дальнейшей работы с пользователем&lt;br /&gt;
&lt;br /&gt;
''$message'' - код плагина, для которого будут созданы ссылки на страницы.&lt;br /&gt;
&lt;br /&gt;
''$linkyes'' - общее количество записей на всех страницах&lt;br /&gt;
&lt;br /&gt;
''$linkno'' - по сколько записей нужно выводить на одной странице. По умолчанию NULL (вывести все на одной странице)&lt;br /&gt;
&lt;br /&gt;
''$optionsyes'' - начиная с какой записи начать выводить список.&lt;br /&gt;
&lt;br /&gt;
''$optionsno'' - общее количество записей на всех страницах&lt;br /&gt;
&lt;br /&gt;
''$methodyes'' - по сколько записей нужно выводить на одной странице. По умолчанию NULL (вывести все на одной странице)&lt;br /&gt;
&lt;br /&gt;
''$methodno'' - начиная с какой записи начать выводить список.&lt;br /&gt;
&lt;br /&gt;
=== print_table($table, $return=false) === &lt;br /&gt;
&lt;br /&gt;
Распечатывает хорошо отформатированную таблицу, использующую текущую тему оформления moodle&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$table'' - стандартный объект со следующими свойствами&lt;br /&gt;
* $table-&amp;gt;head - Массив заголовков таблицы. (если не задан - выведутся только данные)&lt;br /&gt;
* $table-&amp;gt;align - Массив, который хранит параметры горизонтального выравнивания текста в колонках&lt;br /&gt;
* $table-&amp;gt;size  - Массив размеров колонок&lt;br /&gt;
* $table-&amp;gt;wrap - Массив, отвечающий за возможность переноса текста внутри колонки. Возможные значения:&lt;br /&gt;
** wrap (переносить)&lt;br /&gt;
** nowrap (не переносить)&lt;br /&gt;
* $table-&amp;gt;data[] - Массив, каждый элемент которого является массивом значений строки таблицы&lt;br /&gt;
* $table-&amp;gt;width  - ширина таблицы в пикселях или процентах&lt;br /&gt;
* $table-&amp;gt;tablealign  - Расположение всей таблицы&lt;br /&gt;
* $table-&amp;gt;cellpadding  - html-параметр cellpadding&lt;br /&gt;
* $table-&amp;gt;cellspacing  - html-параметр cellspacing&lt;br /&gt;
* $table-&amp;gt;class - html-параметр &amp;quot;class&amp;quot;, отвечающий за то, какой &lt;br /&gt;
** стиль должен быть сопоставлен этой таблице&lt;br /&gt;
* $table-&amp;gt;id - html-параметр &amp;quot;id&amp;quot; для использования getElementById()&lt;br /&gt;
* $table-&amp;gt;rowclass[] - массив названий css-классов для добавления их к специальным рядам&lt;br /&gt;
* $table-&amp;gt;summary - общее описание содержимого таблицы.&lt;br /&gt;
&lt;br /&gt;
''$return'' - если true, то таблица не будет распечатана, а будет возвращен только ее код&lt;br /&gt;
&lt;br /&gt;
=== print_box_start($classes='generalbox', $ids=' ', $return=false) === &lt;br /&gt;
&lt;br /&gt;
Распечатывает начало блока (запуск окна с помощью дива)&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$classes'' - имена классов через пробел(по умолчанию generalbox)&lt;br /&gt;
&lt;br /&gt;
''$ids''     - имена id через пробел&lt;br /&gt;
&lt;br /&gt;
''$return''  - возвращает как строку или просто распечатывает его&lt;br /&gt;
&lt;br /&gt;
Возвращает смешанную строку или ничего&lt;br /&gt;
&lt;br /&gt;
=== print_box_end($return=false) === &lt;br /&gt;
&lt;br /&gt;
Распечатывает конец блока &lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$return''  - возвращает как строку или просто распечатывает его&lt;br /&gt;
&lt;br /&gt;
Возвращает смешанную строку или ничего&lt;br /&gt;
&lt;br /&gt;
=== js_init() === &lt;br /&gt;
Подключить js-библиотеку (вместе со стилями) или набор скриптов, по переданному коду. Все виждеты, которые используют javascript должны использовать эту функцию для подключения своих скриптов.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
- $code - код библиотеки которую следует подключить&lt;br /&gt;
&lt;br /&gt;
В качестве кода используется собственное название библиотеки внутри  FDO, например &amp;quot;jquery&amp;quot;. Функция по коду определяет, какой именно список скриптов и стилей нужно подключить.&lt;br /&gt;
&lt;br /&gt;
=== ifield() === &lt;br /&gt;
Получить объект интерактивно редактируемого поля. То есть текст, на который кликаешь, а он становится полем редактирования и через ajax отправляет сохраненные данные.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
* $plugintype - тип плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $plugincode - код плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $queryname - тип запроса (тип запроса - как правило имя поля)&lt;br /&gt;
* $objectid - id объекта, который редактируется&lt;br /&gt;
* $type - тип элемента. Это параметра type для тега input. Допустимые значения: text, textarea, select&lt;br /&gt;
* $text - текст, который отображается на элементе до редактирования&lt;br /&gt;
* $options - массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования. По умолчанию null.&lt;br /&gt;
&lt;br /&gt;
При обращении к этому методу также автоматически подключаются все js-библиотеки, которые нужны для отображения и работы этого элемента, поэтому его следует вызывать до вывода заголовка (print_header)&lt;br /&gt;
&lt;br /&gt;
=== save_ifield() ===&lt;br /&gt;
Сохранить данные при inline-редактировании. Сохраняет одно поле. Ищет в переданном плагине функцию '''widgets_save_field''', и передает в нее тип запроса ($querytype), id объекта ($objectid) и новое значение поля ($data). Если такой функции нет - возвращает ошибку.&lt;br /&gt;
&lt;br /&gt;
Функция '''widgets_save_field''' должна вернуть либо новое, измененное значение поля, либо html-код ошибки.&lt;br /&gt;
&lt;br /&gt;
* $plugintype - тип плагина, который отвечает за сохранение поля&lt;br /&gt;
* $plugincode - код плагина, который отвечает за редактирование поля&lt;br /&gt;
* $querytype - уникальный код запроса внутри плагина. Как правило - имя сохраняемого поля&lt;br /&gt;
* $objectid - id объекта, поля которого редактируются&lt;br /&gt;
* $data - данные в формате json (или просто строка), пришедшие из формы редактирования объекта. &lt;br /&gt;
 &lt;br /&gt;
Возвращает новое, обновленное значение параметра из базы, или html-код ошибки.&lt;br /&gt;
&lt;br /&gt;
=== load_ifield() ===&lt;br /&gt;
Загрузить данные для inline-редактирования поля. Этот метод вызывается непосредственно перед редактированием поля, загружая значения из базы, для того чтобы пользователю, который редактирует данные, предоставлялась максимально актуальная информация. Ищет в плагине функцию '''widgets_load_field''' , и передает в нее название поля ($querytype), id объекта ($objectid) и новое значение поля ($data). Если такой функции нет - возвращает ошибку.&lt;br /&gt;
&lt;br /&gt;
Функция '''widgets_load_field''' должна вернуть либо значение поля, либо html-код ошибки.&lt;br /&gt;
&lt;br /&gt;
* $plugintype - тип плагина, который отвечает за редактироване поля&lt;br /&gt;
* $plugincode - код плагина, который отвечает за редактироване поля&lt;br /&gt;
* $fieldname - поле объекта, которое нужно запросить&lt;br /&gt;
* $objectid - id объекта, который редактируется&lt;br /&gt;
* $data - дополнительные данные для загрузки объекта&lt;br /&gt;
&lt;br /&gt;
Возвращает значение поля, которое будет отображаться в редактируемом элементе.&lt;br /&gt;
&lt;br /&gt;
== Дополнительные классы ==&lt;br /&gt;
=== dof_modlib_widgets_progress_bar ===&lt;br /&gt;
* '''__construct'''($name, $percent, $width, $process, $auto_create)&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$name'' - имя html-элемента. Если прогрессбаров несколько на странице, то имена не должны повторяться.&lt;br /&gt;
&lt;br /&gt;
''$percent'' - начальное процентное значение.&lt;br /&gt;
&lt;br /&gt;
''$width'' - длина в пикселях.&lt;br /&gt;
&lt;br /&gt;
''$process'' - название процесса, который выполняется в текущий момент (загрузка... сохранение... и т. п.)&lt;br /&gt;
&lt;br /&gt;
''$auto_create'' - для этого формата возможны два значения:&lt;br /&gt;
&lt;br /&gt;
true - сразу же отправить html-код прогрессбара в выходной поток. &lt;br /&gt;
false - только создать объект, не выводя progressbar.&lt;br /&gt;
По умолчанию true.&lt;br /&gt;
* '''create'''() - вывести html-код прогрессбара в браузер. Эту функцию не нужно использовать, в случае если в конструкторе $auto_create стоит true.&lt;br /&gt;
* '''set_name'''($name) - установить имя html-элемента, которым является прогрессбар. Внутренний метод, вызывается из конструктора.&lt;br /&gt;
* '''set_percent'''($percent) - установить начальное процентное значение для полоски прогрессбара. &lt;br /&gt;
$percent - количество начальных процентов, от 0 до 100.&lt;br /&gt;
* '''set_percent_adv'''($cur_amount,$max_amount) - увеличить полоску прогрессбара. Полоска увеличивается в зависимости от того, сколько задач уже выполнено, а сколько еще осталось.&lt;br /&gt;
&lt;br /&gt;
''$cur_amount'' - количество уже выполненных задач&lt;br /&gt;
&lt;br /&gt;
''$max_amount'' - общее количество задач, которое надо выполнить.&lt;br /&gt;
* '''set_width'''($width) - установить длину прогрессбара в пикселях. Внутренний метод, используется из конструктора.&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_form ===&lt;br /&gt;
Класс, наследующий moodleform. Имеет собственные методы, предназначенные для работы с нашими модулями  Подробнее об использовании moodleQuickForm можно прочитать в разделе [[Разработка:Стандарт_кодирования#Работа с moodleQuickForm|Работа с moodleQuickForm]].&lt;br /&gt;
&lt;br /&gt;
==== dof_get_select_values() ====&lt;br /&gt;
&lt;br /&gt;
Получить массив, пригодный для составления элементов select и hierselect.&lt;br /&gt;
&lt;br /&gt;
''Параметры''&lt;br /&gt;
* $records - массив записей из storage. Ожидаемый формат данных - массив объектов. По умолчанию false.&lt;br /&gt;
* $firstelm - (по умолчанию - true) задать первый элемент списка. Возможные значения: &lt;br /&gt;
** true - нужен стандартый первый элемент array(0 =&amp;gt; '--- Выбрать ---')&lt;br /&gt;
** false - первый элемент не нужен&lt;br /&gt;
** массив в формате &amp;quot;ключ&amp;quot;=&amp;gt;&amp;quot;значение&amp;quot; из одного, или нескольких элементов, которые нужно добавить в начало списка&lt;br /&gt;
* $key - какое поле БД использовать в качестве ключа (это значение отправится формой). По умолчанию 'id' &lt;br /&gt;
* $namefields - одно или несколько полей, которые будут видны пользователю в списке. Каждое последующее поле после первого будет заключено в квадратные скобки. По умолчанию 'name'. Формат:&lt;br /&gt;
** строка: если отобразить нужно только одно поле&lt;br /&gt;
** массив, с названиями полей - если полей нужно несколько. Поля выведутся именно в том порядке, в котором вы их указали&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* array - массив для составления select-элемента&lt;br /&gt;
* bool - false в случае ошибки. Возможные ошибки:&lt;br /&gt;
** В переданном списке у объектов нет нужных полей&lt;br /&gt;
** Для ключа массива есть неуникальные значения&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_pages_navigation ===&lt;br /&gt;
* '''__construct'''($dof, $code, $count, $limitnum=NULL, $limitfrom) - конструктор класса. Осуществляет все проверки данных.&lt;br /&gt;
** ''$dof'' - объект класса [[Разработка:lib/dof.php|dof_control]]&lt;br /&gt;
** ''$code'' - код плагина, для которого будут созданы ссылки на страницы.&lt;br /&gt;
** ''$count'' - общее количество записей на всех страницах&lt;br /&gt;
** ''$limitnum'' - по сколько записей нужно выводить на одной странице. По умолчанию NULL (вывести все на одной странице).&lt;br /&gt;
** ''$limitfrom'' - начиная с какой записи начать выводить список.&lt;br /&gt;
* '''get_navpages_list'''($adds, $vars) - Возвращает html-строку навигации, разбивая ленту таблицы или списка на страницы. Нумерация страница всегда начинается с единицы&lt;br /&gt;
** ''$adds'' - дополнительный путь внутри плагина, и список дополнительных параметров для ссылки в виде строки&lt;br /&gt;
** ''$vars'' - список дополнительных параметров для ссылки в виде массива в формате '' &amp;quot;ключ&amp;quot; =&amp;gt; &amp;quot;значение&amp;quot; ''&lt;br /&gt;
* '''get_page_link'''($pagenum, $limitfrom, $adds, $vars) - Возвращает ссылку на страницу или  страницу без ссылки, если она является текущей.&lt;br /&gt;
** $pagenum - номер страницы&lt;br /&gt;
** $limitfrom - номер записи, с которой начинается просмотр&lt;br /&gt;
** $adds - дополнительный путь внутри плагина, и список дополнительных параметров для ссылки в виде строки&lt;br /&gt;
** $vars - список дополнительных параметров для ссылки в виде массива в формате '' &amp;quot;ключ&amp;quot; =&amp;gt; &amp;quot;значение&amp;quot; ''&lt;br /&gt;
* '''get_current_page'''() - Получить номер страницы по номеру текущей записи, и количеству записей на странице&lt;br /&gt;
* '''get_total_pages'''() - Возвращает общее количество страниц для отображения&lt;br /&gt;
* '''get_current_limitfrom'''() - Возвращает исходный параметр номера записи, с которого начинается просмотр&lt;br /&gt;
* '''get_current_limitnum'''() - Возвращает исходный параметр минимального количества записей на странице&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_addremove ===&lt;br /&gt;
Класс для составления стандартного элемента &amp;quot;добавить\удалить&amp;quot;. Элемент представляет собой двусторонний список с двумя html-элементами Select. Используется для автоматизации процесса добавления и удаления элементов из какой-либо категории или группы. Позволяет одновременно передавать несколько элементов.&lt;br /&gt;
* '''__construct'''($DOF, $action='', $formid='dof_modlib_widgets_addremove') - конструктор класса.&lt;br /&gt;
** $DOF объект класса dof_control&lt;br /&gt;
** $action - ссылка на страницу-обработчик формы. По умолчанию - эта же страница.&lt;br /&gt;
** $formid - id html-элемента на странице. Используется для скрипта, который делает кнопки &amp;quot;добавить&amp;quot; или &amp;quot;удалить&amp;quot; неактивными, в зависимости от того, какое из полей select выбрано.&lt;br /&gt;
* '''set_default_strings'''($values)&lt;br /&gt;
* '''set_add_list'''($options, $extradata=null)&lt;br /&gt;
* '''set_remove_list'''($options, $extradata=null)&lt;br /&gt;
* '''set_complex_add_list'''($options)&lt;br /&gt;
* '''set_complex_remove_list'''($options)&lt;br /&gt;
* '''check_add_remove_array'''($data) - проверить пришедший из формы массив элементов для добавления или удаления.&lt;br /&gt;
** $data - массив элементов, пришедший из $_POST&lt;br /&gt;
** Возвращаемое значение: (array) - массив числовых значений идентификаторов.&lt;br /&gt;
* '''print_html'''() - распечатать html-код элемента.&lt;br /&gt;
* '''get_html'''() - получить html-код элемента для последующей распечатки.&lt;br /&gt;
* '''assemble_templater_data'''() - Внутренний метод. &lt;br /&gt;
* '''get_complex_options_template_data'''($groups, $type) - Внутренний метод.&lt;br /&gt;
* '''get_simple_options_template_data'''($options, $extradata=null) - Внутренний метод.&lt;br /&gt;
* '''get_search_default_strings'''()  - Внутренний метод.&lt;br /&gt;
* '''get_form_default_strings'''()  - Внутренний метод.&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_ifield ===&lt;br /&gt;
Класс, отвечающий за элемент inline-редактирования. Создает элемент, который при помощи AJAX-запросов &lt;br /&gt;
&lt;br /&gt;
==== __construct() ====&lt;br /&gt;
&lt;br /&gt;
Параметры&lt;br /&gt;
* $dof - объект класса dof_control&lt;br /&gt;
* $plugintype - тип плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $plugincode - код плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $queryname - тип запроса (тип запроса - как правило имя поля)&lt;br /&gt;
* $objectid - id объекта, который редактируется&lt;br /&gt;
* $type - тип элемента. Это параметра type для тега input. Допустимые значения: text, textarea, select&lt;br /&gt;
* $text - текст, который отображается на элементе до редактирования&lt;br /&gt;
* $options - массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования. По умолчанию null.&lt;br /&gt;
&lt;br /&gt;
В конструкторе также автоматически подключаются все js-библиотеки, которые нужны для отображения и работы этого элемента, поэтому его следует вызывать до вывода заголовка.&lt;br /&gt;
&lt;br /&gt;
==== get_html() ====&lt;br /&gt;
Получить html-код элемента. После создания объекта этот метод можно вызывать несколько раз, каждый раз указывая новый id. Все нужные параметры (текст скрипта, и т. п.) будут пересчитаны автоматически.&lt;br /&gt;
&lt;br /&gt;
Параметры&lt;br /&gt;
* $objectid - id редактируемого объекта&lt;br /&gt;
* $text - текст, который отображается вместо элемента, пока не нажата кнопка &amp;quot;редактировать&amp;quot;. Разрешено html-форматирование&lt;br /&gt;
* $options - Массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования.&lt;br /&gt;
&lt;br /&gt;
==== display() ====&lt;br /&gt;
Вывести элемент.  После создания объекта этот метод можно вызывать несколько раз, каждый раз указывая новый id. Все нужные параметры (текст скрипта, и т. п.) будут пересчитаны автоматически.&lt;br /&gt;
&lt;br /&gt;
Параметры&lt;br /&gt;
* $objectid - id редактируемого объекта&lt;br /&gt;
* $text - текст, который отображается вместо элемента, пока не нажата кнопка &amp;quot;редактировать&amp;quot;. Разрешено html-форматирование&lt;br /&gt;
* $options - Массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования.&lt;br /&gt;
&lt;br /&gt;
==== set_options() ====&lt;br /&gt;
Метод для установки параметров класса вручную. Используется в том случае, когда всех приведенных выше методов недостаточно.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
* $options - массив свойств класса в формате ключ-значение.&lt;br /&gt;
&lt;br /&gt;
== Примеры кода ==&lt;br /&gt;
==== Стандартные формы ====&lt;br /&gt;
Здесь будут приведены примеры работы с классов dof_modlib_widgets_form. Этот класс наследует находящийся в moodle класс moodleform. Подробнее о нем можно посмотреть в разделе: [[Разработка:moodleQuickForm]]&lt;br /&gt;
===== Подключение библиотеки форм =====&lt;br /&gt;
    $DOF-&amp;gt;modlib('widgets')-&amp;gt;'''webform'''();&lt;br /&gt;
===== Получение массива нужного формата для составления select-элементов =====&lt;br /&gt;
&lt;br /&gt;
    ''// получаем список всех учебных периодов из нашей таблицы &amp;quot;ages&amp;quot;&lt;br /&gt;
    // Отсортированных по названию''&lt;br /&gt;
    $ages = $this-&amp;gt;dof-&amp;gt;storage('ages')-&amp;gt;get_list(null, null, &amp;quot;name ASC&amp;quot;)&lt;br /&gt;
    ''// задаем массив из нескольких собственных первых элементов для списка:&lt;br /&gt;
    // они добавятся в начало''&lt;br /&gt;
    $firstelms = array(54 =&amp;gt; 'Элемент 1', 'abc' =&amp;gt; 'Элемент 2');&lt;br /&gt;
    ''// указываем, какое поле из массива объектов нужно брать в качестве ключа &lt;br /&gt;
    // (значения должны быть уникальными!)''&lt;br /&gt;
    $idfield = 'id';&lt;br /&gt;
    ''// указываем, какие поля БД нужно выводить пользователю''&lt;br /&gt;
    $showfields = array('name', 'eduweeks');&lt;br /&gt;
    ''// получаем массив нужной структуры для составления select-элемента.''&lt;br /&gt;
    $selectdata = $this-&amp;gt;'''dof_get_select_values'''($ages, $firstelms, $idfield, $showfields);&lt;br /&gt;
&lt;br /&gt;
==== Использование прогрессбара ====&lt;br /&gt;
&lt;br /&gt;
1. Устанавливаем параметры&lt;br /&gt;
    $name        = 'pbar'; ''// имя html-элемента, только латинские буквы''&lt;br /&gt;
    $percent     = 1;      ''// начинаем с отметки 1%''&lt;br /&gt;
    $width       = 200;    ''// длинна полоски 200 пикселей''&lt;br /&gt;
    $process     = 'Идет сохранение...'; ''// какой процесс происходит''&lt;br /&gt;
    $auto_create = true;   ''// вывести прогрессбар сразу же после создания объекта''&lt;br /&gt;
2. Создаем нужный объект&lt;br /&gt;
    $progressbar = $DOF-&amp;gt;modlib('widgets')-&amp;gt;'''progressbar'''($name, $percent, $width, $process, $auto_create)&lt;br /&gt;
3. Вставляем прогрессбар внутрь цикла с выполняемым процессом&lt;br /&gt;
    for ($i=1; $i&amp;lt;=333; $i++)&lt;br /&gt;
    {&lt;br /&gt;
        ''// номер текущей выполняемой задачи''&lt;br /&gt;
        $cur_task  = $i;&lt;br /&gt;
        ''// общее количество задач, которое надо выполнить их количество можно менять в ходе выполнения процесса''&lt;br /&gt;
        ''(например, если сразу неясно сколько точно шагов будет у цикла)''&lt;br /&gt;
        $num_tasks = 333; &lt;br /&gt;
        ''// внутри цикла производим все трудоемкие операции...''&lt;br /&gt;
        &lt;br /&gt;
        ...&lt;br /&gt;
        &lt;br /&gt;
        sleep(0.1);''// '''для теста''': чтобы было видно как ползет полоска''&lt;br /&gt;
        ''// после того как проведены все операции увеличиваем длину полоски на чуть-чуть''&lt;br /&gt;
        $progressbar-&amp;gt;'''set_percent_adv'''($cur_task,$num_tasks);&lt;br /&gt;
    }&lt;/div&gt;</summary>
		<author><name>Dido86</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/widgets&amp;diff=2539</id>
		<title>Разработка:modlibs/widgets</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/widgets&amp;diff=2539"/>
				<updated>2012-03-06T13:22:25Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = widgets&lt;br /&gt;
| type = modlibs&lt;br /&gt;
}}&lt;br /&gt;
== Описание ==&lt;br /&gt;
В этом плагине располагаются все виджеты - дополнительные средства визуального оформления интерфейса. &lt;br /&gt;
=== Структура папок ===&lt;br /&gt;
Для каждого виджета в папке widgets создается отдельная папка с его названием. Внутри этой папки должен лежать файл lib.php, в котором содержится класс виджета. Все дополнительные файлы, относящиеся к этому виджету (если они требуются) - должны лежать в этой же папке.&lt;br /&gt;
=== Стандарт именования классов ===&lt;br /&gt;
Все классы виджетов должны называться по схеме '''dof_modlib_widgets'''_''&amp;lt;название_виджета&amp;gt;''.&lt;br /&gt;
== API ==&lt;br /&gt;
=== webform() ===&lt;br /&gt;
Инициализировать библиотеку форм.&lt;br /&gt;
Этот метод отвечает за подключение библиотеки moodleQuickForm. Если вы хотите использовать moodleQuickForm, то она подключается только при помощи этого метода. Подключение класса moodleQuickForm (или moodleform) напрямую не допускается.&lt;br /&gt;
=== form_classname() === &lt;br /&gt;
Аналог метода webform. В настоящее время '''не используется'''. Он оставлен только для совместимости, не используйте его в новых функциях.&lt;br /&gt;
=== progressbar($name, $percent, $width, $process, $auto_create) === &lt;br /&gt;
Эта функция пригодится, если вам понадобится вывести прогрессбар - полоску, которая в реальном времени отображает ход выполнения какого-либо долгого процесса.&lt;br /&gt;
&lt;br /&gt;
Возвращает экземпляр класса ''dof_modlib_widgets_progress_bar''.&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$name'' - имя html-элемента. Если прогрессбаров несколько на странице, то имена не должны повторяться.&lt;br /&gt;
&lt;br /&gt;
''$percent'' - начальное процентное значение.&lt;br /&gt;
&lt;br /&gt;
''$width'' - длина в пикселях.&lt;br /&gt;
&lt;br /&gt;
''$process'' - название процесса, который выполняется в текущий момент (загрузка... сохранение... и т. п.)&lt;br /&gt;
&lt;br /&gt;
''$auto_create'' - для этого формата возможны два значения:&lt;br /&gt;
&lt;br /&gt;
true - сразу же отправить html-код прогрессбара в выходной поток. &lt;br /&gt;
false - только создать объект, не выводя progressbar.&lt;br /&gt;
По умолчанию true.&lt;br /&gt;
&lt;br /&gt;
=== pages_navigation() ===  - подключает класс pages_navigation. Служит для отображения ссылок на страницы при постраничном выводе списка данных.&lt;br /&gt;
&lt;br /&gt;
''$code'' - код плагина, для которого будут созданы ссылки на страницы.&lt;br /&gt;
&lt;br /&gt;
''$recordscount'' - общее количество записей на всех страницах&lt;br /&gt;
&lt;br /&gt;
''$limitnum'' - по сколько записей нужно выводить на одной странице. По умолчанию NULL (вывести все на одной странице)&lt;br /&gt;
&lt;br /&gt;
''$limitfrom'' - начиная с какой записи начать выводить список.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== notice_yesno($message, $linkyes, $linkno, $optionsyes=NULL, $optionsno=NULL, $methodyes='post', $methodno='post') === &lt;br /&gt;
Выводит сообщение подтверждение да/нет для дальнейшей работы с пользователем&lt;br /&gt;
''$message'' - код плагина, для которого будут созданы ссылки на страницы.&lt;br /&gt;
&lt;br /&gt;
''$linkyes'' - общее количество записей на всех страницах&lt;br /&gt;
&lt;br /&gt;
''$linkno'' - по сколько записей нужно выводить на одной странице. По умолчанию NULL (вывести все на одной странице)&lt;br /&gt;
&lt;br /&gt;
''$optionsyes'' - начиная с какой записи начать выводить список.&lt;br /&gt;
&lt;br /&gt;
''$optionsno'' - общее количество записей на всех страницах&lt;br /&gt;
&lt;br /&gt;
''$methodyes'' - по сколько записей нужно выводить на одной странице. По умолчанию NULL (вывести все на одной странице)&lt;br /&gt;
&lt;br /&gt;
''$methodno'' - начиная с какой записи начать выводить список.&lt;br /&gt;
&lt;br /&gt;
=== print_table($table, $return=false) === &lt;br /&gt;
&lt;br /&gt;
Распечатывает хорошо отформатированную таблицу, использующую текущую тему оформления moodle&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$table'' - стандартный объект со следующими свойствами&lt;br /&gt;
* $table-&amp;gt;head - Массив заголовков таблицы. (если не задан - выведутся только данные)&lt;br /&gt;
* $table-&amp;gt;align - Массив, который хранит параметры горизонтального выравнивания текста в колонках&lt;br /&gt;
* $table-&amp;gt;size  - Массив размеров колонок&lt;br /&gt;
* $table-&amp;gt;wrap - Массив, отвечающий за возможность переноса текста внутри колонки. Возможные значения:&lt;br /&gt;
** wrap (переносить)&lt;br /&gt;
** nowrap (не переносить)&lt;br /&gt;
* $table-&amp;gt;data[] - Массив, каждый элемент которого является массивом значений строки таблицы&lt;br /&gt;
* $table-&amp;gt;width  - ширина таблицы в пикселях или процентах&lt;br /&gt;
* $table-&amp;gt;tablealign  - Расположение всей таблицы&lt;br /&gt;
* $table-&amp;gt;cellpadding  - html-параметр cellpadding&lt;br /&gt;
* $table-&amp;gt;cellspacing  - html-параметр cellspacing&lt;br /&gt;
* $table-&amp;gt;class - html-параметр &amp;quot;class&amp;quot;, отвечающий за то, какой &lt;br /&gt;
** стиль должен быть сопоставлен этой таблице&lt;br /&gt;
* $table-&amp;gt;id - html-параметр &amp;quot;id&amp;quot; для использования getElementById()&lt;br /&gt;
* $table-&amp;gt;rowclass[] - массив названий css-классов для добавления их к специальным рядам&lt;br /&gt;
* $table-&amp;gt;summary - общее описание содержимого таблицы.&lt;br /&gt;
&lt;br /&gt;
''$return'' - если true, то таблица не будет распечатана, а будет возвращен только ее код&lt;br /&gt;
&lt;br /&gt;
=== print_box_start($classes='generalbox', $ids=' ', $return=false) === &lt;br /&gt;
&lt;br /&gt;
Распечатывает начало блока (запуск окна с помощью дива)&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$classes'' - имена классов через пробел(по умолчанию generalbox)&lt;br /&gt;
&lt;br /&gt;
''$ids''     - имена id через пробел&lt;br /&gt;
&lt;br /&gt;
''$return''  - возвращает как строку или просто распечатывает его&lt;br /&gt;
&lt;br /&gt;
Возвращает смешанную строку или ничего&lt;br /&gt;
&lt;br /&gt;
=== print_box_end($return=false) === &lt;br /&gt;
&lt;br /&gt;
Распечатывает конец блока &lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$return''  - возвращает как строку или просто распечатывает его&lt;br /&gt;
&lt;br /&gt;
Возвращает смешанную строку или ничего&lt;br /&gt;
&lt;br /&gt;
=== js_init() === &lt;br /&gt;
Подключить js-библиотеку (вместе со стилями) или набор скриптов, по переданному коду. Все виждеты, которые используют javascript должны использовать эту функцию для подключения своих скриптов.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
- $code - код библиотеки которую следует подключить&lt;br /&gt;
&lt;br /&gt;
В качестве кода используется собственное название библиотеки внутри  FDO, например &amp;quot;jquery&amp;quot;. Функция по коду определяет, какой именно список скриптов и стилей нужно подключить.&lt;br /&gt;
&lt;br /&gt;
=== ifield() === &lt;br /&gt;
Получить объект интерактивно редактируемого поля. То есть текст, на который кликаешь, а он становится полем редактирования и через ajax отправляет сохраненные данные.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
* $plugintype - тип плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $plugincode - код плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $queryname - тип запроса (тип запроса - как правило имя поля)&lt;br /&gt;
* $objectid - id объекта, который редактируется&lt;br /&gt;
* $type - тип элемента. Это параметра type для тега input. Допустимые значения: text, textarea, select&lt;br /&gt;
* $text - текст, который отображается на элементе до редактирования&lt;br /&gt;
* $options - массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования. По умолчанию null.&lt;br /&gt;
&lt;br /&gt;
При обращении к этому методу также автоматически подключаются все js-библиотеки, которые нужны для отображения и работы этого элемента, поэтому его следует вызывать до вывода заголовка (print_header)&lt;br /&gt;
&lt;br /&gt;
=== save_ifield() ===&lt;br /&gt;
Сохранить данные при inline-редактировании. Сохраняет одно поле. Ищет в переданном плагине функцию '''widgets_save_field''', и передает в нее тип запроса ($querytype), id объекта ($objectid) и новое значение поля ($data). Если такой функции нет - возвращает ошибку.&lt;br /&gt;
&lt;br /&gt;
Функция '''widgets_save_field''' должна вернуть либо новое, измененное значение поля, либо html-код ошибки.&lt;br /&gt;
&lt;br /&gt;
* $plugintype - тип плагина, который отвечает за сохранение поля&lt;br /&gt;
* $plugincode - код плагина, который отвечает за редактирование поля&lt;br /&gt;
* $querytype - уникальный код запроса внутри плагина. Как правило - имя сохраняемого поля&lt;br /&gt;
* $objectid - id объекта, поля которого редактируются&lt;br /&gt;
* $data - данные в формате json (или просто строка), пришедшие из формы редактирования объекта. &lt;br /&gt;
 &lt;br /&gt;
Возвращает новое, обновленное значение параметра из базы, или html-код ошибки.&lt;br /&gt;
&lt;br /&gt;
=== load_ifield() ===&lt;br /&gt;
Загрузить данные для inline-редактирования поля. Этот метод вызывается непосредственно перед редактированием поля, загружая значения из базы, для того чтобы пользователю, который редактирует данные, предоставлялась максимально актуальная информация. Ищет в плагине функцию '''widgets_load_field''' , и передает в нее название поля ($querytype), id объекта ($objectid) и новое значение поля ($data). Если такой функции нет - возвращает ошибку.&lt;br /&gt;
&lt;br /&gt;
Функция '''widgets_load_field''' должна вернуть либо значение поля, либо html-код ошибки.&lt;br /&gt;
&lt;br /&gt;
* $plugintype - тип плагина, который отвечает за редактироване поля&lt;br /&gt;
* $plugincode - код плагина, который отвечает за редактироване поля&lt;br /&gt;
* $fieldname - поле объекта, которое нужно запросить&lt;br /&gt;
* $objectid - id объекта, который редактируется&lt;br /&gt;
* $data - дополнительные данные для загрузки объекта&lt;br /&gt;
&lt;br /&gt;
Возвращает значение поля, которое будет отображаться в редактируемом элементе.&lt;br /&gt;
&lt;br /&gt;
== Дополнительные классы ==&lt;br /&gt;
=== dof_modlib_widgets_progress_bar ===&lt;br /&gt;
* '''__construct'''($name, $percent, $width, $process, $auto_create)&lt;br /&gt;
Параметры:&lt;br /&gt;
&lt;br /&gt;
''$name'' - имя html-элемента. Если прогрессбаров несколько на странице, то имена не должны повторяться.&lt;br /&gt;
&lt;br /&gt;
''$percent'' - начальное процентное значение.&lt;br /&gt;
&lt;br /&gt;
''$width'' - длина в пикселях.&lt;br /&gt;
&lt;br /&gt;
''$process'' - название процесса, который выполняется в текущий момент (загрузка... сохранение... и т. п.)&lt;br /&gt;
&lt;br /&gt;
''$auto_create'' - для этого формата возможны два значения:&lt;br /&gt;
&lt;br /&gt;
true - сразу же отправить html-код прогрессбара в выходной поток. &lt;br /&gt;
false - только создать объект, не выводя progressbar.&lt;br /&gt;
По умолчанию true.&lt;br /&gt;
* '''create'''() - вывести html-код прогрессбара в браузер. Эту функцию не нужно использовать, в случае если в конструкторе $auto_create стоит true.&lt;br /&gt;
* '''set_name'''($name) - установить имя html-элемента, которым является прогрессбар. Внутренний метод, вызывается из конструктора.&lt;br /&gt;
* '''set_percent'''($percent) - установить начальное процентное значение для полоски прогрессбара. &lt;br /&gt;
$percent - количество начальных процентов, от 0 до 100.&lt;br /&gt;
* '''set_percent_adv'''($cur_amount,$max_amount) - увеличить полоску прогрессбара. Полоска увеличивается в зависимости от того, сколько задач уже выполнено, а сколько еще осталось.&lt;br /&gt;
&lt;br /&gt;
''$cur_amount'' - количество уже выполненных задач&lt;br /&gt;
&lt;br /&gt;
''$max_amount'' - общее количество задач, которое надо выполнить.&lt;br /&gt;
* '''set_width'''($width) - установить длину прогрессбара в пикселях. Внутренний метод, используется из конструктора.&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_form ===&lt;br /&gt;
Класс, наследующий moodleform. Имеет собственные методы, предназначенные для работы с нашими модулями  Подробнее об использовании moodleQuickForm можно прочитать в разделе [[Разработка:Стандарт_кодирования#Работа с moodleQuickForm|Работа с moodleQuickForm]].&lt;br /&gt;
&lt;br /&gt;
==== dof_get_select_values() ====&lt;br /&gt;
&lt;br /&gt;
Получить массив, пригодный для составления элементов select и hierselect.&lt;br /&gt;
&lt;br /&gt;
''Параметры''&lt;br /&gt;
* $records - массив записей из storage. Ожидаемый формат данных - массив объектов. По умолчанию false.&lt;br /&gt;
* $firstelm - (по умолчанию - true) задать первый элемент списка. Возможные значения: &lt;br /&gt;
** true - нужен стандартый первый элемент array(0 =&amp;gt; '--- Выбрать ---')&lt;br /&gt;
** false - первый элемент не нужен&lt;br /&gt;
** массив в формате &amp;quot;ключ&amp;quot;=&amp;gt;&amp;quot;значение&amp;quot; из одного, или нескольких элементов, которые нужно добавить в начало списка&lt;br /&gt;
* $key - какое поле БД использовать в качестве ключа (это значение отправится формой). По умолчанию 'id' &lt;br /&gt;
* $namefields - одно или несколько полей, которые будут видны пользователю в списке. Каждое последующее поле после первого будет заключено в квадратные скобки. По умолчанию 'name'. Формат:&lt;br /&gt;
** строка: если отобразить нужно только одно поле&lt;br /&gt;
** массив, с названиями полей - если полей нужно несколько. Поля выведутся именно в том порядке, в котором вы их указали&lt;br /&gt;
&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* array - массив для составления select-элемента&lt;br /&gt;
* bool - false в случае ошибки. Возможные ошибки:&lt;br /&gt;
** В переданном списке у объектов нет нужных полей&lt;br /&gt;
** Для ключа массива есть неуникальные значения&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_pages_navigation ===&lt;br /&gt;
* '''__construct'''($dof, $code, $count, $limitnum=NULL, $limitfrom) - конструктор класса. Осуществляет все проверки данных.&lt;br /&gt;
** ''$dof'' - объект класса [[Разработка:lib/dof.php|dof_control]]&lt;br /&gt;
** ''$code'' - код плагина, для которого будут созданы ссылки на страницы.&lt;br /&gt;
** ''$count'' - общее количество записей на всех страницах&lt;br /&gt;
** ''$limitnum'' - по сколько записей нужно выводить на одной странице. По умолчанию NULL (вывести все на одной странице).&lt;br /&gt;
** ''$limitfrom'' - начиная с какой записи начать выводить список.&lt;br /&gt;
* '''get_navpages_list'''($adds, $vars) - Возвращает html-строку навигации, разбивая ленту таблицы или списка на страницы. Нумерация страница всегда начинается с единицы&lt;br /&gt;
** ''$adds'' - дополнительный путь внутри плагина, и список дополнительных параметров для ссылки в виде строки&lt;br /&gt;
** ''$vars'' - список дополнительных параметров для ссылки в виде массива в формате '' &amp;quot;ключ&amp;quot; =&amp;gt; &amp;quot;значение&amp;quot; ''&lt;br /&gt;
* '''get_page_link'''($pagenum, $limitfrom, $adds, $vars) - Возвращает ссылку на страницу или  страницу без ссылки, если она является текущей.&lt;br /&gt;
** $pagenum - номер страницы&lt;br /&gt;
** $limitfrom - номер записи, с которой начинается просмотр&lt;br /&gt;
** $adds - дополнительный путь внутри плагина, и список дополнительных параметров для ссылки в виде строки&lt;br /&gt;
** $vars - список дополнительных параметров для ссылки в виде массива в формате '' &amp;quot;ключ&amp;quot; =&amp;gt; &amp;quot;значение&amp;quot; ''&lt;br /&gt;
* '''get_current_page'''() - Получить номер страницы по номеру текущей записи, и количеству записей на странице&lt;br /&gt;
* '''get_total_pages'''() - Возвращает общее количество страниц для отображения&lt;br /&gt;
* '''get_current_limitfrom'''() - Возвращает исходный параметр номера записи, с которого начинается просмотр&lt;br /&gt;
* '''get_current_limitnum'''() - Возвращает исходный параметр минимального количества записей на странице&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_addremove ===&lt;br /&gt;
Класс для составления стандартного элемента &amp;quot;добавить\удалить&amp;quot;. Элемент представляет собой двусторонний список с двумя html-элементами Select. Используется для автоматизации процесса добавления и удаления элементов из какой-либо категории или группы. Позволяет одновременно передавать несколько элементов.&lt;br /&gt;
* '''__construct'''($DOF, $action='', $formid='dof_modlib_widgets_addremove') - конструктор класса.&lt;br /&gt;
** $DOF объект класса dof_control&lt;br /&gt;
** $action - ссылка на страницу-обработчик формы. По умолчанию - эта же страница.&lt;br /&gt;
** $formid - id html-элемента на странице. Используется для скрипта, который делает кнопки &amp;quot;добавить&amp;quot; или &amp;quot;удалить&amp;quot; неактивными, в зависимости от того, какое из полей select выбрано.&lt;br /&gt;
* '''set_default_strings'''($values)&lt;br /&gt;
* '''set_add_list'''($options, $extradata=null)&lt;br /&gt;
* '''set_remove_list'''($options, $extradata=null)&lt;br /&gt;
* '''set_complex_add_list'''($options)&lt;br /&gt;
* '''set_complex_remove_list'''($options)&lt;br /&gt;
* '''check_add_remove_array'''($data) - проверить пришедший из формы массив элементов для добавления или удаления.&lt;br /&gt;
** $data - массив элементов, пришедший из $_POST&lt;br /&gt;
** Возвращаемое значение: (array) - массив числовых значений идентификаторов.&lt;br /&gt;
* '''print_html'''() - распечатать html-код элемента.&lt;br /&gt;
* '''get_html'''() - получить html-код элемента для последующей распечатки.&lt;br /&gt;
* '''assemble_templater_data'''() - Внутренний метод. &lt;br /&gt;
* '''get_complex_options_template_data'''($groups, $type) - Внутренний метод.&lt;br /&gt;
* '''get_simple_options_template_data'''($options, $extradata=null) - Внутренний метод.&lt;br /&gt;
* '''get_search_default_strings'''()  - Внутренний метод.&lt;br /&gt;
* '''get_form_default_strings'''()  - Внутренний метод.&lt;br /&gt;
&lt;br /&gt;
=== dof_modlib_widgets_ifield ===&lt;br /&gt;
Класс, отвечающий за элемент inline-редактирования. Создает элемент, который при помощи AJAX-запросов &lt;br /&gt;
&lt;br /&gt;
==== __construct() ====&lt;br /&gt;
&lt;br /&gt;
Параметры&lt;br /&gt;
* $dof - объект класса dof_control&lt;br /&gt;
* $plugintype - тип плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $plugincode - код плагина, который будет предоставлять и сохранять данные&lt;br /&gt;
* $queryname - тип запроса (тип запроса - как правило имя поля)&lt;br /&gt;
* $objectid - id объекта, который редактируется&lt;br /&gt;
* $type - тип элемента. Это параметра type для тега input. Допустимые значения: text, textarea, select&lt;br /&gt;
* $text - текст, который отображается на элементе до редактирования&lt;br /&gt;
* $options - массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования. По умолчанию null.&lt;br /&gt;
&lt;br /&gt;
В конструкторе также автоматически подключаются все js-библиотеки, которые нужны для отображения и работы этого элемента, поэтому его следует вызывать до вывода заголовка.&lt;br /&gt;
&lt;br /&gt;
==== get_html() ====&lt;br /&gt;
Получить html-код элемента. После создания объекта этот метод можно вызывать несколько раз, каждый раз указывая новый id. Все нужные параметры (текст скрипта, и т. п.) будут пересчитаны автоматически.&lt;br /&gt;
&lt;br /&gt;
Параметры&lt;br /&gt;
* $objectid - id редактируемого объекта&lt;br /&gt;
* $text - текст, который отображается вместо элемента, пока не нажата кнопка &amp;quot;редактировать&amp;quot;. Разрешено html-форматирование&lt;br /&gt;
* $options - Массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования.&lt;br /&gt;
&lt;br /&gt;
==== display() ====&lt;br /&gt;
Вывести элемент.  После создания объекта этот метод можно вызывать несколько раз, каждый раз указывая новый id. Все нужные параметры (текст скрипта, и т. п.) будут пересчитаны автоматически.&lt;br /&gt;
&lt;br /&gt;
Параметры&lt;br /&gt;
* $objectid - id редактируемого объекта&lt;br /&gt;
* $text - текст, который отображается вместо элемента, пока не нажата кнопка &amp;quot;редактировать&amp;quot;. Разрешено html-форматирование&lt;br /&gt;
* $options - Массив или строка дополнительных html-параметров для div-элемента, содержащего поле редактирования.&lt;br /&gt;
&lt;br /&gt;
==== set_options() ====&lt;br /&gt;
Метод для установки параметров класса вручную. Используется в том случае, когда всех приведенных выше методов недостаточно.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
* $options - массив свойств класса в формате ключ-значение.&lt;br /&gt;
&lt;br /&gt;
== Примеры кода ==&lt;br /&gt;
==== Стандартные формы ====&lt;br /&gt;
Здесь будут приведены примеры работы с классов dof_modlib_widgets_form. Этот класс наследует находящийся в moodle класс moodleform. Подробнее о нем можно посмотреть в разделе: [[Разработка:moodleQuickForm]]&lt;br /&gt;
===== Подключение библиотеки форм =====&lt;br /&gt;
    $DOF-&amp;gt;modlib('widgets')-&amp;gt;'''webform'''();&lt;br /&gt;
===== Получение массива нужного формата для составления select-элементов =====&lt;br /&gt;
&lt;br /&gt;
    ''// получаем список всех учебных периодов из нашей таблицы &amp;quot;ages&amp;quot;&lt;br /&gt;
    // Отсортированных по названию''&lt;br /&gt;
    $ages = $this-&amp;gt;dof-&amp;gt;storage('ages')-&amp;gt;get_list(null, null, &amp;quot;name ASC&amp;quot;)&lt;br /&gt;
    ''// задаем массив из нескольких собственных первых элементов для списка:&lt;br /&gt;
    // они добавятся в начало''&lt;br /&gt;
    $firstelms = array(54 =&amp;gt; 'Элемент 1', 'abc' =&amp;gt; 'Элемент 2');&lt;br /&gt;
    ''// указываем, какое поле из массива объектов нужно брать в качестве ключа &lt;br /&gt;
    // (значения должны быть уникальными!)''&lt;br /&gt;
    $idfield = 'id';&lt;br /&gt;
    ''// указываем, какие поля БД нужно выводить пользователю''&lt;br /&gt;
    $showfields = array('name', 'eduweeks');&lt;br /&gt;
    ''// получаем массив нужной структуры для составления select-элемента.''&lt;br /&gt;
    $selectdata = $this-&amp;gt;'''dof_get_select_values'''($ages, $firstelms, $idfield, $showfields);&lt;br /&gt;
&lt;br /&gt;
==== Использование прогрессбара ====&lt;br /&gt;
&lt;br /&gt;
1. Устанавливаем параметры&lt;br /&gt;
    $name        = 'pbar'; ''// имя html-элемента, только латинские буквы''&lt;br /&gt;
    $percent     = 1;      ''// начинаем с отметки 1%''&lt;br /&gt;
    $width       = 200;    ''// длинна полоски 200 пикселей''&lt;br /&gt;
    $process     = 'Идет сохранение...'; ''// какой процесс происходит''&lt;br /&gt;
    $auto_create = true;   ''// вывести прогрессбар сразу же после создания объекта''&lt;br /&gt;
2. Создаем нужный объект&lt;br /&gt;
    $progressbar = $DOF-&amp;gt;modlib('widgets')-&amp;gt;'''progressbar'''($name, $percent, $width, $process, $auto_create)&lt;br /&gt;
3. Вставляем прогрессбар внутрь цикла с выполняемым процессом&lt;br /&gt;
    for ($i=1; $i&amp;lt;=333; $i++)&lt;br /&gt;
    {&lt;br /&gt;
        ''// номер текущей выполняемой задачи''&lt;br /&gt;
        $cur_task  = $i;&lt;br /&gt;
        ''// общее количество задач, которое надо выполнить их количество можно менять в ходе выполнения процесса''&lt;br /&gt;
        ''(например, если сразу неясно сколько точно шагов будет у цикла)''&lt;br /&gt;
        $num_tasks = 333; &lt;br /&gt;
        ''// внутри цикла производим все трудоемкие операции...''&lt;br /&gt;
        &lt;br /&gt;
        ...&lt;br /&gt;
        &lt;br /&gt;
        sleep(0.1);''// '''для теста''': чтобы было видно как ползет полоска''&lt;br /&gt;
        ''// после того как проведены все операции увеличиваем длину полоски на чуть-чуть''&lt;br /&gt;
        $progressbar-&amp;gt;'''set_percent_adv'''($cur_task,$num_tasks);&lt;br /&gt;
    }&lt;/div&gt;</summary>
		<author><name>Dido86</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/invitems&amp;diff=2515</id>
		<title>Разработка:storages/invitems</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/invitems&amp;diff=2515"/>
				<updated>2012-02-20T12:14:22Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Подробный формат полей в таблице: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invitems&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invitems'' - реестр склада(оборудование). На складе могут быть 2 типа ресурсов: штучный (помещения или ресурсы, имеющие отдельный инвентарный номер), счетный(нет инвентарного(серийного) номера, приходит как правило больше одного. Например 50 картриджей). Одна запись всегда включает только одно наименование ресурса. Каждое оборудование приписано к категории.&lt;br /&gt;
&lt;br /&gt;
===Подробный формат полей в таблице:===&lt;br /&gt;
* name - наименование&lt;br /&gt;
* code - инвентарный номер(уникум во всей системе)&lt;br /&gt;
* serialnum - серийный номер&lt;br /&gt;
* type - тип ресурса штучный (unit), счетный одалживаемый (lendable), счетный расходуемый (expendable)&lt;br /&gt;
* count - количество штучного ресурса в данной партии&lt;br /&gt;
* termofuse - предполагаемый срок полезного использования&lt;br /&gt;
* dateentry - дата и время поступления по UTC&lt;br /&gt;
* datewriteoff - дата и время списания по UTC&lt;br /&gt;
* invcategoryid - категория, к которой приписан объект в таблице [[Разработка:storages/invcategories | invcategories ]].&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса в таблице [[Разработка:storages/departments | departments ]]&lt;br /&gt;
* invsetid - id комплекта  в таблице [[Разработка:storages/invsets | invsets ]] , если 0 - оборудование не в комплекте&lt;br /&gt;
* setorderid - id приказа, которым зачислено оборудование &lt;br /&gt;
* outorderid - id приказа, которым списано оборудование&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/invitems | invitems ]]&lt;br /&gt;
&lt;br /&gt;
===Дополнительные методы:===&lt;br /&gt;
* Поступление оборудование. Делается через приказ.&lt;br /&gt;
* Списание оборудования. Делается через приказ.&lt;br /&gt;
* Список оборудования по категории (если null - не учитывается) и структурному подразделению (если null - берутся все) и статусу : все, доступно, не доступно, в комплекте. &lt;br /&gt;
* Поиск по серийному, инвентарному номеру, по названию.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invitems&amp;diff=2514</id>
		<title>Разработка:storages/invitems</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/invitems&amp;diff=2514"/>
				<updated>2012-02-20T12:13:56Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Подробный формат полей в таблице: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invitems&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invitems'' - реестр склада(оборудование). На складе могут быть 2 типа ресурсов: штучный (помещения или ресурсы, имеющие отдельный инвентарный номер), счетный(нет инвентарного(серийного) номера, приходит как правило больше одного. Например 50 картриджей). Одна запись всегда включает только одно наименование ресурса. Каждое оборудование приписано к категории.&lt;br /&gt;
&lt;br /&gt;
===Подробный формат полей в таблице:===&lt;br /&gt;
* name - наименование&lt;br /&gt;
* code - инвентарный номер(уникум во всей системе)&lt;br /&gt;
* serialnum - серийный номер&lt;br /&gt;
* type - тип ресурса штучный (unit), счетный одалживаемый (lendable), счетный расходуемый (expendable)&lt;br /&gt;
* count - количество штучного ресурса в данной партии&lt;br /&gt;
* termofuse - предполагаемый срок полезного использования&lt;br /&gt;
* dateentry - дата и время поступления по UTC&lt;br /&gt;
* datewriteoff - дата и время списания по UTC&lt;br /&gt;
* invcategoryid - категория, к которой приписан объект в таблице [[Разработка:storages/invcategories | invcategories ]].&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса в таблице [[Разработка:storage/departments | departments ]]&lt;br /&gt;
* invsetid - id комплекта  в таблице [[Разработка:storage/invsets | invsets ]] , если 0 - оборудование не в комплекте&lt;br /&gt;
* setorderid - id приказа, которым зачислено оборудование &lt;br /&gt;
* outorderid - id приказа, которым списано оборудование&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/invitems | invitems ]]&lt;br /&gt;
&lt;br /&gt;
===Дополнительные методы:===&lt;br /&gt;
* Поступление оборудование. Делается через приказ.&lt;br /&gt;
* Списание оборудования. Делается через приказ.&lt;br /&gt;
* Список оборудования по категории (если null - не учитывается) и структурному подразделению (если null - берутся все) и статусу : все, доступно, не доступно, в комплекте. &lt;br /&gt;
* Поиск по серийному, инвентарному номеру, по названию.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invitems&amp;diff=2513</id>
		<title>Разработка:storages/invitems</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/invitems&amp;diff=2513"/>
				<updated>2012-02-20T12:11:56Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Дополнительные методы: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invitems&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invitems'' - реестр склада(оборудование). На складе могут быть 2 типа ресурсов: штучный (помещения или ресурсы, имеющие отдельный инвентарный номер), счетный(нет инвентарного(серийного) номера, приходит как правило больше одного. Например 50 картриджей). Одна запись всегда включает только одно наименование ресурса. Каждое оборудование приписано к категории.&lt;br /&gt;
&lt;br /&gt;
===Подробный формат полей в таблице:===&lt;br /&gt;
* name - наименование&lt;br /&gt;
* code - инвентарный номер(уникум во всей системе)&lt;br /&gt;
* serialnum - серийный номер&lt;br /&gt;
* type - тип ресурса штучный (unit), счетный одалживаемый (lendable), счетный расходуемый (expendable)&lt;br /&gt;
* count - количество штучного ресурса в данной партии&lt;br /&gt;
* termofuse - предполагаемый срок полезного использования&lt;br /&gt;
* dateentry - дата и время поступления по UTC&lt;br /&gt;
* datewriteoff - дата и время списания по UTC&lt;br /&gt;
* invcategoryid - категория, к которой приписан объект в таблице [[Разработка:storage/invcategories | invcategories ]]&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса в таблице [[Разработка:storage/departments | departments ]]&lt;br /&gt;
* invsetid - id комплекта  в таблице [[Разработка:storage/invsets | invsets ]] , если 0 - оборудование не в комплекте&lt;br /&gt;
* setorderid - id приказа, которым зачислено оборудование &lt;br /&gt;
* outorderid - id приказа, которым списано оборудование&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/invitems | invitems ]]&lt;br /&gt;
&lt;br /&gt;
===Дополнительные методы:===&lt;br /&gt;
* Поступление оборудование. Делается через приказ.&lt;br /&gt;
* Списание оборудования. Делается через приказ.&lt;br /&gt;
* Список оборудования по категории (если null - не учитывается) и структурному подразделению (если null - берутся все) и статусу : все, доступно, не доступно, в комплекте. &lt;br /&gt;
* Поиск по серийному, инвентарному номеру, по названию.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invitems&amp;diff=2512</id>
		<title>Разработка:storages/invitems</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/invitems&amp;diff=2512"/>
				<updated>2012-02-20T12:11:44Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Дополнительные методы: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invitems&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invitems'' - реестр склада(оборудование). На складе могут быть 2 типа ресурсов: штучный (помещения или ресурсы, имеющие отдельный инвентарный номер), счетный(нет инвентарного(серийного) номера, приходит как правило больше одного. Например 50 картриджей). Одна запись всегда включает только одно наименование ресурса. Каждое оборудование приписано к категории.&lt;br /&gt;
&lt;br /&gt;
===Подробный формат полей в таблице:===&lt;br /&gt;
* name - наименование&lt;br /&gt;
* code - инвентарный номер(уникум во всей системе)&lt;br /&gt;
* serialnum - серийный номер&lt;br /&gt;
* type - тип ресурса штучный (unit), счетный одалживаемый (lendable), счетный расходуемый (expendable)&lt;br /&gt;
* count - количество штучного ресурса в данной партии&lt;br /&gt;
* termofuse - предполагаемый срок полезного использования&lt;br /&gt;
* dateentry - дата и время поступления по UTC&lt;br /&gt;
* datewriteoff - дата и время списания по UTC&lt;br /&gt;
* invcategoryid - категория, к которой приписан объект в таблице [[Разработка:storage/invcategories | invcategories ]]&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса в таблице [[Разработка:storage/departments | departments ]]&lt;br /&gt;
* invsetid - id комплекта  в таблице [[Разработка:storage/invsets | invsets ]] , если 0 - оборудование не в комплекте&lt;br /&gt;
* setorderid - id приказа, которым зачислено оборудование &lt;br /&gt;
* outorderid - id приказа, которым списано оборудование&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/invitems | invitems ]]&lt;br /&gt;
&lt;br /&gt;
===Дополнительные методы:===&lt;br /&gt;
* Поступление оборудование. Делается через приказ.&lt;br /&gt;
* Списание оборудования. Делается через приказ.&lt;br /&gt;
* Список оборудования по категории (если null - не учитывается) и структурному подразделению (если null - берутся все) и статусу : все, доступно, не доступно, в комплекте. &lt;br /&gt;
* поиск по серийному, инвентарному номеру, по названию.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invitems&amp;diff=2511</id>
		<title>Разработка:storages/invitems</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/invitems&amp;diff=2511"/>
				<updated>2012-02-20T11:06:07Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Подробный формат полей в таблице: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invitems&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invitems'' - реестр склада(оборудование). На складе могут быть 2 типа ресурсов: штучный (помещения или ресурсы, имеющие отдельный инвентарный номер), счетный(нет инвентарного(серийного) номера, приходит как правило больше одного. Например 50 картриджей). Одна запись всегда включает только одно наименование ресурса. Каждое оборудование приписано к категории.&lt;br /&gt;
&lt;br /&gt;
===Подробный формат полей в таблице:===&lt;br /&gt;
* name - наименование&lt;br /&gt;
* code - инвентарный номер(уникум во всей системе)&lt;br /&gt;
* serialnum - серийный номер&lt;br /&gt;
* type - тип ресурса штучный (unit), счетный одалживаемый (lendable), счетный расходуемый (expendable)&lt;br /&gt;
* count - количество штучного ресурса в данной партии&lt;br /&gt;
* termofuse - предполагаемый срок полезного использования&lt;br /&gt;
* dateentry - дата и время поступления по UTC&lt;br /&gt;
* datewriteoff - дата и время списания по UTC&lt;br /&gt;
* invcategoryid - категория, к которой приписан объект в таблице [[Разработка:storage/invcategories | invcategories ]]&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса в таблице [[Разработка:storage/departments | departments ]]&lt;br /&gt;
* invsetid - id комплекта  в таблице [[Разработка:storage/invsets | invsets ]] , если 0 - оборудование не в комплекте&lt;br /&gt;
* setorderid - id приказа, которым зачислено оборудование &lt;br /&gt;
* outorderid - id приказа, которым списано оборудование&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/invitems | invitems ]]&lt;br /&gt;
&lt;br /&gt;
==Дополнительные методы:==&lt;br /&gt;
&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invitems&amp;diff=2510</id>
		<title>Разработка:storages/invitems</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/invitems&amp;diff=2510"/>
				<updated>2012-02-20T11:03:01Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invitems&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invitems'' - реестр склада(оборудование). На складе могут быть 2 типа ресурсов: штучный (помещения или ресурсы, имеющие отдельный инвентарный номер), счетный(нет инвентарного(серийного) номера, приходит как правило больше одного. Например 50 картриджей). Одна запись всегда включает только одно наименование ресурса. Каждое оборудование приписано к категории.&lt;br /&gt;
&lt;br /&gt;
===Подробный формат полей в таблице:===&lt;br /&gt;
* name - наименование&lt;br /&gt;
* code - инвентарный номер&lt;br /&gt;
* serialnum - серийный номер&lt;br /&gt;
* type - тип ресурса штучный (unit), счетный одалживаемый (lendable), счетный расходуемый (expendable)&lt;br /&gt;
* count - количество штучного ресурса в данной партии&lt;br /&gt;
* termofuse - предполагаемый срок полезного использования&lt;br /&gt;
* dateentry - дата и время поступления по UTC&lt;br /&gt;
* datewriteoff - дата и время списания по UTC&lt;br /&gt;
* invcategoryid - категория, к которой приписан объект&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса&lt;br /&gt;
* invsetid - id комплекта, если 0 - оборудование не в комплекте&lt;br /&gt;
* setorderid - id приказа, которым зачислено оборудование &lt;br /&gt;
* outorderid - id приказа, которым списано оборудование&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/invitems | invitems ]]&lt;br /&gt;
&lt;br /&gt;
==Дополнительные методы:==&lt;br /&gt;
&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invsets&amp;diff=2509</id>
		<title>Разработка:storages/invsets</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/invsets&amp;diff=2509"/>
				<updated>2012-02-20T11:01:49Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Подробный формат полей в таблице: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invsets&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Таблица в базе данных===&lt;br /&gt;
''invsets'' - комплекты оборудования, минимальная единица, которую можно выдать персоне. Комплект включать в себя штучное оборудование. Все комплекты являются штучными и содержат конкретный перечень оборудования с известными инвентарными номерами.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* code - код комплекта&lt;br /&gt;
* type - возвращаемость комплекта: полностью расходуемый, возвращаемый, штучный&lt;br /&gt;
* invcategoryid - категория, к которой приписан объект в таблице [[Разработка:storages/invcategories | invcategories ]].&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса в таблице [[Разработка:storages/departments | departments ]].&lt;br /&gt;
* personid - персона, ответственная за комплект в таблице [[Разработка:storages/persons | persons ]].&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/invsets | invsets ]]&lt;br /&gt;
* note - примечание. Заполняется при выдаче/возврате комплекта&lt;br /&gt;
&lt;br /&gt;
==Дополнительные методы:==&lt;br /&gt;
* Список комплектов по категории (если null - не учитывается) и структурному подразделению (если null - не учитывается) и статусу : все, выданные, доступные.&lt;br /&gt;
* Создать комплект/комплекты (с проверкой достаточности оборудования для формирования комплекта/комплектов)&lt;br /&gt;
* Расформировать комплект&lt;br /&gt;
* Выдать комплект конкретной персоне&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invsets&amp;diff=2508</id>
		<title>Разработка:storages/invsets</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/invsets&amp;diff=2508"/>
				<updated>2012-02-20T11:01:11Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Дополнительные методы: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invsets&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Таблица в базе данных===&lt;br /&gt;
''invsets'' - комплекты оборудования, минимальная единица, которую можно выдать персоне. Комплект включать в себя штучное оборудование. Все комплекты являются штучными и содержат конкретный перечень оборудования с известными инвентарными номерами.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* code - код комплекта&lt;br /&gt;
* type - возвращаемость комплекта: полностью расходуемый, возвращаемый, штучный&lt;br /&gt;
* invcategoryid - категория, к которой приписан объект в таблице [[Разработка:storages/invcategories | invcategories ]].&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса в таблице i[[Разработка:storages/departments | departments ]].&lt;br /&gt;
* personid - персона, ответственная за комплект в таблице i[[Разработка:storages/persons | persons ]].&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/invsets | invsets ]]&lt;br /&gt;
* note - примечание. Заполняется при выдаче/возврате комплекта&lt;br /&gt;
&lt;br /&gt;
==Дополнительные методы:==&lt;br /&gt;
* Список комплектов по категории (если null - не учитывается) и структурному подразделению (если null - не учитывается) и статусу : все, выданные, доступные.&lt;br /&gt;
* Создать комплект/комплекты (с проверкой достаточности оборудования для формирования комплекта/комплектов)&lt;br /&gt;
* Расформировать комплект&lt;br /&gt;
* Выдать комплект конкретной персоне&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invsets&amp;diff=2507</id>
		<title>Разработка:storages/invsets</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/invsets&amp;diff=2507"/>
				<updated>2012-02-20T10:56:49Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Подробный формат полей в таблице: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invsets&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Таблица в базе данных===&lt;br /&gt;
''invsets'' - комплекты оборудования, минимальная единица, которую можно выдать персоне. Комплект включать в себя штучное оборудование. Все комплекты являются штучными и содержат конкретный перечень оборудования с известными инвентарными номерами.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* code - код комплекта&lt;br /&gt;
* type - возвращаемость комплекта: полностью расходуемый, возвращаемый, штучный&lt;br /&gt;
* invcategoryid - категория, к которой приписан объект в таблице [[Разработка:storages/invcategories | invcategories ]].&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса в таблице i[[Разработка:storages/departments | departments ]].&lt;br /&gt;
* personid - персона, ответственная за комплект в таблице i[[Разработка:storages/persons | persons ]].&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/invsets | invsets ]]&lt;br /&gt;
* note - примечание. Заполняется при выдаче/возврате комплекта&lt;br /&gt;
&lt;br /&gt;
==Дополнительные методы:==&lt;br /&gt;
* Поиск комплекта по коду (второй параметр: только доступные, включая новые и временно недоступные, включая расформированные)&lt;br /&gt;
* Список комплектов по категории (если null - не учитывается) и структурному подразделению (если null - не учитывается) и статусу : только доступные, включая новые и временно недоступные, включая расформированные)&lt;br /&gt;
* Создать комплект (с проверкой уникальности кода и правомерностью расположения в категории)&lt;br /&gt;
* Расформировать комплект&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invcategories&amp;diff=2506</id>
		<title>Разработка:storages/invcategories</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/invcategories&amp;diff=2506"/>
				<updated>2012-02-20T10:53:23Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* category_list_subordinated($id = null, $depth = '0', $path = null, $select = false, $space = \'\', $depid  0, $right = \'\' ) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invsets&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invcategories'' - категории ресурсов, для удобства пользователя: позволяют разместить в древовидном меню комплекты оборудования. Поток расходования - одновременно возможна выдача не более заданного количества ресурса или комплектов из категории. Считается, что если нужен товар родительской категории, то выдать можно из любой дочерней подкатегории.&lt;br /&gt;
&lt;br /&gt;
==Подробный формат полей в таблице:==&lt;br /&gt;
* name  - название категории&lt;br /&gt;
* code - код категории&lt;br /&gt;
* parentid - id родительской категории&lt;br /&gt;
* path - путь к категории&lt;br /&gt;
* depth - глубина вложения категории&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса. Если = 0 - то категория видна всем. Если &amp;lt;&amp;gt;0 - то категория видна только в этом подразделении.&lt;br /&gt;
* status - нормальный (active), удалена(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;
===='''category_list_subordinated($id = null, $depth = '0', $path = null, $select = false, $space = &amp;quot;&amp;quot;, $depid  0, $right = &amp;quot;&amp;quot; )'''====&lt;br /&gt;
&lt;br /&gt;
возвращает список подкатегорий(категорий, если id=0) в виде массива или дерева по заданным параметрам&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id(int) - id категории(если 0, вернет все категории)&lt;br /&gt;
* $depth(int) - глубина вложения(по умолчанию 0. Если передана категория - берется по умолчанию глубина переданной категории).&lt;br /&gt;
* $path(string) - путь категорий.&lt;br /&gt;
* $select(bool) - false-возвратит массив, true - в виде дерева(иеархически, как правило для select-поля).&lt;br /&gt;
* $space(string) - разделитель для категорий(2 пробела по умолчанию)&lt;br /&gt;
* $depid - id записи из таблицы [[Разработка:storages/departments | departments ]]. Из какого подразделения брать категории(0 - из всех)&lt;br /&gt;
* $right(string) - права, на какие права нужно проверить категории&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* $categories - массив результата(полный или пустой)&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invcategories&amp;diff=2505</id>
		<title>Разработка:storages/invcategories</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/invcategories&amp;diff=2505"/>
				<updated>2012-02-20T10:52:52Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* category_list_subordinated($id = null, $depth = '0', $path = null, $select = false, $space = , $depid  0, $right =  ) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invsets&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invcategories'' - категории ресурсов, для удобства пользователя: позволяют разместить в древовидном меню комплекты оборудования. Поток расходования - одновременно возможна выдача не более заданного количества ресурса или комплектов из категории. Считается, что если нужен товар родительской категории, то выдать можно из любой дочерней подкатегории.&lt;br /&gt;
&lt;br /&gt;
==Подробный формат полей в таблице:==&lt;br /&gt;
* name  - название категории&lt;br /&gt;
* code - код категории&lt;br /&gt;
* parentid - id родительской категории&lt;br /&gt;
* path - путь к категории&lt;br /&gt;
* depth - глубина вложения категории&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса. Если = 0 - то категория видна всем. Если &amp;lt;&amp;gt;0 - то категория видна только в этом подразделении.&lt;br /&gt;
* status - нормальный (active), удалена(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;
===='''category_list_subordinated($id = null, $depth = '0', $path = null, $select = false, $space = \'\', $depid  0, $right = \'\' )'''====&lt;br /&gt;
&lt;br /&gt;
возвращает список подкатегорий(категорий, если id=0) в виде массива или дерева по заданным параметрам&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id(int) - id категории(если 0, вернет все категории)&lt;br /&gt;
* $depth(int) - глубина вложения(по умолчанию 0. Если передана категория - берется по умолчанию глубина переданной категории).&lt;br /&gt;
* $path(string) - путь категорий.&lt;br /&gt;
* $select(bool) - false-возвратит массив, true - в виде дерева(иеархически, как правило для select-поля).&lt;br /&gt;
* $space(string) - разделитель для категорий(2 пробела по умолчанию)&lt;br /&gt;
* $depid - id записи из таблицы [[Разработка:storages/departments | departments ]]. Из какого подразделения брать категории(0 - из всех)&lt;br /&gt;
* $right(string) - права, на какие права нужно проверить категории&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* $categories - массив результата(полный или пустой)&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invcategories&amp;diff=2504</id>
		<title>Разработка:storages/invcategories</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/invcategories&amp;diff=2504"/>
				<updated>2012-02-20T10:52:35Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* category_list_subordinated($id = null, $depth = '0', $path = null, $select = false, $space = , $depid=0, $right= ) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invsets&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invcategories'' - категории ресурсов, для удобства пользователя: позволяют разместить в древовидном меню комплекты оборудования. Поток расходования - одновременно возможна выдача не более заданного количества ресурса или комплектов из категории. Считается, что если нужен товар родительской категории, то выдать можно из любой дочерней подкатегории.&lt;br /&gt;
&lt;br /&gt;
==Подробный формат полей в таблице:==&lt;br /&gt;
* name  - название категории&lt;br /&gt;
* code - код категории&lt;br /&gt;
* parentid - id родительской категории&lt;br /&gt;
* path - путь к категории&lt;br /&gt;
* depth - глубина вложения категории&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса. Если = 0 - то категория видна всем. Если &amp;lt;&amp;gt;0 - то категория видна только в этом подразделении.&lt;br /&gt;
* status - нормальный (active), удалена(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;
===='''category_list_subordinated($id = null, $depth = '0', $path = null, $select = false, $space = '', $depid  0, $right = '' )'''====&lt;br /&gt;
&lt;br /&gt;
возвращает список подкатегорий(категорий, если id=0) в виде массива или дерева по заданным параметрам&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id(int) - id категории(если 0, вернет все категории)&lt;br /&gt;
* $depth(int) - глубина вложения(по умолчанию 0. Если передана категория - берется по умолчанию глубина переданной категории).&lt;br /&gt;
* $path(string) - путь категорий.&lt;br /&gt;
* $select(bool) - false-возвратит массив, true - в виде дерева(иеархически, как правило для select-поля).&lt;br /&gt;
* $space(string) - разделитель для категорий(2 пробела по умолчанию)&lt;br /&gt;
* $depid - id записи из таблицы [[Разработка:storages/departments | departments ]]. Из какого подразделения брать категории(0 - из всех)&lt;br /&gt;
* $right(string) - права, на какие права нужно проверить категории&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* $categories - массив результата(полный или пустой)&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invcategories&amp;diff=2503</id>
		<title>Разработка:storages/invcategories</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/invcategories&amp;diff=2503"/>
				<updated>2012-02-20T10:52:12Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* category_list_subordinated($id = null, $depth = '0', $path = null, $select = false, $space = , $depid=0, $right= ) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invsets&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invcategories'' - категории ресурсов, для удобства пользователя: позволяют разместить в древовидном меню комплекты оборудования. Поток расходования - одновременно возможна выдача не более заданного количества ресурса или комплектов из категории. Считается, что если нужен товар родительской категории, то выдать можно из любой дочерней подкатегории.&lt;br /&gt;
&lt;br /&gt;
==Подробный формат полей в таблице:==&lt;br /&gt;
* name  - название категории&lt;br /&gt;
* code - код категории&lt;br /&gt;
* parentid - id родительской категории&lt;br /&gt;
* path - путь к категории&lt;br /&gt;
* depth - глубина вложения категории&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса. Если = 0 - то категория видна всем. Если &amp;lt;&amp;gt;0 - то категория видна только в этом подразделении.&lt;br /&gt;
* status - нормальный (active), удалена(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;
===='''category_list_subordinated($id = null, $depth = '0', $path = null, $select = false, $space = '', $depid=0, $right='' )'''====&lt;br /&gt;
&lt;br /&gt;
возвращает список подкатегорий(категорий, если id=0) в виде массива или дерева по заданным параметрам&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id(int) - id категории(если 0, вернет все категории)&lt;br /&gt;
* $depth(int) - глубина вложения(по умолчанию 0. Если передана категория - берется по умолчанию глубина переданной категории).&lt;br /&gt;
* $path(string) - путь категорий.&lt;br /&gt;
* $select(bool) - false-возвратит массив, true - в виде дерева(иеархически, как правило для select-поля).&lt;br /&gt;
* $space(string) - разделитель для категорий(2 пробела по умолчанию)&lt;br /&gt;
* $depid - id записи из таблицы [[Разработка:storages/departments | departments ]]. Из какого подразделения брать категории(0 - из всех)&lt;br /&gt;
* $right(string) - права, на какие права нужно проверить категории&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* $categories - массив результата(полный или пустой)&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invcategories&amp;diff=2502</id>
		<title>Разработка:storages/invcategories</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/invcategories&amp;diff=2502"/>
				<updated>2012-02-20T10:51:28Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* category_list_subordinated($id = null, $depth = '0', $path = null, $select = false, $space = , $depid=0, $right= ) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invsets&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invcategories'' - категории ресурсов, для удобства пользователя: позволяют разместить в древовидном меню комплекты оборудования. Поток расходования - одновременно возможна выдача не более заданного количества ресурса или комплектов из категории. Считается, что если нужен товар родительской категории, то выдать можно из любой дочерней подкатегории.&lt;br /&gt;
&lt;br /&gt;
==Подробный формат полей в таблице:==&lt;br /&gt;
* name  - название категории&lt;br /&gt;
* code - код категории&lt;br /&gt;
* parentid - id родительской категории&lt;br /&gt;
* path - путь к категории&lt;br /&gt;
* depth - глубина вложения категории&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса. Если = 0 - то категория видна всем. Если &amp;lt;&amp;gt;0 - то категория видна только в этом подразделении.&lt;br /&gt;
* status - нормальный (active), удалена(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;
===='''category_list_subordinated($id = null, $depth = '0', $path = null, $select = false, $space = '', $depid=0, $right='' )'''====&lt;br /&gt;
&lt;br /&gt;
возвращает список подкатегорий(категорий, если id=0) в виде массива или дерева по заданным параметрам&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id(int) - id категории(если 0, вернет все категории) [[Разработка:storages/departments | departments ]].&lt;br /&gt;
* $depth(int) - глубина вложения(по умолчанию 0. Если передана категория - берется по умолчанию глубина переданной категории).&lt;br /&gt;
* $path(string) - путь категорий.&lt;br /&gt;
* $select(bool) - false-возвратит массив, true - в виде дерева(иеархически, как правило для select-поля).&lt;br /&gt;
* $space(string) - разделитель для категорий(2 пробела по умолчанию)&lt;br /&gt;
* $depid - id записи из таблицы [[Разработка:storages/departments | departments ]]. Из какого подразделения брать категории(0 - из всех)&lt;br /&gt;
* $right(strinf) - права, на какие права нужно проверить категории&lt;br /&gt;
''Возвращаемые значения:''&lt;br /&gt;
* $categories - массив результата(полный или пустой)&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invcategories&amp;diff=2501</id>
		<title>Разработка:storages/invcategories</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/invcategories&amp;diff=2501"/>
				<updated>2012-02-20T10:50:34Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Дополнительные методы: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invsets&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invcategories'' - категории ресурсов, для удобства пользователя: позволяют разместить в древовидном меню комплекты оборудования. Поток расходования - одновременно возможна выдача не более заданного количества ресурса или комплектов из категории. Считается, что если нужен товар родительской категории, то выдать можно из любой дочерней подкатегории.&lt;br /&gt;
&lt;br /&gt;
==Подробный формат полей в таблице:==&lt;br /&gt;
* name  - название категории&lt;br /&gt;
* code - код категории&lt;br /&gt;
* parentid - id родительской категории&lt;br /&gt;
* path - путь к категории&lt;br /&gt;
* depth - глубина вложения категории&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса. Если = 0 - то категория видна всем. Если &amp;lt;&amp;gt;0 - то категория видна только в этом подразделении.&lt;br /&gt;
* status - нормальный (active), удалена(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;
===='''category_list_subordinated($id = null, $depth = '0', $path = null, $select = false, $space = '', $depid=0, $right='' )'''====&lt;br /&gt;
&lt;br /&gt;
возвращает список подкатегорий(категорий, если id=0) в виде массива или дерева по заданным параметрам&lt;br /&gt;
&lt;br /&gt;
''Аргументы:''&lt;br /&gt;
* $id(int) - id категории(если 0, вернет все категории) [[Разработка:storages/departments | departments ]].&lt;br /&gt;
* $depth(int) - глубина вложения(по умолчанию 0. Если передана категория - берется по умолчанию глубина переданной категории).&lt;br /&gt;
* $path(string) - путь категорий.&lt;br /&gt;
* $select(bool) - false-возвратит массив, true - в виде дерева(иеархически, как правило для select-поля).&lt;br /&gt;
* $space(string) - разделитель для категорий(2 пробела по умолчанию)&lt;br /&gt;
* $depid - id записи из таблицы [[Разработка:storages/departments | departments ]]. Из какого подразделения брать категории(0 - из всех)&lt;br /&gt;
* $right(strinf) - права, на какие права нужно проверить категории&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invcategories&amp;diff=2500</id>
		<title>Разработка:storages/invcategories</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/invcategories&amp;diff=2500"/>
				<updated>2012-02-20T10:26:41Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Таблица в базе данных */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invsets&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invcategories'' - категории ресурсов, для удобства пользователя: позволяют разместить в древовидном меню комплекты оборудования. Поток расходования - одновременно возможна выдача не более заданного количества ресурса или комплектов из категории. Считается, что если нужен товар родительской категории, то выдать можно из любой дочерней подкатегории.&lt;br /&gt;
&lt;br /&gt;
==Подробный формат полей в таблице:==&lt;br /&gt;
* name  - название категории&lt;br /&gt;
* code - код категории&lt;br /&gt;
* parentid - id родительской категории&lt;br /&gt;
* path - путь к категории&lt;br /&gt;
* depth - глубина вложения категории&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса. Если = 0 - то категория видна всем. Если &amp;lt;&amp;gt;0 - то категория видна только в этом подразделении.&lt;br /&gt;
* status - нормальный (active), удалена(deleted)&lt;br /&gt;
&lt;br /&gt;
==Дополнительные методы:==&lt;br /&gt;
* Поиск категории по коду&lt;br /&gt;
* Список дочерних категорий данной категории&lt;br /&gt;
* Вернуть дерево категорий заданного типа (комплекты или ресурсы + пустые) в виде массива, элементы которого - объекты категорий, категории одного уровня отсортированы по алфавиты, подкатегории следуют за своими родительскими категориями&lt;br /&gt;
* Пересчитать остаток по категории и обновить информацию о категории&lt;br /&gt;
* Удалить категорию со всеми подкатегориями если они пусты, возвращает количество удаленных категорий или false&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invcategories&amp;diff=2499</id>
		<title>Разработка:storages/invcategories</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/invcategories&amp;diff=2499"/>
				<updated>2012-02-20T10:19:54Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Подробный формат полей в таблице: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invsets&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invcategories'' - категории ресурсов, для удобства пользователя: позволяют разместить в древовидном меню комплекты оборудования, штучного и счетного оборудования. Поток расходования - одновременно возможна выдача не более заданного количества ресурса или комплектов из категории. Считается, что если нужен товар родительской категории, то выдать можно из любой дочерней подкатегории.&lt;br /&gt;
&lt;br /&gt;
==Подробный формат полей в таблице:==&lt;br /&gt;
* name  - название категории&lt;br /&gt;
* code - код категории&lt;br /&gt;
* parentid - id родительской категории&lt;br /&gt;
* path - путь к категории&lt;br /&gt;
* depth - глубина вложения категории&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса. Если = 0 - то категория видна всем. Если &amp;lt;&amp;gt;0 - то категория видна только в этом подразделении.&lt;br /&gt;
* status - нормальный (active), удалена(deleted)&lt;br /&gt;
&lt;br /&gt;
==Дополнительные методы:==&lt;br /&gt;
* Поиск категории по коду&lt;br /&gt;
* Список дочерних категорий данной категории&lt;br /&gt;
* Вернуть дерево категорий заданного типа (комплекты или ресурсы + пустые) в виде массива, элементы которого - объекты категорий, категории одного уровня отсортированы по алфавиты, подкатегории следуют за своими родительскими категориями&lt;br /&gt;
* Пересчитать остаток по категории и обновить информацию о категории&lt;br /&gt;
* Удалить категорию со всеми подкатегориями если они пусты, возвращает количество удаленных категорий или false&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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=2498</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=2498"/>
				<updated>2012-02-20T10:13:14Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* dof_calendar */&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;
===== 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;. В неё же и помещается массив option(ключ=&amp;gt;значени), это так называемые значения по умолчанию(не обязательные).&lt;br /&gt;
*Список обязательных полей для переменной $options: &lt;br /&gt;
**plugintype - тип плагина ( например storage)  &lt;br /&gt;
**plugincode - код плагина ( например plans) &lt;br /&gt;
**queryty    - тип запроса, именно по нему и определяется, что надо делать( например plans_name ). Этот тип должен совпадать с типом, который будет находиться в этом в плагине в методе widgets_field_variants_list&lt;br /&gt;
**sesskey    - ключ сессии(чтоб идентифицировать запрос) задается методом sesskey()&lt;br /&gt;
**type       - тип действия ( например autocomplete ). Есть ещё тип savefield &lt;br /&gt;
*Необязательные поля:&lt;br /&gt;
**option    - массив значений по умолчания( например $a[19]= &amp;quot;primer&amp;quot;), где ключ - это id элемента из бд &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; $mform-&amp;gt;addElement('dof_autocomplete', $elementName = null, $elementLabel = null, $attributes = null, $options = null)&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;
     // установим значение по умолчанию&lt;br /&gt;
     $mas = array( 19 =&amp;gt; 'primer' );&lt;br /&gt;
     $options['option'] = $mas;&lt;br /&gt;
&lt;br /&gt;
// добавляем новый элемент в форму&lt;br /&gt;
$mform-&amp;gt;addElement('autocomplete', 'testname', 'Текст перед полем:', 'size=12', $options);&lt;br /&gt;
// устаонвка типа&lt;br /&gt;
$mform-&amp;gt;setType('testname', PARAM_TERXT);&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;
       [testname] = полученное значение&lt;br /&gt;
       [id_autocomplete] = 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;, который возвращает массив объектов в формате &amp;lt;pre&amp;gt; &lt;br /&gt;
$a = arrya();&lt;br /&gt;
a[1] = object[&lt;br /&gt;
          name = ЗНАЧЕНИЕ_1 ДЛЯ ВЫПАДАЮЩЕГО СПИСКА&lt;br /&gt;
            id = id элемента_1&lt;br /&gt;
             ];&lt;br /&gt;
a[2] = object[ &lt;br /&gt;
          name = ЗНАЧЕНИЕ_2 ВЫПАДАЮЩЕГО СПИСКА&lt;br /&gt;
            id = id элемента_2&lt;br /&gt;
             ]; &lt;br /&gt;
   ...  &lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;где $querytype-тип запроса(обрабатывается путем case), $data-вх данные, как правило строка(набранные данные в поле autocomplete)&lt;br /&gt;
* Замечание: &lt;br /&gt;
** поля name и id обязательны в переданном массиве&lt;br /&gt;
** метод должен возвращать с LIMIT 15(не больше), для быстроты работы&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>Dido86</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/invitems&amp;diff=2497</id>
		<title>Разработка:storages/invitems</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/invitems&amp;diff=2497"/>
				<updated>2012-02-17T14:54:25Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invitems&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invitems'' - реестр склада(оборудование). На складе могут быть 2 типа ресурсов: штучный (помещения или ресурсы, имеющие отдельный инвентарный номер), счетный(нет инвентарного(серийного) номера, приходит как правило больше одного. Например 50 картриджей). Одна запись всегда включает только одно наименование ресурса. Каждое оборудование приписано к категории.&lt;br /&gt;
&lt;br /&gt;
===Подробный формат полей в таблице:===&lt;br /&gt;
* name - наименование&lt;br /&gt;
* code - инвентарный номер&lt;br /&gt;
* serialnum - серийный номер&lt;br /&gt;
* type - тип ресурса штучный (unit), счетный одалживаемый (lendable), счетный расходуемый (expendable)&lt;br /&gt;
* count - количество штучного ресурса в данной партии&lt;br /&gt;
* termofuse - предполагаемый срок полезного использования&lt;br /&gt;
* dateentry - дата и время поступления по UTC&lt;br /&gt;
* datewriteoff - дата и время списания по UTC&lt;br /&gt;
* invcategoryid - категория, к которой приписан объект&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса&lt;br /&gt;
* invsetid - id комплекта, если 0 - оборудование не в комплекте&lt;br /&gt;
* setorderid - id приказа, которым зачислено оборудование &lt;br /&gt;
* outorderid - id приказа, которым списано оборудование&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/invitems | invitems ]]&lt;br /&gt;
&lt;br /&gt;
==Дополнительные методы:==&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2496</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2496"/>
				<updated>2012-02-17T14:54:00Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&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 так и несколько комплектов. &lt;br /&gt;
&lt;br /&gt;
При формировании 1 комплекта есть возможность вручную задавать оборудование, что очень полезно, когда нужно, чтоб именно это оборудование с этим инвентарным номером было в комплекте. Пользователь указывает число комплектов(сколько нужно сформировать), сколько оборудования будет в 1 комплекте, из каких категории. &lt;br /&gt;
&lt;br /&gt;
Система автоматически берет первое свободное оборудование из данной категории и помещает его в комплект. Если оборудования нет - берет из дочерней категории согласно иерархии дерева категорий и т.д. Если хоть 1 комплект не будет полным(не хватит оборудования на n-ное количество комплектов), то система сразу скажет об этом и не будет вовсе их формировать.&lt;br /&gt;
&lt;br /&gt;
== Выдача комплектов(оборудования) ==&lt;br /&gt;
Выдача комплекта происходит с указанием конкретной персоны, кому вручается этот комплект. Все данные сохраняются в приказ.&lt;br /&gt;
&lt;br /&gt;
Комплект можно выдать как со страницы просмотра этого комплекта, так и со спец страницы выдачи комплектов, где выбирается комплект, выбирается персона, указывается нужный комментарий, если необходим, и создается привязка персоны к комплекту.&lt;br /&gt;
&lt;br /&gt;
== Возврат комплекта ==&lt;br /&gt;
Осуществляется лишь со страницы просмотра комплекта. Есть форма возврата комплекта с подтверждением(галочка) этого шага. Всё осуществляется одним нажатием на кнопку. Комплект снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Расформирование комплекта ==&lt;br /&gt;
Расформировать можно лишь тот комплект, который свободен(его никто не использует). Делается это со страницы просмотра комплекта через форму расформирования. Для этого нужно ещё поставить галочку подтверждения действия.&lt;br /&gt;
&lt;br /&gt;
Оборудование из комплекта снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
Как и поступление, списание производится через приказы. При этом оборудование не должно состоять в комплекте. На стр списания в форме указываются(перечисляются) инвентарные номера. При принятие действия оборудование принимает статус scrapped(списано)  и использоваться больше не может.&lt;br /&gt;
&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится)&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2495</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2495"/>
				<updated>2012-02-17T14:52:52Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Права */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&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 так и несколько комплектов. &lt;br /&gt;
&lt;br /&gt;
При формировании 1 комплекта есть возможность вручную задавать оборудование, что очень полезно, когда нужно, чтоб именно это оборудование с этим инвентарным номером было в комплекте. Пользователь указывает число комплектов(сколько нужно сформировать), сколько оборудования будет в 1 комплекте, из каких категории. &lt;br /&gt;
&lt;br /&gt;
Система автоматически берет первое свободное оборудование из данной категории и помещает его в комплект. Если оборудования нет - берет из дочерней категории согласно иерархии дерева категорий и т.д. Если хоть 1 комплект не будет полным(не хватит оборудования на n-ное количество комплектов), то система сразу скажет об этом и не будет вовсе их формировать.&lt;br /&gt;
&lt;br /&gt;
== Выдача комплектов(оборудования) ==&lt;br /&gt;
Выдача комплекта происходит с указанием конкретной персоны, кому вручается этот комплект. Все данные сохраняются в приказ.&lt;br /&gt;
&lt;br /&gt;
Комплект можно выдать как со страницы просмотра этого комплекта, так и со спец страницы выдачи комплектов, где выбирается комплект, выбирается персона, указывается нужный комментарий, если необходим, и создается привязка персоны к комплекту.&lt;br /&gt;
&lt;br /&gt;
== Возврат комплекта ==&lt;br /&gt;
Осуществляется лишь со страницы просмотра комплекта. Есть форма возврата комплекта с подтверждением(галочка) этого шага. Всё осуществляется одним нажатием на кнопку. Комплект снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Расформирование комплекта ==&lt;br /&gt;
Расформировать можно лишь тот комплект, который свободен(его никто не использует). Делается это со страницы просмотра комплекта через форму расформирования. Для этого нужно ещё поставить галочку подтверждения действия.&lt;br /&gt;
&lt;br /&gt;
Оборудование из комплекта снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
Как и поступление, списание производится через приказы. При этом оборудование не должно состоять в комплекте. На стр списания в форме указываются(перечисляются) инвентарные номера. При принятие действия оборудование принимает статус scrapped(списано)  и использоваться больше не может.&lt;br /&gt;
&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится)&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2494</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2494"/>
				<updated>2012-02-17T14:45:18Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Возврат комплекта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&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 так и несколько комплектов. &lt;br /&gt;
&lt;br /&gt;
При формировании 1 комплекта есть возможность вручную задавать оборудование, что очень полезно, когда нужно, чтоб именно это оборудование с этим инвентарным номером было в комплекте. Пользователь указывает число комплектов(сколько нужно сформировать), сколько оборудования будет в 1 комплекте, из каких категории. &lt;br /&gt;
&lt;br /&gt;
Система автоматически берет первое свободное оборудование из данной категории и помещает его в комплект. Если оборудования нет - берет из дочерней категории согласно иерархии дерева категорий и т.д. Если хоть 1 комплект не будет полным(не хватит оборудования на n-ное количество комплектов), то система сразу скажет об этом и не будет вовсе их формировать.&lt;br /&gt;
&lt;br /&gt;
== Выдача комплектов(оборудования) ==&lt;br /&gt;
Выдача комплекта происходит с указанием конкретной персоны, кому вручается этот комплект. Все данные сохраняются в приказ.&lt;br /&gt;
&lt;br /&gt;
Комплект можно выдать как со страницы просмотра этого комплекта, так и со спец страницы выдачи комплектов, где выбирается комплект, выбирается персона, указывается нужный комментарий, если необходим, и создается привязка персоны к комплекту.&lt;br /&gt;
&lt;br /&gt;
== Возврат комплекта ==&lt;br /&gt;
Осуществляется лишь со страницы просмотра комплекта. Есть форма возврата комплекта с подтверждением(галочка) этого шага. Всё осуществляется одним нажатием на кнопку. Комплект снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Расформирование комплекта ==&lt;br /&gt;
Расформировать можно лишь тот комплект, который свободен(его никто не использует). Делается это со страницы просмотра комплекта через форму расформирования. Для этого нужно ещё поставить галочку подтверждения действия.&lt;br /&gt;
&lt;br /&gt;
Оборудование из комплекта снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
Как и поступление, списание производится через приказы. При этом оборудование не должно состоять в комплекте. На стр списания в форме указываются(перечисляются) инвентарные номера. При принятие действия оборудование принимает статус scrapped(списано)  и использоваться больше не может.&lt;br /&gt;
&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2493</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2493"/>
				<updated>2012-02-17T14:42:27Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Создание дерева категорий */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&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 так и несколько комплектов. &lt;br /&gt;
&lt;br /&gt;
При формировании 1 комплекта есть возможность вручную задавать оборудование, что очень полезно, когда нужно, чтоб именно это оборудование с этим инвентарным номером было в комплекте. Пользователь указывает число комплектов(сколько нужно сформировать), сколько оборудования будет в 1 комплекте, из каких категории. &lt;br /&gt;
&lt;br /&gt;
Система автоматически берет первое свободное оборудование из данной категории и помещает его в комплект. Если оборудования нет - берет из дочерней категории согласно иерархии дерева категорий и т.д. Если хоть 1 комплект не будет полным(не хватит оборудования на n-ное количество комплектов), то система сразу скажет об этом и не будет вовсе их формировать.&lt;br /&gt;
&lt;br /&gt;
== Выдача комплектов(оборудования) ==&lt;br /&gt;
Выдача комплекта происходит с указанием конкретной персоны, кому вручается этот комплект. Все данные сохраняются в приказ.&lt;br /&gt;
&lt;br /&gt;
Комплект можно выдать как со страницы просмотра этого комплекта, так и со спец страницы выдачи комплектов, где выбирается комплект, выбирается персона, указывается нужный комментарий, если необходим, и создается привязка персоны к комплекту.&lt;br /&gt;
&lt;br /&gt;
== Возврат комплекта ==&lt;br /&gt;
Осуществляется лишь со страницы просмотра комплекта. Есть форма возврата комплекта с подтверждением(галочка) этого шага. Всё осуществляется одним нажатием на кнопку. Комплекта снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Расформирование комплекта ==&lt;br /&gt;
Расформировать можно лишь тот комплект, который свободен(его никто не использует). Делается это со страницы просмотра комплекта через форму расформирования. Для этого нужно ещё поставить галочку подтверждения действия.&lt;br /&gt;
&lt;br /&gt;
Оборудование из комплекта снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
Как и поступление, списание производится через приказы. При этом оборудование не должно состоять в комплекте. На стр списания в форме указываются(перечисляются) инвентарные номера. При принятие действия оборудование принимает статус scrapped(списано)  и использоваться больше не может.&lt;br /&gt;
&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2492</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2492"/>
				<updated>2012-02-17T14:41:36Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Списание оборудования */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&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 так и несколько комплектов. &lt;br /&gt;
&lt;br /&gt;
При формировании 1 комплекта есть возможность вручную задавать оборудование, что очень полезно, когда нужно, чтоб именно это оборудование с этим инвентарным номером было в комплекте. Пользователь указывает число комплектов(сколько нужно сформировать), сколько оборудования будет в 1 комплекте, из каких категории. &lt;br /&gt;
&lt;br /&gt;
Система автоматически берет первое свободное оборудование из данной категории и помещает его в комплект. Если оборудования нет - берет из дочерней категории согласно иерархии дерева категорий и т.д. Если хоть 1 комплект не будет полным(не хватит оборудования на n-ное количество комплектов), то система сразу скажет об этом и не будет вовсе их формировать.&lt;br /&gt;
&lt;br /&gt;
== Выдача комплектов(оборудования) ==&lt;br /&gt;
Выдача комплекта происходит с указанием конкретной персоны, кому вручается этот комплект. Все данные сохраняются в приказ.&lt;br /&gt;
&lt;br /&gt;
Комплект можно выдать как со страницы просмотра этого комплекта, так и со спец страницы выдачи комплектов, где выбирается комплект, выбирается персона, указывается нужный комментарий, если необходим, и создается привязка персоны к комплекту.&lt;br /&gt;
&lt;br /&gt;
== Возврат комплекта ==&lt;br /&gt;
Осуществляется лишь со страницы просмотра комплекта. Есть форма возврата комплекта с подтверждением(галочка) этого шага. Всё осуществляется одним нажатием на кнопку. Комплекта снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Расформирование комплекта ==&lt;br /&gt;
Расформировать можно лишь тот комплект, который свободен(его никто не использует). Делается это со страницы просмотра комплекта через форму расформирования. Для этого нужно ещё поставить галочку подтверждения действия.&lt;br /&gt;
&lt;br /&gt;
Оборудование из комплекта снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
Как и поступление, списание производится через приказы. При этом оборудование не должно состоять в комплекте. На стр списания в форме указываются(перечисляются) инвентарные номера. При принятие действия оборудование принимает статус scrapped(списано)  и использоваться больше не может.&lt;br /&gt;
&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2491</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2491"/>
				<updated>2012-02-17T14:40:58Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Списание оборудования */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&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 так и несколько комплектов. &lt;br /&gt;
&lt;br /&gt;
При формировании 1 комплекта есть возможность вручную задавать оборудование, что очень полезно, когда нужно, чтоб именно это оборудование с этим инвентарным номером было в комплекте. Пользователь указывает число комплектов(сколько нужно сформировать), сколько оборудования будет в 1 комплекте, из каких категории. &lt;br /&gt;
&lt;br /&gt;
Система автоматически берет первое свободное оборудование из данной категории и помещает его в комплект. Если оборудования нет - берет из дочерней категории согласно иерархии дерева категорий и т.д. Если хоть 1 комплект не будет полным(не хватит оборудования на n-ное количество комплектов), то система сразу скажет об этом и не будет вовсе их формировать.&lt;br /&gt;
&lt;br /&gt;
== Выдача комплектов(оборудования) ==&lt;br /&gt;
Выдача комплекта происходит с указанием конкретной персоны, кому вручается этот комплект. Все данные сохраняются в приказ.&lt;br /&gt;
&lt;br /&gt;
Комплект можно выдать как со страницы просмотра этого комплекта, так и со спец страницы выдачи комплектов, где выбирается комплект, выбирается персона, указывается нужный комментарий, если необходим, и создается привязка персоны к комплекту.&lt;br /&gt;
&lt;br /&gt;
== Возврат комплекта ==&lt;br /&gt;
Осуществляется лишь со страницы просмотра комплекта. Есть форма возврата комплекта с подтверждением(галочка) этого шага. Всё осуществляется одним нажатием на кнопку. Комплекта снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Расформирование комплекта ==&lt;br /&gt;
Расформировать можно лишь тот комплект, который свободен(его никто не использует). Делается это со страницы просмотра комплекта через форму расформирования. Для этого нужно ещё поставить галочку подтверждения действия.&lt;br /&gt;
&lt;br /&gt;
Оборудование из комплекта снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
Как и поступление, списание производится через приказы. При этом оборудование не должно состоять в комплекте. На стр списания в форме указываются(перечисляются) инвентарные номера. При принятие действия оборудование принимает статус scrapped(списано)  и использоваться больше не будет.&lt;br /&gt;
&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2490</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2490"/>
				<updated>2012-02-17T14:29:31Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Выдача комплектов(ообрудования) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&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 так и несколько комплектов. &lt;br /&gt;
&lt;br /&gt;
При формировании 1 комплекта есть возможность вручную задавать оборудование, что очень полезно, когда нужно, чтоб именно это оборудование с этим инвентарным номером было в комплекте. Пользователь указывает число комплектов(сколько нужно сформировать), сколько оборудования будет в 1 комплекте, из каких категории. &lt;br /&gt;
&lt;br /&gt;
Система автоматически берет первое свободное оборудование из данной категории и помещает его в комплект. Если оборудования нет - берет из дочерней категории согласно иерархии дерева категорий и т.д. Если хоть 1 комплект не будет полным(не хватит оборудования на n-ное количество комплектов), то система сразу скажет об этом и не будет вовсе их формировать.&lt;br /&gt;
&lt;br /&gt;
== Выдача комплектов(оборудования) ==&lt;br /&gt;
Выдача комплекта происходит с указанием конкретной персоны, кому вручается этот комплект. Все данные сохраняются в приказ.&lt;br /&gt;
&lt;br /&gt;
Комплект можно выдать как со страницы просмотра этого комплекта, так и со спец страницы выдачи комплектов, где выбирается комплект, выбирается персона, указывается нужный комментарий, если необходим, и создается привязка персоны к комплекту.&lt;br /&gt;
&lt;br /&gt;
== Возврат комплекта ==&lt;br /&gt;
Осуществляется лишь со страницы просмотра комплекта. Есть форма возврата комплекта с подтверждением(галочка) этого шага. Всё осуществляется одним нажатием на кнопку. Комплекта снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Расформирование комплекта ==&lt;br /&gt;
Расформировать можно лишь тот комплект, который свободен(его никто не использует). Делается это со страницы просмотра комплекта через форму расформирования. Для этого нужно ещё поставить галочку подтверждения действия.&lt;br /&gt;
&lt;br /&gt;
Оборудование из комплекта снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2489</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2489"/>
				<updated>2012-02-17T14:29:05Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Расформирование комплекта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&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 так и несколько комплектов. &lt;br /&gt;
&lt;br /&gt;
При формировании 1 комплекта есть возможность вручную задавать оборудование, что очень полезно, когда нужно, чтоб именно это оборудование с этим инвентарным номером было в комплекте. Пользователь указывает число комплектов(сколько нужно сформировать), сколько оборудования будет в 1 комплекте, из каких категории. &lt;br /&gt;
&lt;br /&gt;
Система автоматически берет первое свободное оборудование из данной категории и помещает его в комплект. Если оборудования нет - берет из дочерней категории согласно иерархии дерева категорий и т.д. Если хоть 1 комплект не будет полным(не хватит оборудования на n-ное количество комплектов), то система сразу скажет об этом и не будет вовсе их формировать.&lt;br /&gt;
&lt;br /&gt;
== Выдача комплектов(ообрудования) ==&lt;br /&gt;
Выдача комплекта происходит с указанием конкретной персоны, кому вручается этот комплект. Все данные сохраняются в приказ.&lt;br /&gt;
&lt;br /&gt;
Комплект можно выдать как со страницы просмотра этого комплекта, так и со спец страницы выдачи комплектов, где выбирается комплект, выбирается персона, указывается нужный комментарий, если необходим, и создается привязка персоны к комплекту.&lt;br /&gt;
&lt;br /&gt;
== Возврат комплекта ==&lt;br /&gt;
Осуществляется лишь со страницы просмотра комплекта. Есть форма возврата комплекта с подтверждением(галочка) этого шага. Всё осуществляется одним нажатием на кнопку. Комплекта снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Расформирование комплекта ==&lt;br /&gt;
Расформировать можно лишь тот комплект, который свободен(его никто не использует). Делается это со страницы просмотра комплекта через форму расформирования. Для этого нужно ещё поставить галочку подтверждения действия.&lt;br /&gt;
&lt;br /&gt;
Оборудование из комплекта снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2488</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2488"/>
				<updated>2012-02-17T14:26:49Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&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 так и несколько комплектов. &lt;br /&gt;
&lt;br /&gt;
При формировании 1 комплекта есть возможность вручную задавать оборудование, что очень полезно, когда нужно, чтоб именно это оборудование с этим инвентарным номером было в комплекте. Пользователь указывает число комплектов(сколько нужно сформировать), сколько оборудования будет в 1 комплекте, из каких категории. &lt;br /&gt;
&lt;br /&gt;
Система автоматически берет первое свободное оборудование из данной категории и помещает его в комплект. Если оборудования нет - берет из дочерней категории согласно иерархии дерева категорий и т.д. Если хоть 1 комплект не будет полным(не хватит оборудования на n-ное количество комплектов), то система сразу скажет об этом и не будет вовсе их формировать.&lt;br /&gt;
&lt;br /&gt;
== Выдача комплектов(ообрудования) ==&lt;br /&gt;
Выдача комплекта происходит с указанием конкретной персоны, кому вручается этот комплект. Все данные сохраняются в приказ.&lt;br /&gt;
&lt;br /&gt;
Комплект можно выдать как со страницы просмотра этого комплекта, так и со спец страницы выдачи комплектов, где выбирается комплект, выбирается персона, указывается нужный комментарий, если необходим, и создается привязка персоны к комплекту.&lt;br /&gt;
&lt;br /&gt;
== Возврат комплекта ==&lt;br /&gt;
Осуществляется лишь со страницы просмотра комплекта. Есть форма возврата комплекта с подтверждением(галочка) этого шага. Всё осуществляется одним нажатием на кнопку. Комплекта снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Расформирование комплекта ==&lt;br /&gt;
&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2487</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2487"/>
				<updated>2012-02-17T14:25:26Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Создание дерева категорий */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&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 так и несколько комплектов. &lt;br /&gt;
&lt;br /&gt;
При формировании 1 комплекта есть возможность вручную задавать оборудование, что очень полезно, когда нужно, чтоб именно это оборудование с этим инвентарным номером было в комплекте. Пользователь указывает число комплектов(сколько нужно сформировать), сколько оборудования будет в 1 комплекте, из каких категории. &lt;br /&gt;
&lt;br /&gt;
Система автоматически берет первое свободное оборудование из данной категории и помещает его в комплект. Если оборудования нет - берет из дочерней категории согласно иерархии дерева категорий и т.д. Если хоть 1 комплект не будет полным(не хватит оборудования на n-ное количество комплектов), то система сразу скажет об этом и не будет вовсе их формировать.&lt;br /&gt;
&lt;br /&gt;
== Выдача комплектов(ообрудования) ==&lt;br /&gt;
Выдача комплекта происходит с указанием конкретной персоны, кому вручается этот комплект. Все данные сохраняются в приказ.&lt;br /&gt;
&lt;br /&gt;
Комплект можно выдать как со страницы просмотра этого комплекта, так и со спец страницы выдачи комплектов, где выбирается комплект, выбирается персона, указывается нужный комментарий, если необходим, и создается привязка персоны к комплекту.&lt;br /&gt;
&lt;br /&gt;
== Возврат комплекта ==&lt;br /&gt;
Осуществляется лишь со страницы просмотра комплекта. Есть форма возврата комплекта с подтверждением(галочка) этого шага. Всё осуществляется одним нажатием на кнопку. Комплекта снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2486</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2486"/>
				<updated>2012-02-17T14:23:43Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Выдача оборудования */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
 Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&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 так и несколько комплектов. &lt;br /&gt;
&lt;br /&gt;
При формировании 1 комплекта есть возможность вручную задавать оборудование, что очень полезно, когда нужно, чтоб именно это оборудование с этим инвентарным номером было в комплекте. Пользователь указывает число комплектов(сколько нужно сформировать), сколько оборудования будет в 1 комплекте, из каких категории. &lt;br /&gt;
&lt;br /&gt;
Система автоматически берет первое свободное оборудование из данной категории и помещает его в комплект. Если оборудования нет - берет из дочерней категории согласно иерархии дерева категорий и т.д. Если хоть 1 комплект не будет полным(не хватит оборудования на n-ное количество комплектов), то система сразу скажет об этом и не будет вовсе их формировать.&lt;br /&gt;
&lt;br /&gt;
== Выдача комплектов(ообрудования) ==&lt;br /&gt;
Выдача комплекта происходит с указанием конкретной персоны, кому вручается этот комплект. Все данные сохраняются в приказ.&lt;br /&gt;
&lt;br /&gt;
Комплект можно выдать как со страницы просмотра этого комплекта, так и со спец страницы выдачи комплектов, где выбирается комплект, выбирается персона, указывается нужный комментарий, если необходим, и создается привязка персоны к комплекту.&lt;br /&gt;
&lt;br /&gt;
== Возврат комплекта ==&lt;br /&gt;
Осуществляется лишь со страницы просмотра комплекта. Есть форма возврата комплекта с подтверждением(галочка) этого шага. Всё осуществляется одним нажатием на кнопку. Комплекта снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2485</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2485"/>
				<updated>2012-02-17T14:23:07Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Возврат оборудования */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
 Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&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 так и несколько комплектов. &lt;br /&gt;
&lt;br /&gt;
При формировании 1 комплекта есть возможность вручную задавать оборудование, что очень полезно, когда нужно, чтоб именно это оборудование с этим инвентарным номером было в комплекте. Пользователь указывает число комплектов(сколько нужно сформировать), сколько оборудования будет в 1 комплекте, из каких категории. &lt;br /&gt;
&lt;br /&gt;
Система автоматически берет первое свободное оборудование из данной категории и помещает его в комплект. Если оборудования нет - берет из дочерней категории согласно иерархии дерева категорий и т.д. Если хоть 1 комплект не будет полным(не хватит оборудования на n-ное количество комплектов), то система сразу скажет об этом и не будет вовсе их формировать.&lt;br /&gt;
&lt;br /&gt;
== Выдача оборудования ==&lt;br /&gt;
Выдача комплекта происходит с указанием конкретной персоны, кому вручается этот комплект. Все данные сохраняются в приказ.&lt;br /&gt;
&lt;br /&gt;
Комплект можно выдать как со страницы просмотра этого комплекта, так и со спец страницы выдачи комплектов, где выбирается комплект, выбирается персона, указывается нужный комментарий, если необходим, и создается привязка персоны к комплекту.&lt;br /&gt;
&lt;br /&gt;
== Возврат комплекта ==&lt;br /&gt;
Осуществляется лишь со страницы просмотра комплекта. Есть форма возврата комплекта с подтверждением(галочка) этого шага. Всё осуществляется одним нажатием на кнопку. Комплекта снова принимает статус активно(готово для использования). Данные записываются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2484</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2484"/>
				<updated>2012-02-17T14:19:36Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Выдача оборудования */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
 Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&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 так и несколько комплектов. &lt;br /&gt;
&lt;br /&gt;
При формировании 1 комплекта есть возможность вручную задавать оборудование, что очень полезно, когда нужно, чтоб именно это оборудование с этим инвентарным номером было в комплекте. Пользователь указывает число комплектов(сколько нужно сформировать), сколько оборудования будет в 1 комплекте, из каких категории. &lt;br /&gt;
&lt;br /&gt;
Система автоматически берет первое свободное оборудование из данной категории и помещает его в комплект. Если оборудования нет - берет из дочерней категории согласно иерархии дерева категорий и т.д. Если хоть 1 комплект не будет полным(не хватит оборудования на n-ное количество комплектов), то система сразу скажет об этом и не будет вовсе их формировать.&lt;br /&gt;
&lt;br /&gt;
== Выдача оборудования ==&lt;br /&gt;
Выдача комплекта происходит с указанием конкретной персоны, кому вручается этот комплект. Все данные сохраняются в приказ.&lt;br /&gt;
&lt;br /&gt;
Комплект можно выдать как со страницы просмотра этого комплекта, так и со спец страницы выдачи комплектов, где выбирается комплект, выбирается персона, указывается нужный комментарий, если необходим, и создается привязка персоны к комплекту.&lt;br /&gt;
&lt;br /&gt;
== Возврат оборудования ==&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2483</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2483"/>
				<updated>2012-02-17T14:08:02Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Выдача оборудования */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
 Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&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 так и несколько комплектов. &lt;br /&gt;
&lt;br /&gt;
При формировании 1 комплекта есть возможность вручную задавать оборудование, что очень полезно, когда нужно, чтоб именно это оборудование с этим инвентарным номером было в комплекте. Пользователь указывает число комплектов(сколько нужно сформировать), сколько оборудования будет в 1 комплекте, из каких категории. &lt;br /&gt;
&lt;br /&gt;
Система автоматически берет первое свободное оборудование из данной категории и помещает его в комплект. Если оборудования нет - берет из дочерней категории согласно иерархии дерева категорий и т.д. Если хоть 1 комплект не будет полным(не хватит оборудования на n-ное количество комплектов), то система сразу скажет об этом и не будет вовсе их формировать.&lt;br /&gt;
&lt;br /&gt;
== Выдача оборудования ==&lt;br /&gt;
Выдача комплекта происходит с указанием конкретной персоны, кому вручается этот комплект. Все данные сохраняются в приказ.&lt;br /&gt;
&lt;br /&gt;
== Возврат оборудования ==&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2482</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2482"/>
				<updated>2012-02-17T14:06:49Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Формирование комплектов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
 Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&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 так и несколько комплектов. &lt;br /&gt;
&lt;br /&gt;
При формировании 1 комплекта есть возможность вручную задавать оборудование, что очень полезно, когда нужно, чтоб именно это оборудование с этим инвентарным номером было в комплекте. Пользователь указывает число комплектов(сколько нужно сформировать), сколько оборудования будет в 1 комплекте, из каких категории. &lt;br /&gt;
&lt;br /&gt;
Система автоматически берет первое свободное оборудование из данной категории и помещает его в комплект. Если оборудования нет - берет из дочерней категории согласно иерархии дерева категорий и т.д. Если хоть 1 комплект не будет полным(не хватит оборудования на n-ное количество комплектов), то система сразу скажет об этом и не будет вовсе их формировать.&lt;br /&gt;
&lt;br /&gt;
== Выдача оборудования ==&lt;br /&gt;
== Возврат оборудования ==&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2481</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2481"/>
				<updated>2012-02-17T14:06:35Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Формирование комплектов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
 Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&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 так и несколько комплектов. &lt;br /&gt;
&lt;br /&gt;
При формировании 1 комплекта есть возможность вручную задавать оборудование, что очень полезно, когда нужно, чтоб именно это оборудование с этим инвентарным номером было в комплекте. Пользователь указывает число комплектов(сколько нужно сформировать), сколько оборудования будет в 1 комплекте, из каких категории. &lt;br /&gt;
&lt;br /&gt;
Система автоматически берет первое свободное оборудование из данной категории и помещает его в комплект. Если оборудования нет - берет из дочерней категории согласон иерархии дерева категорий и т.д. Если хоть 1 комплект не будет полным(не хватит оборудования на n-ное количество комплектов), то система сразу скажет об этом и не будет вовсе их формировать.&lt;br /&gt;
&lt;br /&gt;
== Выдача оборудования ==&lt;br /&gt;
== Возврат оборудования ==&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2480</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2480"/>
				<updated>2012-02-17T14:05:27Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Формирование комплектов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
 Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&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 так и несколько комплектов. При формировании 1 комплекта есть возможность вручную задавать оборудование, что очень полезно, когда нужно, чтоб именно это оборудование с этим инвентарным номером было в комплекте. Пользователь указывает число комплектов(сколько нужно сформировать), сколько оборудования будет в 1 комплекте, из каких категории. Система автоматически берет первое свободное оборудование из данной категории и помещает его в комплект. Если оборудования нет - берет из дочерней категории согласон иерархии дерева категорий и т.д. Если хоть 1 комплект не будет полным(не хватит оборудования на n-ное количество комплектов), то система сразу скажет об этом и не будет вовсе их формировать.&lt;br /&gt;
&lt;br /&gt;
== Выдача оборудования ==&lt;br /&gt;
== Возврат оборудования ==&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2479</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2479"/>
				<updated>2012-02-17T14:01:32Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Создание дерева категорий */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
Мебель&lt;br /&gt;
  Стулья&lt;br /&gt;
   стулья марки Sunrise&lt;br /&gt;
   стулья марки Schiva&lt;br /&gt;
  Столы&lt;br /&gt;
 Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&lt;br /&gt;
Единственный способ добавить оборудование в систему - это приказ о приходе, поэтому заполнение системы данными об оборудовании начинается с составления этого приказа. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы занести оборудование в базу нужно указать его тип, количество, выбрать категорию в которую будет зачислено оборудование (или создать свою). Также можно указать серийные и инвентарные номера оборудования. Если номера не указаны - то они будут присвоены оборудованию автоматически. &lt;br /&gt;
&lt;br /&gt;
Приказ хранит в себе весь список поступившего оборудования и подписывается цифровой подписью.&lt;br /&gt;
После исполнения приказ навсегда остается в системе, и его можно в любой момент просмотреть.&lt;br /&gt;
== Формирование комплектов ==&lt;br /&gt;
== Выдача оборудования ==&lt;br /&gt;
== Возврат оборудования ==&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2478</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2478"/>
				<updated>2012-02-17T14:01:01Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Создание дерева категорий */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&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;lt;pre&amp;gt;&lt;br /&gt;
-Мебель&lt;br /&gt;
--Стелья&lt;br /&gt;
---стулья марки Sunrise&lt;br /&gt;
---стулья марки Schiva&lt;br /&gt;
--Столы&lt;br /&gt;
-Компьютеры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&lt;br /&gt;
Единственный способ добавить оборудование в систему - это приказ о приходе, поэтому заполнение системы данными об оборудовании начинается с составления этого приказа. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы занести оборудование в базу нужно указать его тип, количество, выбрать категорию в которую будет зачислено оборудование (или создать свою). Также можно указать серийные и инвентарные номера оборудования. Если номера не указаны - то они будут присвоены оборудованию автоматически. &lt;br /&gt;
&lt;br /&gt;
Приказ хранит в себе весь список поступившего оборудования и подписывается цифровой подписью.&lt;br /&gt;
После исполнения приказ навсегда остается в системе, и его можно в любой момент просмотреть.&lt;br /&gt;
== Формирование комплектов ==&lt;br /&gt;
== Выдача оборудования ==&lt;br /&gt;
== Возврат оборудования ==&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2477</id>
		<title>Разработка:im/inventory</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:im/inventory&amp;diff=2477"/>
				<updated>2012-02-17T13:58:04Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Создание дерева категорий */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = inventory&lt;br /&gt;
| type = im&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Ресурсы и инвентарь=&lt;br /&gt;
Этот плагин предназначен для учета и отслеживания использования оборудования и других ресурсов, которыми обладает организация.&lt;br /&gt;
= Сценарии использования =&lt;br /&gt;
Взаимодействие с оборудованием и людьми разбито на несколько стандартных сценариев, которые описаны ниже.&lt;br /&gt;
== Создание дерева категорий ==&lt;br /&gt;
Каждый комплект или оборудование приписаны к той или иной категории.&lt;br /&gt;
Перед тем как начать регистрировать новые ресурсы рекомендуется сначала создать дерево категорий ресурсов, которыми обладает ваша организация. Однако, если вы не нуждаетесь в иерархической структуре хранимого оборудования - то этот шаг можно пропустить: категории также могут быть созданы при поступлении оборудования и создании комплектов.&lt;br /&gt;
&lt;br /&gt;
== Поступление оборудования ==&lt;br /&gt;
Единственный способ добавить оборудование в систему - это приказ о приходе, поэтому заполнение системы данными об оборудовании начинается с составления этого приказа. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы занести оборудование в базу нужно указать его тип, количество, выбрать категорию в которую будет зачислено оборудование (или создать свою). Также можно указать серийные и инвентарные номера оборудования. Если номера не указаны - то они будут присвоены оборудованию автоматически. &lt;br /&gt;
&lt;br /&gt;
Приказ хранит в себе весь список поступившего оборудования и подписывается цифровой подписью.&lt;br /&gt;
После исполнения приказ навсегда остается в системе, и его можно в любой момент просмотреть.&lt;br /&gt;
== Формирование комплектов ==&lt;br /&gt;
== Выдача оборудования ==&lt;br /&gt;
== Возврат оборудования ==&lt;br /&gt;
== Списание оборудования ==&lt;br /&gt;
== Отчеты ==&lt;br /&gt;
* Отчет по использованию оборудования организацией (информация о том, какое количество оборудования есть в наличии, что используется а что нет)&lt;br /&gt;
* Отчёт по использованию оборудования людьми (информация о том, какое оборудование когда кем и кому было выдано, и где сейчас находится) &lt;br /&gt;
= Права =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экраны интерфейса пользователя:&lt;br /&gt;
&lt;br /&gt;
* Реестр ресурсов (по подразделению или по всей организации).  Отображает список ресурсов из invitems, сгруппированный по дереву категорий. По умолчанию не отображаются ресурсы  в статусе &amp;quot;списан&amp;quot;: после имени категории идет таблица со списком ресурсов. Ссылки на форму импорта/экспорта ресурсов. На против каждого ресурс - ссылка на экран редактирования партии ресурса.&lt;br /&gt;
* Импорт/экспорт ресурсов. Форма для импорта включает поле отправки файла, и выпадающие меню для выбора подразделения (по-умолчанию - все), к которому будут приписаны ресурсы и категории по-умолчанию, если в файле для ресурса не указан код категории. Импортированные ресурсы добавляются в таблицу invitems со статусом &amp;quot;поступил&amp;quot;. Форма экспорта включает выподающее меню выбора подразделения (по-умолчанию - все) поля выбора даты начала и конца периода, за который будут отображаться поступившие и списанные в данном промежутке ресурсы, галочку игнорирования периода, выпадающее меню для выбора статуса ресурса (по-умолчанию - все). Для штучных ресурсов отображается название пакета, в который они включены.&lt;br /&gt;
* Форма редактирования партии ресурса отображает параметры партии ресурса, список операций по таблице invoperations с данным ресурсом. Форму смены статуса ресурса.&lt;br /&gt;
* Список пакетов ресурсов (по подраздалению, либо глобально). Пакеты сгрупированы по дереву категорий. Напротив каждого пакета ссылка &amp;quot;редактировать&amp;quot;.&lt;br /&gt;
* Форма редактирования параметров и состава пакета ресурса. Редактирование параметров и статуса пакета. Список включенных ресурсов/категорий с полем ввода &amp;quot;количество&amp;quot; напротив каждого из них. Если ресурс является штучным, поле &amp;quot;количество&amp;quot; не доступно для редактирования. Под списком ресурсов кнопка &amp;quot;сохранить изменения количества&amp;quot;. Ниже дерева категорий ресурсов, принадлежащих данному структурному подразделению), напротив  категорий с несчетными ресурсами и штучных ресурсов ссылки &amp;quot;добавить&amp;quot;.&lt;br /&gt;
* Дерево категорий. Отображается структурированный список категорий, на против каждой категории ссылки &amp;quot;удалить&amp;quot;, &amp;quot;редактировать&amp;quot;, &amp;quot;добавить подкатегорию&amp;quot;.&lt;br /&gt;
* Форма редактирования категории. Редактирование параметров категории, включая родительскую категорию. Список дочерних подкатегорий. Список ресурсов или пакетов, причисленных к категории.&lt;br /&gt;
* Заказ пакетов ресурсов. Страница открывается по ссылке содержащей тип события привязки заказа и id собитии (если тип это предполагает). На странице отображается информация о событи привязки, либи форма ввода даты и продолжительности заказа. Ниже отображается список заказанных пакетов и количество для пакетов, допускающих множественный заказ. Ниже располагается дерево категорий, напротив категорий с пакетами, располагается ссылка &amp;quot;заказать&amp;quot; (если заказчика устроит любой пакет из данной категории), напротив каждого пакета так же располагается ссылка &amp;quot;заказать&amp;quot; для выбора предпочтительного пакета с ресурсами. Ссылка на экран просмотра состояния заказа.&lt;br /&gt;
* Просмотр состояния заказа. Позволяет просмотреть список исполнений, запланированных по данному заказу.&lt;br /&gt;
* Исполнение заказов (по подразделению). Отображает список заказов, подлежащих выдаче, по таблице invexecutions, отсортированных по плановому времени начала использования пакета и список пакетов подлежащих возврату. Напротив каждого из них ссылка &amp;quot;отметить&amp;quot;.&lt;br /&gt;
* Отметка об исполнении заказа. Позволяет выбрать конкретный выдаваемый пакет и одобрить его состав, если заказ предполагает вариации. Так же на этом экране возможно указать причину неисполнения или невозврата и реквизиты сопутствующих документов.&lt;br /&gt;
* История движения ресурсов (по id подразделения, id ресурса или id категории).&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invsets&amp;diff=2476</id>
		<title>Разработка:storages/invsets</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/invsets&amp;diff=2476"/>
				<updated>2012-02-17T13:02:08Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Таблица в базе данных */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invsets&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Таблица в базе данных===&lt;br /&gt;
''invsets'' - комплекты оборудования, минимальная единица, которую можно выдать персоне. Комплект включать в себя штучное оборудование. Все комплекты являются штучными и содержат конкретный перечень оборудования с известными инвентарными номерами.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* code - код комплекта&lt;br /&gt;
* type - возвращаемость комплекта: полностью расходуемый, возвращаемый, штучный&lt;br /&gt;
* invcategoryid - категория, к которой приписан объект&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса&lt;br /&gt;
* personid - персона, ответственная за комплект&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/invsets | invsets ]]&lt;br /&gt;
* note - примечание. Заполняется при выдаче/возврате комплекта&lt;br /&gt;
&lt;br /&gt;
==Дополнительные методы:==&lt;br /&gt;
* Поиск комплекта по коду (второй параметр: только доступные, включая новые и временно недоступные, включая расформированные)&lt;br /&gt;
* Список комплектов по категории (если null - не учитывается) и структурному подразделению (если null - не учитывается) и статусу : только доступные, включая новые и временно недоступные, включая расформированные)&lt;br /&gt;
* Создать комплект (с проверкой уникальности кода и правомерностью расположения в категории)&lt;br /&gt;
* Расформировать комплект&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invsets&amp;diff=2475</id>
		<title>Разработка:storages/invsets</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/invsets&amp;diff=2475"/>
				<updated>2012-02-17T13:01:04Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Подробный формат полей в таблице: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invsets&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invsets'' - комплекты оборудования, минимальная единица, которую можно выдать персоне. Комплект включать в себя штучное оборудование. Все комплекты являются штучными и содержат конкретный перечень оборудования с известными инвентарными номерами.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* code - код комплекта&lt;br /&gt;
* type - возвращаемость комплекта: полностью расходуемый, возвращаемый, штучный&lt;br /&gt;
* invcategoryid - категория, к которой приписан объект&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса&lt;br /&gt;
* personid - персона, ответственная за комплект&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/invsets | invsets ]]&lt;br /&gt;
* note - примечание. Заполняется при выдаче/возврате комплекта&lt;br /&gt;
&lt;br /&gt;
==Дополнительные методы:==&lt;br /&gt;
* Поиск комплекта по коду (второй параметр: только доступные, включая новые и временно недоступные, включая расформированные)&lt;br /&gt;
* Список комплектов по категории (если null - не учитывается) и структурному подразделению (если null - не учитывается) и статусу : только доступные, включая новые и временно недоступные, включая расформированные)&lt;br /&gt;
* Создать комплект (с проверкой уникальности кода и правомерностью расположения в категории)&lt;br /&gt;
* Расформировать комплект&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invsets&amp;diff=2474</id>
		<title>Разработка:storages/invsets</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/invsets&amp;diff=2474"/>
				<updated>2012-02-17T12:59:14Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Подробный формат полей в таблице: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invsets&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invsets'' - комплекты оборудования, минимальная единица, которую можно выдать персоне. Комплект включать в себя штучное оборудование. Все комплекты являются штучными и содержат конкретный перечень оборудования с известными инвентарными номерами.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* code - код комплекта&lt;br /&gt;
* type - возвращаемость комплекта: полностью расходуемый, возвращаемый, штучный&lt;br /&gt;
* invcategoryid - категория, к которой приписан объект&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса&lt;br /&gt;
* personid - персона, ответственная за комплект&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/invsets | invsets ]]&lt;br /&gt;
&lt;br /&gt;
==Дополнительные методы:==&lt;br /&gt;
* Поиск комплекта по коду (второй параметр: только доступные, включая новые и временно недоступные, включая расформированные)&lt;br /&gt;
* Список комплектов по категории (если null - не учитывается) и структурному подразделению (если null - не учитывается) и статусу : только доступные, включая новые и временно недоступные, включая расформированные)&lt;br /&gt;
* Создать комплект (с проверкой уникальности кода и правомерностью расположения в категории)&lt;br /&gt;
* Расформировать комплект&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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/invsets&amp;diff=2473</id>
		<title>Разработка:storages/invsets</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/invsets&amp;diff=2473"/>
				<updated>2012-02-17T12:58:40Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* Таблица в базе данных */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = invsets&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''invsets'' - комплекты оборудования, минимальная единица, которую можно выдать персоне. Комплект включать в себя штучное оборудование. Все комплекты являются штучными и содержат конкретный перечень оборудования с известными инвентарными номерами.&lt;br /&gt;
&lt;br /&gt;
==Подробный формат полей в таблице:==&lt;br /&gt;
* code - код комплекта&lt;br /&gt;
* type - возвращаемость комплекта: полностью расходуемый, возвращаемый, штучный&lt;br /&gt;
* invcategoryid - категория, к которой приписан объект&lt;br /&gt;
* departmentid - id подразделение - владельца ресурса&lt;br /&gt;
* personid - персона, ответственная за комплект&lt;br /&gt;
* status - список статусов указан в одноименном плагине рабочих процессов  [[Разработка:workflows/invsets | invsets ]]&lt;br /&gt;
&lt;br /&gt;
==Дополнительные методы:==&lt;br /&gt;
* Поиск комплекта по коду (второй параметр: только доступные, включая новые и временно недоступные, включая расформированные)&lt;br /&gt;
* Список комплектов по категории (если null - не учитывается) и структурному подразделению (если null - не учитывается) и статусу : только доступные, включая новые и временно недоступные, включая расформированные)&lt;br /&gt;
* Создать комплект (с проверкой уникальности кода и правомерностью расположения в категории)&lt;br /&gt;
* Расформировать комплект&lt;br /&gt;
[[Категория:Оборудование]]&lt;/div&gt;</summary>
		<author><name>Dido86</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=2465</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=2465"/>
				<updated>2012-02-09T13:36:23Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* dof_calendar */&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;
===== 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 календаря для выбора диапозона дат. Календари находятся на одной линии. Под каждым календарем поле-указывает в формате д.м.гг дату, которая выбрана на календаре. В скрытое поле каждого календаря помещается время в unix time, причем в &amp;quot;с&amp;quot; береть отчет от 00.00.01, в &amp;quot;до&amp;quot; с 23.59.59. Если на правом и на левом календарях отмечена одна дата, то диапозон ,соотвественно, равен 00.00.01-23.59.59, что полностью охватывает выбранный день&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;
&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;. В неё же и помещается массив option(ключ=&amp;gt;значени), это так называемые значения по умолчанию(не обязательные).&lt;br /&gt;
*Список обязательных полей для переменной $options: &lt;br /&gt;
**plugintype - тип плагина ( например storage)  &lt;br /&gt;
**plugincode - код плагина ( например plans) &lt;br /&gt;
**queryty    - тип запроса, именно по нему и определяется, что надо делать( например plans_name ). Этот тип должен совпадать с типом, который будет находиться в этом в плагине в методе widgets_field_variants_list&lt;br /&gt;
**sesskey    - ключ сессии(чтоб идентифицировать запрос) задается методом sesskey()&lt;br /&gt;
**type       - тип действия ( например autocomplete ). Есть ещё тип savefield &lt;br /&gt;
*Необязательные поля:&lt;br /&gt;
**option    - массив значений по умолчания( например $a[19]= &amp;quot;primer&amp;quot;), где ключ - это id элемента из бд &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; $mform-&amp;gt;addElement('dof_autocomplete', $elementName = null, $elementLabel = null, $attributes = null, $options = null)&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;
     // установим значение по умолчанию&lt;br /&gt;
     $mas = array( 19 =&amp;gt; 'primer' );&lt;br /&gt;
     $options['option'] = $mas;&lt;br /&gt;
&lt;br /&gt;
// добавляем новый элемент в форму&lt;br /&gt;
$mform-&amp;gt;addElement('autocomplete', 'testname', 'Текст перед полем:', 'size=12', $options);&lt;br /&gt;
// устаонвка типа&lt;br /&gt;
$mform-&amp;gt;setType('testname', PARAM_TERXT);&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;
       [testname] = полученное значение&lt;br /&gt;
       [id_autocomplete] = 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;, который возвращает массив объектов в формате &amp;lt;pre&amp;gt; &lt;br /&gt;
$a = arrya();&lt;br /&gt;
a[1] = object[&lt;br /&gt;
          name = ЗНАЧЕНИЕ_1 ДЛЯ ВЫПАДАЮЩЕГО СПИСКА&lt;br /&gt;
            id = id элемента_1&lt;br /&gt;
             ];&lt;br /&gt;
a[2] = object[ &lt;br /&gt;
          name = ЗНАЧЕНИЕ_2 ВЫПАДАЮЩЕГО СПИСКА&lt;br /&gt;
            id = id элемента_2&lt;br /&gt;
             ]; &lt;br /&gt;
   ...  &lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;где $querytype-тип запроса(обрабатывается путем case), $data-вх данные, как правило строка(набранные данные в поле autocomplete)&lt;br /&gt;
* Замечание: &lt;br /&gt;
** поля name и id обязательны в переданном массиве&lt;br /&gt;
** метод должен возвращать с LIMIT 15(не больше), для быстроты работы&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>Dido86</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=2464</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=2464"/>
				<updated>2012-02-09T13:35:18Z</updated>
		
		<summary type="html">&lt;p&gt;Dido86: /* dof_calendar */&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;
===== 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 календаря для выбора диапозона дат. Календари находятся на одной линии. Под каждым календарем поле-указывает в формате д.м.гг дату, которая выбрана на календаре. В скрытое поле каждого календаря помещается время в unix time, причем в &amp;quot;с&amp;quot; береть отчет от 00.00.01, в &amp;quot;до&amp;quot; с 23.59.59. Если на правом и на левом календарях отмечена одна дата, то диапозон ,соотвественно, равен 00.00.01-23.59.59, что полностью охватывает выбранный день&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;
&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;
 [testname] = Array&lt;br /&gt;
       [testname] = полученное значение&lt;br /&gt;
       [id_autocomplete] = id значения&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;. В неё же и помещается массив option(ключ=&amp;gt;значени), это так называемые значения по умолчанию(не обязательные).&lt;br /&gt;
*Список обязательных полей для переменной $options: &lt;br /&gt;
**plugintype - тип плагина ( например storage)  &lt;br /&gt;
**plugincode - код плагина ( например plans) &lt;br /&gt;
**queryty    - тип запроса, именно по нему и определяется, что надо делать( например plans_name ). Этот тип должен совпадать с типом, который будет находиться в этом в плагине в методе widgets_field_variants_list&lt;br /&gt;
**sesskey    - ключ сессии(чтоб идентифицировать запрос) задается методом sesskey()&lt;br /&gt;
**type       - тип действия ( например autocomplete ). Есть ещё тип savefield &lt;br /&gt;
*Необязательные поля:&lt;br /&gt;
**option    - массив значений по умолчания( например $a[19]= &amp;quot;primer&amp;quot;), где ключ - это id элемента из бд &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; $mform-&amp;gt;addElement('dof_autocomplete', $elementName = null, $elementLabel = null, $attributes = null, $options = null)&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;
     // установим значение по умолчанию&lt;br /&gt;
     $mas = array( 19 =&amp;gt; 'primer' );&lt;br /&gt;
     $options['option'] = $mas;&lt;br /&gt;
&lt;br /&gt;
// добавляем новый элемент в форму&lt;br /&gt;
$mform-&amp;gt;addElement('autocomplete', 'testname', 'Текст перед полем:', 'size=12', $options);&lt;br /&gt;
// устаонвка типа&lt;br /&gt;
$mform-&amp;gt;setType('testname', PARAM_TERXT);&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;
       [testname] = полученное значение&lt;br /&gt;
       [id_autocomplete] = 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;, который возвращает массив объектов в формате &amp;lt;pre&amp;gt; &lt;br /&gt;
$a = arrya();&lt;br /&gt;
a[1] = object[&lt;br /&gt;
          name = ЗНАЧЕНИЕ_1 ДЛЯ ВЫПАДАЮЩЕГО СПИСКА&lt;br /&gt;
            id = id элемента_1&lt;br /&gt;
             ];&lt;br /&gt;
a[2] = object[ &lt;br /&gt;
          name = ЗНАЧЕНИЕ_2 ВЫПАДАЮЩЕГО СПИСКА&lt;br /&gt;
            id = id элемента_2&lt;br /&gt;
             ]; &lt;br /&gt;
   ...  &lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;где $querytype-тип запроса(обрабатывается путем case), $data-вх данные, как правило строка(набранные данные в поле autocomplete)&lt;br /&gt;
* Замечание: &lt;br /&gt;
** поля name и id обязательны в переданном массиве&lt;br /&gt;
** метод должен возвращать с LIMIT 15(не больше), для быстроты работы&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>Dido86</name></author>	</entry>

	</feed>