diff --git a/src/SemanticScuttle/Service/SearchHistory.php b/src/SemanticScuttle/Service/SearchHistory.php index df9b256..4947bf7 100644 --- a/src/SemanticScuttle/Service/SearchHistory.php +++ b/src/SemanticScuttle/Service/SearchHistory.php @@ -26,7 +26,9 @@ */ class SemanticScuttle_Service_SearchHistory extends SemanticScuttle_DbService { - var $sizeSearchHistory; + public $sizeSearchHistory; + + /** * Returns the single service instance @@ -44,109 +46,218 @@ class SemanticScuttle_Service_SearchHistory extends SemanticScuttle_DbService return $instance; } + + + /** + * Creates a new instance + * + * @param DB $db Database object + */ public function __construct($db) { $this->db = $db; $this->tablename = $GLOBALS['tableprefix'] .'searchhistory'; - if(isset($GLOBALS['sizeSearchHistory'])) { + if (isset($GLOBALS['sizeSearchHistory'])) { $this->sizeSearchHistory = $GLOBALS['sizeSearchHistory']; } else { $this->sizeSearchHistory = 10; } } - function addSearch($terms, $range, $nbResults, $uId=0) { - if(strlen($terms) == 0) { + + + /** + * Adds a new search to the search history + * + * @param string $terms Search terms separated by spaces + * @param string $range - 'all' - search was in all bookmarks + * - 'watchlist' - searched in watchlist + * - any username to show that the search happened + * in his own bookmarks. + * @param integer $nbResults Number of search result rows + * @param integer $uId ID of user that searched + * + * @return boolean True if it has been added, false if not + */ + public function addSearch($terms, $range, $nbResults, $uId = 0) + { + if (strlen($terms) == 0) { return false; } $datetime = gmdate('Y-m-d H:i:s', time()); //Insert values - $values = array('shTerms'=>$terms, 'shRange'=>$range, 'shDatetime'=>$datetime, 'shNbResults'=>$nbResults, 'uId'=>$uId); - $sql = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values); + $values = array( + 'shTerms' => $terms, + 'shRange' => $range, + 'shDatetime' => $datetime, + 'shNbResults' => $nbResults, + 'uId' => $uId + ); + $sql = 'INSERT INTO ' . $this->getTableName() + . ' ' . $this->db->sql_build_array('INSERT', $values); + $this->db->sql_transaction('begin'); - if (!($dbresult = & $this->db->sql_query($sql))) { + if (!($dbresult = $this->db->sql_query($sql))) { $this->db->sql_transaction('rollback'); - message_die(GENERAL_ERROR, 'Could not insert search history', '', __LINE__, __FILE__, $sql, $this->db); + message_die( + GENERAL_ERROR, 'Could not insert search history', + '', __LINE__, __FILE__, $sql, $this->db + ); return false; } - if($this->sizeSearchHistory != -1 && - $this->countSearches() > $this->sizeSearchHistory) { + if ($this->sizeSearchHistory != -1 + && $this->countSearches() > $this->sizeSearchHistory + ) { $this->deleteOldestSearch(); } + + return true; } - function getAllSearches($range = NULL, $uId = NULL, $nb = NULL, $start = NULL, $distinct = false, $withResults = false) { - $sql = 'SELECT DISTINCT(shTerms), shId, shRange, shNbResults, shDatetime, uId'; + + + /** + * Returns searches with the given features. + * + * @param string $range - 'all' - search was in all bookmarks + * - 'watchlist' - searched in watchlist + * - any username to show that the search happened + * in his own bookmarks. + * @param integer $uId Id of the user who searched. 0 for anonymous users + * @param integer $nb Number of bookmarks to retrieve (paging) + * @param integer $start Number of bookmark to begin with (paging) + * @param boolean $distinct If the search terms shall be distinct + * @param boolean $withResults Only return searches that had at least one result + * + * @return array Array of search history database rows + */ + public function getAllSearches( + $range = null, $uId = null, $nb = null, + $start = null, $distinct = false, $withResults = false + ) { + $sql = 'SELECT DISTINCT(shTerms),' + . ' shId, shRange, shNbResults, shDatetime, uId'; $sql.= ' FROM '. $this->getTableName(); $sql.= ' WHERE 1=1'; - if($range != NULL) { + if ($range != null) { $sql.= ' AND shRange = "'.$range.'"'; } else { $sql.= ' AND shRange = "all"'; } - if($uId != NULL) { + if ($uId != null) { $sql.= ' AND uId = '.$uId; } - if($withResults = true) { + if ($withResults = true) { $sql.= ' AND shNbResults > 0'; } - if($distinct) { + if ($distinct) { $sql.= ' GROUP BY shTerms'; } $sql.= ' ORDER BY shId DESC'; - if (!($dbresult = & $this->db->sql_query_limit($sql, $nb, $start))) { - message_die(GENERAL_ERROR, 'Could not get searches', '', __LINE__, __FILE__, $sql, $this->db); + if (!($dbresult = $this->db->sql_query_limit($sql, $nb, $start))) { + message_die( + GENERAL_ERROR, 'Could not get searches', + '', __LINE__, __FILE__, $sql, $this->db + ); return false; } $searches = array(); - while ($row = & $this->db->sql_fetchrow($dbresult)) { + while ($row = $this->db->sql_fetchrow($dbresult)) { $searches[] = $row; } $this->db->sql_freeresult($dbresult); return $searches; } - function countSearches() { + + + /** + * Counts the number of searches that have been made in total. + * + * @return integer Number of searches + */ + public function countSearches() + { $sql = 'SELECT COUNT(*) AS `total` FROM '. $this->getTableName(); - if (!($dbresult = & $this->db->sql_query($sql)) || (!($row = & $this->db->sql_fetchrow($dbresult)))) { - message_die(GENERAL_ERROR, 'Could not get total searches', '', __LINE__, __FILE__, $sql, $this->db); + if (!($dbresult = $this->db->sql_query($sql)) + || (!($row = & $this->db->sql_fetchrow($dbresult))) + ) { + message_die( + GENERAL_ERROR, 'Could not get total searches', + '', __LINE__, __FILE__, $sql, $this->db + ); return false; } $this->db->sql_freeresult($dbresult); return $row['total']; } - /* This function allows to limit the number of saved searches - by deleting the oldest one */ - function deleteOldestSearch() { + + + /** + * This function allows to limit the number of saved searches + * by deleting the oldest one + * + * @return boolean True when all went well, false in case of an error + */ + public function deleteOldestSearch() + { $sql = 'DELETE FROM '.$this->getTableName(); - $sql.= ' ORDER BY shId ASC LIMIT 1'; // warning: here the limit is important + // warning: here the limit is important + $sql .= ' ORDER BY shId ASC LIMIT 1'; $this->db->sql_transaction('begin'); - if (!($dbresult = & $this->db->sql_query($sql))) { + if (!($dbresult = $this->db->sql_query($sql))) { $this->db->sql_transaction('rollback'); - message_die(GENERAL_ERROR, 'Could not delete bookmarks', '', __LINE__, __FILE__, $query, $this->db); - return false; - } - } - - function deleteSearchHistoryForUser($uId) { - $query = 'DELETE FROM '. $this->getTableName() .' WHERE uId = '. intval($uId); - - if (!($dbresult = & $this->db->sql_query($query))) { - message_die(GENERAL_ERROR, 'Could not delete search history', '', - __LINE__, __FILE__, $query, $this->db); + message_die( + GENERAL_ERROR, 'Could not delete bookmarks', + '', __LINE__, __FILE__, $query, $this->db + ); return false; } return true; } - function deleteAll() { + + + /** + * Deletes all search history entries that have been made by the user + * with the given ID. + * + * @param integer $uId ID of the user + * + * @return boolean True when all went well, false in case of an error + */ + public function deleteSearchHistoryForUser($uId) + { + $query = 'DELETE FROM '. $this->getTableName() + . ' WHERE uId = ' . intval($uId); + + if (!($dbresult = $this->db->sql_query($query))) { + message_die( + GENERAL_ERROR, 'Could not delete search history', '', + __LINE__, __FILE__, $query, $this->db + ); + return false; + } + + return true; + } + + + + /** + * Deletes all search history entries. + * + * @return void + */ + public function deleteAll() + { $query = 'TRUNCATE TABLE `'. $this->getTableName() .'`'; $this->db->sql_query($query); }