- •Содержание
- •Введение
- •Анализ и сравнение существующих систем тьюторской поддержки
- •Методологии разработки программного обеспечения
- •Архитектура программного обеспечения
- •Основы разработки по
- •Сравнение современных архитектур ис
- •Выбор архитектуры по и программных средств разработки
- •Разработка и реализация базовых классов
- •Описание программных модулей
- •Реализация базовых классов контроллера
- •Класс Tutor
- •Класс Admin
- •Класс Index
- •Реализация базовых классов компонента Модель
- •Список использованной литературы
Реализация базовых классов контроллера
Класс Tutor
Разработан Class Tutor, который отвечает за работу с учебным материалом и учету успеваемости студентов.
Были созданы контроллеры по функциям преподавателя (рис.10).
Рис.10. Контроллеры класса Tutor
В контроллере courses.php описан класс Controller_Tutor_Courses, который включает методы action_index() для просмотра всего списка курсов. Когда пользователь нажимает на название курса, срабатывает метод action_view(), который отвечает за предоставление списка лекций выбранного курса. Метод action_add() отвечает за добавление нового курса. При добавлении нового курса заполняются следующие поля: «Название», «Описание», «Категория», «Статус».
Метод action_edit() отвечает за изменение информации о курсе, таких как «Название», «Описание», «Категория», «Статус».
Метод action_delete() удаляет курс и лекции внутри курса.
Для данного контроллера есть свойство public $template = 'tutor/base', который определяет базовый шаблон представления преподавателя.
Ниже подробно рассмотрен каждый метод в контроллере courses.php класса Controller_Tutor_Courses.
После авторизации преподаватель попадает в свой личный кабинет, где есть у него страницы «Управление курсами», «Управление тестами» «Успеваемость студентов». Когда преподаватель переходит на страницу «Управление курсами», срабатывает метод action_index() (Листинг 1).
Листинг 1. Метод action_index () контроллера courses.php класса Controller_Tutor_Courses
На странице отображается таблица с названием курса, раздел к которому курс относится и действия, такие как «Удалить» и «Редактировать».
Перед тем как перейти на страницу «Управление курсами», идет проверка на активную сессию преподавателя (Листинг 2). Если пытается получиться доступ к этой странице другой пользователь, то произойдет перенаправление на страницу авторизации.
Листинг 2. Проверка на активную сессию преподавателя
if (!Auth::instance()->logged_in('tutor')) {
$this->request->redirect('auth/login');
}
К модели Model_Course отправляет запрос на выбор всех записей из модели. Полученный массив данных выводится в шаблон.
Чтобы просмотреть лекции в курсе, надо нажать на название курса.
В этот метод передается первичный ключ курса. Для получения текущего значения используется метод param($id), где $id номер курса (Листинг 3).
Листинг 3. Получения текущего значения
$course_id = $this->request->param('id');
При работе метода action_view() идет опять проверка на сессию преподавателя (Листинг 4).
Листинг 4. Метод action_view () контроллера courses.php класса Controller_Tutor_Courses
Далее осуществляется запрос к модели Model_Lection на выбор записей лекций данного курса, где вторичный ключ id_course соответствует полученному первичному ключу курса.
Чтобы добавить новый курс, нужно нажать кнопку «Добавить новый курс». Работает метод action_add() (Листинг 5).
Листинг 5. Метод action_add() контроллера courses.php класса Controller_Tutor_Courses
При переходе на страницу добавления нового курса, идет проверка на активную сессию преподавателя. Если пытается получиться доступ к этой странице другой пользователь, то произойдет перенаправление на страницу авторизации. Страница «Добавление нового курса» имеет следующие поля: «Название», «Описание» и выпадающие списки «Категория», «Статус».
Когда преподаватель заполняет форму, он нажимает кнопку добавить. Введенные данные попадают в глобальный массив $_POST. Из глобального массива значения извлекаются в массив $data методом extract(). (Листинг 6).
Листинг №6. Извлечение значений в массив
$data = Arr::extract($_POST, array(
'name', 'desc', 'id_author', 'id_category', 'status'));
С данными полученными из массива $data, происходит выполнение добавление новой записи в таблицу. Если успешно выполнен запрос, то преподаватель перенаправляется на страницу со списком курсов.
Список категорий выбирается из таблицы с помощью метода find_all().
За редактирование курса отвечает метод action_edit() (Листинг 7).
Листинг 7. Метод action_edit() контроллера courses.php класса Controller_Tutor_Courses
Принцип работы редактирования курса похож на добавление нового курса, только при выполнении запроса выполняет функция update().
Выбирая курс, который нужно удалить, запоминается первичный ключ курса, по которому и происходит удаление, методом delete() (Листинг 8).
Листинг 8. Метод action_delete() контроллера courses.php класса Controller_Tutor_Courses
Другими важными функциями преподавателя является создание, редактирование и удаление тестов. В каждом курсе может быть несколько тестов, а в тесте много вопросов. Для создания тестов создан контроллер tests.php, за создание вопросов к тесту отвечает контроллер questions.php.
Преподавателю предоставлены основные функции для работы с тестами: это добавление, редактирование, удаление и просмотр информации. Для каждой функции написаны методы в классе Controller_Tutor_Tests контроллера tests.php.
Метод action_index() передает в представление массив данных, выбранных из модели Model_Test (Листинг 9).
Листинг 9. Метод action_index() контроллера tests.php класса Controller_Tutor_Tests
Тест принадлежит определенному курсу, поэтому при добавлении надо указать курс. В представлении выбрать курс можно из выпадающего списка, но чтобы вывести этот список курсов, в методе action_add() выбираются все поля из таблицы courses (Листинг 10).
Форма добавления теста содержит поля «Название», «Курс», «Время» и радио кнопки «Повторять». Опция «Повторять» дает возможность студенту проходить тест неоднократно. При нажатии кнопки «Добавить» заполненные данные попадают в глобальный массив $_POST. Добавление теста в таблицу осуществляется функцией create() со значениями, полученными из массива $_POST.
Листинг 10. Метод action_add() контроллера tests.php класса Controller_Tutor_Tests
Если добавление выполнено успешно, происходит перенаправление на страницу списка тестов.
Редактирование теста происходит по тому же принципу, что и добавление (Листинг 11). На странице «Редактирование теста» появляется форма с полями: «Название», «Курс», «Время» и радио кнопки «Повторять». Форма заполнена данными. Данные подгружаются из таблицы. Преподаватель изменяет информацию в форме и нажимает на кнопку «Обновить». Новые значения попадают в массив $_POST. В методе action_edit() для обновления значений используется метод set().
Новые значения извлекаются из массива $_POST методом extract().
Листинг 11. Метод action_edit() контроллера tests.php класса Controller_Tutor_Tests
Сохранение записи, после изменения модели, осуществляется методом update().
Преподаватель может просмотреть список вопросов в тесте. Выбирая название теста, выполняется метод action_view().
В методе action_view() осуществляется запрос к модели Model_Question для выбора записей принадлежащих выбранному тесту (Листинг 12).
Листинг 12. Запрос к модели Model_Question
$questions = ORM::factory('question')
->where('id_test', '=' , $id) ->find_all();
Полученный массив значений из модели и первичный ключ текущего вопроса передается в шаблон (Листинг 13).
Листинг 13. Метод action_view() контроллера tests.php класса Controller_Tutor_Tests
Со списка вопросов теста можно перейти на форму редактирования вопроса и ответов. За работу с вопросами отвечает контроллер questions.php, в котором описан класс Controller_Tutor_Question.
На странице «Редактирование вопроса» выводят значения и вопроса и ответов. Доступ к модели Model_Question происходит по вторичному ключу id_test, а к модели Model_Answers через Model_Qanswers (Листинг 14).
Листинг 14. Запрос к модели Model_Question и Model_Answers
$id = $this->request->param('id');
$question = ORM::factory('question' , $id);
$answers = $question->answers->find_all();
Вопросы и ответы связаны через третью таблицу, которая содержит первичные ключи двух других таблиц (рис.11).
Рис.11. Связь таблиц «Answers», «Questions» через таблицу «Qanswers»
При редактировании данных обновление происходит сразу в двух таблицах (Листинг 14). Сначала обновление происходит в модели Model_Question. Обновленные значения передаются в массив $_POST. Из этого массива получают ключи методом extract(). При успешном выполнении обновления модели Model_Question, происходит обновление ответов в цикле foreach, где $k – ключ элемента массива, а $v – значение элемента массива, который содержит ответы.
Листинг 14. Метод action_edit() контроллера tests.php класса Controller_Tutor_Questions
Если запрос на обновление выполнен успешно, преподаватель перенаправляется на страницу «Вопросы теста».
Во время выполнения метода action_add(), который описан в классе Controller_Tutor_Questions, добавление происходит сразу в три таблицы (Листинг 15).
Массив $_POST получает данные с формы добавления вопроса и ответов. Первым добавляется в таблицу вопрос, со значениями, полученными из массива $_POST.
Листинг 15. Метод action_add () контроллера tests.php класса Controller_Tutor_Questions
Если вопрос успешно добавлен, то в цикле добавляются ответы и вторичные ключи в связующую таблицу, где $k – ключ элемента массива, а $v – значение элемента массива, который содержит ответы.
Таким образом, был реализован класс Tutor, созданы контроллеры и описаны их методы, удовлетворяющие функциональным возможностям преподавателя системы.