示例#1
0
 public function getValues()
 {
     if ($this->hasFilter()) {
         $filter = $this->getFilter();
         $group = new Ajde_Filter_WhereGroup();
         foreach ($filter as $rule) {
             $group->addFilter(new Ajde_Filter_Where($this->getModel()->getDisplayField(), Ajde_Filter::FILTER_EQUALS, $rule, Ajde_Query::OP_OR));
         }
         $this->getCollection()->addFilter($group);
     }
     if ($this->hasAdvancedFilter()) {
         $filters = $this->getAdvancedFilter();
         $group = new Ajde_Filter_WhereGroup();
         foreach ($filters as $filter) {
             if ($filter instanceof Ajde_Filter_Where) {
                 $group->addFilter($filter);
             } else {
                 $this->getCollection()->addFilter($filter);
             }
         }
         $this->getCollection()->addFilter($group);
     }
     $this->getCollection()->orderBy($this->getModel()->getDisplayField());
     $return = array();
     foreach ($this->getCollection() as $model) {
         $return[(string) $model] = $model->get($model->getDisplayField());
     }
     return $return;
 }
示例#2
0
 public function searchJson()
 {
     $q = Ajde::app()->getRequest()->getParam('query');
     $collection = new NodeCollection();
     // split search terms
     $terms = explode(' ', $q);
     // search on node fields
     $searchGroup = new Ajde_Filter_WhereGroup(Ajde_Query::OP_OR);
     foreach ($terms as $term) {
         $termGroup = $collection->getTextFilterGroup($term, Ajde_Query::OP_OR);
         if ($termGroup !== false) {
             $searchGroup->addFilter($termGroup);
         }
     }
     $collection->addFilter($searchGroup);
     // search on meta search
     $collection->addFilter(new Ajde_Filter_LeftJoin('node_meta', 'node_meta.node', 'node.id'));
     $searchGroup = new Ajde_Filter_WhereGroup(Ajde_Query::OP_OR);
     foreach ($terms as $term) {
         $searchGroup->addFilter(new Ajde_Filter_Where('node_meta.value', Ajde_Filter::FILTER_LIKE, '%' . $term . '%', Ajde_Query::OP_OR));
     }
     $collection->addFilter($searchGroup);
     $collection->getQuery()->addGroupBy('node.id');
     // join in nodetype info
     $collection->joinNodetype();
     $collection->getQuery()->addSelect('nodetype.name AS nodetype_name');
     $collection->getQuery()->addSelect('nodetype.icon AS nodetype_icon');
     $suggestions = [];
     foreach ($collection as $node) {
         /* @var $node NodeModel */
         $suggestions[] = ['value' => "<i class='" . $node->get('nodetype_icon') . "'></i> " . $node->displayField(), 'data' => $node->getPK()];
     }
     return ['query' => $q, 'suggestions' => $suggestions];
 }
示例#3
0
 public function filterByMetaValues($meta, $values)
 {
     $lookupField = 'meta.id';
     if (!is_numeric($meta)) {
         $lookupField = 'meta.name';
         $meta = str_replace('_', ' ', $meta);
     }
     $whereGroup = new Ajde_Filter_WhereGroup();
     foreach ($values as $value) {
         $metaWhereGroup = new Ajde_Filter_WhereGroup(Ajde_Query::OP_OR);
         $metaWhereGroup->addFilter(new Ajde_Filter_Where($lookupField, Ajde_Filter::FILTER_EQUALS, $meta));
         $metaWhereGroup->addFilter(new Ajde_Filter_Where('node_meta.value', Ajde_Filter::FILTER_EQUALS, $value));
         $whereGroup->addFilter($metaWhereGroup);
     }
     $this->addFilter($whereGroup);
     $this->joinMeta();
     return $this;
 }
