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

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:storages/educations&amp;diff=2651</id>
		<title>Разработка:storages/educations</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/educations&amp;diff=2651"/>
				<updated>2013-07-11T10:35:16Z</updated>
		
		<summary type="html">&lt;p&gt;Fastenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = educations&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
===Таблица в базе данных===&lt;br /&gt;
''educations'' - Информация об образовании.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* personid - id пользователя в таблице [[Разработка:storages/persons | persons ]]&lt;br /&gt;
* organizationid - id организации в таблице [[Разработка:storages/organizations | organizations ]]&lt;br /&gt;
* edulevel - уровень образования. Возможные варианты хранятся в [[Разработка:modlibs/refbook | refbook ]]&lt;br /&gt;
* edydoctype - тип документа об образовании. Возможные варианты хранятся в [[Разработка:modlibs/refbook | refbook ]]&lt;br /&gt;
* edudoccode - код документа&lt;br /&gt;
* edudocserial - серия документа&lt;br /&gt;
* edudocnum - номер документа&lt;br /&gt;
* edudocdate - дата выдачи документа, причем, эта дата объективная, не привязана к часовому поясу, её нельзя хранить в unixtimestamp.&lt;br /&gt;
* begindate - дата начала обучения в формате unixtime&lt;br /&gt;
* enddate  - дата окончания обучения в формате unixtime&lt;br /&gt;
* comment - комментарий&lt;/div&gt;</summary>
		<author><name>Fastenko</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9F%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D1%8B_storages&amp;diff=2650</id>
		<title>Категория:Плагины storages</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9F%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D1%8B_storages&amp;diff=2650"/>
				<updated>2013-07-11T09:05:15Z</updated>
		
		<summary type="html">&lt;p&gt;Fastenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Плагины]]&lt;/div&gt;</summary>
		<author><name>Fastenko</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9F%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D1%8B_storages&amp;diff=2649</id>
		<title>Категория:Плагины storages</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9F%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D1%8B_storages&amp;diff=2649"/>
				<updated>2013-07-11T09:04:59Z</updated>
		
		<summary type="html">&lt;p&gt;Fastenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Плагины]]&lt;br /&gt;
ппп&lt;/div&gt;</summary>
		<author><name>Fastenko</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/educations&amp;diff=2648</id>
		<title>Разработка:storages/educations</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/educations&amp;diff=2648"/>
				<updated>2013-07-11T08:53:53Z</updated>
		
		<summary type="html">&lt;p&gt;Fastenko: Новая страница: «===Таблица в базе данных=== ''educations'' - Информация об образовании.  ====Подробный формат полей в ...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Таблица в базе данных===&lt;br /&gt;
''educations'' - Информация об образовании.&lt;br /&gt;
&lt;br /&gt;
====Подробный формат полей в таблице:====&lt;br /&gt;
* personid - id пользователя в таблице [[Разработка:storages/persons | persons ]]&lt;br /&gt;
* organizationid - id организации в таблице [[Разработка:storages/organizations | organizations ]]&lt;br /&gt;
* edulevel - уровень образования. Возможные варианты хранятся в [[Разработка:modlibs/refbook | refbook ]]&lt;br /&gt;
* edydoctype - тип документа об образовании. Возможные варианты хранятся в [[Разработка:modlibs/refbook | refbook ]]&lt;br /&gt;
* edudoccode - код документа&lt;br /&gt;
* edudocserial - серия документа&lt;br /&gt;
* edudocnum - номер документа&lt;br /&gt;
* edudocdate - дата выдачи документа, причем, эта дата объективная, не привязана к часовому поясу, её нельзя хранить в unixtimestamp.&lt;br /&gt;
* begindate - дата начала обучения в формате unixtime&lt;br /&gt;
* enddate  - дата окончания обучения в формате unixtime&lt;br /&gt;
* comment - комментарий&lt;/div&gt;</summary>
		<author><name>Fastenko</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=2647</id>
		<title>Разработка:Стандарт кодирования</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=2647"/>
				<updated>2013-07-04T17:58:34Z</updated>
		
		<summary type="html">&lt;p&gt;Fastenko: /* Прочее */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Правила оформления кода в проекте «Электронный деканат». ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Стиль кодирования ===&lt;br /&gt;
