Разработка:im/journal

Материал из DOF
Версия от 15:58, 12 января 2011; Puppetmaster (обсуждение | вклад) (Классный журнал)
Перейти к: навигация, поиск

Содержание

Классный журнал

В журнале можно выставлять оценки и вводить отчет о проведенном уроке.

Список журналов

Вверху страницы находится форма для выбора подразделения и кнопка "показать". По умолчанию показывается информация по всем учебным подразделениям. При выборе конкретного учебного подразделения показывается информация только по нему.

Вывод информации по журналам организован в виде маркированного списка следующего вида:

  • Подразделение
    • Учебная программа
      • Учебный период
        • Предмет
          • Учебный поток (дата_начала - дата_окончания)

Каждая запись учебного потока является ссылкой на страницу журнала учебного потока.

Журнал класса

Под панелью навигации выводится надпись "Журнал группы". Ниже таблица с информацией о потоке - программа, предмет, группа, преподаватель. Справа от этой таблицы размещена ссылка "Новый урок". Нажатие на нее позволяет создать новый отчет об уроке. Над этой ссылкой будут выводиться сообщения об ошибках сохранения данных из таблицы оценок. Ниже отображаются две таблицы - таблица оценок и, справа от нее, таблица отчетов об уроке. Обе таблицы сделаны максимально похожими на соответствующие таблицы в бумажном "Классном журнале". Таблицы связаны друг с другом. Так, дата в таблице оценок отображаются только в том случае, если был создан отчет об уроке для этой даты. При нажатии на дату в таблице оценок, происходит перемещение к соответствующей строке отчета об уроке.

Таблица оценок.

Если таблица отчетов об уроке пуста, то в таблице оценок нет ни одной колонки с датой. Если журнал заполнен, то в верхней строке отображаются названия месяцев, ниже номера дней месяцев, на которые приходились занятия. Каждое число месяца - ссылка, при нажатии на которую происходит переход на соответствующую этому дню строку таблицы отчета об уроке. Сразу под числом расположен значок редактирования. Он также выполнен в виде ссылки. При нажатии на него страница перезагружается в режиме формы ввода оценок и выставления присутствия учеников на уроке, который проходил в тот день, по значку под числом которого щелкнули. В колонке этого дня, напротив фамилии каждого ученика появляются два поля. Поле выбора из списка - для проставления оценки. И поле переключатель - для отметки присутствия на уроке. Об этом напоминает буква "н", расположенная справа от него. Если ученик был на уроке, то это поле следует оставить пустым. Если не был - поставить там флажок. Для выставления оценки следует выбрать элемент из списка. После того как изменения будут сохранены, в соответствующих клетках появятся буквы "Н" или оценки. Если кому-то была выставлена и оценка и отметка об отсутствии на уроке, на против его фамилии можно будет увидеть букву "Н". Однако перед сохранением будет выведено предупреждение о том, что выставлена оценка отсутствующему ученику. Под уведомлением будут две кнопки - "Продолжить" и "Отменить". При нажатии на "Продолжить" сценарий сохранения будет выполнен. Нажатие на другую кнопку вызовет отмену процедуры сохранения и возврат к форме с несохраненными изменениями. При переключении в режим формы под таблицей появляется надпись "Внимание! До нажатия кнопки "сохранить" оценки не сохраняются." И три кнопки - "Сохранить", "Сохранить и продолжить", "Восстановить". Нажатие на первую кнопку сохраняет изменения, сделанные в форме и перезагружает страницу в режим просмотра. Вторая - сохраняет сделанные изменения, но страница остается в режиме формы - можно продолжать ввод. Третья кнопка отменяет сделанные изменения. Все введенные, но несохраненные данные удаляются из формы. Форма перегружается с отображением последних сохраненных изменений. Если ученику была выставлена оценка, а затем отменена - в форме было выбрано пустое поле, то ранее выбранная оценка будет удалена. Если оценка была изменена, то оценка будет обновлена. Каждое из этих действий, а также выставление статуса присутствия на уроке, будет выполнено через издание приказа. Если редактируется контрольная точка без события, то в форме показываеются только поля выставления оценки. Поле присутствия на уроке не показывается и статус присутствия не сохраняется. Контрольная точка без события выводится в таблице оценок без даты. Вместо даты выводится название КТ. Что происходит в процессе сохранения. После того как нажата одна из кнопок, сохраняющая внесенные изменения происходит

  • формирование приказа регистрации присутствия учеников на уроке. В него сохраняются данные о всех учениках потока, их статусы присутствия, id события, статус присутствия на котором выставляется.
  • применение приказа и сохранение статусов учеников в соответствующих таблицах.

