private function _add($ds) { $data = $this->request->post(); try { $type = $data['type']; unset($data['type']); $field = DataSource_Hybrid_Field::factory($type, $data); $field_id = DataSource_Hybrid_Field_Factory::create_field($ds->record(), $field); } catch (Validation_Exception $e) { Session::instance()->set('post_data', $this->request->post()); Messages::errors($e->errors('validation')); $this->go_back(); } catch (Kohana_Exception $e) { Messages::errors($e->getMessage()); $this->go_back(); } if (!$field_id) { $this->go_back(); } Session::instance()->delete('post_data'); if ($this->request->post('save_and_create') !== NULL) { $this->go(Route::get('datasources')->uri(array('controller' => 'field', 'directory' => 'hybrid', 'action' => 'add', 'id' => $ds->id()))); } else { $this->go(Route::get('datasources')->uri(array('directory' => 'hybrid', 'controller' => 'field', 'action' => 'edit', 'id' => $field_id))); } }
/** * Получение списка объектов доступных в системе полей. * Используется в момент создания поля. * * @return array array([TYPE] => [DataSource_Hybrid_Field], ... ) */ public static function get_empty_fields() { $filed_types = self::types(); $fields = array(); foreach ($filed_types as $type => $title) { if (is_array($title)) { foreach ($title as $type => $title) { $fields[$type] = DataSource_Hybrid_Field::factory($type); } } else { $fields[$type] = DataSource_Hybrid_Field::factory($type); } } return $fields; }
<?php $fields = DataSource_Hybrid_Field_Factory::get_section_fields($ds_id); $order_fields = array(); foreach ($doc_order as $data) { $order_fields[key($data)] = $data[key($data)]; } $selected_fields = array(); $available_fields = array(); $fields[] = DataSource_Hybrid_Field::factory('primitive_string', array('family' => DataSource_Hybrid_Field::FAMILY_PRIMITIVE, 'name' => 'header', 'id' => 'header', 'header' => __('Header'))); $fields[] = DataSource_Hybrid_Field::factory('primitive_integer', array('family' => DataSource_Hybrid_Field::FAMILY_PRIMITIVE, 'name' => 'id', 'id' => 'id', 'header' => __('ID'))); $fields[] = DataSource_Hybrid_Field::factory('primitive_datetime', array('family' => DataSource_Hybrid_Field::FAMILY_PRIMITIVE, 'name' => 'created_on', 'id' => 'created_on', 'header' => __('Created on'))); foreach ($fields as $field) { if (!$field->is_sortable()) { continue; } if (!isset($order_fields[$field->id])) { $available_fields[$field->id] = $field->header; } else { $ids[$field->id] = $field->header; } } foreach ($doc_order as $data) { if (isset($ids[key($data)])) { $selected_fields[key($data)] = ($data[key($data)] == Model_Widget_Decorator::ORDER_ASC ? '+' : '-') . ' ' . $ids[key($data)]; } } ?> <script> $(function() { var sf = $('#sf'),
/** * Преобразование массива в объект поля * * @see DataSource_Hybrid_Field_Factory::get_fields() * * @param array $array * @return null|\DataSource_Hybrid_Field * @throws Kohana_Exception */ public static function get_field_from_array(array $array = NULL) { if (empty($array) or !isset($array['type'])) { return NULL; } $class_name = 'DataSource_Hybrid_Field_' . $array['type']; if (!class_exists($class_name)) { return NULL; } if (isset($array['props'])) { $props = Kohana::unserialize($array['props']); unset($array['props']); if (is_array($props)) { $array = Arr::merge($array, $props); } } $result = DataSource_Hybrid_Field::factory($array['type'], $array); $result->set_id(Arr::get($array, 'id')); $result->set_ds(Arr::get($array, 'ds_id')); return $result; }