==== Формат файлов ====&lt;br /&gt;
# Все файлы с кодом должны иметь расширение .php&lt;br /&gt;
# Все html-шаблоны должны иметь расширение .html&lt;br /&gt;
# Весь текст, включая исходный код, должен быть в кодировке utf-8 с оконачаниями строк в формет Unix&lt;br /&gt;
# Окончания строк в формате Unix (LF - 0x0A)&lt;br /&gt;
# Все php-теги должны быть полными &amp;lt;?php ... ?&amp;gt;. Краткие теки &amp;lt;? ?&amp;gt; не допускаются&lt;br /&gt;
# Все отступы – 4 пробела. Не использовать TAB.&lt;br /&gt;
# Длинна строки в коде не должна быть больше 80 символов. В некоторых случаях допускается 120, если это упростит читаемость кода.&lt;br /&gt;
# Пробелы можно использовать свободно. Не надо бояться растягивать код для улучшения читабельности.&lt;br /&gt;
==== Имена ====&lt;br /&gt;
# Имена файлов должны состоять только из латинских символов, знака подчеркивания и точки. Имя файла обязательно должно иметь расширение. Рекомендуется использовать для именования файлов слова на английском языке.&lt;br /&gt;
# Имена классов должны состоять из строчных латинских символов и знака подчеркивания. Рекомендуется использовать английские слова разделенных символом подчеркивания. Имя класса в плагине должно начинаться с префикса, соответствующего плагину. Если требуется, имя класса может включать преффикс и суффикс.&lt;br /&gt;
# Имена функций и методов должны состоять из строчных латинских символов и знака подчеркивания. Имя функции в плагине должно начинаться с префикса, соответствующего имени модуля (dof_) и плагину, в котором объявлена (типплагина_кодплагина). Затем идет часть имени, описывающая выполняемое действие. Последняя часть - это существительное, обозначающее сущность, над которой это действие производится либо набор сущностей. Не должно быть пробелов между именем функции и скобками. Это относится и к объявлению функции, и к ее использованию. Параметры всегда должны иметь разумные значения по умолчанию, если это возможно. Пример: modname_get_string($identifier, $pluginname = NULL). Между ключевым словом function и именем функции должен быть только один пробел.&lt;br /&gt;
# Имена параметров функций именуются по тем же правилам, что и переменные. Имя параметра должно быть кратким и информативным для сторонних программистов. Если параметр может быть не задан, используйте по умолчанию значение  null, для отличия этой ситуации от передачи параметра false, 0 или '' если это требуется).&lt;br /&gt;
# Имена переменных - всегда легкие для чтения осмысленные слова английского языка, набранные в нижнем регистре. Несколько слов пишутся слитно. Но они должны быть как можно короче. Используйте имена во множественном числе для массивов объектов. Например: $courseid, $studentsgrades&lt;br /&gt;
# Имена глобальных переменных, должны состоять полностью из заглавных букв. Пример: $CFG&lt;br /&gt;
# Имена констант должны состоять из латинских символов в верхнем регистре и знака подчеркивания. Всегда начинаются с имени модуля (DOF). Если константа объявлена в плагине, она получает дополнительный префикс ТИППЛАГИНА_КОДПЛАГИНА. Слова в названии разделены символом подчеркивания. Пример: SITE_ID&lt;br /&gt;
# true, false и null должны быть набраны в нижнем регистре&lt;br /&gt;
# AND, OR, XOR должны быть набраны в верхнем регистре, не используйте сокращенные синонимы.&lt;br /&gt;
==== Строки ====&lt;br /&gt;
# Используйте одинарные кавычки, если в строке отсутствуют макроподстановки и эскейп-последовательности, а так же если в строке присутствует много двойных кавычек.&lt;br /&gt;
# При макроподстановках в двойных кавычках заключайте переменные в фигурные скобки.&lt;br /&gt;
# Объединение строк выполняется через оператор &amp;quot;точка&amp;quot; (.)&lt;br /&gt;
==== Массивы ====&lt;br /&gt;
# Не используйте отрицательных чисел для нумерации массивов (кроме случаев, когда это прямо требуется логикой программы).&lt;br /&gt;
# Индексация массива может начинаться с любого положительного числа, обычно с 0.&lt;br /&gt;
# При объявлении массива через функцию array() ставьте пробел после запятой при перечислении параметров. Длинные объявления можно переносить по строкам. При объявлении ассоциативных массивов помещайте на одну строку одну пару ключ-значение.&lt;br /&gt;
==== Классы ====&lt;br /&gt;
# Свойства класса должны объявляться до его методов.&lt;br /&gt;
# Фигурная скобка пишется на следующей строчке после объявления имени класса, на одном уровне с ключевым словом class.&lt;br /&gt;
# Объявление любого класса должно быть документировано по стандарту PHPDocumentor&lt;br /&gt;
# Весь код внутри класса должен быть сдвинут на 4 пробела от уровня его объявления.&lt;br /&gt;
# Объявление класса должно быть отделено от остального коду двумя пустыми строками.&lt;br /&gt;
# Свойства класса должны объявляться напрямую при объявлении класса с указанием модификатора доступа (private (доступ извне запрещен), protected (разрешен доступ из наследников) или public)&lt;br /&gt;
==== Функции и методы ====&lt;br /&gt;
# Объявление функций и методов должно сопровождаться комментарием по стандарту PHPDocumentor&lt;br /&gt;
# Все объявления методов должны содержать модификатор доступа (private (доступ извне запрещен), protected (разрешен доступ из наследников) или public)&lt;br /&gt;
# Фигурная скобка должна располагаться на следующей строке после объявления имени функции или метода на одном с ним уровнем.&lt;br /&gt;
# Тело функции должно быть сдвинуто на 4 пробела вправо.&lt;br /&gt;
# Между именем функции и круглой скобкой не должно быть пробела.&lt;br /&gt;
# Если функция не возвращает значений, то true обозначает успех, false - не успех. Если функция возвращает массив, в случае успешного выполнения, но отсутствия элементов в результате, функция должна возвращать пустой массив.&lt;br /&gt;
&lt;br /&gt;
==== Управляющие конструкции ====&lt;br /&gt;
Ставьте один пробел между скобками и синтаксическими конструкциями. Это не относится к функциям и их параметрам. Пример:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    if ( $a &amp;gt;= max($key) )&lt;br /&gt;
    {&lt;br /&gt;
    &lt;br /&gt;
    ···· $c = $a;&lt;br /&gt;
    &lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блоки всегда ограничиваются фигурными скобками. При этом используется [http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B8%D0%BB%D1%8C_%D0%BE%D1%82%D1%81%D1%82%D1%83%D0%BF%D0%BE%D0%B2#.D0.A1.D1.82.D0.B8.D0.BB.D1.8C_.D0.9E.D0.BB.D0.BC.D0.B0.D0.BD.D0.B0 стиль Олмана]:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    if (&amp;lt;cond&amp;gt;)&lt;br /&gt;
    {&lt;br /&gt;
    ····&amp;lt;body&amp;gt;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Комментарии и документация ====&lt;br /&gt;
# Комментарии должны быть подробными и содержательными. Объяснять каждое объявление классов, функций и переменных. Каждый цикл и каждая ветвь условия должны быть пояснены содержательным смыслом выполняемых действий, например: &amp;quot;перебираем список товаров&amp;quot;, &amp;quot;если пользователь не заполнил поле имя...&amp;quot;&lt;br /&gt;
# Комментарии к функциям и классам оформляются в формате [http://manual.phpdoc.org/HTMLframesConverter/default/ PHPDoc]&lt;br /&gt;
# Комментарии в строках должны быть в стиле '''//'''. Они должны быть понятными и располагаться над строкой комментируемого кода.&lt;br /&gt;
# Файлы, содержащие PHP-код должны начинаться с комментария, предусмотренного лицензией GNU GPL.&lt;br /&gt;
&lt;br /&gt;
==== Дата и время ====&lt;br /&gt;
#Все даты и время в базе данных хранятся в [http://ru.wikipedia.org/wiki/Unix_timestamp Unix Timestamp] по [http://ru.wikipedia.org/wiki/UTC UTC] без учета летнего времени и пересчитываются в местное время при отображении.&lt;br /&gt;
# Если определена только дата, то время устанавливается 12:00 по полудню на UTC.&lt;br /&gt;
&lt;br /&gt;
==== Исключения ====&lt;br /&gt;
# Рекомендуется использование исключений для сообщения об ошибках.&lt;br /&gt;
# Любые необработанные исключения должны заканчиваться вызовом $DOF-&amp;gt;print_error() для вывода сообщения об ошибке.&lt;br /&gt;
# Не используйте исключения для обработки штатных ситуаций, только в ошибочных и аварийных ситуаций.&lt;br /&gt;
# Для вывода исключений можно использовать следующие классы:&lt;br /&gt;
## dof_exception - базовый класс исключения&lt;br /&gt;
## dof_exception_coding - ошибка разработчика&lt;br /&gt;
## dof_exception_db - ошибка обращения к СУБД&lt;br /&gt;
## dof_exception_file - ошибка работы с файлами&lt;br /&gt;
&lt;br /&gt;
==== Прочее ====&lt;br /&gt;
# При копировании объектов используйте PHP5-функцию копирования объектов. В MOODLE есть функция clone(), которая совместима и с PHP4 тоже.&lt;br /&gt;
# Если вы копируете переменную, которая может содержать объект, то используйте функцию MOODLE fullclone().&lt;br /&gt;
# Все переменные перед первым использованием необходимо инициализировать.&lt;br /&gt;
# Имя модуля может включать только строчные латинские буквы и содержать не более 20 символов.&lt;br /&gt;
# Следует избегать использования глобальных переменных.&lt;br /&gt;
# Обращения к объектом Free Dean's Office выполняется через объект [[Разработка:lib/dof.php|$DOF]]. При объявлении плагина он должен сохранить ссылка на объект $DOF в собственном свойстве dof и во всех собственных методов использовать для обращения '''$this-&amp;gt;dof'''&lt;br /&gt;
# Не должно быть никакого SQL-кода за пределом справочников ([[Разработка:Структура#Справочники|плагинов storage]])&lt;br /&gt;
# Из справочников (storage) нельзя обращаться к плагинам интерфейса (im)&lt;br /&gt;
# Кроме [[Разработка:Структура#Интерфейс пользователя|плагинов im]] никакие другие плагины не должны принимать запросы по http. Исключение могут составлять плагины [[Разработка:Структура#Синхронизации|sync]], которые могут принимать входящие soap-запросы и т.п. (но и они не должны реализовывать веб-интерфейс). При этом все плагины должны быть безопасны на случай, если злоумышленик попытается обратиться по прямой ссылке к одному из их файлов (следует предотвращать запуск файла по прямой ссылке, если это может нанести урон безопасности).&lt;br /&gt;
# В методах обращения к базе, подразумевающих формирование своего SQL запроса, например get_records_sql(), необходимо максимально задействовать входные параметры, вместо формирования одного единственного $sql. Например limitfrom и limitnum необходимо передавать дополнительными параметрами, а не добавлять их в параметр $sql.&lt;br /&gt;
&lt;br /&gt;
==== Исключения из правил ====&lt;br /&gt;
# При использовании сторонних библиотек возможно отступление от некоторых пунктов. Это связано с экономией времени на переработку оформления библиотеки и сохранением стиля сопутствующего кода. Пример: class SomeCustomClass {function classMethod(){...}}&lt;br /&gt;
&lt;br /&gt;
=== Структура базы данных ===&lt;br /&gt;
# Имена таблиц, принадлежащих справочникам, должны быть вида &amp;quot;block_dof_s_кодсправочника&amp;quot;&lt;br /&gt;
# Имена колонок БД, содержащих ключ по другой колонке в БД Free Dean's Office должны заканчиваться на &amp;quot;id&amp;quot;&lt;br /&gt;
# Имена колонок в БД, содержащих ключ объекта в собственной БД Moodle должны начинаться на &amp;quot;mdl&amp;quot; (но не должны заканчиваться на &amp;quot;id&amp;quot;)&lt;br /&gt;
# Имя колонки status рекомендуется использовать только для статусов рабочих процессов (workflow)&lt;br /&gt;
# Если в таблице есть поле &amp;quot;code&amp;quot; то это поле должно быть уникальнам в рамках всей таблицы (как будто это второй первичный ключ)&lt;br /&gt;
# При именовании колонок рекомендуется придерживаться следующего правила: колонка именуется простым словом (name,type,price) если ее содержимое относится ко всей записи (например, для колонки &amp;quot;курсы&amp;quot; name - название курса, type - тип курса &amp;quot;очный&amp;quot;, &amp;quot;дистанционный&amp;quot; и т.п. price - цена курса), а для остальных полей имя лучше уточнять (controltype - тип итогового контроля, ownerid - &amp;quot;владелец&amp;quot; курса, markprice - цена оценки :-))))&lt;br /&gt;
&lt;br /&gt;
=== Безопасность ===&lt;br /&gt;
# Все переменные должны содержать только безопасные данные (текстовые строки должны быть обработаны addslashes()). &lt;br /&gt;
# При получении данных через optional_param(), require_param(), dof_modlib_widgets_form (moodleform), а так же через стандартные методы справочников - все данные передаются в уже обработанном виде. &lt;br /&gt;
# При отображении данных на веб-странице и прочих операциях, где строки не должны быть экранированы, программист должен самостоятельно обработать данные stripslashes() непосредственно перед операцией, далее эти данные в программе использоваться не должны, либо их необходимо преобразовать обратно. Во всех остальных случаях, включая задание текстовых констант непосредственно в коде программы, программист обязан позаботится о безопасности данных (addslashes()).&lt;br /&gt;
&lt;br /&gt;
Типы ожидаемых данных для функций optional_param() и require_param() можно посмотреть в статье [Разработка:Константы_Moodle#Константы типов данных|константы типов данных]].&lt;br /&gt;
&lt;br /&gt;
==== Работа с правами доступа ====&lt;br /&gt;
Правила работы с правами доступа описаны в разделе &amp;quot;[[Разработка:Управление_доступом#.D0.9F.D1.80.D0.B0.D0.B2.D0.B8.D0.BB.D0.B0_.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D1.8B_.D1.81_.D0.BF.D1.80.D0.B0.D0.B2.D0.B0.D0.BC.D0.B8_.D0.B4.D0.BE.D1.81.D1.82.D1.83.D0.BF.D0.B0|Управление доступом]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Использование JavaScript ===&lt;br /&gt;
В качестве основной js-библиотеки проекта используется [http://jquery.com/ jQuery]. Сама библиотека подключена как modlib-плагин: [[Разработка:modlibs/jquery]]. &lt;br /&gt;
&lt;br /&gt;
Все скрипты (и стили), рекомендуется располагать в отдельный файлах. &lt;br /&gt;
&lt;br /&gt;
JavaScript располагается в файлах с раширением .js, стили - .css.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы подключить скрипты можно воспользоваться двумя способами:&lt;br /&gt;
&lt;br /&gt;
1) Если нужно просто подключить отдельный файл - то нужно воспользоваться функцией [[Разработка:modlibs/nvg#add_scripts()|add_scripts()]] в плагине nvg.&lt;br /&gt;
2) Если нужно подключить библиотеку - то надо воспользоваться функцией [[Разработка:modlibs/widgets#js_init()|js_init()]] в плагине widgets.&lt;br /&gt;
&lt;br /&gt;
Если вы пишете виджет, который использует javascript, то он сам должен подключать все нужные файлы. Файлы виджетов всегда прописываются в функции [[Разработка:modlibs/widgets#js_init()|js_init()]].&lt;br /&gt;
&lt;br /&gt;
=== Работа с библиотеками Moodle ===&lt;br /&gt;
Все обращения к библиотекам moodle можно производить только в модуле ama. Модуль ama можно вызывать только из модуля sync.&lt;br /&gt;
&lt;br /&gt;
=== Другие правила ===&lt;br /&gt;
==== Работа с сессиями ====&lt;br /&gt;
Для каждого плагина, чтобы избежать пересечения по именам переменных, выделено персональное пространство в массиве сессии:&lt;br /&gt;
$_SESSION['dof'][plugintype][plugincode],&lt;br /&gt;
plugintype записывается так, как он указан, как его возвращает метод type().&lt;br /&gt;
&lt;br /&gt;
== Работа со стандартными библиотеками moodle ==&lt;br /&gt;
Этот раздел будет содержать справку по работе со стандартными пакетами moodle&lt;br /&gt;
&lt;br /&gt;
=== Работа с moodleQuickForm ===&lt;br /&gt;
''Основная статья:'' [[Разработка:moodleQuickForm]].&lt;br /&gt;
&lt;br /&gt;
В этом разделе содержаться только основные правила работы с moodleQuickForm, которых следует придерживаться при написании форм. Подробные инструкции по работе с формами содержатся в основной статье.&lt;br /&gt;
==== Создание класса ====&lt;br /&gt;
Все создаваемые классы форм должны наследоваться только от класса ''dof_modlib_widgets_form''. Для того чтобы подключить этот класс, нужно воспользоваться функцией '''webform'''() из библиотеки [[Разработка:modlibs/widgets#API|widgets]].&lt;br /&gt;
&lt;br /&gt;
Пример кода:&lt;br /&gt;
    ''// Подключаем библиотеку форм''&lt;br /&gt;
    $DOF-&amp;gt;modlib('widgets')-&amp;gt;'''webform'''();&lt;br /&gt;
    &lt;br /&gt;
    ''// создаем класс формы при помощи наследования''&lt;br /&gt;
    class my_form extends '''dof_modlib_widgets_form'''&lt;br /&gt;
    {&lt;br /&gt;
        ....&lt;br /&gt;
    }&lt;br /&gt;
Наследование от класса ''moodleform'' или от ''HTMLQuickForm'' напрямую '''не допускается''' из-за проблем с совместимостью.&lt;br /&gt;
&lt;br /&gt;
Во всех внутренних методах формы разрешается использовать обращение к глобальной переменной [[Разработка:lib/dof.php|$DOF]].&lt;br /&gt;
&lt;br /&gt;
При создании формы для добавления любых текстовых строк на русском языке следует пользоваться функцией $DOF-&amp;gt;get_string().&lt;br /&gt;
&lt;br /&gt;
==== Получение данных ====&lt;br /&gt;
Получение данных из формы производится только при помощи специального метода [[Разработка:moodleQuickForm#get_data($slashed) | get_data()]].&lt;br /&gt;
&lt;br /&gt;
Проверка того, отправлены ли данные из формы производится при помощи метода [[Разработка:moodleQuickForm#is_submitted() | is_submitted()]].&lt;br /&gt;
&lt;br /&gt;
Пример кода:&lt;br /&gt;
    // создаем объект данных&lt;br /&gt;
    $form = new my_form();&lt;br /&gt;
    ''// проверяем, отправлены ли данные из формы''&lt;br /&gt;
    if ( $form-&amp;gt;'''is_submitted'''() )&lt;br /&gt;
    {&lt;br /&gt;
        ''// получаем данные''&lt;br /&gt;
        $data = $form-&amp;gt;'''get_data'''();&lt;br /&gt;
        &lt;br /&gt;
        ...&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
==== Проверка данных ====&lt;br /&gt;
Пожалуйста не забывайте о том, что данные всегда могут быть посланы в обход формы, поэтому проверяя какие-либо данные на стороне клиента проверяйте их  повторно на стороне сервера.&lt;br /&gt;
&lt;br /&gt;
При создании формы, в полях, которые получают данные всегда указывайте тип данных, который вы ожидаете получить при помощи функции [[Разработка:moodleQuickForm#setType($elementname, $paramtype) | setType()]]&lt;br /&gt;
&lt;br /&gt;
Для всех дополнительных проверок на стороне сервера должен использоваться внутренний метод [[Разработка:moodleQuickForm#validation($data, $files) | validation()]].&lt;br /&gt;
&lt;br /&gt;
=== Работа с moodleExcelWorkbook ===&lt;br /&gt;
&lt;br /&gt;
=== Работа с XMLDB ===&lt;br /&gt;
''Основная статья:'' [[Разработка:XMLDB]]&lt;br /&gt;
&lt;br /&gt;
Если при создании нового плагина storage вам потребуется создать новую таблицу в базе данных, то следует воспользоваться установкой таблиц через XMLDB-скрипты.&lt;br /&gt;
&lt;br /&gt;
Основные правила создания таблиц:&lt;br /&gt;
* Собственные таблицы могут иметь только плагины типа storage&lt;br /&gt;
* Файл С XML-кодом таблицы должен называться install.xml и лежать внутри плагина, в папке &amp;quot;db&amp;quot;.&lt;br /&gt;
* Одному плагину storage должна соответствовать только должна таблица в базе данных.&lt;br /&gt;
* При обновлении таблицы не надо править ее xml-файл, вся информация об обновлении таблиц дается только в скриптах.&lt;br /&gt;
* При составлении скриптов для обновления структуры таблицы настоятельно рекомендуется пользоваться встроенным XMLDB-редактором Moodle.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Разработка]]&lt;/div&gt;</summary>
		<author><name>Fastenko</name></author>	</entry>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=2646</id>
		<title>Разработка:Стандарт кодирования</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=2646"/>
				<updated>2013-07-04T17:58:15Z</updated>
		
		<summary type="html">&lt;p&gt;Fastenko: /* Прочее */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Правила оформления кода в проекте «Электронный деканат». ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Стиль кодирования ===&lt;br /&gt;
==== Формат файлов ====&lt;br /&gt;
# Все файлы с кодом должны иметь расширение .php&lt;br /&gt;
# Все html-шаблоны должны иметь расширение .html&lt;br /&gt;
# Весь текст, включая исходный код, должен быть в кодировке utf-8 с оконачаниями строк в формет Unix&lt;br /&gt;
# Окончания строк в формате Unix (LF - 0x0A)&lt;br /&gt;
# Все php-теги должны быть полными &amp;lt;?php ... ?&amp;gt;. Краткие теки &amp;lt;? ?&amp;gt; не допускаются&lt;br /&gt;
# Все отступы – 4 пробела. Не использовать TAB.&lt;br /&gt;
# Длинна строки в коде не должна быть больше 80 символов. В некоторых случаях допускается 120, если это упростит читаемость кода.&lt;br /&gt;
# Пробелы можно использовать свободно. Не надо бояться растягивать код для улучшения читабельности.&lt;br /&gt;
==== Имена ====&lt;br /&gt;
# Имена файлов должны состоять только из латинских символов, знака подчеркивания и точки. Имя файла обязательно должно иметь расширение. Рекомендуется использовать для именования файлов слова на английском языке.&lt;br /&gt;
# Имена классов должны состоять из строчных латинских символов и знака подчеркивания. Рекомендуется использовать английские слова разделенных символом подчеркивания. Имя класса в плагине должно начинаться с префикса, соответствующего плагину. Если требуется, имя класса может включать преффикс и суффикс.&lt;br /&gt;
# Имена функций и методов должны состоять из строчных латинских символов и знака подчеркивания. Имя функции в плагине должно начинаться с префикса, соответствующего имени модуля (dof_) и плагину, в котором объявлена (типплагина_кодплагина). Затем идет часть имени, описывающая выполняемое действие. Последняя часть - это существительное, обозначающее сущность, над которой это действие производится либо набор сущностей. Не должно быть пробелов между именем функции и скобками. Это относится и к объявлению функции, и к ее использованию. Параметры всегда должны иметь разумные значения по умолчанию, если это возможно. Пример: modname_get_string($identifier, $pluginname = NULL). Между ключевым словом function и именем функции должен быть только один пробел.&lt;br /&gt;
# Имена параметров функций именуются по тем же правилам, что и переменные. Имя параметра должно быть кратким и информативным для сторонних программистов. Если параметр может быть не задан, используйте по умолчанию значение  null, для отличия этой ситуации от передачи параметра false, 0 или '' если это требуется).&lt;br /&gt;
# Имена переменных - всегда легкие для чтения осмысленные слова английского языка, набранные в нижнем регистре. Несколько слов пишутся слитно. Но они должны быть как можно короче. Используйте имена во множественном числе для массивов объектов. Например: $courseid, $studentsgrades&lt;br /&gt;
# Имена глобальных переменных, должны состоять полностью из заглавных букв. Пример: $CFG&lt;br /&gt;
# Имена констант должны состоять из латинских символов в верхнем регистре и знака подчеркивания. Всегда начинаются с имени модуля (DOF). Если константа объявлена в плагине, она получает дополнительный префикс ТИППЛАГИНА_КОДПЛАГИНА. Слова в названии разделены символом подчеркивания. Пример: SITE_ID&lt;br /&gt;
# true, false и null должны быть набраны в нижнем регистре&lt;br /&gt;
# AND, OR, XOR должны быть набраны в верхнем регистре, не используйте сокращенные синонимы.&lt;br /&gt;
==== Строки ====&lt;br /&gt;
# Используйте одинарные кавычки, если в строке отсутствуют макроподстановки и эскейп-последовательности, а так же если в строке присутствует много двойных кавычек.&lt;br /&gt;
# При макроподстановках в двойных кавычках заключайте переменные в фигурные скобки.&lt;br /&gt;
# Объединение строк выполняется через оператор &amp;quot;точка&amp;quot; (.)&lt;br /&gt;
==== Массивы ====&lt;br /&gt;
# Не используйте отрицательных чисел для нумерации массивов (кроме случаев, когда это прямо требуется логикой программы).&lt;br /&gt;
# Индексация массива может начинаться с любого положительного числа, обычно с 0.&lt;br /&gt;
# При объявлении массива через функцию array() ставьте пробел после запятой при перечислении параметров. Длинные объявления можно переносить по строкам. При объявлении ассоциативных массивов помещайте на одну строку одну пару ключ-значение.&lt;br /&gt;
==== Классы ====&lt;br /&gt;
# Свойства класса должны объявляться до его методов.&lt;br /&gt;
# Фигурная скобка пишется на следующей строчке после объявления имени класса, на одном уровне с ключевым словом class.&lt;br /&gt;
# Объявление любого класса должно быть документировано по стандарту PHPDocumentor&lt;br /&gt;
# Весь код внутри класса должен быть сдвинут на 4 пробела от уровня его объявления.&lt;br /&gt;
# Объявление класса должно быть отделено от остального коду двумя пустыми строками.&lt;br /&gt;
# Свойства класса должны объявляться напрямую при объявлении класса с указанием модификатора доступа (private (доступ извне запрещен), protected (разрешен доступ из наследников) или public)&lt;br /&gt;
==== Функции и методы ====&lt;br /&gt;
# Объявление функций и методов должно сопровождаться комментарием по стандарту PHPDocumentor&lt;br /&gt;
# Все объявления методов должны содержать модификатор доступа (private (доступ извне запрещен), protected (разрешен доступ из наследников) или public)&lt;br /&gt;
# Фигурная скобка должна располагаться на следующей строке после объявления имени функции или метода на одном с ним уровнем.&lt;br /&gt;
# Тело функции должно быть сдвинуто на 4 пробела вправо.&lt;br /&gt;
# Между именем функции и круглой скобкой не должно быть пробела.&lt;br /&gt;
# Если функция не возвращает значений, то true обозначает успех, false - не успех. Если функция возвращает массив, в случае успешного выполнения, но отсутствия элементов в результате, функция должна возвращать пустой массив.&lt;br /&gt;
&lt;br /&gt;
==== Управляющие конструкции ====&lt;br /&gt;
Ставьте один пробел между скобками и синтаксическими конструкциями. Это не относится к функциям и их параметрам. Пример:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    if ( $a &amp;gt;= max($key) )&lt;br /&gt;
    {&lt;br /&gt;
    &lt;br /&gt;
    ···· $c = $a;&lt;br /&gt;
    &lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блоки всегда ограничиваются фигурными скобками. При этом используется [http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B8%D0%BB%D1%8C_%D0%BE%D1%82%D1%81%D1%82%D1%83%D0%BF%D0%BE%D0%B2#.D0.A1.D1.82.D0.B8.D0.BB.D1.8C_.D0.9E.D0.BB.D0.BC.D0.B0.D0.BD.D0.B0 стиль Олмана]:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    if (&amp;lt;cond&amp;gt;)&lt;br /&gt;
    {&lt;br /&gt;
    ····&amp;lt;body&amp;gt;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Комментарии и документация ====&lt;br /&gt;
# Комментарии должны быть подробными и содержательными. Объяснять каждое объявление классов, функций и переменных. Каждый цикл и каждая ветвь условия должны быть пояснены содержательным смыслом выполняемых действий, например: &amp;quot;перебираем список товаров&amp;quot;, &amp;quot;если пользователь не заполнил поле имя...&amp;quot;&lt;br /&gt;
# Комментарии к функциям и классам оформляются в формате [http://manual.phpdoc.org/HTMLframesConverter/default/ PHPDoc]&lt;br /&gt;
# Комментарии в строках должны быть в стиле '''//'''. Они должны быть понятными и располагаться над строкой комментируемого кода.&lt;br /&gt;
# Файлы, содержащие PHP-код должны начинаться с комментария, предусмотренного лицензией GNU GPL.&lt;br /&gt;
&lt;br /&gt;
==== Дата и время ====&lt;br /&gt;
#Все даты и время в базе данных хранятся в [http://ru.wikipedia.org/wiki/Unix_timestamp Unix Timestamp] по [http://ru.wikipedia.org/wiki/UTC UTC] без учета летнего времени и пересчитываются в местное время при отображении.&lt;br /&gt;
# Если определена только дата, то время устанавливается 12:00 по полудню на UTC.&lt;br /&gt;
&lt;br /&gt;
==== Исключения ====&lt;br /&gt;
# Рекомендуется использование исключений для сообщения об ошибках.&lt;br /&gt;
# Любые необработанные исключения должны заканчиваться вызовом $DOF-&amp;gt;print_error() для вывода сообщения об ошибке.&lt;br /&gt;
# Не используйте исключения для обработки штатных ситуаций, только в ошибочных и аварийных ситуаций.&lt;br /&gt;
# Для вывода исключений можно использовать следующие классы:&lt;br /&gt;
## dof_exception - базовый класс исключения&lt;br /&gt;
## dof_exception_coding - ошибка разработчика&lt;br /&gt;
## dof_exception_db - ошибка обращения к СУБД&lt;br /&gt;
## dof_exception_file - ошибка работы с файлами&lt;br /&gt;
&lt;br /&gt;
==== Прочее ====&lt;br /&gt;
# При копировании объектов используйте PHP5-функцию копирования объектов. В MOODLE есть функция clone(), которая совместима и с PHP4 тоже.&lt;br /&gt;
# Если вы копируете переменную, которая может содержать объект, то используйте функцию MOODLE fullclone().&lt;br /&gt;
# Все переменные перед первым использованием необходимо инициализировать.&lt;br /&gt;
# Имя модуля может включать только строчные латинские буквы и содержать не более 20 символов.&lt;br /&gt;
# Следует избегать использования глобальных переменных.&lt;br /&gt;
# Обращения к объектом Free Dean's Office выполняется через объект [[Разработка:lib/dof.php|$DOF]]. При объявлении плагина он должен сохранить ссылка на объект $DOF в собственном свойстве dof и во всех собственных методов использовать для обращения '''$this-&amp;gt;dof'''&lt;br /&gt;
# Не должно быть никакого SQL-кода за пределом справочников ([[Разработка:Структура#Справочники|плагинов storage]])&lt;br /&gt;
# Из справочников (storage) нельзя обращаться к плагинам интерфейса (im)&lt;br /&gt;
# Кроме [[Разработка:Структура#Интерфейс пользователя|плагинов im]] никакие другие плагины не должны принимать запросы по http. Исключение могут составлять плагины [[Разработка:Структура#Синхронизации|sync]], которые могут принимать входящие soap-запросы и т.п. (но и они не должны реализовывать веб-интерфейс). При этом все плагины должны быть безопасны на случай, если злоумышленик попытается обратиться по прямой ссылке к одному из их файлов (следует предотвращать запуск файла по прямой ссылке, если это может нанести урон безопасности).&lt;br /&gt;
* В методах обращения к базе, подразумевающих формирование своего SQL запроса, например get_records_sql(), необходимо максимально задействовать входные параметры, вместо формирования одного единственного $sql. Например limitfrom и limitnum необходимо передавать дополнительными параметрами, а не добавлять их в параметр $sql.&lt;br /&gt;
&lt;br /&gt;
==== Исключения из правил ====&lt;br /&gt;
# При использовании сторонних библиотек возможно отступление от некоторых пунктов. Это связано с экономией времени на переработку оформления библиотеки и сохранением стиля сопутствующего кода. Пример: class SomeCustomClass {function classMethod(){...}}&lt;br /&gt;
&lt;br /&gt;
=== Структура базы данных ===&lt;br /&gt;
# Имена таблиц, принадлежащих справочникам, должны быть вида &amp;quot;block_dof_s_кодсправочника&amp;quot;&lt;br /&gt;
# Имена колонок БД, содержащих ключ по другой колонке в БД Free Dean's Office должны заканчиваться на &amp;quot;id&amp;quot;&lt;br /&gt;
# Имена колонок в БД, содержащих ключ объекта в собственной БД Moodle должны начинаться на &amp;quot;mdl&amp;quot; (но не должны заканчиваться на &amp;quot;id&amp;quot;)&lt;br /&gt;
# Имя колонки status рекомендуется использовать только для статусов рабочих процессов (workflow)&lt;br /&gt;
# Если в таблице есть поле &amp;quot;code&amp;quot; то это поле должно быть уникальнам в рамках всей таблицы (как будто это второй первичный ключ)&lt;br /&gt;
# При именовании колонок рекомендуется придерживаться следующего правила: колонка именуется простым словом (name,type,price) если ее содержимое относится ко всей записи (например, для колонки &amp;quot;курсы&amp;quot; name - название курса, type - тип курса &amp;quot;очный&amp;quot;, &amp;quot;дистанционный&amp;quot; и т.п. price - цена курса), а для остальных полей имя лучше уточнять (controltype - тип итогового контроля, ownerid - &amp;quot;владелец&amp;quot; курса, markprice - цена оценки :-))))&lt;br /&gt;
&lt;br /&gt;
=== Безопасность ===&lt;br /&gt;
# Все переменные должны содержать только безопасные данные (текстовые строки должны быть обработаны addslashes()). &lt;br /&gt;
# При получении данных через optional_param(), require_param(), dof_modlib_widgets_form (moodleform), а так же через стандартные методы справочников - все данные передаются в уже обработанном виде. &lt;br /&gt;
# При отображении данных на веб-странице и прочих операциях, где строки не должны быть экранированы, программист должен самостоятельно обработать данные stripslashes() непосредственно перед операцией, далее эти данные в программе использоваться не должны, либо их необходимо преобразовать обратно. Во всех остальных случаях, включая задание текстовых констант непосредственно в коде программы, программист обязан позаботится о безопасности данных (addslashes()).&lt;br /&gt;
&lt;br /&gt;
Типы ожидаемых данных для функций optional_param() и require_param() можно посмотреть в статье [Разработка:Константы_Moodle#Константы типов данных|константы типов данных]].&lt;br /&gt;
&lt;br /&gt;
==== Работа с правами доступа ====&lt;br /&gt;
Правила работы с правами доступа описаны в разделе &amp;quot;[[Разработка:Управление_доступом#.D0.9F.D1.80.D0.B0.D0.B2.D0.B8.D0.BB.D0.B0_.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D1.8B_.D1.81_.D0.BF.D1.80.D0.B0.D0.B2.D0.B0.D0.BC.D0.B8_.D0.B4.D0.BE.D1.81.D1.82.D1.83.D0.BF.D0.B0|Управление доступом]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Использование JavaScript ===&lt;br /&gt;
В качестве основной js-библиотеки проекта используется [http://jquery.com/ jQuery]. Сама библиотека подключена как modlib-плагин: [[Разработка:modlibs/jquery]]. &lt;br /&gt;
&lt;br /&gt;
Все скрипты (и стили), рекомендуется располагать в отдельный файлах. &lt;br /&gt;
&lt;br /&gt;
JavaScript располагается в файлах с раширением .js, стили - .css.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы подключить скрипты можно воспользоваться двумя способами:&lt;br /&gt;
&lt;br /&gt;
1) Если нужно просто подключить отдельный файл - то нужно воспользоваться функцией [[Разработка:modlibs/nvg#add_scripts()|add_scripts()]] в плагине nvg.&lt;br /&gt;
2) Если нужно подключить библиотеку - то надо воспользоваться функцией [[Разработка:modlibs/widgets#js_init()|js_init()]] в плагине widgets.&lt;br /&gt;
&lt;br /&gt;
Если вы пишете виджет, который использует javascript, то он сам должен подключать все нужные файлы. Файлы виджетов всегда прописываются в функции [[Разработка:modlibs/widgets#js_init()|js_init()]].&lt;br /&gt;
&lt;br /&gt;
=== Работа с библиотеками Moodle ===&lt;br /&gt;
Все обращения к библиотекам moodle можно производить только в модуле ama. Модуль ama можно вызывать только из модуля sync.&lt;br /&gt;
&lt;br /&gt;
=== Другие правила ===&lt;br /&gt;
==== Работа с сессиями ====&lt;br /&gt;
Для каждого плагина, чтобы избежать пересечения по именам переменных, выделено персональное пространство в массиве сессии:&lt;br /&gt;
$_SESSION['dof'][plugintype][plugincode],&lt;br /&gt;
plugintype записывается так, как он указан, как его возвращает метод type().&lt;br /&gt;
&lt;br /&gt;
== Работа со стандартными библиотеками moodle ==&lt;br /&gt;
Этот раздел будет содержать справку по работе со стандартными пакетами moodle&lt;br /&gt;
&lt;br /&gt;
=== Работа с moodleQuickForm ===&lt;br /&gt;
''Основная статья:'' [[Разработка:moodleQuickForm]].&lt;br /&gt;
&lt;br /&gt;
В этом разделе содержаться только основные правила работы с moodleQuickForm, которых следует придерживаться при написании форм. Подробные инструкции по работе с формами содержатся в основной статье.&lt;br /&gt;
==== Создание класса ====&lt;br /&gt;
Все создаваемые классы форм должны наследоваться только от класса ''dof_modlib_widgets_form''. Для того чтобы подключить этот класс, нужно воспользоваться функцией '''webform'''() из библиотеки [[Разработка:modlibs/widgets#API|widgets]].&lt;br /&gt;
&lt;br /&gt;
Пример кода:&lt;br /&gt;
    ''// Подключаем библиотеку форм''&lt;br /&gt;
    $DOF-&amp;gt;modlib('widgets')-&amp;gt;'''webform'''();&lt;br /&gt;
    &lt;br /&gt;
    ''// создаем класс формы при помощи наследования''&lt;br /&gt;
    class my_form extends '''dof_modlib_widgets_form'''&lt;br /&gt;
    {&lt;br /&gt;
        ....&lt;br /&gt;
    }&lt;br /&gt;
Наследование от класса ''moodleform'' или от ''HTMLQuickForm'' напрямую '''не допускается''' из-за проблем с совместимостью.&lt;br /&gt;
&lt;br /&gt;
Во всех внутренних методах формы разрешается использовать обращение к глобальной переменной [[Разработка:lib/dof.php|$DOF]].&lt;br /&gt;
&lt;br /&gt;
При создании формы для добавления любых текстовых строк на русском языке следует пользоваться функцией $DOF-&amp;gt;get_string().&lt;br /&gt;
&lt;br /&gt;
==== Получение данных ====&lt;br /&gt;
Получение данных из формы производится только при помощи специального метода [[Разработка:moodleQuickForm#get_data($slashed) | get_data()]].&lt;br /&gt;
&lt;br /&gt;
Проверка того, отправлены ли данные из формы производится при помощи метода [[Разработка:moodleQuickForm#is_submitted() | is_submitted()]].&lt;br /&gt;
&lt;br /&gt;
Пример кода:&lt;br /&gt;
    // создаем объект данных&lt;br /&gt;
    $form = new my_form();&lt;br /&gt;
    ''// проверяем, отправлены ли данные из формы''&lt;br /&gt;
    if ( $form-&amp;gt;'''is_submitted'''() )&lt;br /&gt;
    {&lt;br /&gt;
        ''// получаем данные''&lt;br /&gt;
        $data = $form-&amp;gt;'''get_data'''();&lt;br /&gt;
        &lt;br /&gt;
        ...&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
==== Проверка данных ====&lt;br /&gt;
Пожалуйста не забывайте о том, что данные всегда могут быть посланы в обход формы, поэтому проверяя какие-либо данные на стороне клиента проверяйте их  повторно на стороне сервера.&lt;br /&gt;
&lt;br /&gt;
При создании формы, в полях, которые получают данные всегда указывайте тип данных, который вы ожидаете получить при помощи функции [[Разработка:moodleQuickForm#setType($elementname, $paramtype) | setType()]]&lt;br /&gt;
&lt;br /&gt;
Для всех дополнительных проверок на стороне сервера должен использоваться внутренний метод [[Разработка:moodleQuickForm#validation($data, $files) | validation()]].&lt;br /&gt;
&lt;br /&gt;
=== Работа с moodleExcelWorkbook ===&lt;br /&gt;
&lt;br /&gt;
=== Работа с XMLDB ===&lt;br /&gt;
''Основная статья:'' [[Разработка:XMLDB]]&lt;br /&gt;
&lt;br /&gt;
Если при создании нового плагина storage вам потребуется создать новую таблицу в базе данных, то следует воспользоваться установкой таблиц через XMLDB-скрипты.&lt;br /&gt;
&lt;br /&gt;
Основные правила создания таблиц:&lt;br /&gt;
* Собственные таблицы могут иметь только плагины типа storage&lt;br /&gt;
* Файл С XML-кодом таблицы должен называться install.xml и лежать внутри плагина, в папке &amp;quot;db&amp;quot;.&lt;br /&gt;
* Одному плагину storage должна соответствовать только должна таблица в базе данных.&lt;br /&gt;
* При обновлении таблицы не надо править ее xml-файл, вся информация об обновлении таблиц дается только в скриптах.&lt;br /&gt;
* При составлении скриптов для обновления структуры таблицы настоятельно рекомендуется пользоваться встроенным XMLDB-редактором Moodle.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Разработка]]&lt;/div&gt;</summary>
		<author><name>Fastenko</name></author>	</entry>

	</feed>