]> 91.132.146.200 Git - insipid.git/commitdiff
search.
authorBanana <banana@optimus.de>
Wed, 4 Jan 2017 14:25:58 +0000 (15:25 +0100)
committerBanana <banana@optimus.de>
Wed, 4 Jan 2017 14:25:58 +0000 (15:25 +0100)
webroot/lib/management.class.php
webroot/lib/summoner.class.php
webroot/view/home.inc.php
webroot/view/overview.inc.php

index d1a45e34a043c5dc67aef95f095f49b012e4c6ad..c7c148e6e89b955073af5a47a9eb96a02a1b8929 100644 (file)
@@ -81,7 +81,7 @@ class Management {
      * return the latest addded links
      * @param number $limit
      */
-    public function latest($limit=5) {
+    public function latestLinks($limit=5) {
         $ret = array();
 
         $queryStr = "SELECT * FROM `".DB_PREFIX."_link` WHERE `status` = 2 ORDER BY `created` DESC";
@@ -173,7 +173,11 @@ class Management {
         return $ret;
     }
 
-    public function all($limit=false) {
+    /**
+     * return all links and Info we have from the combined view
+     * @param int $limit
+     */
+    public function links($limit=false) {
         $ret = array();
 
         $queryStr = "SELECT * FROM `".DB_PREFIX."_combined`
@@ -187,6 +191,46 @@ class Management {
 
         return $ret;
     }
+
+    /**
+     * for simpler management we have the search data in a seperate column
+     * it is not fancy or even technical nice but it damn works
+     */
+    private function _updateSearchIndex() {
+        $allLinks = array();
+        $queryStr = "SELECT hash FROM `".DB_PREFIX."_link`";
+        $query = $this->DB->query($queryStr);
+        if(!empty($query) && $query->num_rows > 0) {
+            $allLinks = $query->fetch_all(MYSQLI_ASSOC);
+        }
+
+        if(!empty($allLinks)) {
+            foreach($allLinks as $link) {
+                $LinkObj = new Link($this->DB);
+                $l = $LinkObj->load($link['hash']);
+
+                $searchStr = $l['title'];
+                $searchStr .= ' '.$l['description'];
+                foreach($l['tags'] as $t) {
+                    $searchStr .= ' '.$t['tag'];
+                }
+                foreach($l['categories'] as $c) {
+                    $searchStr .= ' '.$c['category'];
+                }
+
+                # now update the search string
+                $queryStr = "UPDATE `".DB_PREFIX."_link`
+                                SET `search` = '".$this->DB->real_escape_string($searchStr)."'
+                                WHERE `hash` = '".$this->DB->real_escape_string($link['hash'])."'";
+
+                $this->DB->query($queryStr);
+
+                unset($LinkObj,$l,$searchStr,$t,$c,$queryStr);
+            }
+        }
+
+
+    }
 }
 
 ?>
\ No newline at end of file
index 010d92f5720136baf13aa806eafcac226df6b33f..de03bd61e2bdb8f072adf89e851f073dad086dc4 100644 (file)
@@ -339,7 +339,7 @@ class Summoner {
         *
         * @param string $string
         */
-       static function prepareTagOrCategorieStr($string) {
+       static function prepareTagOrCategoryStr($string) {
            $ret = array();
 
            $string = trim($string, ", ");
index 5823dad176bbe39b82d3675666b037c1ccbf98e6..b5f14562e7c8518f3ae41c7bc9858b9fba9011c7 100644 (file)
@@ -51,7 +51,22 @@ if(isset($_POST['data']) && !empty($_POST['data']) && isset($_POST['submitsearch
     }
     elseif(Summoner::validate($searchValue,'text')) {
         # search for this in more then one field
-
+        # remove mysql funktion stuff
+        $searchValue = str_replace("*", "", $searchValue);
+        $searchValue = str_replace("+", "", $searchValue);
+        $searchValue = str_replace("-", "", $searchValue);
+        $searchValue = str_replace("<", "", $searchValue);
+        $searchValue = str_replace(">", "", $searchValue);
+        $searchValue = str_replace("~", "", $searchValue);
+        $searchValue = str_replace("'", "", $searchValue);
+        $searchValue = str_replace('"', "", $searchValue);
+
+        $queryStr = "SELECT *, MATCH (search)
+                            AGAINST ('*".$DB->real_escape_string($searchValue)."*' IN BOOLEAN MODE) AS score
+                        FROM `".DB_PREFIX."_link`
+                        WHERE MATCH (search)
+                            AGAINST ('*".$DB->real_escape_string($searchValue)."*' IN BOOLEAN MODE)
+                        ORDER BY score DESC";
     }
     else {
         $submitFeedback['message'] = 'Invalid input';
@@ -116,6 +131,16 @@ if(isset($_POST['data']) && !empty($_POST['data']) && isset($_POST['addnewone'])
 
     if($isUrl === true && !empty($formData['title']) && $username === FRONTEND_USERNAME && $password === FRONTEND_PASSWORD) {
         $hash = md5($formData['url']);
+
+        # categories and tag stuff
+        $catArr = Summoner::prepareTagOrCategoryStr($formData['category']);
+        $tagArr = Summoner::prepareTagOrCategoryStr($formData['tag']);
+
+        $search = $formData['title'];
+        $search .= ' '.$formData['description'];
+        $search .= ' '.implode(" ",$tagArr);
+        $search .= ' '.implode(" ",$catArr);
+
         $queryStr = "INSERT IGNORE INTO `".DB_PREFIX."_link` SET
                         `link` = '".$DB->real_escape_string($formData['url'])."',
                         `created` = NOW(),
@@ -123,15 +148,14 @@ if(isset($_POST['data']) && !empty($_POST['data']) && isset($_POST['addnewone'])
                         `description` = '".$DB->real_escape_string($formData['description'])."',
                         `title` = '".$DB->real_escape_string($formData['title'])."',
                         `image` = '".$DB->real_escape_string($formData['image'])."',
-                        `hash` = '".$DB->real_escape_string($hash)."'";
+                        `hash` = '".$DB->real_escape_string($hash)."',
+                        `search` = '".$DB->real_escape_string($search)."'";
         $DB->query($queryStr);
         $linkID = $DB->insert_id;
 
         if(!empty($linkID)) {
 
-            # categories and tag stuff
-            $catArr = Summoner::prepareTagOrCategorieStr($formData['category']);
-            $tagArr = Summoner::prepareTagOrCategorieStr($formData['tag']);
+
 
             if(!empty($catArr)) {
                 foreach($catArr as $c) {
@@ -171,5 +195,5 @@ if(isset($_POST['data']) && !empty($_POST['data']) && isset($_POST['addnewone'])
 
 $existingCategories = $Management->categories();
 $existingTags = $Management->tags();
-$latestLinks = $Management->latest();
+$latestLinks = $Management->latestLinks();
 $orderedCategories = $Management->categoriesByDateAdded();
\ No newline at end of file
index f4c0fe5151654f658ae5969cefdfc6491624a3fd..0ba9a0ac30191bb772f7024ae5c8c2e845a1c6f0 100644 (file)
@@ -72,5 +72,5 @@ switch($_requestMode) {
     case 'all':
     default:
         # show all
-        $linkCollection = $Management->all();
+        $linkCollection = $Management->links();
 }