Если были выставлены оценки. То в дополнение к вышеописанным действиям происходят следующие действия:

  • формирование приказа регистрации выставления оценок только тем ученикам, которые их получили на уроке. В приказе сохраняются: точное время выставления оценки, id КТ, за которую выставлена оценка, id преподавателя (из /storage/persons), который выставил оценку, ученики, которые получили оценку, и соответствующие им оценки, статус оценки, id подписки ученика на поток.
  • применение приказа и сохранение оценок в соответствующих таблицах.

После создания отчета об уроке, происходит возврат на главную страницу журнала и таблица оценок загружается в режиме формы того дня, отчет для которого был создан. Если этот день выходит за границы видимости окна, то происходит перемещение таблицы оценок таким образом, чтобы нужная колонка оказалась видимой. После редактирования отчета об уроке таблица оценок загружается в режиме просмотра. Если день, для которого происходило редактирование отчета выходит за границы видимости, то происходит перемещение таблицы оценок таким образом, чтобы нужная колонка оказалась видимой.

Таблица отчетов об уроках.

Представляет собой таблицу из шести столбцов. Первый столбец - порядковый номер урока. Второй - дата урока в фомате дд.мм. Третий - тема урока - произвольный текст. Четвертый - задание на дом. Пятый - замена урока или преподавателя. Пятый - заметки об уроке. В настоящее время три последних поля не используются. Уроки сортируются по датам, сверху вниз по возрастанию. Под датой располагается значок редактирования информации об уроке, выполненный в виде ссылки. При щелчке по нему открывается новая страница с формой редактирования отчета об уроке. Все поля формы заполнены соответствующей информацией. Ее можно изменить, а изменения сохранить. Эта же страница открывается при щелчке по ссылке "Новый урок".

Страница редактирования урока.

Вверху страницы, под строкой навигации, выводится надпись "Классный журнал". Ниже выводится форма ввода информации об уроке - "Отчет об уроке". В поле "Дата проведения урока" нужно выбрать дату урока. В поле "Элементы темплана" можно выбрать тему для нового урока. Ниже находится текстовое поле ввода "Что пройдено на уроке". Сюда можно ввести тему урока вручную. Еще ниже поле "Домашнее задание" для ввода соответствующей информации. В самом низу расположены две кнопки - "Сохранить" и "Отмена". При нажатии на вторую происходит возврат на главную страницу журнала без сохранения внесенных изменений. После нажатия на кнопку "Сохранить" происходит сохранение введенных данных в соответствующих таблицах. О результатах операции сохранения информирует надпись, выводимая под кнопками. Еще ниже появляется ссылка "назад" для возврата на главную страницу журнала. В случае возврата после сохранения данных, таблица оценок загружается в режиме редактирования данных на дату только что сохраненного урока. Правее формы редактирования урока расположено окно с полосами прокрутки, в котором можно просмотреть темы уже проведенных уроков. Они выводятся в видет таблицы из двух столбцов, в которых указываются соответственно дата и тема урока. В зависимости от заполненности полей ввода возможны разные варианты обработки введенных данных.

id КТ id темы, выбранной из списка. как обрабатывается
0 0 создается новая КТ и новое событие.
0 выбрана из списка создается новое событие, привязанное к КТ, выбранной из списка
существующая КТ выбрана из списка и равна id КТ обновляем КТ и (если изменяется дата) все события, которые ей соответствуют.

Тему из списка "Элементы темтемплана" выбрать нельзя.

существующая КТ выбрана из списка и не равна id КТ такая ситуация запрещена.
существующая КТ 0 такая ситуация запрещена

Ведомость итоговых оценок

На данной странице можно выставить итоговые оценки учащимся и завершить обучение потока. Страница принимает обязательный параметр id - id идущего или завершенного потока.

Вверху страныцы отображается форма, где отображены ученики, которые обучаются на данном потоке. Напротив каждого можно выбрать итоговую оценку, выставляемую учащемуся. Итоговые оценки берутся из шкалы дисциплины приписанной к данному потоку. Под ведомостью стоит галочка подтвержения оценок, без нее оценки не сохранятся. Делее стоит галочка завершения обучения если необходимо завершить поток, При завершении потока все подписки на дисциплину переводятся в один из конечных статусов. Если поток уже завершен, то галочка не показывается, вместо нее предупреждение. После завершения потока оценки также можно выставить, но они уже будут идти как переэкзаменовка.

