]> git.mxchange.org Git - friendica.git/blobdiff - include/api.php
Fix the test data
[friendica.git] / include / api.php
index dc5d6404877a20575356aa2691d824226123ec76..4aa4b21e29199e4a0c339cb884d94b251f2062fd 100644 (file)
@@ -41,6 +41,7 @@ use Friendica\Model\Item;
 use Friendica\Model\Mail;
 use Friendica\Model\Notify;
 use Friendica\Model\Photo;
+use Friendica\Model\Post;
 use Friendica\Model\User;
 use Friendica\Model\UserItem;
 use Friendica\Model\Verb;
@@ -67,7 +68,6 @@ use Friendica\Util\Proxy as ProxyUtils;
 use Friendica\Util\Strings;
 use Friendica\Util\XML;
 
-require_once __DIR__ . '/../mod/share.php';
 require_once __DIR__ . '/../mod/item.php';
 require_once __DIR__ . '/../mod/wall_upload.php';
 
@@ -1366,7 +1366,7 @@ function api_get_last_status($ownerId, $uid)
  */
 function api_get_item(array $condition)
 {
-       $item = Item::selectFirst(Item::DISPLAY_FIELDLIST, $condition, ['order' => ['id' => true]]);
+       $item = Post::selectFirst(Item::DISPLAY_FIELDLIST, $condition, ['order' => ['id' => true]]);
 
        return $item;
 }
@@ -1584,13 +1584,13 @@ function api_search($type)
                }
 
                if (!empty($id)) {
-                       $statuses = Item::select([], ['id' => $id]);
+                       $statuses = Post::select([], ['id' => $id]);
                }
        }
 
-       $statuses = $statuses ?: Item::selectForUser(api_user(), [], $condition, $params);
+       $statuses = $statuses ?: Post::selectForUser(api_user(), [], $condition, $params);
 
-       $data['status'] = api_format_items(Item::inArray($statuses), $user_info);
+       $data['status'] = api_format_items(Post::toArray($statuses), $user_info);
 
        bindComments($data['status']);
 
@@ -1644,26 +1644,26 @@ function api_statuses_home_timeline($type)
 
        $start = max(0, ($page - 1) * $count);
 
