예제 #1
0
파일: fields.php 프로젝트: vgrish/xblib
 public static function flags($get = null, $int = false)
 {
     static $_flags = null;
     if (is_null($_flags)) {
         $_flags = xbData::entityFlags(array(3 => 'hidden', 2 => 'repeat', 1 => 'required'));
     }
     return xbData::flagsValue($_flags, $get, $int);
 }
예제 #2
0
파일: model.php 프로젝트: vgrish/xblib
 public static function request($fields, $prefix = '', $operation = 'create', $source = null)
 {
     // Статика
     static $freq = null;
     static $fhid = null;
     if (is_null($freq)) {
         $freq = xbDataFields::flagName('required');
     }
     if (is_null($fhid)) {
         $fhid = xbDataFields::flagName('hidden');
     }
     // Инициализация
     $ret = array('values' => array(), 'notset' => array(), 'incorrect' => array(), 'ignored' => array());
     $op = xbData::operation($operation);
     if (!in_array($op, array('create', 'read', 'update'))) {
         return false;
     }
     // Поля
     foreach ($fields as $alias => $field) {
         $got = null;
         if (!is_array($source)) {
             $pa = $prefix . $alias;
             if (array_key_exists($pa, $_POST)) {
                 $got = $_POST[$pa];
             } elseif (array_key_exists($pa, $_GET)) {
                 $got = urldecode($_GET[$pa]);
             }
         } else {
             if (!array_key_exists($alias, $source)) {
                 continue;
             }
             $got = $source[$alias];
         }
         if (!$field['access'][$op] || ($field['flags'] & $fhid) != 0) {
             continue;
         }
         // Проверка обязательности
         $req = ($field['flags'] & $freq) != 0;
         if ($req) {
             if (is_null($got) || empty($got)) {
                 $ret['notset'][] = $alias;
                 continue;
             }
         }
         // Регулярки
         $cor = true;
         if (!is_null($field['regexp'])) {
             if (preg_match($field['regexp'], $got)) {
                 if (!is_null($field['replace'])) {
                     if (!empty($field['replace'])) {
                         $got = preg_replace($field['regexp'], $field['replace'], $got);
                     }
                 }
             } else {
                 $cor = false;
             }
         }
         // Элементы
         if ($cor && is_array($field['elements'])) {
             if (!is_null($got)) {
                 if (!array_key_exists($got, $field['elements'])) {
                     $cor = false;
                 }
             } else {
                 $cor = false;
             }
         }
         // Итог проверок на корректность
         if (!$cor) {
             if ($req) {
                 $ret['incorrect'][] = $alias;
             } else {
                 $ret['ignored'][] = $alias;
             }
             continue;
         }
         // Обработка
         if (!is_null($field['strip'])) {
             $got = preg_replace($field['strip'], '', $got);
         }
         $got = xbData::pack($field['type'], $got);
         $ret['values'][$alias] = $got;
     }
     return $ret;
 }