После того как мы выставили оценки и нажали на кнопку сохранить формируется приказ о выставленни итоговых оценок. На основе этого приказа сохраняются оценки, после чего на новой странице показывается шаблон ведомости в том виде, в котом она будет распечатана. После первого сохранения оценок эта ведомость также становится доступна для печати.

Перейти на эту страницу можно со страницы Журнала группы.

Права

API

В этом разделе описаны функции для работы со страницами "журнал группы" и "список журналов". Здесь содержится только краткое описание функций и их параметров. Если вас интересует их внутренняя логика, то обратитесь к разделу Подробное описание. Аргументы всех функций перечислены именно в том порядке, в котором их следует передавать.

Журнал группы

В этом разделе собраны все функции, которые относятся к странице "журнал группы"

Класс dof_im_journal_tablegrades

Класс отрисовки школьного журнала

print_texttable()

Вывести страницу журнала - просмотр оценок, или редактирование

Аргументы:

  • $editid - id редактируемого учебного плана в таблице plans
  • $eventid - id учебного события, которое будет редактировано (таблица schevents)

Возвращаемые значения:

  • null
check_permissions()

Проверяет разрешения на редактирование оценок для текущего пользователя

Аргументы: нет

Возвращаемые значения:

  • true/false - есть или нет разрешения на редактирование оценок

Класс dof_im_journal_templans_table

Класс для отрисовки таблицы тематического планирования в классном журнале

__construct()

Аргументы:

  • $dof - объект класса dof_control
  • $csid - id учебного потока

Возвращаемые значения: нет

print_table()

Выводит таблицу тематического планирования на экран

Аргументы: нет

Возвращаемые значения:

  • true если операция вывода прошла успешно, или false если при выводе возникли ошибки

Класс dof_im_journal_edittopic

Класс для создания или редактирования одной темы на странице планирования уроков

__construct()

Аргументы:

  • $dof - объект класса dof_control
  • $planid - id элемента учебного плана в таблице plans
  • $csid - id учебного потока
  • $eventid - id учебного события (таблица schevents)

Возвращаемые значения: нет

get_topic()

Возвращает объект с полями, необходимыми для заполнения формы

Аргументы: нет

Возвращаемые значения:

  • object - объект с полями для вставки в форму, или false в случае ошибки
create_topic()

Создает новый элемент тематического планирования

Аргументы:

  • $checkpoint - контрольная точка из таблицы plans
  • $event - заранее заготовленный объект для таблицы schevents

Возвращаемые значения:

  • (int) - id новой записи из таблицы schevents или false в случае ошибки
save_topic()

Обновляет существующий или создает новый элемент тематического планирования

Аргументы:

  • $checkpoint (object) - объект для обновления или создания записи в таблице plans
  • $event (object) - объект для обновления или создания записи в таблице schevents

Возвращаемые значения:

  • true, если все записи успешно обновлены
  • (int), id новой записи, если она была добавлена
  • false в случае ошибки
print_table()

Формирует таблицу тематического планирования в правой части страницы журнала

Аргументы: нет

Возвращаемые значения:

  • true если операция вывода прошла успешно, или false если при выводе возникли ошибки
get_anchor_id()

Возвращает метку времени, которая будет создана для нового урока, чтобы осуществить корректное перенаправление на страницу журнала Аргументы:

  • $time - (int) время создания нового события: метка времени в формате unixtime

Возвращаемые значения:

  • (int) - метка времени для перенаправления

Класс dof_im_journal_rawdata

Класс для подготовки сырых исходных данных для формирования школьного журнала и ему подобных документов

__construct()

Конструктор - определяет с каким учебным потоком будет вестись работа

Аргументы:

  • $dof - объект класса dof_control
  • $csid - id учебного потока

Возвращаемые значения: нет

Класс dof_im_journal_process_gradesform

Класс для проверки и обработки оценок из формы

__construct()

Конструктор класса. Осуществляет все проверки и записывает данные во внутреннее поле.

Аргументы:

  • $dof - объект класса dof_control
  • $gradedata (array) - массив $_POST из формы

Возвращаемые значения: нет

process_form()

Обработать все данные, пришедшие из формы: установить посещаемость, выставить оценки и сформировать приказы

Аргументы: нет

Возвращаемые значения:

  • false в случае неудачи. В случае успеха производит редирект на страницу журнала

Класс dof_im_journal_presence

Класс для обработки информации о посещаемости

__construct()

Аргументы:

  • $dof - объект класса dof_control
  • $csid - id учебного потока

Возвращаемые значения: нет

presence_students()

Формирует массив присутствия учеников

Аргументы: нет

Возвращаемые значения:

  • массив вида [id_ученика]=>статус_присутствия
absence_students()

