Ejemplo n.º 1
0
 public function getValues()
 {
     if ($this->hasFilter()) {
         $filter = $this->getFilter();
         $group = new WhereGroup();
         foreach ($filter as $rule) {
             $group->addFilter(new Where($this->getModel()->getDisplayField(), Filter::FILTER_EQUALS, $rule, Query::OP_OR));
         }
         $this->getCollection()->addFilter($group);
     }
     if ($this->hasAdvancedFilter()) {
         $filters = $this->getAdvancedFilter();
         $group = new WhereGroup();
         foreach ($filters as $filter) {
             if ($filter instanceof Where) {
                 $group->addFilter($filter);
             } else {
                 $this->getCollection()->addFilter($filter);
             }
         }
         $this->getCollection()->addFilter($group);
     }
     $this->getCollection()->getQuery()->orderBy = array();
     if ($this->hasOrderBy()) {
         $this->getCollection()->orderBy($this->getOrderBy());
     } else {
         $this->getCollection()->orderBy($this->getModel()->getDisplayField());
     }
     $return = array();
     foreach ($this->getCollection() as $model) {
         $fn = 'get' . ucfirst($model->getDisplayField());
         $return[(string) $model] = $model->{$fn}();
     }
     return $return;
 }
Ejemplo n.º 2
0
 public function getMetaFields($crossReferenceTable, $crossReferenceField, $sortField, $parentField, $filters = array())
 {
     $allFields = array();
     Model::register('admin');
     $metas = new MetaCollection();
     $metas->concatCrossReference($crossReferenceTable, $crossReferenceField);
     $metas->concatField($crossReferenceTable, $sortField);
     if (!empty($filters)) {
         $group = new WhereGroup();
         foreach ($filters as $filter) {
             if ($filter instanceof 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;
 }
Ejemplo n.º 3
0
 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 Join($crossReferenceTable, $crossReferenceTable . '.' . $childField, $this->getModelName() . '.' . $childPk));
         $collection->addFilter(new Where($crossReferenceTable . '.' . $parent, Filter::FILTER_EQUALS, (int) $parentId));
         if ($this->getSortField()) {
             $collection->orderBy($crossReferenceTable . '.' . $this->getSortField());
         }
         if ($this->hasCrossRefConstraints()) {
             $constraints = $this->getCrossRefConstraints();
             $group = new WhereGroup();
             foreach ($constraints as $k => $v) {
                 $group->addFilter(new Where($k, Filter::FILTER_EQUALS, $v));
             }
             $collection->addFilter($group);
         }
         //			echo $collection->getEmulatedSql();
     } else {
         $collection = $this->getCollection();
         $collection->addFilter(new Where($this->getParentName(), Filter::FILTER_EQUALS, (string) $this->_crud->getModel()));
         if ($this->hasAdvancedFilter()) {
             $filters = $this->getAdvancedFilter();
             $group = new WhereGroup();
             foreach ($filters as $filter) {
                 if ($filter instanceof Where) {
                     $group->addFilter($filter);
                 } else {
                     $this->getCollection()->addFilter($filter);
                 }
             }
             $collection->addFilter($group);
         }
         if ($this->getSortField()) {
             $collection->orderBy($this->getSortField());
         }
         //			echo $collection->getEmulatedSql();
     }
     return $collection;
 }