-       $condition = ["`uid` = ? AND `gravity` IN (?, ?) AND `item`.`id` > ?",
+       $condition = ["`uid` = ? AND `gravity` IN (?, ?) AND `id` > ?",
                api_user(), GRAVITY_PARENT, GRAVITY_COMMENT, $since_id];
 
        if ($max_id > 0) {
-               $condition[0] .= " AND `item`.`id` <= ?";
+               $condition[0] .= " AND `id` <= ?";
                $condition[] = $max_id;
        }
        if ($exclude_replies) {
-               $condition[0] .= ' AND `item`.`gravity` = ?';
+               $condition[0] .= ' AND `gravity` = ?';
                $condition[] = GRAVITY_PARENT;
        }
        if ($conversation_id > 0) {
-               $condition[0] .= " AND `item`.`parent` = ?";
+               $condition[0] .= " AND `parent` = ?";
                $condition[] = $conversation_id;
        }
 
        $params = ['order' => ['id' => true], 'limit' => [$start, $count]];
-       $statuses = Item::selectForUser(api_user(), [], $condition, $params);
+       $statuses = Post::selectForUser(api_user(), [], $condition, $params);
 
-       $items = Item::inArray($statuses);
+       $items = Post::toArray($statuses);
 
        $ret = api_format_items($items, $user_info, false, $type);
 
@@ -1674,7 +1674,7 @@ function api_statuses_home_timeline($type)
        }
 
        if (!empty($idarray)) {
-               $unseen = Item::exists(['unseen' => true, 'id' => $idarray]);
+               $unseen = Post::exists(['unseen' => true, 'id' => $idarray]);
                if ($unseen) {
                        Item::update(['unseen' => false], ['unseen' => true, 'id' => $idarray]);
                }
@@ -1744,24 +1744,24 @@ function api_statuses_public_timeline($type)
                $params = ['order' => ['iid' => true], 'limit' => [$start, $count]];
                $statuses = Item::selectThreadForUser(api_user(), Item::DISPLAY_FIELDLIST, $condition, $params);
 
-               $r = Item::inArray($statuses);
+               $r = Item::toArray($statuses);
        } else {
-               $condition = ["`gravity` IN (?, ?) AND `id` > ? AND `private` = ? AND `wall` AND `item`.`origin` AND NOT `author`.`hidden`",
+               $condition = ["`gravity` IN (?, ?) AND `id` > ? AND `private` = ? AND `wall` AND `origin` AND NOT `author-hidden`",
                        GRAVITY_PARENT, GRAVITY_COMMENT, $since_id, Item::PUBLIC];
 
                if ($max_id > 0) {
-                       $condition[0] .= " AND `item`.`id` <= ?";
+                       $condition[0] .= " AND `id` <= ?";
                        $condition[] = $max_id;
                }
                if ($conversation_id > 0) {
-                       $condition[0] .= " AND `item`.`parent` = ?";
+                       $condition[0] .= " AND `parent` = ?";
                        $condition[] = $conversation_id;
                }
 
                $params = ['order' => ['id' => true], 'limit' => [$start, $count]];
-               $statuses = Item::selectForUser(api_user(), [], $condition, $params);
+               $statuses = Post::selectForUser(api_user(), [], $condition, $params);
 
-               $r = Item::inArray($statuses);
+               $r = Post::toArray($statuses);
        }
 
        $ret = api_format_items($r, $user_info, false, $type);
@@ -1823,7 +1823,7 @@ function api_statuses_networkpublic_timeline($type)
        $params = ['order' => ['iid' => true], 'limit' => [$start, $count]];
        $statuses = Item::selectThreadForUser(api_user(), Item::DISPLAY_FIELDLIST, $condition, $params);
 
-       $ret = api_format_items(Item::inArray($statuses), $user_info, false, $type);
+       $ret = api_format_items(Item::toArray($statuses), $user_info, false, $type);
 
        bindComments($ret);
 
@@ -1881,14 +1881,14 @@ function api_statuses_show($type)
        $conversation = !empty($_REQUEST['conversation']);
 
        // try to fetch the item for the local user - or the public item, if there is no local one
-       $uri_item = Item::selectFirst(['uri'], ['id' => $id]);
+       $uri_item = Post::selectFirst(['uri-id'], ['id' => $id]);
        if (!DBA::isResult($uri_item)) {
-               throw new BadRequestException("There is no status with this id.");
+               throw new BadRequestException(sprintf("There is no status with the id %d", $id));
        }
 
-       $item = Item::selectFirst(['id'], ['uri' => $uri_item['uri'], 'uid' => [0, api_user()]], ['order' => ['uid' => true]]);
+       $item = Post::selectFirst(['id'], ['uri-id' => $uri_item['uri-id'], 'uid' => [0, api_user()]], ['order' => ['uid' => true]]);
        if (!DBA::isResult($item)) {
-               throw new BadRequestException("There is no status with this id.");
+               throw new BadRequestException(sprintf("There is no status with the uri-id %d for the given user.", $uri_item['uri-id']));
        }
 
        $id = $item['id'];
@@ -1901,14 +1901,14 @@ function api_statuses_show($type)
                $params = [];
        }
 
-       $statuses = Item::selectForUser(api_user(), [], $condition, $params);
+       $statuses = Post::selectForUser(api_user(), [], $condition, $params);
 
        /// @TODO How about copying this to above methods which don't check $r ?
        if (!DBA::isResult($statuses)) {
-               throw new BadRequestException("There is no status with this id.");
+               throw new BadRequestException(sprintf("There is no status or conversation with the id %d.", $id));
        }
 
