/** * Apply filters for searching pages to an SQL select object. * * Valid filters are "parent", "exhibit", "order", and "topOnly". * * @param Omeka_Db_Select $select * @param array $params */ public function applySearchFilters($select, $params) { parent::applySearchFilters($select, $params); if (isset($params['parent'])) { if (is_numeric($params['parent'])) { $this->filterByParentId($select, $params['parent']); } else { if ($params['parent'] instanceof ExhibitPage) { $parent = $params['parent']; $this->filterByParentId($select, $parent->id); } } } if (isset($params['exhibit'])) { if (is_numeric($params['exhibit'])) { $this->filterByExhibitId($select, $params['exhibit']); } else { if ($params['exhibit'] instanceof Exhibit) { $exhibit = $params['exhibit']; $this->filterByExhibitId($select, $exhibit->id); } } } if (isset($params['order'])) { $this->filterByOrder($select, $params['order']); } if (isset($params['topOnly'])) { $this->filterByTopOnly($select); } if (isset($params['item'])) { $this->filterByItem($select, $params['item']); } }
/** * Use SQL-based low-level permissions checking for exhibit queries. * * @return Omeka_Db_Select */ public function getSelect() { $select = parent::getSelect(); $permissions = new Omeka_Db_Select_PublicPermissions('ExhibitBuilder_Exhibits'); $permissions->apply($select, 'exhibits'); return $select; }
public function getSelect() { $select = parent::getSelect(); $permissions = new Omeka_Db_Select_PublicPermissions('UserProfiles_Profile'); $permissions->apply($select, 'user_profiles_profiles'); return $select; }
public function getSelect() { $select = parent::getSelect(); $permissions = new Omeka_Db_Select_PublicPermissions('NeatlineTime_Timelines'); $permissions->apply($select, 'neatline_time_timelines', null); return $select; }
/** * 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(); parent::applySearchFilters($select, $params); 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; }
/** * Overriding getSelect() to always return the type_name and type_regex * for retrieved elements. * * @return Omeka_Db_Select */ public function getSelect() { $select = parent::getSelect(); $db = $this->getDb(); // Join on the element_sets table to retrieve set name $select->joinLeft(array('element_sets' => $db->ElementSet), 'element_sets.id = elements.element_set_id', array('set_name' => 'element_sets.name')); return $select; }
/** * Add permission check to location queries. * * Since all locations belong to an item we can override this method to join * the items table and add a permission check to the select object. * * @return Omeka_Db_Select */ public function getSelect() { $select = parent::getSelect(); $select->join(array('items' => $this->_db->Item), 'items.id = locations.item_id', array()); $permissions = new Omeka_Db_Select_PublicPermissions('Items'); $permissions->apply($select, 'items'); return $select; }
/** * Get the basic select query for exhibit pages. * * @return Omeka_Db_Select */ public function getSelect() { $select = parent::getSelect(); $request = Zend_Controller_Front::getInstance()->getRequest(); $db = $this->getDb(); $select->join(array('exhibits' => $db->Exhibit), 'exhibits.id = exhibit_pages.exhibit_id', array()); $permissions = new Omeka_Db_Select_PublicPermissions('ExhibitBuilder_Exhibits'); $permissions->apply($select, 'exhibits'); return $select; }
/** * All files should only be retrieved if they join properly on the items * table. * * @return Omeka_Db_Select */ public function getSelect() { $select = parent::getSelect(); $db = $this->getDb(); $select->joinInner(array('items' => $db->Item), 'items.id = files.item_id', array()); $permissions = new Omeka_Db_Select_PublicPermissions('Items'); $permissions->apply($select, 'items'); $select->group('files.id'); return $select; }
public function getSelect() { $select = parent::getSelect(); $request = Zend_Controller_Front::getInstance()->getRequest(); //only show approved comments to api without a proper key if ($request && $request->getControllerName() == 'api') { if (!is_allowed('Commenting_Comment', 'update-approved')) { $select->where('approved = ?', 1); } } return $select; }
/** * Apply custom sorting for tags. * * This also applies the normal, built-in sorting. * * @param Omeka_Db_Select $select * @param string $sortField Sorting field. * @param string $sortDir Sorting direction, suitable for direct * inclusion in SQL (ASC or DESC). */ public function applySorting($select, $sortField, $sortDir) { parent::applySorting($select, $sortField, $sortDir); switch ($sortField) { case 'time': $select->order(array("records_tags.time {$sortDir}", 'tags.name ASC')); break; case 'count': $select->order("tagCount {$sortDir}"); break; default: break; } }
public function applySearchFilters($select, $params) { foreach ($params as $paramName => $paramValue) { if ($paramValue === null || is_string($paramValue) && trim($paramValue) == '') { continue; } switch ($paramName) { case 'contributor': $this->filterByContributor($select, $params['contributor']); break; case 'status': $this->filterByStatus($select, $params['status']); break; } } parent::applySearchFilters($select, $params); }
/** * Left join the expansion tables onto the query. * * @return Omeka_Db_Select $select The modified select. */ public function getSelect() { $select = parent::getSelect(); // Gather expansion tables. $expansions = $this->getExpansionTables(); if (!$expansions) { return $select; } // Left join the expansions. foreach ($expansions as $expansion) { // Get name, alias, and columns. $name = $expansion->getTableName(); $alias = $expansion->getTableAlias(); $cols = $expansion->getColumns(); $select->joinLeft(array($alias => $name), "{$this->getTableAlias()}.id = {$alias}.parent_id", array_diff($cols, array('id'))); } return $select; }
/** * For required profile types, this digs up the types that are incomplete for the current user */ public function getIncompleteProfileTypes() { $user = current_user(); if (!$user) { return false; } $db = $this->getDb(); //need to start with parent's select, since this getSelect filters by public permissions $select = parent::getSelect(); $select->where('required = 1'); $requiredTypes = $this->fetchObjects($select); $incompleteTypes = array(); $profilesTable = $db->getTable('UserProfilesProfile'); foreach ($requiredTypes as $type) { $count = $profilesTable->count(array('type_id' => $type->id)); if ($count == 0) { $incompleteTypes[] = $type; } } return $incompleteTypes; }
/** * This builds a query for returning all the records to index from the * database. * * @param Omeka_Db_Table $table The table to create the SQL for. * @param SolrSearch_Addon_Addon $addon The addon to generate SQL for. * * @return Omeka_Db_Select $select The select statement to execute for the * query. * @author Eric Rochester <*****@*****.**> **/ public function buildSelect($table, $addon) { $select = $table->select()->from($table->getTableName()); if ($addon->hasFlag()) { $this->_addFlag($select, $addon); } return $select; }
/** * Sort blocks by the order column by default. * * @return Omeka_Db_Select */ public function getSelect() { $select = parent::getSelect(); $select->order('exhibit_page_blocks.order'); return $select; }
public function getSelect() { $select = parent::getSelect(); $permissions = new Omeka_Db_Select_PublicPermissions('SimplePages_Page'); $permissions->apply($select, 'simple_pages_pages', 'created_by_user_id', 'is_published'); return $select; }
/** * Enables sorting based on ElementSet,Element field strings. * * @param Omeka_Db_Select $select * @param string $sortField Field to sort on * @param string $sortDir Sorting direction (ASC or DESC) */ public function applySorting($select, $sortField, $sortDir) { parent::applySorting($select, $sortField, $sortDir); $db = $this->getDb(); $fieldData = explode(',', $sortField); if (count($fieldData) == 2) { $element = $db->getTable('Element')->findByElementSetNameAndElementName($fieldData[0], $fieldData[1]); if ($element) { $select->joinLeft(array('et_sort' => $db->ElementText), "et_sort.record_id = collections.id AND et_sort.record_type = 'Collection' AND et_sort.element_id = {$element->id}", array())->group('collections.id')->order(array("IF(ISNULL(et_sort.text), 1, 0) {$sortDir}", "et_sort.text {$sortDir}")); } } }
/** * Get the default select object. * * Automatically join with both Property and Vocabulary to get all the * data necessary to describe a whole relation. * * @return Omeka_Db_Select */ public function getSelect() { $db = $this->getDb(); return parent::getSelect()->join(array('item_relations_properties' => $db->ItemRelationsProperty), 'item_relations_relations.property_id = item_relations_properties.id', array('property_vocabulary_id' => 'vocabulary_id', 'property_local_part' => 'local_part', 'property_label' => 'label', 'property_description' => 'description'))->join(array('item_relations_vocabularies' => $db->ItemRelationsVocabulary), 'item_relations_properties.vocabulary_id = item_relations_vocabularies.id', array('vocabulary_namespace_prefix' => 'namespace_prefix')); }
/** * Get the default select object. * * Automatically sorts the custom vocabulary to the top. * * @return Omeka_Db_Select */ public function getSelect() { return parent::getSelect()->order('custom DESC')->order('name ASC'); }
/** * Get the default select object. * * Automatically join with Vocabulary table to get vocab data for properties * and put custom properties first. * * @return Omeka_Db_Select */ public function getSelect() { return parent::getSelect()->join(array('item_relations_vocabularies' => $this->getDb()->ItemRelationsVocabulary), 'item_relations_properties.vocabulary_id = item_relations_vocabularies.id', array('vocabulary_name' => 'name', 'vocabulary_description' => 'description', 'vocabulary_namespace_prefix' => 'namespace_prefix', 'vocabulary_namespace_uri' => 'namespace_uri'))->order('custom DESC')->order('name ASC')->order('label ASC'); }
/** * This is a kind of simple factory that spits out proper beginnings * of SQL statements when retrieving items * * @return Omeka_Db_Select */ public function getSelect() { $select = parent::getSelect(); $permissions = new Omeka_Db_Select_PublicPermissions('Items'); $permissions->apply($select, 'items'); return $select; }
/** * Order by the order column by default. * * @return Omeka_Db_Select */ public function getSelect() { $select = parent::getSelect(); $select->order('exhibit_block_attachments.order'); return $select; }
/** * @param Omeka_Db_Select * @param array * @return void */ public function applySearchFilters($select, $params) { $alias = $this->getTableAlias(); $boolean = new Omeka_Filter_Boolean(); $genericParams = array(); foreach ($params as $key => $value) { if ($value === null || is_string($value) && trim($value) == '') { continue; } switch ($key) { case 'owner_id': $this->filterByUser($select, $value, 'owner_id'); break; case 'status': switch ($value) { case 'ready': $genericParams['status'] = array(ArchiveFolder_Folder::STATUS_ADDED, ArchiveFolder_Folder::STATUS_RESET, ArchiveFolder_Folder::STATUS_PAUSED, ArchiveFolder_Folder::STATUS_STOPPED, ArchiveFolder_Folder::STATUS_KILLED, ArchiveFolder_Folder::STATUS_COMPLETED); break; case 'processing': $genericParams['status'] = array(ArchiveFolder_Folder::STATUS_QUEUED, ArchiveFolder_Folder::STATUS_PROGRESS, ArchiveFolder_Folder::STATUS_PAUSED); break; default: $genericParams['status'] = $value; break; } break; default: $genericParams[$key] = $value; } } if (!empty($genericParams)) { parent::applySearchFilters($select, $genericParams); } }
/** * @param Omeka_Db_Select * @param array * @return void */ public function applySearchFilters($select, $params) { $alias = $this->getTableAlias(); $boolean = new Omeka_Filter_Boolean(); $genericParams = array(); foreach ($params as $key => $value) { if ($value === null || is_string($value) && trim($value) == '') { continue; } switch ($key) { // Currently, Omeka manage only Item taggings. case 'record': case 'record_id': $this->filterByRecord($select, $value); break; case 'tag': case 'name': $genericParams['name'] = $value; break; case 'status': switch ($value) { case 'moderated': $genericParams['status'] = array('approved', 'rejected'); break; case 'not moderated': $genericParams['status'] = array('proposed', 'allowed'); break; default: $genericParams['status'] = $value; break; } break; case 'user_id': $this->filterByUser($select, $value, 'user_id'); break; case 'added_since': $this->filterBySince($select, $value, 'added'); break; default: $genericParams[$key] = $value; } } if (!empty($genericParams)) { parent::applySearchFilters($select, $genericParams); } // If we returning the data itself, we need to group by the record id. $select->group("{$alias}.id"); }
public function getSelect() { $select = parent::getSelect(); $select->order('order ASC'); return $select; }
/** * Get the last record in a table. * * @param Omeka_Db_Table $table A table. * @return Neatline_AbstractRecord The last record. */ protected function _getLastRow($table) { $records = $table->findAll(); return array_pop($records); }
/** * @param Omeka_Db_Select * @param array * @return void */ public function applySearchFilters($select, $params) { $alias = $this->getTableAlias(); $boolean = new Omeka_Filter_Boolean(); $genericParams = array(); foreach ($params as $key => $value) { if ($value === null || is_string($value) && trim($value) == '') { continue; } switch ($key) { case 'folder': $this->filterByFolder($select, $value); break; case 'record': $this->filterByRecord($select, $value); break; case 'record_type': $this->filterByRecordType($select, $value); break; default: $genericParams[$key] = $value; } } if (!empty($genericParams)) { parent::applySearchFilters($select, $genericParams); } }
/** * @internal Avoid the unnecessary expense of joining if we're just counting * all the tags. */ public function getSelectForCount($params = array()) { if (!$params) { $select = new Omeka_Db_Select(); $db = $this->getDb(); $select->from(array('tags' => $db->Tag), array('COUNT(*)')); } else { $select = parent::getSelectForCount($params); } return $select; }