Формирует массив отсутствующих студентов

Аргументы:

  • $away - массив id отсутствующих учеников

Возвращаемые значения:

  • массив вида [id_ученика]=>статус_присутствия

Дополнительные функции

dof_im_journal_format_date()

Аргументы:

  • $date (int) - метка времення для преобразования.
  • $format (string) - формат выводимой даты. По умолчанию 'dmy'.
  • $url (string) - Указывается, если необходимо получить дату как ссылку. По умолчанию NULL

Возвращаемые значения:

  • (string) строка с отформатированной датой
dof_im_journal_date_edit()

Возвращает отформатироанную дату и значок редактирования как ссылку Аргументы:

  • $date (int) - метка времени
  • $format (string) - формат выводимой даты. По умолчанию 'dmy'
  • $durl (string) - путь ссылки для даты, если не указана - дата выводится как просто строка. По умолчанию null.
  • $eurl (string) - путь ссылки для значка, если не указана значок не показывается По умолчанию null.
  • $imgsubdate (bool) - вывести значок под датой или рядом по умолчанию true (выводит значок под датой)

Возвращаемые значения:

  • (string) - строка с отформатированной датой

Список журналов

Класс dof_im_journal_listjournals

Этот класс содержит функции для работы со страницей списка журналов

__construct()

Аргументы:

Возвращаемые значения: нет

set_data()

Заполняет начальной информацией внутренние поля объекта

Аргументы:

  • $departmentid (int) - id подразделения (таблица departments). По умолчанию 0.

Возвращаемые значения:

  • (bool) true если все нормально или false в случае ошибки
get_data()

Возвращает собранные данные

Аргументы: нет

Возвращаемые значения:

  • (array) - массив структурных подразделений
get_journals()

Получить все журнлы занесенных подразделений

Аргументы: нет

Возвращаемые значения:

  • (bool) true если все нормально или false в случае ошибки

Подробное описание работы функций

В этом разделе описывается подробная работа всех публичных и внутренних методов для классов журнала. Если вам требуется только краткая справка по API, то обратитесь к разделу API.

Для журнала группы

Класс dof_im_journal_tablegrades

Описание print_texttable()

Описание API.

Итоговая функция, выводящая всю собранную информацию на экран.

Структура работы:

  1. собирает всю информацию при помощи функции get_all_form()
  2. обращается к плагину templater для представления информации в html-формате
  3. функцией print выводит результат работы templater'а на экран.
Описание check_permissions()

Описание API.

Структура работы:

  1. получаем учебный поток. Если поток не найден - возвращаем false.
  2. проверяем статус учебного потока. Если он не равен значению "go", то возвращаем false.
  3. проверяем, имеет ли текущий пользователь права редактирования. Если нет, то возвращаем false.
  4. если все проверки пройдены успешно, то возвращаем true.
Описание get_all_form()

Возвращает объект формы для вставки в templater. Таблица в шаблоне формируется по столбцам, т. е. сначала выводится контрольная точка в тем. планировании, а затем оценки всех учеников за это событие (как при заполнении обычного школьного журнала).

Аргументы:

  • $editid (int) - id редактируемого учебного плана в таблице plans
  • $eventid (int) - id редактируемого учебного события в таблице schevents

Возвращаемые значения:

  • (object) объект нужной структуры для построения шаблона

Структура работы:

  1. собираем в объект все стандартные надписи для таблицы
  2. собираем все запланированные активные контрольные точки учебного потока
  3. создадим массивы для названий месяцев и дат
  4. собираем в массив информацию по ученикам. Если параметр $editid не равен нулю, то в столбце оценок для редактируемой даты вместо оценки выводим форму.
  5. собираем в результурующий массив названия месяцев и дат
  6. если нужно распечатать форму - устанавливаем стандартные html-теги начала и конца формы
  7. возвращаем результат
Описание get_cell_form()

Возвращает редактируемую ячейку таблицы журнала.

Аргументы:

  • $studentid (int) - id ученика в таблице persons.
  • $cpassedid (int) - id учебной программы
  • $oldgrade (int) - старая оценка (если есть). По умолчанию null.
  • $gradeid (int) - id оценки в таблице cpgrades . По умолчанию 0
  • $eventid (int) - id учебного события в таблице schevents.
  • $scale (string) - шкала всех возможных оценок через запятую. По умолчанию null.

Возвращаемые значения:

  • (string) - строка с html-кодом формы редактирования оценки.

Структура работы:

