]> 91.132.146.200 Git - insipid.git/commitdiff
fixing search for non links
authorBanana <banana@mirage>
Mon, 30 Dec 2019 22:42:59 +0000 (23:42 +0100)
committerBanana <banana@mirage>
Mon, 30 Dec 2019 22:42:59 +0000 (23:42 +0100)
ChangeLog
documentation/update.txt
documentation/usage.txt
webroot/index.php
webroot/job/email-import.php
webroot/lib/link.class.php
webroot/lib/management.class.php
webroot/view/home.inc.php
webroot/view/stats.inc.php
webroot/view/stats.php

index 1a5426fb8a5224cb7c804019fe12ab83ad0ff951..b81e2a184254c8499f31d37b323de00512772576 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
 version x.x - Seven Portals (tba)
 
     + Now including update instructions
+    + Fixed the search for words. See update instructions how to correct your data
 
 version 2.3 - Guardian of Steel (2019-12-30)
 
index a50826e294e514f1f67daa060a2361278961ff3c..0ee461d7db8978438486b27410bb0cdca0e24acd 100644 (file)
@@ -1,3 +1,7 @@
-If you are updating from a previous version:
+If you are updating from a previous version make sure every update info from the version
+your are updating from is done.
 
-2.3 -> x.x
\ No newline at end of file
+x.x
++ Run (after authentication) at /index.php?p=stats the "Search index update" to make the
+search work again correctly. At success, there is no confirmation. To validate you can now search
+for single words case-insensitive.
\ No newline at end of file
index 5d1ea1676582611b5b99d9b5dbcffec5de9dc0fd..92e165b3092fca3783a00da4697b0a96ba7dd22e 100644 (file)
@@ -11,10 +11,15 @@ http(s)://your.domain.tld/path/to/insipid/index.php?m=auth
 If successful you can now manage your items. Edit buttons are visible now.
 Moderation and more overview can be access from the stats overview page.
 
-HowToAdd a new link:
+HowToAdd a new link:
 
 There is no special "add a new link" option. Just paste the link into the search bar.
 If the link is already in your database the edit option will be shown.
 If not the add field will be shown and the possibility to safe the new link.
 
-Usage of the email-importer can be found in the email-importer.txt file
\ No newline at end of file
+Usage of the email-importer can be found in the email-importer.txt file.
+
+# Search
+The search is based on the link, description, tags and categories.
+Technology behind is a mysql fulltext search in BOOLEAN MODE: https://dev.mysql.com/doc/refman/8.0/en/fulltext-boolean.html
+Which means you can use special operators like +- or *
\ No newline at end of file
index 7a3013c36b278ae353d48e24b4677d4af7cbf62a..41503346ccb105474ae9ffc6dbcff5b4d3ea3b89 100644 (file)
@@ -32,7 +32,7 @@ ini_set('error_reporting',-1); // E_ALL & E_STRICT
 # time settings
 date_default_timezone_set('Europe/Berlin');
 
