aboutsummaryrefslogtreecommitdiff
path: root/src/SemanticScuttle/Service
diff options
context:
space:
mode:
Diffstat (limited to 'src/SemanticScuttle/Service')
-rw-r--r--src/SemanticScuttle/Service/SearchHistory.php179
1 files changed, 145 insertions, 34 deletions
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);
+ message_die(
+ GENERAL_ERROR, 'Could not delete bookmarks',
+ '', __LINE__, __FILE__, $query, $this->db
+ );
return false;
}
+
+ return true;
}
- 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);
+
+ /**
+ * 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;
}
- function deleteAll() {
+
+
+ /**
+ * Deletes all search history entries.
+ *
+ * @return void
+ */
+ public function deleteAll()
+ {
$query = 'TRUNCATE TABLE `'. $this->getTableName() .'`';
$this->db->sql_query($query);
}