Модуль editgeneric (Sway) — различия между версиями
Материал из YourcmcWiki
(→Алгоритм) |
|||
Строка 14: | Строка 14: | ||
Порядок действий: | Порядок действий: | ||
− | # Если умеем, проверить доступ (выполнить check_access, если функция существует) | + | # Если умеем, проверить доступ (выполнить '''check_access''', если функция существует) |
#: Если она что-то вывела в \%rv (данные шаблона), вернуть \%rv | #: Если она что-то вывела в \%rv (данные шаблона), вернуть \%rv | ||
#: Иначе просто отдать статус HTTP ''403 Forbidden'' | #: Иначе просто отдать статус HTTP ''403 Forbidden'' | ||
− | # Если умеем, выполнить check_data, и получить $data (вероятно хешреф) | + | # Если умеем, выполнить '''check_data''', и получить $data (вероятно хешреф) |
− | # Если задан параметр | + | # Если задан параметр '''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 |
#: Если не умеем, просто дописать в хеш %$data значения из %$olddata, не заданные в %$data | #: Если не умеем, просто дописать в хеш %$data значения из %$olddata, не заданные в %$data | ||
#:: Если $data — не хешреф, то не делать этого :-) | #:: Если $data — не хешреф, то не делать этого :-) | ||
− | # Если умеем, выполнить template, он выведет $data и $olddata в \%rv | + | # Если умеем, выполнить '''template''', он выведет $data и $olddata в \%rv |
#: Если не умеем, просто записать data в $rv по ключу data, а $olddata по ключу olddata. | #: Если не умеем, просто записать data в $rv по ключу data, а $olddata по ключу olddata. | ||
[[Категория:Sway]] | [[Категория:Sway]] |
Версия 23:51, 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.