Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / docx31 / Курсовой проектНОВЫЙ.docx
Скачиваний:
70
Добавлен:
01.08.2013
Размер:
581.23 Кб
Скачать
      1. Реализация базовых классов контроллера

        1. Класс 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, созданы контроллеры и описаны их методы, удовлетворяющие функциональным возможностям преподавателя системы.

Соседние файлы в папке docx31