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; }
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; }
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; }