Вся форма редактирования оценки представляет собой маленькую таблицу. С левой стороны находится форма выбора оценки, а справа галочка для отметки отсутствующего ученика (верхняя ячейка) и пояснение к ней (нижняя ячейка).

  1. получаем все допустимые варианты оценок для данного задания из параметра scale.
  2. из этих вариантов оценки составляем html-элемент формы типа SELECT.
  3. если за задание уже есть ранее выставленная, старая оценка, то делаем ее оценкой по умолчанию
  4. узнаем статус присутствия ученика на занятии, и в зависимсости от этого проставляем галочку над буквой "н". Форма с возможностью отмечания отсутствующих учеников отображается только для контрольных точек для которых есть события.
  5. возвращаем результат одной строкой.
Описание get_cell_string()

Получить текстовое содержимое ячейки оценки.

Аргументы:

  • $studentid (int) - id ученика в таблице persons
  • $plan (object) - объект содержащий данные об элементе тематического планирования (таблица plans)
  • $gradedata (object) - данные об оценке По умолчанию null.

Возвращаемые значения:

  • (string) html-код оценки, либо специальный знак пробела, чтобы в таблице было видно пустую ячейку

Структура работы:

  1. узнаем данные о посещаемости: получаем id события, если оно есть
    • если событие есть, узнаем, был ли ученик на занятии
  2. находим оценку
    • если ученик был на занятии и получил оценку - выводим оценку
    • если ученик был на занятии и не получил оценку - выводим символ пробела
    • если ученик отсутствовал на занятии и нет оценки, то выводим букву "н"
    • если ученик отсутствовал на занятии и получил оценку - выводим оценку, и букву "н" рядом с ней
Описание get_one_cell()

Возвращает данные в одной клетке журнала. Определяет какой тип ячейки выводить: для редактирования или текстовую.

Аргументы:

  • $studentid (int) - id ученика в таблице persons
  • $plan (object) - объект содержащий контрольную точку с событием из тем. планирования (таблица plans)
  • $gradedata (object) - объект содержащий данные об оценке (таблица cpgrades)
  • $cpassedid (int) - id подписки (таблица cpassed)
  • $editid (int) - id редактируемого в текущий момент элемента из тем. планирования
  • $eventid (int) - id редактируемого в текущий момент события (таблица schevents)
  • $scale (string) = По умолчанию null.

Возвращаемые значения:

  • (string) строка с html-кодом формы редактирования оценки, либо сама оценка, либо статус "отсутствовал"

Структура работы:

  1. сравниваем, совпадают ли id выводимой и редактируемой в данной момент контрольной точки
    • если id совпадают - то выводим форму редактирования оценки
      • если за это задание оценка уже была ранее выставлена, то выводим форму с установленной ранее оценкой
      • если за задание еще нет оценки - то выводим форму без предустановленных значений
    • если id не совпадают то выводим оценку текстом (либо статус "отсутствовал", либо пустую клетку, в зависимости от того был ли ученик на уроке, и получил ли он оценку)
Описание get_line_for_student()

Возвращает строку таблицы журнала для одного ученика.

Аргументы:

  • $i (int) - порядковый номер ученика в группе
  • $student (object) - объект с данными об ученике из таблицы persons
  • $cpasseds (array) - массив объектов, содержащий все подписки учеников этого потока
  • $plans (array) - массив объектов, содержащий все контрольные точки текущего курса (из таблицы plans)
  • $editid (int) - id редактируемой в данный момент контрольной точки
  • $eventid (int) - id редактируемого в данный момент события (или 0, если события нет) Таблица schevents

Возвращаемые значения:

  • (object) - информация об ученике: его ФИО, и оценки по всем контрольным точкам, а также сведения о посещаемости

Структура работы:

  1. создаем объект для итоговых данных
  2. записываем в соответствующие поля итогового объекта порядковый номер ученика, и его ФИО
  3. перебираем все переданные подписки ищем ту, которая относится к переданному ученику
  4. записываем в итоговый объект id его подписки
  5. создаем массив для оценок и собираем оценки ученика:
    • перебираем все контрольные переданные точки ($plans)
    • для каждой контрольной точки создаем объект оценки
    • получаем значение оценки за просматриваемую контрольную точку
    • при помощи функции get_one_cell() получаем оформленный html-код оценки
    • записываем полученный объект в массив оценок
  6. добавляем массив оценок в итоговый объект
  7. возвращаем итоговый объект
Описание get_lines_for_students()

Возвращает массив строк с ФИО и оценками для всех учеников

Аргументы:

  • $plans (array) - массив всех контрольных точек учебного потока из таблицы plans
  • $editid (int) - id редактируемой в данный момент контрольной точки (из таблицы plans)
  • $eventid (int) - id редактируемого в данный момент события (таблица schevents)

