Exemplo n.º 1
0
 /**
  * @internal helper function
  */
 public function getQueryExpr(Kwf_Model_Interface $model)
 {
     $valuesOrs = array();
     foreach ($this->_searchValues as $column => $value) {
         if (empty($value)) {
             continue;
         }
         $searchWords = preg_split('/[\\s-+,;*]/', $value);
         foreach ($searchWords as $searchWord) {
             $searchWord = trim($searchWord);
             if (empty($searchWord)) {
                 continue;
             }
             if ($column == 'query') {
                 $searchFields = $this->_searchFields;
                 if (in_array('*', $searchFields)) {
                     $searchFields = array_merge($searchFields, $model->getColumns());
                     foreach ($searchFields as $sfk => $sfv) {
                         if ($sfv == '*') {
                             unset($searchFields[$sfk]);
                         }
                         if (substr($sfv, 0, 1) == '!') {
                             unset($searchFields[$sfk]);
                             unset($searchFields[array_search(substr($sfv, 1), $searchFields)]);
                         }
                     }
                 }
                 $ors = array();
                 foreach ($searchFields as $field) {
                     $ors[] = new Kwf_Model_Select_Expr_Like($field, '%' . $searchWord . '%');
                 }
                 $valuesOrs[] = new Kwf_Model_Select_Expr_Or($ors);
             } else {
                 $valuesOrs[] = new Kwf_Model_Select_Expr_Like($column, '%' . $searchWord . '%');
             }
         }
     }
     if ($valuesOrs) {
         return new Kwf_Model_Select_Expr_Or($valuesOrs);
     } else {
         return null;
     }
 }
Exemplo n.º 2
0
 public function preDispatch()
 {
     parent::preDispatch();
     $addColumns = array();
     if (is_array($this->_columns)) {
         $addColumns = $this->_columns;
     }
     $this->_columns = new Kwf_Collection();
     foreach ($addColumns as $k => $column) {
         if (is_array($column)) {
             $columnObject = new Kwf_Grid_Column();
             foreach ($column as $propName => $propValue) {
                 $columnObject->setProperty($propName, $propValue);
             }
             $this->_columns[] = $columnObject;
         } else {
             $this->_columns[] = $column;
         }
     }
     if (!isset($this->_model) && isset($this->_tableName)) {
         $this->setTable(new $this->_tableName());
     }
     if (!isset($this->_model) && isset($this->_table)) {
         $this->setTable($this->_table);
     }
     if (!isset($this->_model) && isset($this->_modelName)) {
         $this->_model = Kwf_Model_Abstract::getInstance($this->_modelName);
     } else {
         if (isset($this->_model) && is_string($this->_model)) {
             $this->_model = Kwf_Model_Abstract::getInstance($this->_model);
         }
     }
     $filters = new Kwf_Controller_Action_Auto_FilterCollection();
     // Abwärtskompatibilität für Filterarray
     if (is_array($this->_filters)) {
         foreach ($this->_filters as $field => $config) {
             $filters->offsetSet($field, $config);
         }
     }
     $this->_filters = $filters;
     $this->_initColumns();
     // Abwärtskompatibilität falls Filterarray in initColumns gesetzt wurden
     if (is_array($this->_filters)) {
         $filters = new Kwf_Controller_Action_Auto_FilterCollection();
         foreach ($this->_filters as $field => $config) {
             $filters->offsetSet($field, $config);
         }
         $this->_filters = $filters;
     }
     $filters = is_array($this->_filters) ? $this->_filters : array();
     if ($this->_getParam('query') && !isset($this->_filters['text'])) {
         $this->_filters['text'] = true;
     }
     foreach ($this->_filters as $filter) {
         if ($this->_model) {
             $filter->setModel($this->_model);
         }
         // Abwärtskompatibilität für Textfilter mit queryFields und querySeparator
         if (!$filter instanceof Kwf_Controller_Action_Auto_Filter_Text) {
             continue;
         }
         if (!$filter->getProperty('queryFields', true)) {
             $queryFields = $this->_queryFields;
             if (!$queryFields) {
                 $queryFields = array();
                 foreach ($this->_columns as $column) {
                     $index = $column->getDataIndex();
                     if (isset($this->_model) && !in_array($index, $this->_model->getColumns())) {
                         continue;
                     }
                     $queryFields[] = $index;
                 }
             }
             $info = $this->_getTableInfo();
             if ($info && $this->_primaryKey && !in_array($this->_primaryKey, $queryFields) && !in_array($info['name'] . '.' . $this->_primaryKey, $queryFields)) {
                 $queryFields[] = $this->_primaryKey;
             }
             $filter->setQueryFields($queryFields);
         }
         if ($this->_querySeparator) {
             $filter->setQuerySeparator($this->_querySeparator);
         }
     }
     if (isset($this->_model) && !isset($this->_primaryKey)) {
         $this->_primaryKey = $this->_model->getPrimaryKey();
     }
     if (isset($this->_model) && $this->_position && !isset($this->_columns[$this->_position]) && in_array($this->_position, $this->_model->getColumns())) {
         $columnObject = new Kwf_Grid_Column($this->_position);
         $columnObject->setHeader(' ')->setWidth(35)->setType('int');
         if (isset($this->_permissions['save']) && $this->_permissions['save']) {
             $columnObject->setEditor('PosField');
         }
         $this->_columns->prepend($columnObject);
         $this->_sortable = false;
         $this->_defaultOrder = $this->_position;
     }
     if (isset($this->_model) && ($info = $this->_getTableInfo())) {
         foreach ($this->_columns as $column) {
             if (!$column->getType()) {
                 $column->setType((string) $this->_model->getColumnType($column->getDataIndex()));
             }
         }
     }
     if ($this->_primaryKey) {
         $primaryFound = false;
         foreach ($this->_columns as $column) {
             if ($column->getDataIndex() == $this->_primaryKey) {
                 $primaryFound = true;
             }
         }
         if (!$primaryFound) {
             //primary key hinzufügen falls er noch nicht in gridColumns existiert
             $columnObject = new Kwf_Grid_Column($this->_primaryKey);
             if (isset($this->_model)) {
                 $columnObject->setType((string) $this->_model->getColumnType($this->_primaryKey));
             } else {
                 // fallback
                 $columnObject->setType('string');
             }
             $this->_columns[] = $columnObject;
         }
     }
     if (!isset($this->_defaultOrder)) {
         $this->_defaultOrder = $this->_columns->first()->getDataIndex();
     }
     if (is_string($this->_defaultOrder)) {
         $this->_defaultOrder = array('field' => $this->_defaultOrder, 'direction' => 'ASC');
     }
     if (method_exists($this, '_getWhereQuery')) {
         throw new Kwf_Exception("_getWhereQuery doesn't exist anymore");
     }
     // Falls Filter einen Default-Wert hat:
     // - GET query-Parameter setzen,
     // - Im JavaScript nach rechts verschieben und Defaultwert setzen
     foreach ($this->_filters as $filter) {
         if ($filter instanceof Kwf_Controller_Action_Auto_Filter_Text) {
             continue;
         }
         $param = $filter->getParamName();
         if ($filter->getDefault() && !$this->_getParam($param)) {
             $this->_setParam($param, $filter->getDefault());
         }
     }
 }