Модуль 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 (вероятно хешреф)
# Если задан параметр <code>'''do'''</code>, перейти к выполнению действия:
+
# Если задан параметр '''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.

Алгоритм

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

  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.