Возвращаемые значения:

  • (array) информация о всех учениках учебного потока или false, если ни одного ученика нет

Структура работы:

  1. получаем все подписки учебного потока, чтобы потом установить связи с оценками
  2. получаем учеников учебного потока
  3. присваиваем каждому ученику порядковый номер,
  4. получаем информацию по каждому ученику функцией get_line_for_student() и заносим объект с информацией о нем в массив
  5. возвращаем получившийся массив
Описание create_datesstring()

Создает верхнюю строку журнала с названиями месяцев и списком дат в пригодном для обработки плагином templater виде.

Аргументы:

  • $plans - список всех контрольных точек учебного потока из таблицы plans.

Возвращаемые значения:

  • (object) - объект, содержащий массив с данными для шаблонизатора

Структура работы:

Даты в электронном журнале должны будут проставляться как и в обычном классном журнале: верхняя строка - месяцы обучения, нижняя строка - даты проведенных или запланированных уроков, а также четвертные или годовые оценки. Для того чтобы организовать такой внешний вид для электронного журнала мы должны воспользоваться параметром colspan для html-таблицы журнала, и расположить тем самым месяцы точно над датами проведенных уроков. Для этой задачи в этой функции мы создаем объект следующей структуры:

  • (возвращаемый объект)
    • monthtitle - массив объектов, каждый из которых имеет свойства mtitle - название месяца, и mcolspan - количество ячеек с датами проведенных уроков в этом месяце
    • monthdate - строка с датой проведенного урока, либо название контрольной точки.
  1. получаем строку форматированных дат уроков при помощи функции generate_all_dates()
  2. перебираем все события и собираем массивы дат и названий месяцев
    • если просматриваемая дата не находится в том же месяце, что и предыдущая, то дополняем массив месяцев
  3. прибавляем счетчик дат в месяце
  4. записываем новую дату в итоговый массив
  5. возвращаем итоговый массив
Описание generate_all_dates()

Вызывается из create_datesstring(). Получить отформатированные даты для журнала

Аргументы:

  • $plans - массив всех контрольных точек учебного потока (из таблицы plans)

Возвращаемые значения:

  • (array) - отформатированные даты для вывода в журнал

Структура работы:

  1. получим событие из таблицы schevents, которое относится к данной теме тематического планирования
  2. если событие есть - то покажем дату
  3. если события нет - только название контрольной точки
Описание generate_single_date()

Вызывается из generate_all_dates Создает один объект даты для журнала.

Аргументы:

  • $plan (object) - объект из таблицы plans
  • $date (string) - метка времени для события или контрольной точки
  • $event (object) - Объект из таблицы schevents. По умолчанию null.

Возвращаемые значения:

  • (object) дата в нужном для templater'a формате

Структура работы:

  1. устанавливаем путь (html-якорь) к теме в планирования на странице
  2. Определяем, id события которое будет редактировано. Если события нет, то передаем 0.
  3. записываем якорь с ссылкой в объект
  4. возвращаем объект

Класс dof_im_journal_templans_table

Описание get_topics()

Возвращает массив объектов c необходимыми свойствами для вставки в таблицу schevents

Аргументы: нет

Возвращаемые значения:

  • (array) массив тем входящих в планирование

Структура работы:

  1. получаем все контрольные точки учебного потока
  2. формируем объект с нужными полями для каждой контрольной точки
  3. возвращаем получившийся массив объектов
Описание get_empty_topic()

Возвращает "пустой" объект отчета об уроке

Аргументы: нет

Возвращаемые значения:

  • (object) - объект для вставки в таблицу schevents

Структура работы:

  • создаем объект с необходимым списком пустых полей и возвращаем его
Описание table_data()

Возвращает массив строк данных отформатированных для вывода с помощью moodle-функции print_table()

Аргументы: нет

Возвращаемые значения:

  • (array) массив с данными для распечатки таблицы, либо false в случае ошибки

Структура работы:

  1. проверяем, есть ли для переданного потока элементы тематического планирования.
    • если их нет - то возвращаем false
  2. формируем массив строк таблицы
  3. проставляем html-якоря для каждой контрольной точки на странице оценок
  4. добавляем ссылки на редактирования элементов учебного плана
  5. возвращаем получившийся массив

Класс dof_im_journal_edittopic

Описание get_topic()

Описание API

Структура работы:

  • Проверяем, указан ли id контрольной точки.
    • Если не указан - возврящаем пустую тему.
    • Если указан - пробуем извлечь контрольную точку по такому id
      • Если контрольную точку извлечь не удалось - то возвращаем false
      • Если удалось - то возвращаем заполненный отчет об уроке
