/** * Define filters for browse and findBy. * * Available filters are: "tag" or "tags", "public" and "featured". "sort" * also adds specific sorting strategies "alpha" and "recent", but the * normal sorting can also be used. * * @param Omeka_Db_Select $select * @param array $params Key-value array of search parameters * @return Omeka_Db_Select */ public function applySearchFilters($select, $params) { $db = $this->getDb(); foreach ($params as $paramName => $paramValue) { switch ($paramName) { case 'tag': case 'tags': $tags = explode(',', $paramValue); $select->joinInner(array('tg' => $db->RecordsTags), 'tg.record_id = exhibits.id', array()); $select->joinInner(array('t' => $db->Tag), "t.id = tg.tag_id", array()); foreach ($tags as $k => $tag) { $select->where('t.name = ?', trim($tag)); } $select->where("tg.record_type = ? ", array('Exhibit')); break; case 'public': $this->filterByPublic($select, $params['public']); break; case 'range': $this->filterByRange($select, $params['range']); break; case 'featured': $this->filterByFeatured($select, $params['featured']); break; } } return $select; }
public function findPairsForSelectForm(array $options = array()) { $db = $this->getDb(); $subquery = new Omeka_Db_Select(); $subquery->from(array('element_texts' => $db->ElementText), 'id'); $subquery->joinInner(array('elements' => $db->Element), 'elements.id = element_texts.element_id', array()); $subquery->joinInner(array('element_sets' => $db->ElementSet), 'element_sets.id = elements.element_set_id', array()); $subquery->where("element_sets.name = 'Dublin Core'"); $subquery->where("elements.name = 'Title'"); $subquery->where("element_texts.record_type = 'Collection'"); $subquery->where('element_texts.record_id = collections.id'); $subquery->limit(1); $select = $this->getSelectForFindBy($options); $select->joinLeft(array('element_texts' => $db->ElementText), "element_texts.id = ({$subquery})", array()); $select->reset(Zend_Db_Select::COLUMNS); $select->from(array(), array('collections.id', 'element_texts.text')); $select->order('element_texts.text'); $pairs = $db->fetchPairs($select); foreach ($pairs as $collectionId => &$name) { if ($name === null || $name == '') { $name = __('[Untitled] #%s', $collectionId); } else { $name = strip_formatting($name); } } return $pairs; }
/** * Apply default column-based sorting for a table. * * @param Omeka_Db_Select $select * @param string $sortField Field to sort on. * @param string $sortDir Direction to sort. */ public function applySorting($select, $sortField, $sortDir) { if ($sortField == 'volet') { $select->joinInner(array('hierarchy' => 'omeka_hierarchies'), 'items.id = hierarchy.id', array('hierarchy.atom_top_parent_id')); $select->order("hierarchy.atom_top_parent_id {$sortDir}"); return; } if ($sortField == 'guide') { $select->joinInner(array('hierarchy' => 'omeka_hierarchies'), 'items.id = hierarchy.id', array('hierarchy.atom_top_parent_id')); $select->order("hierarchy.order {$sortDir}"); return; } if (empty($sortField) || empty($sortDir)) { return; } if (in_array($sortField, $this->getColumns())) { $alias = $this->getTableAlias(); $select->order("{$alias}.{$sortField} {$sortDir}"); } else { if ($sortField == 'random') { $select->order('RAND()'); } } }