-define('DEBUG',false);
+define('DEBUG',true);
 
 ## check request
 $_urlToParse = filter_var($_SERVER['QUERY_STRING'],FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
index 8c689888838eb75a1551761f3c125fc3d3f902da..f48b58641db56e25c2a4f14e5c647e23982f6b63 100644 (file)
@@ -181,6 +181,7 @@ if(!empty($emails)) {
                                $newdata['search'] .= ' '.implode(" ",$newdata['tagArr']);
                                $newdata['search'] .= ' '.implode(" ",$newdata['catArr']);
                                $newdata['search'] = trim($newdata['search']);
+                $newdata['search'] = strtolower($newdata['search']);
 
                                if(DEBUG === true) var_dump($newdata);
 
index 1045b6698ab319e6d1145404287bc0b95afdc0ee..2ef8ce8529820b26706789b7ccc356b9091f750d 100644 (file)
@@ -135,11 +135,12 @@ class Link {
                $this->load($this->_data['hash']);
        }
 
-       /**
-        * create a new link with the given data
-        * @param array $data
-        * @return boolean|int
-        */
+    /**
+     * create a new link with the given data
+     * @param array $data
+     * @param bool $returnId
+     * @return boolean|int
+     */
        public function create($data, $returnId = false) {
                $ret = false;
 
@@ -181,9 +182,11 @@ class Link {
                        $tagArr = Summoner::prepareTagOrCategoryStr($data['tag']);
 
                        $search = $data['title'];
-                       $search .= ' ' . $data['description'];
-                       $search .= ' ' . implode(" ", $tagArr);
-                       $search .= ' ' . implode(" ", $catArr);
+                       $search .= ' '.$data['description'];
+                       $search .= ' '.implode(" ", $tagArr);
+                       $search .= ' '.implode(" ", $catArr);
+            $search = trim($search);
+                       $search = strtolower($search);
 
                        $this->DB->begin_transaction(MYSQLI_TRANS_START_READ_WRITE);
 
index 306780046dbe2f2ed135a25edcc7702a3e187def..df0c57a4abe536a6729938b10fc4c3c61b40ac01 100644 (file)
@@ -463,7 +463,7 @@ class Management {
                                MATCH (`search`) AGAINST ('".$this->DB->real_escape_string($searchStr)."' IN BOOLEAN MODE) AS score
                                FROM `".DB_PREFIX."_link` AS t
                                WHERE MATCH (`search`) AGAINST ('".$this->DB->real_escape_string($searchStr)."' IN BOOLEAN MODE)";
-                       $queryStr .= " WHERE ".$this->_decideLinkTypeForQuery();
+                       $queryStr .= " AND ".$this->_decideLinkTypeForQuery();
                        $queryStr .= " ORDER BY score DESC";
 
                        $query = $this->DB->query($queryStr);
@@ -652,7 +652,9 @@ class Management {
         * for simpler management we have the search data in a separate column
         * it is not fancy or even technical nice but it damn works
         */
-       private function _updateSearchIndex() {
+       public function updateSearchIndex() {
+           $ret = false;
+
                $allLinks = array();
                $queryStr = "SELECT hash FROM `".DB_PREFIX."_link`";
                $query = $this->DB->query($queryStr);
@@ -667,12 +669,10 @@ class Management {
 
                                $searchStr = $l['title'];
                                $searchStr .= ' '.$l['description'];
-                               foreach($l['tags'] as $t) {
-                                       $searchStr .= ' '.$t['tag'];
-                               }
-                               foreach($l['categories'] as $c) {
-                                       $searchStr .= ' '.$c['category'];
-                               }
+                               $searchStr .= ' '.implode(' ',$l['tags']);
+                $searchStr .= ' '.implode(' ',$l['categories']);
+                $searchStr = trim($searchStr);
+                $searchStr = strtolower($searchStr);
 
                                # now update the search string
                                $queryStr = "UPDATE `".DB_PREFIX."_link`
@@ -683,7 +683,11 @@ class Management {
 
                                unset($LinkObj,$l,$searchStr,$t,$c,$queryStr);
                        }
+
+                       $ret = true;
                }
+
+               return $ret;
        }
 
        /**
index 9ba58d5f4611e7e59de3ec25579302aabb08c855..a3619a0f6cdf77e30bdd5e9257004a1df8acd1bf 100644 (file)
@@ -54,6 +54,7 @@ if((isset($_POST['password']) && !empty($_POST['password'])) || (isset($_POST['u
 # search or new one.
 if(isset($_POST['data']) && !empty($_POST['data']) && isset($_POST['submitsearch']) && $honeypotCheck === false) {
        $searchValue = trim($_POST['data']['searchfield']);
+       $searchValue = strtolower($searchValue);
        $isUrl = Summoner::validate($searchValue,'url');
        if($isUrl === true) {
                # search for URL
@@ -129,6 +130,7 @@ if(isset($_POST['data']) && !empty($_POST['data']) && isset($_POST['addnewone'])
                $search .= ' '.implode(" ",$tagArr);
                $search .= ' '.implode(" ",$catArr);
                $search .= trim($search);
+               $search = strtolower($search);
 
                $DB->begin_transaction(MYSQLI_TRANS_START_READ_WRITE);
 
index 271a6b07bc7f30885ea786dab18f1a1e348b640c..c8bfd228eef3f4803503df88f9cc8bebc5d76feb 100644 (file)
@@ -56,6 +56,19 @@ if(isset($_POST['statsCreateDBBackup'])) {
     exit();
 }
 
+if(isset($_POST['statsUpdateSearchIndex'])) {
+
+    if($Management->updateSearchIndex() === true) {
+        $TemplateData['refresh'] = 'index.php?p=stats';
+    }
+    else {
+        $submitFeedback['message'] = 'Something went wrong while search index update';
+        $submitFeedback['status'] = 'error';
+    }
+}
+
+
+
 $linkAmount = $Management->linkAmount();
 $tagAmount = $Management->tagAmount();
 $categoryAmount = $Management->categoryAmount();
index 97046dffb3b40ff8fc11c737cb31c5c9d3d757a9..7b6772b1265d5a9181ad36336a20e0ad1d7155db 100644 (file)
             <form method="post">
                 <input type="submit" class="button is-info is-small" value="Create backup" name="statsCreateDBBackup">
             </form>
+        </div>
+        <div class="column is-one-quarter">
+            <h4 class="is-size-4">Search index</h4>
+            <p>Update search index</p>
+            <form method="post">
+                <input type="submit" class="button is-info is-small" value="Update index" name="statsUpdateSearchIndex">
+            </form>
         </div>
                <?php } ?>
        </div>