Описание save_topic()

Описание API

Структура работы:

  1. проверяем есть ли у нас данные в переменной $event для обновления или создания события. Если нет - то возвращаем false.
  2. определяем тип действия, которое надо совершить
    • если указан planid для события - то создаем новое событие для существующей контрольной точки
    • если нет id для контрольной точки - создаем новое событие и новую контрольную точку
    • в остальных случаях - обновляем контрольную точку и событие: вычисляем новую относительную дату, и обновляем записи в таблицах schevents и plans
Описание create_topic()

Описание API

Структура работы:

  1. создаем новый элемент тематического планирования в таблице plans (если это не удалось - то возвращаем false)
  2. добавляем в переданное событие id контрольной точки
  3. создаем событие из переданного объекта $event (если событие не создано - удаляем ранее созданный элемент тематического планирования)
  4. возвращаем id события
Описание create_checkpoint()

Создает и сохраняет запись в таблице plans

Аргументы:

  • $point (object) - данные для сохранения в таблицу plans

Возвращаемые значения:

  • (int) - id новой записи или false в случае ошибки

Структура работы:

  1. проверяем, есть ли у нас все необходимые для создания записи
  2. получаем id учебного потока
  3. получаем дату начала обучения
  4. создаем заготовку для объекта контрольной точки
  5. вычисляем относительную дату контрольной точки
  6. заносим данные в базу
Описание create_event()

Создает объект события и сохраняет его в schevents

Аргументы:

  • $event (object) - данные для сохранения

Возвращаемые значения:

  • (int) - id новой записи в таблице событий или false.

Структура работы:

  1. проверяем, есть ли у нас все необходимые для создания записи
  2. получаем id учебного потока
  3. получаем id преподавателя в таблице persons
  4. создаем объект нужного формата и заносим туда все данные
  5. записываем данные в базу

Класс dof_im_journal_rawdata

Поля:

  • dof - объект класса dof_control
  • csid - id учебного потока в таблице сstreams
Описание get_checkpoints()

Получить все контрольные точки одного учебного потока

Аргументы: нет

Возвращаемые значения:

  • (array) - массив объектов из таблицы plans или false

Структура работы:

  1. получаем id учебного потока из таблицы cstreams
  2. выбираем из таблицы plans все записи, у которых поле cstreamid равно id учебного потока, и тип связи "cstreams"
  3. сортируем их в хронологическом порядке
  4. возвращаем получившийся массив
Описание get_students()

Получить всех учеников указанного учебного потока

Аргументы: нет

Возвращаемые значения:

  • (array) массив записей из таблицы persons или false

Структура работы:

  1. получаем список пройденных дисциплин
  2. перебираем все подписки и запоминаем id ученика для каждой из них
  3. извлекаем из таблицы persons учеников, чьи id были извлечены из подписок
Описание get_teacherid()

Получить id преподавателя учебного потока

Аргументы: нет

Возвращаемые значения:

  • (int) - id преподавателя или false в случае неудачи

Структура работы:

  • id преподавателя всегда берется только из записи учебного потока из таблицы cstreams

Класс dof_im_journal_process_gradesform

Поля:

  • gradedata - (object) все оценки и сопутствующая им информация
  • mypost - (array) непроверенные данные пришедшие из массива $_POST. Используются только для составления повторного запроса на сохранение данных.
Описание __construct

Описание API

Структура работы:

  1. создаем объект, в который мы будем складывать все проверенные данные, пришедшие из формы
  2. проверяем скалярные данные: все числовые идентификаторы, и отдельные строки, и после проверки записываем их в итоговый объект
  3. теперь, зная cstreamid из проверенных скалярных данных вызываем родительский конструктор
  4. проверяем массивы, пришедшие из формы:
    • данные об отсутствующих учениках
    • массив оценок
    • массив идентификаторов подписок (таблица cpassed)
    • узнаем id оценок для изменения их статуса
  5. записываем все проверенные данные в итоговый массив
  6. определяем тип действия, которое надо совершить:
    • сохранить данные
    • сохранить данные и продолжить редактирование
    • восстановить исходные значения
  7. записываем исходный массив (непроверенный) в поле объекта, если потом понадобится еще раз отправить данные после подтверждения
Описание process_form()

Описание API