示例#4
0
文件: Meta.php 项目: nabble/ajde
 public function getMetaFields($crossReferenceTable, $crossReferenceField, $sortField, $parentField, $filters = [])
 {
     $allFields = [];
     $metas = new MetaCollection();
     $metas->concatCrossReference($crossReferenceTable, $crossReferenceField);
     $metas->concatField($crossReferenceTable, $sortField);
     if (!empty($filters)) {
         $group = new Ajde_Filter_WhereGroup();
         foreach ($filters as $filter) {
             if ($filter instanceof Ajde_Filter_Where) {
                 $group->addFilter($filter);
             } else {
                 $metas->addFilter($filter);
             }
         }
         $metas->addFilter($group);
     }
     foreach ($metas as $meta) {
         $metaField = $this->getType($meta->get('type'));
         $fieldOptions = $metaField->getMetaField($meta);
         // add show only when
         foreach (explode(',', $meta->get($crossReferenceField)) as $parentValue) {
             $fieldOptions->addShowOnlyWhen($parentField, $parentValue);
         }
         // add sorting
         foreach (explode(',', $meta->get($sortField)) as $parentValue) {
             $fieldOptions->addDynamicSort($parentField, $parentValue);
         }
         $allFields['meta_' . $meta->getPK()] = $fieldOptions;
     }
     return $allFields;
 }
示例#5
0
文件: Multiple.php 项目: nabble/ajde
 public function getChildren()
 {
     if ($this->hasCrossReferenceTable()) {
         $childPk = $this->getModel()->getTable()->getPK();
         $parent = (string) $this->getCrud()->getModel()->getTable();
         $parentId = $this->getCrud()->getModel()->getPK();
         $crossReferenceTable = $this->getCrossReferenceTable();
         $childField = $this->has('childField') ? $this->get('childField') : $this->getModelName();
         // TODO: implement $this->getAdvancedFilter() filters in subquery
         $collection = $this->getCollection();
         $collection->reset();
         //$subQuery = new Ajde_Db_Function('(SELECT ' . $this->getModelName() . ' FROM ' . $crossReferenceTable . ' WHERE ' . $parent . ' = ' . (integer) $parentId . $orderBy . ')');
         //$collection->addFilter(new Ajde_Filter_Where($childPk, Ajde_Filter::FILTER_IN, $subQuery));
         $collection->getQuery()->addSelect($crossReferenceTable . '.id AS crossId');
         $collection->addFilter(new Ajde_Filter_Join($crossReferenceTable, $crossReferenceTable . '.' . $childField, $this->getModelName() . '.' . $childPk));
         $collection->addFilter(new Ajde_Filter_Where($crossReferenceTable . '.' . $parent, Ajde_Filter::FILTER_EQUALS, (int) $parentId));
         if ($this->getSortField()) {
             $collection->orderBy($crossReferenceTable . '.' . $this->getSortField());
         }
         if ($this->hasCrossRefConstraints()) {
             $constraints = $this->getCrossRefConstraints();
             $group = new Ajde_Filter_WhereGroup();
             foreach ($constraints as $k => $v) {
                 $group->addFilter(new Ajde_Filter_Where($k, Ajde_Filter::FILTER_EQUALS, $v));
             }
             $collection->addFilter($group);
         }
         //			echo $collection->getEmulatedSql();
     } else {
         $collection = $this->getCollection();
         $collection->addFilter(new Ajde_Filter_Where($this->getParentName(), Ajde_Filter::FILTER_EQUALS, (string) $this->_crud->getModel()));
         if ($this->hasAdvancedFilter()) {
             $filters = $this->getAdvancedFilter();
             $group = new Ajde_Filter_WhereGroup();
             foreach ($filters as $filter) {
                 if ($filter instanceof Ajde_Filter_Where) {
                     $group->addFilter($filter);
                 } else {
                     $this->getCollection()->addFilter($filter);
                 }
             }
             $collection->addFilter($group);
         }
         if ($this->getSortField()) {
             $collection->orderBy($this->getSortField());
         }
         //			echo $collection->getEmulatedSql();
     }
     return $collection;
 }
示例#6
0
 public function addTextFilter($text)
 {
     $searchFilter = new Ajde_Filter_WhereGroup();
     $fieldOptions = $this->getTable()->getFieldProperties();
     foreach ($fieldOptions as $fieldName => $fieldProperties) {
         switch ($fieldProperties['type']) {
             case Ajde_Db::FIELD_TYPE_TEXT:
             case Ajde_Db::FIELD_TYPE_ENUM:
                 $searchFilter->addFilter(new Ajde_Filter_Where($fieldName, Ajde_Filter::FILTER_LIKE, '%' . $text . '%', Ajde_Query::OP_OR));
                 break;
             default:
                 break;
         }
     }
     $this->addFilter($searchFilter);
 }