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; }