Exemple #1
0
 public static function correct($data)
 {
     if (!is_array($data)) {
         return false;
     }
     if (!isset($data['table']) || !isset($data['fields'])) {
         return false;
     }
     if (!is_array($data['fields'])) {
         return false;
     }
     $ret = array('table' => $data['table'], 'primary' => null, 'fields' => array(), 'add' => array('table' => '', 'field' => '', 'ids' => array(), 'aliases' => array()), 'unique' => null, 'indexes' => null);
     // Поправка полей
     foreach ($data['fields'] as $alias => $field) {
         $ret['fields'][$alias] = xbDataFields::correct($field, $alias);
         if ($ret['fields'][$alias]['primary']) {
             $ret['primary'] = $alias;
         }
         // Получение доступа
         $IV = $ret['fields'][$alias]['access'];
         $ret['fields'][$alias]['access'] = array();
         foreach (array('create', 'read', 'update', 'delete') as $i => $k) {
             $ret['fields'][$alias]['access'][$k] = ($IV & 1 << $i) != 0;
         }
         // Кэширование данных дополнительных полей
         $ret['fields'][$alias]['add'] = intval($ret['fields'][$alias]['id']) != 0;
         if (intval($ret['fields'][$alias]['add'])) {
             $fid = $ret['fields'][$alias]['id'];
             $ret['add']['ids'][$fid] = $alias;
             $ret['add']['aliases'][$alias] = $fid;
         }
     }
     // Поправка уникальных ключей
     if (isset($data['unique'])) {
         if (is_array($data['unique'])) {
             foreach ($data['unique'] as $alias => $field) {
                 $v = is_array($field) ? $field : explode(',', $field);
                 foreach ($v as $key) {
                     if (isset($ret['fields'][$key])) {
                         if (!is_array($ret['unique'])) {
                             $ret['unique'] = array();
                         }
                         $ret['unique'][$alias][] = $key;
                     }
                 }
             }
         }
     }
     // Поправка индексов
     if (isset($data['indexes'])) {
         $v = is_array($data['indexes']) ? $data['indexes'] : explode(',', $data['indexes']);
         foreach ($v as $key) {
             if (isset($ret['fields'][$key])) {
                 if (!is_array($ret['indexes'])) {
                     $ret['indexes'] = array();
                 }
                 $ret['indexes'][] = $key;
             }
         }
     }
     // Проверяем таблицы
     $add = false;
     if (is_array($data['add'])) {
         if (isset($data['add']['field'])) {
             $t = $ret['table'];
             $ret['add']['field'] = $data['add']['field'];
             $ret['add']['table'] = isset($data['add']['table']) ? $data['add']['table'] : "{$t}" . "_values";
             $add = true;
         }
     }
     if (!$add) {
         $ret['add'] = null;
     }
     return $ret;
 }