yakamara / redaxo_xform

XForm für redaxo4
22 stars 21 forks source link

Manager: select_sql Feld erscheint nicht als Such-/Filtermöglichkeit #316

Open dtpop opened 9 years ago

dtpop commented 9 years ago

Wenn ein Feld als select_sql Feld angelegt wird, so kann man nach diesem Feldinhalt in der Liste nicht suchen, obwohl das Feld "als Suchfeld aufnehmen" markiert wurde.

class.xform.select_sql.inc.php um diesen Code ergänzen:

    public static function getSearchField($params)
    {
       $qry = $params['field']->getElement('query');
       $sql = new rex_sql();
       $sql->setQuery($qry);
       $res = $sql->getArray();

       $options = array('' => '---');

       foreach ($res as $l) {
          $options[$l['id']] = $l['name'];
       }

        $params['searchForm']->setValueField('select', array(
            'name' => $params['field']->getName(),
            'label' => $params['field']->getLabel(),
            'options' => $options
        ));

    }

    public static function getSearchFilter($params)
    {
        $value = $params['value'];
        $field =  $params['field']->getName();

        if ($value == '(empty)') {
            return ' (`' . mysql_real_escape_string($field) . '` = "" or `' . mysql_real_escape_string($field) . '` IS NULL) ';

        } elseif ($value == '!(empty)') {
            return ' (`' . mysql_real_escape_string($field) . '` <> "" and `' . mysql_real_escape_string($field) . '` IS NOT NULL) ';

        }

        $pos = strpos($value, '*');
        if ($pos !== false) {
            $value = str_replace('%', '\%', $value);
            $value = str_replace('*', '%', $value);
            return ' `' . mysql_real_escape_string($field) . "` LIKE  '" . mysql_real_escape_string($value) . "'";
        } else {
            return ' `' . mysql_real_escape_string($field) . "` =  '" . mysql_real_escape_string($value) . "'";
        }

    }

Hat mir geholfen. Wäre dankbar, wenn so etwas eingebaut werden könnte.