]> git.mxchange.org Git - friendica.git/commitdiff
#6275 - q support hashtag search
authorroot <17hado.com@gmail.com>
Mon, 17 Dec 2018 04:41:55 +0000 (04:41 +0000)
committerHypolite Petovan <hypolite@mrpetovan.com>
Mon, 21 Jan 2019 14:12:35 +0000 (09:12 -0500)
doc/api.md
include/api.php
tests/include/ApiTest.php

index 58413b2e64df08ceab343c9fc51535d35a945383..0f2243b5c1bb316315c3787f34c74fde53f49dfd 100644 (file)
@@ -751,7 +751,6 @@ Friendica doesn't allow showing followers of other users.
 #### Parameters
 
 * q: search query
-* friendica_tag: search hashtag (optional; query condition only accept one of the two [ q | friendica_tag ] )
 * page: the page number (starting at 1) to return
 * rpp: the number of statuses to return per page
 * count: alias for the rpp parameter
index 9faba3b9cc27feb9a844b1953d9b1ac2b2a8c684..4bd9e34a3c5cfa9bbd3b18704aa03b7bc7a785c3 100644 (file)
@@ -1521,7 +1521,9 @@ function api_search($type)
 
        if (api_user() === false || $user_info === false) { throw new ForbiddenException(); }
 
-       if (empty($_REQUEST['q']) && empty($_REQUEST['friendica_tag'])) { throw new BadRequestException("q or friendica_tag parameter is required."); }
+       if (empty($_REQUEST['q'])) { throw new BadRequestException("q parameter is required."); }
+       
+       $searchTerm = trim(rawurldecode($_REQUEST['q']));
 
        $data = [];
        $count = 15;
@@ -1530,31 +1532,18 @@ function api_search($type)
        } elseif (!empty($_REQUEST['count'])) {
                $count = $_REQUEST['count'];
        }
-
+       
        $since_id = defaults($_REQUEST, 'since_id', 0);
        $max_id = defaults($_REQUEST, 'max_id', 0);
        $page = (!empty($_REQUEST['page']) ? $_REQUEST['page'] - 1 : 0);
        $start = $page * $count;
        $params = ['order' => ['id' => true], 'limit' => [$start, $count]];
-
-       if (!empty($_REQUEST['q'])) {
-               $condition = [
-                       "`id` > ? 
-                       AND (`uid` = 0 OR (`uid` = ? AND NOT `global`))
-                       AND `body` LIKE CONCAT('%',?,'%')",
-                       $since_id, api_user(), $_REQUEST['q']];
-               if ($max_id > 0) {
-                       $condition[0] .= " AND `id` <= ?";
-                       $condition[] = $max_id;
-               }
-       } elseif (!empty($_REQUEST['friendica_tag'])) {
-               $condition = [
-                       "`oid` > ?
+       if (preg_match('/^\#([^#]+)/', $searchTerm, $matches) === 1 && isset($matches[1])) {
+               $searchTerm = $matches[1];
+               $condition = ["`oid` > ?
                        AND (`uid` = 0 OR (`uid` = ? AND NOT `global`)) 
                        AND `otype` = ? AND `type` = ? AND `term` = ?",
-                       $since_id, local_user(), TERM_OBJ_POST, TERM_HASHTAG, 
-                       Strings::escapeTags(trim(rawurldecode($_REQUEST['friendica_tag'])))
-               ];
+                       $since_id, local_user(), TERM_OBJ_POST, TERM_HASHTAG, $searchTerm];
                if ($max_id > 0) {
                        $condition[0] .= " AND `oid` <= ?";
                        $condition[] = $max_id;
@@ -1564,6 +1553,16 @@ function api_search($type)
                while($term = DBA::fetch($terms)){ $itemIds[] = $term['oid']; }
                DBA::close($terms);
                $condition = ['id' => empty($itemIds) ? [0] : $itemIds ];
+       } else {
+               $condition = ["`id` > ? 
+                       AND (`uid` = 0 OR (`uid` = ? AND NOT `global`))
+                       AND `body` LIKE CONCAT('%',?,'%')",
+                       $since_id, api_user(), $_REQUEST['q']];
+               if ($max_id > 0) {
+                       $condition[0] .= " AND `id` <= ?";
+                       $condition[] = $max_id;
+               }
+
        }
 
        $statuses = Item::selectForUser(api_user(), [], $condition, $params);
index d328c4cb5586dd7e6b13985875d6bd871d418972..458d98599a4e29ea228307fbd8a82793918ef779 100644 (file)
@@ -1390,20 +1390,6 @@ class ApiTest extends DatabaseTest
                }
        }
 
-       /**
-        * Test the api_search() function with friendica_tag 
-        * @return void
-        */
-       public function testApiSearchWithFriendicaTag()
-       {
-               $_REQUEST['friendica_tag'] = 'friendica';
-               $result = api_search('json');
-               foreach ($result['status'] as $status) {
-                       $this->assertStatus($status);
-                       $this->assertContains('#friendica', $status['text'], null, true);
-               }
-       }
-
        /**
         * Test the api_search() function with an rpp parameter.
         * @return void