| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
mashi 11.11.2005 16:32 / 12.11.2005 22:15
Иногда приходят не желательные поля , с нежелательным значением и в нежелательном месте.name ending field_match # name :имя поля # ending :окончание ($request:uri без ?$request:query) для задания контекста # field_match :шаблон, которому должно соответствовать значение поля (regexp) # глобальные поля mode / xml|debug lang / ru|ua|en print / yes|no # поля новостей year news/ 2005|2006 month news/ 1|2|3|4|5|6|7|8|9|10|11|12 id news/ # поля публикаций year publication/ 2005|2006 month publication/ 1|2|3|4|5|6|7|8|9|10|11|12 id publication/_________________________________________________________________
@_form_filds_is_ok[permition_file][permited_filds;path;name_is_ok;context_is_ok;value_is_ok]
# Если существует файл разрешений и REQUEST_METHOD = GET
^if(-f "$MAIN:DATA/$permition_file" && $env:REQUEST_METHOD eq "GET" && def $form:fields){
# загружаем таблицу разрешений для полей
$permited_filds[^table::load[$MAIN:DATA/$permition_file]]
# и переводим ее в хеш таблиц если она не пустая
^if(def $permited_filds){
$permited_filds[^permited_filds.hash[name][$.distinct[tables]]]
# записываем в $path значение request:uri взятое до знака вопроса
$path[^request:uri.split[?;lh]]
$path[$path.0]
^try{
^form:fields.foreach[field;value]{
# есил имя поля разрешено, то определяем разрешение для контекста и значения
^if(def $permited_filds.[$field]){
$name_is_ok(1)
$context_is_ok(^permited_filds.[$field].locate($permited_filds.[$field].ending eq '^path.right(^permited_filds.[$field].ending.length[])'))
# если контекст впорядке и задан шаблон для значения поля, то применяем его, иначе -- все значения подходят
^if($context_is_ok && def $permited_filds.[$field].field_match){
$value_is_ok(^value.match[$permited_filds.[$field].field_match])
}{
$value_is_ok(1)
}
}{
# обнуляем все признаки -- пришло не разрешенное имя поля
$name_is_ok(0)
$value_is_ok(0)
$context_is_ok(0)
}
# если с имененм поля, его значением и его контекстом использования всё в порядке, то выдаем (1)
^if($name_is_ok && $context_is_ok && $value_is_ok){$result(1)}{^throw[field_name;bad field name]}
}
}{
^if($exception.type eq "field_name"){
$exception.handled(1)
$result(0)
}
}
}{$result(1)}
}{$result(1)}
##### End of @_form_filds_is_okЕсли этот метод отдает мне "0", то я посылаю пользователья на страницу №404.@main[]
^if(!^_form_filds_is_ok[permited_fields.cfg]){
^MAIN:location[http://mysite.ua/error404/]
}