public function __construct($model) { parent::__construct($model); $this->_model = $model; $this->_modelInfo = $this->_model->info(); $this->checkForRequiredColumn(); }
public function setFilters($filters) { $this->cleanForm(); foreach ($filters as $key => &$filterData) { if (!is_array($filterData)) { $filterData = array('label' => $filterData); if ($this->_table !== null) { $reference = $this->_table->info(Centurion_Db_Table_Abstract::REFERENCE_MAP); if (isset($reference[$key])) { $refTable = Centurion_Db::getSingletonByClassName($reference[$key]['refTableClass']); $rowset = $refTable->all(); $data = array(); foreach ($rowset as $row) { $data[] = (string) $row; } $filterData['type'] = Centurion_Controller_CRUD::FILTER_TYPE_CHECKBOX; $filterData['data'] = $data; } } } if (isset($filterData['label'])) { $label = $filterData['label']; } else { $label = ''; } $checkboxType = 'multiCheckbox'; $element = null; if (!isset($filterData['type'])) { $filterData['type'] = Centurion_Controller_CRUD::FILTER_TYPE_TEXT; } if (!isset($filterData['column'])) { $filterData['column'] = $key; } if (!isset($filterData['behavior'])) { $filterData['behavior'] = Centurion_Controller_CRUD::FILTER_BEHAVIOR_CONTAINS; } switch ($filterData['type']) { case Centurion_Controller_CRUD::FILTER_TYPE_RADIO: $checkboxType = 'radio'; case Centurion_Controller_CRUD::FILTER_TYPE_SELECT: if ($checkboxType === 'multiCheckbox') { $checkboxType = 'select'; } case Centurion_Controller_CRUD::FILTER_TYPE_CHECKBOX: $element = $this->createElement($checkboxType, $key, array('label' => $label)); if (!isset($filterData['data'])) { $manyDependentTables = $this->_table->info('manyDependentTables'); if (isset($manyDependentTables[$key])) { $refRowSet = Centurion_Db::getSingletonByClassName($manyDependentTables[$key]['refTableClass'])->fetchAll(); $filterData['data'] = array(); foreach ($refRowSet as $refRow) { $filterData['data'][$refRow->id] = $refRow->__toString(); } asort($filterData['data']); } } $element->addMultiOptions($filterData['data']); $element->setSeparator(''); if ($checkboxType === 'multiCheckbox') { $element->setIsArray(true); } break; case Centurion_Controller_CRUD::FILTER_TYPE_TEXT: case Centurion_Controller_CRUD::FILTER_TYPE_NUMERIC: $element = $this->createElement('text', $key, array('label' => $label)); break; case Centurion_Controller_CRUD::FILTER_TYPE_DATE: $element = $this->createElement('text', $key, array('label' => $label, 'class' => 'datepicker')); break; case Centurion_Controller_CRUD::FILTER_TYPE_BETWEEN_DATE: case Centurion_Controller_CRUD::FILTER_TYPE_BETWEEN_DATETIME: $form = new self(); if ($filterData['type'] == Centurion_Controller_CRUD::FILTER_TYPE_BETWEEN_DATETIME) { $class = 'field-datetimepicker'; } else { $class = 'datepicker'; } $element = $form->createElement('text', 'gt', array('class' => $class, 'belongsTo' => $key, 'label' => $this->_translate('From'), 'value' => '26/08/11 03:00')); $form->addElement($element, 'gt'); $element = $form->createElement('text', 'lt', array('class' => $class, 'belongsTo' => $key, 'label' => $this->_translate('To'), 'value' => '26/08/11 03:00')); $form->addElement($element, 'lt'); $element = null; $form->setDescription($label); $this->addSubForm($form, $key); $this->getSubForm($key)->setDecorators($this->defaultDisplayGroupDecorators); $form->getElement('lt')->setDecorators($this->defaultElementDecoratorsInDisplayGroup); $form->getElement('gt')->setDecorators($this->defaultElementDecoratorsInDisplayGroup); // $this->addDisplayGroup(array('lt', 'gt'), $key, array('description' => $label)); break; } if (null !== $element) { $this->addElement($element, $key); } } $this->_filters = $filters; }