/**
  * 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;
 }
Beispiel #6
0
 /**
  * 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;
 }
Beispiel #9
0
 /**
  * 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;
 }
Beispiel #11
0
 /**
  * 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;
 }
Beispiel #18
0
 /**
  * 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');
 }
Beispiel #22
0
 /**
  * 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;
 }
Beispiel #24
0
 /**
  * @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);
 }
Beispiel #28
0
 /**
  * @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);
     }
 }
Beispiel #29
0
 /**
  * @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;
 }