-       $ret = api_format_items(Item::inArray($statuses), $user_info, false, $type);
+       $ret = api_format_items(Post::toArray($statuses), $user_info, false, $type);
 
        if ($conversation) {
                $data = ['status' => $ret];
@@ -1964,34 +1964,34 @@ function api_conversation_show($type)
        Logger::info(API_LOG_PREFIX . '{subaction}', ['module' => 'api', 'action' => 'conversation', 'subaction' => 'show', 'id' => $id]);
 
        // try to fetch the item for the local user - or the public item, if there is no local one
-       $item = Item::selectFirst(['parent-uri'], ['id' => $id]);
+       $item = Post::selectFirst(['parent-uri-id'], ['id' => $id]);
        if (!DBA::isResult($item)) {
                throw new BadRequestException("There is no status with this id.");
        }
 
-       $parent = Item::selectFirst(['id'], ['uri' => $item['parent-uri'], 'uid' => [0, api_user()]], ['order' => ['uid' => true]]);
+       $parent = Post::selectFirst(['id'], ['uri-id' => $item['parent-uri-id'], 'uid' => [0, api_user()]], ['order' => ['uid' => true]]);
        if (!DBA::isResult($parent)) {
                throw new BadRequestException("There is no status with this id.");
        }
 
        $id = $parent['id'];
 
-       $condition = ["`parent` = ? AND `uid` IN (0, ?) AND `gravity` IN (?, ?) AND `item`.`id` > ?",
+       $condition = ["`parent` = ? AND `uid` IN (0, ?) AND `gravity` IN (?, ?) AND `id` > ?",
                $id, api_user(), GRAVITY_PARENT, GRAVITY_COMMENT, $since_id];
 
        if ($max_id > 0) {
-               $condition[0] .= " AND `item`.`id` <= ?";
+               $condition[0] .= " AND `id` <= ?";
                $condition[] = $max_id;
        }
 
        $params = ['order' => ['id' => true], 'limit' => [$start, $count]];
-       $statuses = Item::selectForUser(api_user(), [], $condition, $params);
+       $statuses = Post::selectForUser(api_user(), [], $condition, $params);
 
        if (!DBA::isResult($statuses)) {
                throw new BadRequestException("There is no status with id $id.");
        }
 
-       $ret = api_format_items(Item::inArray($statuses), $user_info, false, $type);
+       $ret = api_format_items(Post::toArray($statuses), $user_info, false, $type);
 
        $data = ['status' => $ret];
        return api_format_data("statuses", $type, $data);
@@ -2041,9 +2041,9 @@ function api_statuses_repeat($type)
        Logger::log('API: api_statuses_repeat: '.$id);
 
        $fields = ['uri-id', 'network', 'body', 'title', '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'] != "") {
+       $item = Post::selectFirst($fields, ['id' => $id, 'private' => [Item::PUBLIC, Item::UNLISTED]]);
+       if (DBA::isResult($item) && !empty($item['body'])) {
                if (in_array($item['network'], [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::TWITTER])) {
                        if (!Item::performActivity($id, 'announce', local_user())) {
                                throw new InternalServerErrorException();
@@ -2171,11 +2171,11 @@ function api_statuses_mentions($type)
 
        $start = max(0, ($page - 1) * $count);
 
-       $query = "SELECT `item`.`id` FROM `user-item`
-               INNER JOIN `item` ON `item`.`id` = `user-item`.`iid` AND `item`.`gravity` IN (?, ?)
-               WHERE (`user-item`.`hidden` IS NULL OR NOT `user-item`.`hidden`) AND
-                       `user-item`.`uid` = ? AND `user-item`.`notification-type` & ? != 0
-                       AND `user-item`.`iid` > ?";
+       $query = "`gravity` IN (?, ?) AND `id` IN (SELECT `iid` FROM `user-item`                
+               WHERE (`hidden` IS NULL OR NOT `hidden`) AND
+                       `uid` = ? AND `notification-type` & ? != 0
+                       AND `iid` > ?";
+
        $condition = [GRAVITY_PARENT, GRAVITY_COMMENT, api_user(),
                UserItem::NOTIF_EXPLICIT_TAGGED | UserItem::NOTIF_IMPLICIT_TAGGED |
                UserItem::NOTIF_THREAD_COMMENT | UserItem::NOTIF_DIRECT_COMMENT |
@@ -2183,25 +2183,18 @@ function api_statuses_mentions($type)
                $since_id];
 
        if ($max_id > 0) {
-               $query .= " AND `item`.`id` <= ?";
+               $query .= " AND `iid` <= ?";
                $condition[] = $max_id;
        }
 
-       $query .= " ORDER BY `user-item`.`iid` DESC LIMIT ?, ?";
-       $condition[] = $start;
-       $condition[] = $count;
+       $query .= ")";
 
-       $useritems = DBA::p($query, $condition);
-       $itemids = [];
-       while ($useritem = DBA::fetch($useritems)) {
-               $itemids[] = $useritem['id'];
-       }
-       DBA::close($useritems);
+       array_unshift($condition, $query);
 
        $params = ['order' => ['id' => true], 'limit' => [$start, $count]];
-       $statuses = Item::selectForUser(api_user(), [], ['id' => $itemids], $params);
+       $statuses = Post::selectForUser(api_user(), [], $condition, $params);
 
-       $ret = api_format_items(Item::inArray($statuses), $user_info, false, $type);
+       $ret = api_format_items(Post::toArray($statuses), $user_info, false, $type);
 
        $data = ['status' => $ret];
        switch ($type) {
@@ -2253,32 +2246,32 @@ function api_statuses_user_timeline($type)
 
        $start = max(0, ($page - 1) * $count);
 
-       $condition = ["`uid` = ? AND `gravity` IN (?, ?) AND `item`.`id` > ? AND `item`.`contact-id` = ?",
+       $condition = ["`uid` = ? AND `gravity` IN (?, ?) AND `id` > ? AND `contact-id` = ?",
                api_user(), GRAVITY_PARENT, GRAVITY_COMMENT, $since_id, $user_info['cid']];
 
        if ($user_info['self'] == 1) {
-               $condition[0] .= ' AND `item`.`wall` ';
+               $condition[0] .= ' AND `wall` ';
        }
 
        if ($exclude_replies) {
-               $condition[0] .= ' AND `item`.`gravity` = ?';
+               $condition[0] .= ' AND `gravity` = ?';
                $condition[] = GRAVITY_PARENT;
        }
 
        if ($conversation_id > 0) {
-               $condition[0] .= " AND `item`.`parent` = ?";
+               $condition[0] .= " AND `parent` = ?";
                $condition[] = $conversation_id;
        }
 
        if ($max_id > 0) {
-               $condition[0] .= " AND `item`.`id` <= ?";
+               $condition[0] .= " AND `id` <= ?";
                $condition[] = $max_id;
        }
 
        $params = ['order' => ['id' => true], 'limit' => [$start, $count]];
-       $statuses = Item::selectForUser(api_user(), [], $condition, $params);
+       $statuses = Post::selectForUser(api_user(), [], $condition, $params);
 
-       $ret = api_format_items(Item::inArray($statuses), $user_info, true, $type);
+       $ret = api_format_items(Post::toArray($statuses), $user_info, true, $type);
 
        bindComments($ret);
 
@@ -2336,7 +2329,7 @@ function api_favorites_create_destroy($type)
                $itemid = intval($_REQUEST['id'] ?? 0);
        }
 
-       $item = Item::selectFirstForUser(api_user(), [], ['id' => $itemid, 'uid' => api_user()]);
+       $item = Post::selectFirstForUser(api_user(), [], ['id' => $itemid, 'uid' => api_user()]);
 
        if (!DBA::isResult($item)) {
                throw new BadRequestException("Invalid item.");
@@ -2426,13 +2419,13 @@ function api_favorites($type)
                $params = ['order' => ['id' => true], 'limit' => [$start, $count]];
 
                if ($max_id > 0) {
-                       $condition[0] .= " AND `item`.`id` <= ?";
+                       $condition[0] .= " AND `id` <= ?";
                        $condition[] = $max_id;
                }
 
-               $statuses = Item::selectForUser(api_user(), [], $condition, $params);
+               $statuses = Post::selectForUser(api_user(), [], $condition, $params);
 
-               $ret = api_format_items(Item::inArray($statuses), $user_info, false, $type);
+               $ret = api_format_items(Post::toArray($statuses), $user_info, false, $type);
        }
 
        bindComments($ret);
@@ -2873,9 +2866,9 @@ function api_format_items_activities($item, $type = "json")
        ];
 
        $condition = ['uid' => $item['uid'], 'thr-parent' => $item['uri'], 'gravity' => GRAVITY_ACTIVITY];
-       $ret = Item::selectForUser($item['uid'], ['author-id', 'verb'], $condition);
+       $ret = Post::selectForUser($item['uid'], ['author-id', 'verb'], $condition);
 
-       while ($parent_item = Item::fetch($ret)) {
+       while ($parent_item = Post::fetch($ret)) {
                // not used as result should be structured like other user data
                //builtin_activity_puller($i, $activities);
 
@@ -3304,26 +3297,26 @@ function api_lists_statuses($type)
 
        $start = max(0, ($page - 1) * $count);
 
-       $condition = ["`uid` = ? AND `gravity` IN (?, ?) AND `id` > ? AND `group_member`.`gid` = ?",
+       $condition = ["`uid` = ? AND `gravity` IN (?, ?) AND `id` > ? AND `group-id` = ?",
                api_user(), GRAVITY_PARENT, GRAVITY_COMMENT, $since_id, $_REQUEST['list_id']];
 
        if ($max_id > 0) {
-               $condition[0] .= " AND `item`.`id` <= ?";
+               $condition[0] .= " AND `id` <= ?";
                $condition[] = $max_id;
        }
        if ($exclude_replies > 0) {
-               $condition[0] .= ' AND `item`.`gravity` = ?';
+               $condition[0] .= ' AND `gravity` = ?';
                $condition[] = GRAVITY_PARENT;
        }
        if ($conversation_id > 0) {
-               $condition[0] .= " AND `item`.`parent` = ?";
+               $condition[0] .= " AND `parent` = ?";
                $condition[] = $conversation_id;
        }
 
        $params = ['order' => ['id' => true], 'limit' => [$start, $count]];
-       $statuses = Item::selectForUser(api_user(), [], $condition, $params);
+       $statuses = Post::selectForUser(api_user(), [], $condition, $params);
 
-       $items = api_format_items(Item::inArray($statuses), $user_info, false, $type);
+       $items = api_format_items(Post::toArray($statuses), $user_info, false, $type);
 
        $data = ['status' => $items];
        switch ($type) {
@@ -4220,7 +4213,7 @@ function api_fr_photo_create_update($type)
        $deny_cid  = $_REQUEST['deny_cid' ] ?? null;
        $allow_gid = $_REQUEST['allow_gid'] ?? null;
        $deny_gid  = $_REQUEST['deny_gid' ] ?? null;
-       $visibility = !empty($_REQUEST['visibility']) && $_REQUEST['visibility'] !== "false";
+       $visibility = !$allow_cid && !$deny_cid && !$allow_gid && !$deny_gid;
 
        // do several checks on input parameters
        // we do not allow calls without album string
@@ -4880,7 +4873,7 @@ function prepare_photo_data($type, $scale, $photo_id)
 
        // retrieve item element for getting activities (like, dislike etc.) related to photo
        $condition = ['uid' => api_user(), 'resource-id' => $photo_id, 'type' => 'photo'];
-       $item = Item::selectFirst(['id', 'uid', 'uri', 'parent', 'allow_cid', 'deny_cid', 'allow_gid', 'deny_gid'], $condition);
+       $item = Post::selectFirst(['id', 'uid', 'uri', 'parent', 'allow_cid', 'deny_cid', 'allow_gid', 'deny_gid'], $condition);
        if (!DBA::isResult($item)) {
                throw new NotFoundException('Photo-related item not found.');
        }
@@ -4891,10 +4884,10 @@ function prepare_photo_data($type, $scale, $photo_id)
        $condition = ["`parent` = ? AND `uid` = ? AND (`gravity` IN (?, ?) OR `type`='photo')",
                $item['parent'], api_user(), GRAVITY_PARENT, GRAVITY_COMMENT];
 
-       $statuses = Item::selectForUser(api_user(), [], $condition);
+       $statuses = Post::selectForUser(api_user(), [], $condition);
 
        // prepare output of comments
-       $commentData = api_format_items(Item::inArray($statuses), $user_info, false, $type);
+       $commentData = api_format_items(Post::toArray($statuses), $user_info, false, $type);
        $comments = [];
        if ($type == "xml") {
                $k = 0;
@@ -5007,7 +5000,7 @@ function api_get_announce($item)
 
        $fields = ['author-id', 'author-name', 'author-link', 'author-avatar'];
        $condition = ['parent-uri' => $item['uri'], 'gravity' => GRAVITY_ACTIVITY, 'uid' => [0, $item['uid']], 'vid' => Verb::getID(Activity::ANNOUNCE)];
-       $announce = Item::selectFirstForUser($item['uid'], $fields, $condition, ['order' => ['received' => true]]);
+       $announce = Post::selectFirstForUser($item['uid'], $fields, $condition, ['order' => ['received' => true]]);
        if (!DBA::isResult($announce)) {
                return [];
        }
@@ -5076,7 +5069,7 @@ function api_share_as_retweet(&$item)
        }
 
        if (!empty($condition)) {
-               $original_item = Item::selectFirst([], $condition);
+               $original_item = Post::selectFirst([], $condition);
                if (DBA::isResult($original_item)) {
                        $reshared_item = array_merge($reshared_item, $original_item);
                }
@@ -5103,7 +5096,7 @@ function api_in_reply_to($item)
        $in_reply_to['screen_name'] = null;
 
        if (($item['thr-parent'] != $item['uri']) && ($item['gravity'] != GRAVITY_PARENT)) {
-               $parent = Item::selectFirst(['id'], ['uid' => $item['uid'], 'uri' => $item['thr-parent']]);
+               $parent = Post::selectFirst(['id'], ['uid' => $item['uid'], 'uri' => $item['thr-parent']]);
                if (DBA::isResult($parent)) {
                        $in_reply_to['status_id'] = intval($parent['id']);
                } else {
@@ -5113,7 +5106,7 @@ function api_in_reply_to($item)
                $in_reply_to['status_id_str'] = (string) intval($in_reply_to['status_id']);
 
                $fields = ['author-nick', 'author-name', 'author-id', 'author-link'];
-               $parent = Item::selectFirst($fields, ['id' => $in_reply_to['status_id']]);
+               $parent = Post::selectFirst($fields, ['id' => $in_reply_to['status_id']]);
 
                if (DBA::isResult($parent)) {
                        $in_reply_to['screen_name'] = (($parent['author-nick']) ? $parent['author-nick'] : $parent['author-name']);
@@ -5815,7 +5808,7 @@ function api_friendica_notification_seen($type)
                DI::notify()->setSeen(true, $notify);
 
                if ($notify->otype === Notify\ObjectType::ITEM) {
-                       $item = Item::selectFirstForUser(api_user(), [], ['id' => $notify->iid, 'uid' => api_user()]);
+                       $item = Post::selectFirstForUser(api_user(), [], ['id' => $notify->iid, 'uid' => api_user()]);
                        if (DBA::isResult($item)) {
                                // we found the item, return it to the user
                                $ret  = api_format_items([$item], $user_info, false, $type);
@@ -6014,7 +6007,7 @@ function bindComments(&$data)
        }
 
        $idStr = DBA::escape(implode(', ', $ids));
-       $sql = "SELECT `parent`, COUNT(*) as comments FROM `item` WHERE `parent` IN ($idStr) AND `deleted` = ? AND `gravity`= ? GROUP BY `parent`";
+       $sql = "SELECT `parent`, COUNT(*) as comments FROM `post-view` WHERE `parent` IN ($idStr) AND `deleted` = ? AND `gravity`= ? GROUP BY `parent`";
        $items = DBA::p($sql, 0, GRAVITY_COMMENT);
        $itemsData = DBA::toArray($items);