Компонент Joomla

soif

Новичок
Делаю компонент для Joomla 1.5, который должен представлять собой систему для работы с курсовыми и дипломными работами студентов. (Это моя бакалаврская)
Пока готова только админка, начитавшись разных статей про шаблон MVC, никак не могу решить, как же реализовать фронтенд. Если с админкой было всё просто: есть список преподавателей, можно добавить-удалить-редактировать преподавателя. Реализована админка с одной моделью, одним вспомогательным классом таблицы, одним контроллером, и представлением с 2-мя шаблонами (первый шаблон список преподавателей, второй шаблон форма редактирования преподавателя).
Собственно точка входа в админку это вывод списка преподавателей. Модель строит запрос, получает все данные из таблицы преподавателей. У преподавателя помимо полей ид, фио, должность, звание, есть ещё числовые поля юзер и кафедра, в юзер заносится ид пользователя из обычной таблицы пользователей джумлы , а в кафедру ид из таблицы кафедр (моего компонента). При формировании списка добавляем соответствующие имя пользователя в джумле и название кафедры из таблицы кафедр.
У модели есть функция getData($type) возвращающая список кафедр если $type='department' и список преподавателей, сформированный, как описано выше, если type пустой. (список кафедр использую в форме редактирования преподавателя для генерации селект списка), также функции getLecturer, store и delete работающие с классом TableLecturers extends JTable. Представление View в зависимости от переменной layout выводит или список или форму.

Теперь необходимо сделать фронтенд и тут для меня непонятный момент это роли пользователей. У меня предусмотренно 3 роли: это гость (или зарегистрированный пользователь, разницы нет), студент и преподаватель.
Общие функции, доступные простому пользователю:
1) просмотр списка работ
1.1) выбор конкретной работы (но прикреплённые файлы не видно) т.е. видны только автор, краткое описание, преподаватель, тематика, кафедра дата начала и окончания работы, возможно график активности по стадиям работы (будет высчитываться по файлам, опубликованным на каждой стадии работы, стадия начинается тогда, когда опубликован первый файл относящийся к ней) но насчёт графика потом, сейчас суть вне в этом.
2) поиск работ в системе: по тематике, по научному руководителю, по дате и т.д.
3) просмотр списка тематик работ
3.1) просмотр работ по данной тематике, просмотр преподавателей, занимающихся данной тематикой

Меню выносить в отдельный модуль не хочу, пока пусть будет в самом компоненте. В данном случае 3 пункта: "каталог работ" (отсюда переход на страницу, отвечающую за функцию 1.1, "поиск работы", "тематика работ" (отсюда ведёт на страницу , отвечающую за функцию 3.1)

Функции, доступные преподавателю:
1) Помимо всего вышеперечисленного, в функции 1.1 общего назначения, преподаватель видит и может скачивать любой файл из каждой стадии.
2) Список студентов, с указанием работ, и ведущих на страницы этих работ
2.1) Список студентов, заполнивших форму, указавших в качестве научного руководителя, данного преподавателя, после подтверждения студент может начать пользоваться системой.

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

Функции, доступные студенту:
0) заполнить форму студента, с указанием научного руководителя, всех данных и создающую свою первую работу в системе. Ожидание подтверждения от научника.
1) Если из общего каталога студент выбрал свою работы попадает в 3-й пункт
2) Список работ, т.к. количество работ на каждого студента будет небольшим, по 1 работе в год, мне кажется можно не делать отдельную страницу для списка, а выводить его где-нибудь сбоку и последним пунктом "новая работа", который понадобится нескоро.
3) Собственно тоже самое что и функция 1.1 общего пользования, но с возможностью размещать и скачивать файлы для каждой стадии. Т.е. выбираем стадию, пишем комментарий, прикрепляем файл. (По-моему можно сделать с помощью mootools, ещё не пробовал) Удалять файлы и редактировать текст нельзя, чтобы не было подтасовки результатов.

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

2) Тип документа: Презентация, Задание, Текст работы, Фрагмент работы, Отзыв, Рецензия,Комментарий и т.д. (ид и название типа)

3) Документы (ид документа, название, автор, тип документа, файл, стадия работы) автор, тип, файл и стадия работы хранят ид из соответствующих таблиц

4) Файлы (ид файла, заголовок, имя файла, директория, автор, дата создания и модификации) модификация наверное не нужна

5) Преподаватели (ид преподавателя, фио, должность, звание, joomla user id)

Больше 5 изображений не помещается в тему, таблиц всего 12, так что разбиваю на части в следующих сообщениях ))

Схема бд досталась готовая, как с ней работать понятно, вернёмся к функционалу, как создать конечный готовый шаблон вывода под каждую задачу я представляю себе, даже как строить страницу в зависимости от роли пользователя это понятно.
Не понятно, как организовывать модели и контроллеры, как хранить роль пользователя, допустим каждый раз при входе в компонент будет происходить идентификация роли пользователя и соответствующее построение страниц компонента, можно выполнить её 1 раз в начале и хранить в сессии. Правда я не не разбираюсь в безопасности, можно ли будет её оттуда утащить и, скажем, получить доступ к странице преподавателя??
По идее, вся логика должна ложиться на слой модели, а контроллер только обрабатывать действия пользователя.
Тут для меня начинается путаница: хочу создать 3 модели, 3 контроллера и 3 представления соответственно.
С различным количеством шаблонов вывода. И классы для работы с таблицами там, где это будет нужно.
Модели:
1) Модель общего назначения
2) Модель студента
3) Модель преподавателя
Будут одержать функции описанные выше для этих сущностей.

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

Меня мучает вопрос: корректно ли я планирую свой компонент с точки зрения MVC ??
Дальше буду приводить код, там будут замечания думаю, но пока не взялся за фронтедн, есть ли ошибки в проектировании?? Это мой первый опыт веб-разработки. Рад услышать любую критику.
 

soif

Новичок
Таблицы. Продолжение )
6) Стадия для конкретной работы (ид стадии, название, комментарий, тип прилагаемого документа, ид работы, дата начала и окончания стадии)

7) Тип стадии (ид типа стадии и название стадии) Постановка задачи, Анализ предметной области, Исследование, Проектирование, Реализация, Преддипломная практика, Защита, Итог

8) Студент (ид студента, фио,начало работы, защита, кафедра, joomla user id) добавлю поле ид научного руководителя
 

soif

Новичок
Последние таблички ))
9) Заявка от студента (ид заявки, ид студента студента, ид работы) добавлю ещё поле ид научного руководителя

10) Тематики работ (ид темы, название)

11) Работы (ид, тематика, оценка, рецензент, кафедра, дата начала и окончания работы, дирректория, комментарий) поле state пока не знаю для чего использовать, лучше опять же хранить ид руководителя

12) Таблица связи тематики работ и конкретных работ (ид связи, ид работы, ид темы) создана только для удобства сбора статистики
 
Сверху