Модуль editgeneric (Sway) — различия между версиями
Материал из YourcmcWiki
(→Алгоритм) |
(→Алгоритм) |
||
Строка 19: | Строка 19: | ||
# Если умеем, выполнить '''check_data''', и получить $data (вероятно хешреф) | # Если умеем, выполнить '''check_data''', и получить $data (вероятно хешреф) | ||
# Если задан параметр '''do''', перейти к выполнению действия: | # Если задан параметр '''do''', перейти к выполнению действия: | ||
− | ## Если функция check_data задана, но вернула ЛОЖЬ, вернуть ошибку | + | ## Если функция '''check_data''' задана, но вернула ЛОЖЬ, вернуть ошибку |
− | ## Если функция save задана, выполнить её, если она вернёт ЛОЖЬ, вернуть ошибку | + | ## Если функция '''save''' задана, выполнить её, если она вернёт ЛОЖЬ, вернуть ошибку |
− | ## Если функция save не задана или вернула ИСТИНУ, отдать перенаправление на URL '''edit_from_uri''' из параметров запроса (URL, по которому была форма редактирования) | + | ## Если функция '''save''' не задана или вернула ИСТИНУ, отдать перенаправление на URL '''edit_from_uri''' из параметров запроса (URL, по которому была форма редактирования) |
# Если умеем, выполнить '''fetch''' и получить от него $olddata | # Если умеем, выполнить '''fetch''' и получить от него $olddata | ||
# Если умеем, выполнить '''merge''' и получить от него $data объединённый с $olddata | # Если умеем, выполнить '''merge''' и получить от него $data объединённый с $olddata |
Версия 23:52, 20 августа 2009
editgeneric — тривиальный модуль для построения интерфейсов редактирования, пропагандирующий, я надеюсь, правильное разделение всего процесса на стадии.
- Проверка доступа (check_access)
- Извлечение и проверка данных из параметров запроса (check_data)
- Извлечение данных из базы данных приложения / откуда угодно (fetch)
- Объединение данных из базы и изменений, вытащенных check_data (merge)
- Дополнение и вывод объединённых данных в шаблон (template)
- Выполнение изменений (save)
Общий порядок параметров всех хуков: (\%param, \%rv, $data, $olddata). Все аргументы передаются хукам merge и template, первые 3 — хуку save, остальным только первые 2.
Алгоритм
Порядок действий:
- Если умеем, проверить доступ (выполнить check_access, если функция существует)
- Если она что-то вывела в \%rv (данные шаблона), вернуть \%rv
- Иначе просто отдать статус HTTP 403 Forbidden
- Если умеем, выполнить check_data, и получить $data (вероятно хешреф)
- Если задан параметр do, перейти к выполнению действия:
- Если функция check_data задана, но вернула ЛОЖЬ, вернуть ошибку
- Если функция save задана, выполнить её, если она вернёт ЛОЖЬ, вернуть ошибку
- Если функция save не задана или вернула ИСТИНУ, отдать перенаправление на URL edit_from_uri из параметров запроса (URL, по которому была форма редактирования)
- Если умеем, выполнить fetch и получить от него $olddata
- Если умеем, выполнить merge и получить от него $data объединённый с $olddata
- Если не умеем, просто дописать в хеш %$data значения из %$olddata, не заданные в %$data
- Если $data — не хешреф, то не делать этого :-)
- Если не умеем, просто дописать в хеш %$data значения из %$olddata, не заданные в %$data
- Если умеем, выполнить template, он выведет $data и $olddata в \%rv
- Если не умеем, просто записать data в $rv по ключу data, а $olddata по ключу olddata.