Guest User

Untitled

a guest
Jun 20th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.31 KB | None | 0 0
  1. /**
  2. * Searches the Digital Library database
  3. *
  4. * Note that $SubjectID and $CreatorID will
  5. * not affect the search if their respective
  6. * packages are not installed and enabled
  7. *
  8. * @param string $SearchQuery
  9. * @param integer $SearchFlags[optional]
  10. * @param integer $CollectionID[optional]
  11. * @param integer $CollectionContentID[optional]
  12. * @param integer $SubjectID[optional]
  13. * @param integer $CreatorID[optional]
  14. * @param integer $FileTypeID[optional]
  15. * @param integer $MediaTypeID[optional]
  16. * @param integer $Limit[optional]
  17. * @param integer $Offset[optional]
  18. * @return DigitalContent[]
  19. */
  20. 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)
  21. {
  22. $arrDigitalContent = array();
  23. $arrQueries = array();
  24.  
  25. if(!($SearchFlags & SEARCH_DIGITALCONTENT))
  26. {
  27. return $arrDigitalContent;
  28. }
  29.  
  30. $enabledquery = " AND (";
  31. if($SearchFlags & SEARCH_ENABLED_DIGITALCONTENT)
  32. {
  33. $enabledquery .= "tblDigitalLibrary_Content.Enabled = '1'";
  34.  
  35. if($SearchFlags & SEARCH_DISABLED_DIGITALCONTENT)
  36. {
  37. $enabledquery .= " OR tblDigitalLibrary_Content.Enabled = '0'";
  38. }
  39. }
  40. else
  41. {
  42. $enabledquery = "tblDigitalLibrary_Content.Enabled = '0'";
  43. }
  44. $enabledquery .= ")";
  45.  
  46. if((is_natural($Offset) && $Offset > 0) && (is_natural($Limit) && $Limit > 0))
  47. {
  48. $limitquery = "LIMIT $Offset, $Limit";
  49. }
  50. else if(is_natural($Offset) && $Offset > 0)
  51. {
  52. $limitquery = "LIMIT $Offset, 4294967295";
  53. }
  54. else if(is_natural($Limit) && $Limit > 0)
  55. {
  56. $limitquery = "LIMIT $Limit";
  57. }
  58.  
  59. if($FileTypeID && is_natural($FileTypeID))
  60. {
  61. // Same enabled query needed, just on a different table.
  62. $enabledsubquery = str_replace('tblDigitalLibrary_Content', 'tblDigitalLibrary_Files', $enabledquery);
  63. $filetypequery = " AND EXISTS (SELECT tblDigitalLibrary_Files.ID FROM tblDigitalLibrary_Files WHERE tblDigitalLibrary_Files.ContentID = tblDigitalLibrary_Content.ID AND tblDigitalLibrary_Files.FileTypeID = '$FileTypeID'$enabledsubquery)";
  64. }
  65. if($MediaTypeID && is_natural($MediaTypeID))
  66. {
  67. $enabledsubquery = str_replace('tblDigitalLibrary_Content', 'tblDigitalLibrary_Files', $enabledquery);
  68. $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)";
  69. }
  70.  
  71.  
  72. if($SubjectID && is_natural($SubjectID) && defined('PACKAGE_SUBJECTS'))
  73. {
  74. $arrIndexSearch['Subject'] = array($SubjectID => NULL);
  75. }
  76. else if($CreatorID && is_natural($CreatorID) && defined('PACKAGE_CREATORS'))
  77. {
  78. $arrIndexSearch['Creator'] = array($CreatorID => NULL);
  79. }
  80. else
  81. {
  82. if($CollectionID && is_natural($CollectionID))
  83. {
  84. $collectionquery = " AND tblDigitalLibrary_Content.CollectionID = '$CollectionID'";
  85. }
  86.  
  87. if($CollectionContentID && is_natural($CollectionContentID))
  88. {
  89. $collectioncontentquery = " AND tblDigitalLibrary_Content.CollectionContentID = '$CollectionContentID'";
  90. }
  91.  
  92. $arrWords = $this->createSearchWordArray($SearchQuery);
  93.  
  94. if(!empty($arrWords))
  95. {
  96. $i = 0;
  97. foreach($arrWords as $word)
  98. {
  99. $i++;
  100. if($word{0} == "-")
  101. {
  102. $word = encoding_substr($word, 1, encoding_strlen($word) - 1);
  103. $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%')";
  104. }
  105. else
  106. {
  107. $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%')";
  108. }
  109.  
  110. if($i < count($arrWords))
  111. {
  112. $textquery .= " AND ";
  113. }
  114. }
  115. }
  116. else
  117. {
  118. $textquery = "tblDigitalLibrary_Content.Title LIKE '%%'";
  119. }
  120.  
  121. $wherequery = ($textquery || $mediatypequery || $filetypequery || $collectionquery || $collectioncontentquery || $enabledquery) ? "WHERE $textquery $mediatypequery $filetypequery $collectionquery $collectioncontentquery $enabledquery" : '';
  122.  
  123. $arrQueries[] = "SELECT tblDigitalLibrary_Content.* FROM tblDigitalLibrary_Content$joinquery $wherequery ORDER BY tblDigitalLibrary_Content.Title $limitquery";
  124.  
  125. if(defined('PACKAGE_SUBJECTS') && ($SearchFlags & SEARCH_SUBJECTS) && ($SearchFlags & SEARCH_RELATED))
  126. {
  127. $arrIndexSearch['Subject'] = $this->searchSubjects($SearchQuery);
  128. }
  129.  
  130. if(defined('PACKAGE_CREATORS') && ($SearchFlags & SEARCH_CREATORS) && ($SearchFlags & SEARCH_RELATED))
  131. {
  132. $arrIndexSearch['Creator'] = $this->searchCreators($SearchQuery);
  133. }
  134. }
  135.  
  136. if(!empty($arrIndexSearch))
  137. {
  138. foreach($arrIndexSearch as $Type => $arrObjects)
  139. {
  140. if(!empty($arrObjects))
  141. {
  142. foreach($arrObjects as $ID => $junk)
  143. {
  144. $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";
  145. }
  146. }
  147. }
  148. }
  149.  
  150.  
  151. if(!empty($arrQueries))
  152. {
  153. foreach($arrQueries as $query)
  154. {
  155. if($query)
  156. {
  157. $result = $this->db->query($query);
  158.  
  159. while($row = $this->db->fetch_array($result))
  160. {
  161. $arrDigitalContent[$row['ID']] = New DigitalContent($row);
  162. }
  163. }
  164. }
  165. }
  166.  
  167. return $arrDigitalContent;
  168. }
Add Comment
Please, Sign In to add comment