Модуль editgeneric (Sway)

Материал из YourcmcWiki
Перейти к: навигация, поиск

editgeneric — тривиальный модуль для построения интерфейсов редактирования, пропагандирующий, я надеюсь, правильно разделение всего процесса на стадии.

  • Проверка доступа (check_access)
  • Извлечение и проверка данных из параметров запроса (check_data)
  • Извлечение данных из базы данных приложения / откуда угодно (fetch)
  • Объединение данных из базы и изменений, вытащенных check_data (merge)
  • Дополнение и вывод объединённых данных в шаблон (template)
  • Выполнение изменений (save)

Общий порядок параметров всех хуков: (\%param, \%rv, $data, $olddata). Все аргументы передаются хукам merge и template, первые 3 — хуку save, остальным только первые 2.

Алгоритм

Порядок действий:

  1. Если умеем, проверить доступ (выполнить check_access, если функция существует)
    Если она что-то вывела в \%rv (данные шаблона), вернуть \%rv
    Иначе просто отдать статус HTTP 403 Forbidden
  2. Если умеем, выполнить check_data, и получить $data (вероятно хешреф)
  3. Если задан параметр do, перейти к выполнению действия:
    1. Если функция check_data задана, но вернула ЛОЖЬ, вернуть ошибку
    2. Если функция save задана, выполнить её, если она вернёт ЛОЖЬ, вернуть ошибку
    3. Если функция save не задана или вернула ИСТИНУ, отдать перенаправление на URL edit_from_uri из параметров запроса (URL, по которому была форма редактирования)
  4. Если умеем, выполнить fetch и получить от него $olddata
  5. Если умеем, выполнить merge и получить от него $data объединённый с $olddata
    Если не умеем, просто дописать в хеш %$data значения из %$olddata, не заданные в %$data
    Если $data — не хешреф, то не делать этого :-)
  6. Если умеем, выполнить template, он выведет $data и $olddata в \%rv
    Если не умеем, просто записать data в $rv по ключу data, а $olddata по ключу olddata.