Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Searches the Digital Library database
- *
- * Note that $SubjectID and $CreatorID will
- * not affect the search if their respective
- * packages are not installed and enabled
- *
- * @param string $SearchQuery
- * @param integer $SearchFlags[optional]
- * @param integer $CollectionID[optional]
- * @param integer $CollectionContentID[optional]
- * @param integer $SubjectID[optional]
- * @param integer $CreatorID[optional]
- * @param integer $FileTypeID[optional]
- * @param integer $MediaTypeID[optional]
- * @param integer $Limit[optional]
- * @param integer $Offset[optional]
- * @return DigitalContent[]
- */
- public function searchDigitalLibrary($SearchQuery, $SearchFlags = SEARCH_DIGITALCONTENT, $CollectionID = 0, $CollectionContentID = 0, $SubjectID = 0, $CreatorID = 0, $FileTypeID = 0, $MediaTypeID = 0, $Limit = CONFIG_CORE_SEARCH_RESULTS_LIMIT, $Offset = 0)
- {
- $arrDigitalContent = array();
- $arrQueries = array();
- if(!($SearchFlags & SEARCH_DIGITALCONTENT))
- {
- return $arrDigitalContent;
- }
- $enabledquery = " AND (";
- if($SearchFlags & SEARCH_ENABLED_DIGITALCONTENT)
- {
- $enabledquery .= "tblDigitalLibrary_Content.Enabled = '1'";
- if($SearchFlags & SEARCH_DISABLED_DIGITALCONTENT)
- {
- $enabledquery .= " OR tblDigitalLibrary_Content.Enabled = '0'";
- }
- }
- else
- {
- $enabledquery = "tblDigitalLibrary_Content.Enabled = '0'";
- }
- $enabledquery .= ")";
- if((is_natural($Offset) && $Offset > 0) && (is_natural($Limit) && $Limit > 0))
- {
- $limitquery = "LIMIT $Offset, $Limit";
- }
- else if(is_natural($Offset) && $Offset > 0)
- {
- $limitquery = "LIMIT $Offset, 4294967295";
- }
- else if(is_natural($Limit) && $Limit > 0)
- {
- $limitquery = "LIMIT $Limit";
- }
- if($FileTypeID && is_natural($FileTypeID))
- {
- // Same enabled query needed, just on a different table.
- $enabledsubquery = str_replace('tblDigitalLibrary_Content', 'tblDigitalLibrary_Files', $enabledquery);
- $filetypequery = " AND EXISTS (SELECT tblDigitalLibrary_Files.ID FROM tblDigitalLibrary_Files WHERE tblDigitalLibrary_Files.ContentID = tblDigitalLibrary_Content.ID AND tblDigitalLibrary_Files.FileTypeID = '$FileTypeID'$enabledsubquery)";
- }
- if($MediaTypeID && is_natural($MediaTypeID))
- {
- $enabledsubquery = str_replace('tblDigitalLibrary_Content', 'tblDigitalLibrary_Files', $enabledquery);
- $mediatypequery = " AND EXISTS (SELECT tblDigitalLibrary_Files.ID FROM tblDigitalLibrary_Files INNER JOIN tblDigitalLibrary_FileTypes ON tblDigitalLibrary_FileTypes.ID = tblDigitalLibrary_Files.FileTypeID WHERE tblDigitalLibrary_Files.ContentID = tblDigitalLibrary_Content.ID AND tblDigitalLibrary_FileTypes.MediaTypeID = '$MediaTypeID'$enabledsubquery)";
- }
- if($SubjectID && is_natural($SubjectID) && defined('PACKAGE_SUBJECTS'))
- {
- $arrIndexSearch['Subject'] = array($SubjectID => NULL);
- }
- else if($CreatorID && is_natural($CreatorID) && defined('PACKAGE_CREATORS'))
- {
- $arrIndexSearch['Creator'] = array($CreatorID => NULL);
- }
- else
- {
- if($CollectionID && is_natural($CollectionID))
- {
- $collectionquery = " AND tblDigitalLibrary_Content.CollectionID = '$CollectionID'";
- }
- if($CollectionContentID && is_natural($CollectionContentID))
- {
- $collectioncontentquery = " AND tblDigitalLibrary_Content.CollectionContentID = '$CollectionContentID'";
- }
- $arrWords = $this->createSearchWordArray($SearchQuery);
- if(!empty($arrWords))
- {
- $i = 0;
- foreach($arrWords as $word)
- {
- $i++;
- if($word{0} == "-")
- {
- $word = encoding_substr($word, 1, encoding_strlen($word) - 1);
- $textquery .= "(tblDigitalLibrary_Content.Title NOT LIKE '%$word%' AND tblDigitalLibrary_Content.Scope NOT LIKE '%$word%' AND tblDigitalLibrary_Content.PhysicalDescription NOT LIKE '%$word%' AND tblDigitalLibrary_Content.Contributor NOT LIKE '%$word%' AND tblDigitalLibrary_Content.Identifier NOT LIKE '%$word%')";
- }
- else
- {
- $textquery .= "(tblDigitalLibrary_Content.Title LIKE '%$word%' OR tblDigitalLibrary_Content.Scope LIKE '%$word%' OR tblDigitalLibrary_Content.PhysicalDescription LIKE '%$word%' OR tblDigitalLibrary_Content.Contributor LIKE '%$word%' OR tblDigitalLibrary_Content.Identifier LIKE '%$word%')";
- }
- if($i < count($arrWords))
- {
- $textquery .= " AND ";
- }
- }
- }
- else
- {
- $textquery = "tblDigitalLibrary_Content.Title LIKE '%%'";
- }
- $wherequery = ($textquery || $mediatypequery || $filetypequery || $collectionquery || $collectioncontentquery || $enabledquery) ? "WHERE $textquery $mediatypequery $filetypequery $collectionquery $collectioncontentquery $enabledquery" : '';
- $arrQueries[] = "SELECT tblDigitalLibrary_Content.* FROM tblDigitalLibrary_Content$joinquery $wherequery ORDER BY tblDigitalLibrary_Content.Title $limitquery";
- if(defined('PACKAGE_SUBJECTS') && ($SearchFlags & SEARCH_SUBJECTS) && ($SearchFlags & SEARCH_RELATED))
- {
- $arrIndexSearch['Subject'] = $this->searchSubjects($SearchQuery);
- }
- if(defined('PACKAGE_CREATORS') && ($SearchFlags & SEARCH_CREATORS) && ($SearchFlags & SEARCH_RELATED))
- {
- $arrIndexSearch['Creator'] = $this->searchCreators($SearchQuery);
- }
- }
- if(!empty($arrIndexSearch))
- {
- foreach($arrIndexSearch as $Type => $arrObjects)
- {
- if(!empty($arrObjects))
- {
- foreach($arrObjects as $ID => $junk)
- {
- $arrQueries[] = "SELECT tblDigitalLibrary_Content.* FROM tblDigitalLibrary_Content JOIN tblDigitalLibrary_{$Type}Index ON tblDigitalLibrary_{$Type}Index.ContentID = tblDigitalLibrary_Content.ID$joinquery WHERE tblDigitalLibrary_{$Type}Index.{$Type}ID = '$ID'$enabledquery$filetypequery$mediatypequery ORDER BY tblDigitalLibrary_Content.Title $limitquery";
- }
- }
- }
- }
- if(!empty($arrQueries))
- {
- foreach($arrQueries as $query)
- {
- if($query)
- {
- $result = $this->db->query($query);
- while($row = $this->db->fetch_array($result))
- {
- $arrDigitalContent[$row['ID']] = New DigitalContent($row);
- }
- }
- }
- }
- return $arrDigitalContent;
- }
Add Comment
Please, Sign In to add comment