public function schema_fields($data = false) { if ($data) { if (is_callable($data)) { $this->fields_data = call_user_func($data); } elseif (is_array($data)) { $this->fields_data = array_replace_recursive($this->fields_data, $data); } elseif (is_string($data)) { $module = $data; $method = 'fields'; if ($m = Core_Regexps::match_with_results('{^(.+)::(.+)$}', $data)) { $module = trim($m[1]); $method = trim($m[2]); } $this->schema_module = $module; if (strpos($module, '.') > 0) { Core::load($module); $module = str_replace('.', '_', $module); } $this->fields_data = call_user_func(array($module, $method)); } foreach ($this->fields_data as $field => $data) { if (isset($data['type']) && $data['type'] == 'serial' || isset($data['sqltype']) && $data['sqltype'] == 'serial') { $this->key($field); break; } } $this->columns(CMS_Fields::fields_to_columns($this->fields_data)); return $this; } else { if ($this->fields_data === false) { $this->fields_data = array(); } return $this->fields_data; } }