Структура работы:

  1. в самом начале проверяем тип действия, которое надо совершить. Если этим действием является "отменить изменения", то не переходим к сохранению оценок и сразуже выполняем перенаправление на страницу журнала. В остальных случаях идем дальше:
  2. проверяем, установлено ли у кого-нибудь из учеников одновременно "н" и оценка. Если это так - то перенаправим пользователя на страницу с сообщением об этом, и попросим его подтвердить такой выбор.
    • если пользователь согласен с изменениями, которые он сделал, то все выставленые им оценки и сведения о посещаемости сохраняются
    • если же нет - то происходит отмена всех изменений
  3. в случае, когда никаких предупреждений нет - сначала формируем приказ для оценок
  4. затем приказ о посещаемости
  5. если все действия произведены успешно - производим редирект. Если же возникли ошибки - сообщаем об этом
Описание generate_order_grades()

Сформировать приказ об изменении состояния учебного потока

Аргументы: нет

Возвращаемые значения:

  • true если приказ успешно сформирован, и false в случае ошибки

Структура работы:

  1. получаем id подразделения в таблице departments
  2. определяем тип действия, которое нужно совершить с оценкой
  3. обращаемся к функциям выставления, либо удаления оценки
Описание order_set_grade()

Формирует приказ - установить оценку.

Аргументы:

  • $departmentid (int) - id подразделения в таблице departments

Возвращаемые значения:

  • (bool) true в случае успеха и false в случае неудачи

Структура работы:

  1. подключаем методы работы с приказом
  2. создаем объект для записи
  3. сохраняем автора приказа, подразделение, к которому он относится, дату создания приказа
  4. добавляем данные, которые определяют назначение приказа
  5. сохраняем приказ в БД, в таблицу orders
  6. подписываем приказ
  7. исполняем приказ

Методы order_delete_grade и order_update_grade работают по такому же принципу.

Описание get_grades_fororder()

Аргументы:

  • $type - тип действия, которое необходимо будет произвести над оценкой. Возможные значения: set_grade и delete_grade.

Возвращаемые значения:

  • (object) - объект, содержащий список оценок и все идентификаторы для формирования приказа.

Структура работы:

  1. создаем объект для итоговых данных
  2. записываем в него дату, id учителя (в таблице persons) и id контрольной точки (в таблице plans
  3. перебираем все оценки из внутреннего массива с проверенными данными
  4. определяем тип действия, которое над ней нужно совершить
  5. в зависимости от типа действия (установление или удаление оценки) записываем в объект оценки нужные идентификаторы
  6. упаковываем оценки в итоговый массив и возвращаем его

Для списка журналов

Класс dof_im_journal_listjournals

Этот класс служит для сбора и вывода информации по всем структурным подразделениям. Информация выводится древовидно: самый верхний уровень - подразделение, затем учебные программы, затем учебные периоды, элементы учебной программы, и в самом конце - журналы учебного потока. Поля:

  • dof - - объект класса dof_control
  • $departments массив структуры
   array(
   [departmentid] => obj  -> departmentname = 'department_name'
                     obj  -> programms = array(
     [programmid]   => obj1 -> programmname = 'programm_name'
                       obj1 -> ages = array(
       [agenum]       => obj2 -> agename = 'age_name'
                         obj2 -> items = array(
         [itemid]       => obj3 -> itemname = 'item_name'
                           obj3 -> cstreams = array(
           [cstreamid]    => obj4 -> cstreamname = 'cstream_name'
                                   )// конец массива cstreams
                                 )// конец массива items
                               )// конец массива ages
                             )// конец массива programms
        )// конец общего массива
   содержит данные для вставку в темплатер после добавления еще одного уровня:
   $fortemplater->departments = $this->departments;

В общем виде сбор данных выглядит так:

  1. сначала собирается информация по структурному подразделению (одному или нескольким), и информация по ним записывается в итоговый объект
  2. затем получаются все программы учебного подразделения, информация по ним записывается в итоговый массив
  3. извлекается и записывается в итоговый объект список учебных периодов
  4. для каждого учебного периода получаются элементы учебной программы, которые изучаются в нем
  5. для каждого элемента учебной программы получаются учебные потоки
  6. для каждого учебного потока получается его журнал
Описание set_data()

Описание API

Структура работы:

  • получаем id структурного подразделения из таблицы departments.
    • если оно есть - то получаем информацию только по нему
    • если получили 0 вместо id подразделения - то выводим информацию по всем подразделениям
Описание get_journals_department()

Возвращает журналы одного подразделения

Аргументы:

  • $departmentid - id подразделения в таблице departments

Возвращаемые значения:

  • (array) - набор журналов
  • (bool) - false в случае ошибки

Структура работы:

  1. получаем все программы, за которые отвечает подразделение
  2. для каждой программы получаем все ее журналы