]> git.mxchange.org Git - friendica.git/blobdiff - include/api.php
Merge pull request #8639 from annando/check-foreign
[friendica.git] / include / api.php
index 8291d189269bdbfe26056df68c4a53632fe0e9b3..764664ff6d6db94609fd6d37acbc261b31bb17fa 100644 (file)
@@ -1310,7 +1310,7 @@ api_register_func('api/media/metadata/create', 'api_media_metadata_create', true
 /**
  * @param string $type    Return format (atom, rss, xml, json)
  * @param int    $item_id
- * @return string
+ * @return array|string
  * @throws Exception
  */
 function api_status_show($type, $item_id)
@@ -1538,31 +1538,24 @@ function api_search($type)
        $params = ['order' => ['id' => true], 'limit' => [$start, $count]];
        if (preg_match('/^#(\w+)$/', $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, $searchTerm];
-               if ($max_id > 0) {
-                       $condition[0] .= ' AND `oid` <= ?';
-                       $condition[] = $max_id;
-               }
-               $terms = DBA::select('term', ['oid'], $condition, []);
-               $itemIds = [];
-               while ($term = DBA::fetch($terms)) {
-                       $itemIds[] = $term['oid'];
+               $condition = ["`iid` > ? AND `name` = ? AND (NOT `private` OR (`private` AND `uid` = ?))", $since_id, $searchTerm, local_user()];
+               $tags = DBA::select('tag-search-view', ['uri-id'], $condition);
+               $uriids = [];
+               while ($tag = DBA::fetch($tags)) {
+                       $uriids[] = $tag['uri-id'];
                }
-               DBA::close($terms);
+               DBA::close($tags);
 
-               if (empty($itemIds)) {
+               if (empty($uriids)) {
                        return api_format_data('statuses', $type, $data);
                }
 
-               $preCondition = ['`id` IN (' . implode(', ', $itemIds) . ')'];
+               $condition = ['uri-id' => $uriids];
                if ($exclude_replies) {
-                       $preCondition[] = '`id` = `parent`';
+                       $condition['gravity'] = GRAVITY_PARENT;
                }
 
-               $condition = [implode(' AND ', $preCondition)];
+               $params['group_by'] = ['uri-id'];
        } else {
                $condition = ["`id` > ?
                        " . ($exclude_replies ? " AND `id` = `parent` " : ' ') . "
@@ -2040,7 +2033,7 @@ function api_statuses_repeat($type)
 
        Logger::log('API: api_statuses_repeat: '.$id);
 
-       $fields = ['body', 'title', 'attach', 'tag', 'author-name', 'author-link', 'author-avatar', 'guid', 'created', 'plink'];
+       $fields = ['uri-id', 'body', 'title', 'attach', 'author-name', 'author-link', 'author-avatar', 'guid', 'created', 'plink'];
        $item = Item::selectFirst($fields, ['id' => $id, 'private' => [Item::PUBLIC, Item::UNLISTED]]);
 
        if (DBA::isResult($item) && $item['body'] != "") {
@@ -2058,7 +2051,6 @@ function api_statuses_repeat($type)
                        $post .= "[/share]";
                }
                $_REQUEST['body'] = $post;
-               $_REQUEST['tag'] = $item['tag'];
                $_REQUEST['attach'] = $item['attach'];
                $_REQUEST['profile_uid'] = api_user();
                $_REQUEST['api_source'] = true;
@@ -2068,6 +2060,8 @@ function api_statuses_repeat($type)
                }
 
                $item_id = item_post($a);
+
+               /// @todo Copy tags from the original post to the new one
        } else {
                throw new ForbiddenException();
        }