From 70af2cecf262bc9e2e7f8f05b8ef58eaa4f11fc3 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 21 Jun 2018 06:21:51 +0000 Subject: [PATCH 1/4] Some of the last direct SQL calls to the item table had been changed --- include/text.php | 52 ++++++++++++++++------------------- mod/starred.php | 15 +++++------ mod/tagger.php | 14 ++++------ src/Protocol/DFRN.php | 58 +++++++++++++--------------------------- src/Worker/OnePoll.php | 21 +++++++-------- src/Worker/TagUpdate.php | 2 +- 6 files changed, 63 insertions(+), 99 deletions(-) diff --git a/include/text.php b/include/text.php index f1bc512326..04bbb67244 100644 --- a/include/text.php +++ b/include/text.php @@ -474,7 +474,7 @@ function perms2str($p) { */ function load_view_file($s) { global $lang, $a; - if (! isset($lang)) { + if (!isset($lang)) { $lang = 'en'; } $b = basename($s); @@ -519,7 +519,7 @@ function get_intltext_template($s) { $engine = "/smarty3"; } - if (! isset($lang)) { + if (!isset($lang)) { $lang = 'en'; } @@ -621,8 +621,8 @@ function logger($msg, $level = 0) { $loglevel = intval(Config::get('system','loglevel')); if ( - ! $debugging - || ! $logfile + !$debugging + || !$logfile || $level > $loglevel ) { return; @@ -689,7 +689,7 @@ function dlogger($msg, $level = 0) { } $logfile = Config::get('system', 'dlogfile'); - if (! $logfile) { + if (!$logfile) { return; } @@ -1253,7 +1253,7 @@ function prepare_body(array &$item, $attach = false, $is_preview = false) $s = $hook_data['html']; unset($hook_data); - if (! $attach) { + if (!$attach) { // Replace the blockquotes with quotes that are used in mails. $mailquote = '
'; $s = str_replace(['
', '
', '
'], [$mailquote, $mailquote, $mailquote], $s); @@ -1553,7 +1553,7 @@ function generate_user_guid() { $x = q("SELECT `uid` FROM `user` WHERE `guid` = '%s' LIMIT 1", dbesc($guid) ); - if (! DBM::is_result($x)) { + if (!DBM::is_result($x)) { $found = false; } } while ($found == true); @@ -1595,7 +1595,7 @@ function base64url_decode($s) { * // Uncomment if you find you need it. * * $l = strlen($s); - * if (! strpos($s,'=')) { + * if (!strpos($s,'=')) { * $m = $l % 4; * if ($m == 2) * $s .= '=='; @@ -1818,7 +1818,7 @@ function file_tag_update_pconfig($uid, $file_old, $file_new, $type = 'file') { $check_new_tags = explode(",",file_tag_file_to_list($file_new,$type)); foreach ($check_new_tags as $tag) { - if (! stristr($saved,$lbracket . file_tag_encode($tag) . $rbracket)) { + if (!stristr($saved,$lbracket . file_tag_encode($tag) . $rbracket)) { $new_tags[] = $tag; } } @@ -1830,7 +1830,7 @@ function file_tag_update_pconfig($uid, $file_old, $file_new, $type = 'file') { $check_deleted_tags = explode(",",file_tag_file_to_list($file_old,$type)); foreach ($check_deleted_tags as $tag) { - if (! stristr($file_new,$lbracket . file_tag_encode($tag) . $rbracket)) { + if (!stristr($file_new,$lbracket . file_tag_encode($tag) . $rbracket)) { $deleted_tags[] = $tag; } } @@ -1859,20 +1859,17 @@ function file_tag_update_pconfig($uid, $file_old, $file_new, $type = 'file') { return true; } -function file_tag_save_file($uid, $item, $file) +function file_tag_save_file($uid, $item_id, $file) { - if (! intval($uid)) { + if (!intval($uid)) { return false; } - $r = q("SELECT `file` FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1", - intval($item), - intval($uid) - ); - if (DBM::is_result($r)) { - if (!stristr($r[0]['file'],'[' . file_tag_encode($file) . ']')) { - $fields = ['file' => $r[0]['file'] . '[' . file_tag_encode($file) . ']']; - Item::update($fields, ['id' => $item]); + $item = Item::selectFirst(['file'], ['id' => $item_id, 'uid' => $uid]); + if (DBM::is_result($item)) { + if (!stristr($item['file'],'[' . file_tag_encode($file) . ']')) { + $fields = ['file' => $item['file'] . '[' . file_tag_encode($file) . ']']; + Item::update($fields, ['id' => $item_id]); } $saved = PConfig::get($uid, 'system', 'filetags'); if (!strlen($saved) || !stristr($saved, '[' . file_tag_encode($file) . ']')) { @@ -1883,9 +1880,9 @@ function file_tag_save_file($uid, $item, $file) return true; } -function file_tag_unsave_file($uid, $item, $file, $cat = false) +function file_tag_unsave_file($uid, $item_id, $file, $cat = false) { - if (! intval($uid)) { + if (!intval($uid)) { return false; } @@ -1897,16 +1894,13 @@ function file_tag_unsave_file($uid, $item, $file, $cat = false) $termtype = TERM_FILE; } - $r = q("SELECT `file` FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1", - intval($item), - intval($uid) - ); - if (! DBM::is_result($r)) { + $item = Item::selectFirst(['file'], ['id' => $item_id, 'uid' => $uid]); + if (!DBM::is_result($item)) { return false; } - $fields = ['file' => str_replace($pattern,'',$r[0]['file'])]; - Item::update($fields, ['id' => $item]); + $fields = ['file' => str_replace($pattern,'',$item['file'])]; + Item::update($fields, ['id' => $item_id]); $r = q("SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d", dbesc($file), diff --git a/mod/starred.php b/mod/starred.php index ce0c8fc09c..78ba4ce61e 100644 --- a/mod/starred.php +++ b/mod/starred.php @@ -11,32 +11,29 @@ function starred_init(App $a) { $starred = 0; $message_id = null; - if (! local_user()) { + if (!local_user()) { killme(); } if ($a->argc > 1) { $message_id = intval($a->argv[1]); } - if (! $message_id) { + if (!$message_id) { killme(); } - $r = q("SELECT `starred` FROM `item` WHERE `uid` = %d AND `id` = %d LIMIT 1", - intval(local_user()), - intval($message_id) - ); - if (! DBM::is_result($r)) { + $item = Item::selectForUser(local_user(), ['starred'], ['uid' => local_user(), 'id' => $message_id]); + if (!DBM::is_result($item)) { killme(); } - if (! intval($r[0]['starred'])) { + if (!intval($item['starred'])) { $starred = 1; } Item::update(['starred' => $starred], ['id' => $message_id]); // See if we've been passed a return path to redirect to - $return_path = ((x($_REQUEST,'return')) ? $_REQUEST['return'] : ''); + $return_path = (x($_REQUEST,'return') ? $_REQUEST['return'] : ''); if ($return_path) { $rand = '_=' . time(); if (strpos($return_path, '?')) { diff --git a/mod/tagger.php b/mod/tagger.php index 400c7787f6..6267552636 100644 --- a/mod/tagger.php +++ b/mod/tagger.php @@ -175,23 +175,19 @@ EOT; } // if the original post is on this site, update it. - - $r = q("SELECT `tag`,`id`,`uid` FROM `item` WHERE `origin`=1 AND `uri`='%s' LIMIT 1", - dbesc($item['uri']) - ); - - if (DBM::is_result($r)) { + $original_item = Item::selectFirst(['tag','id','uid'], ['origin' => true, 'uri' => $item['uri']]); + if (DBM::is_result($original_item)) { $x = q("SELECT `blocktags` FROM `user` WHERE `uid`=%d LIMIT 1", - intval($r[0]['uid']) + intval($original_item['uid']) ); $t = q("SELECT COUNT(`tid`) AS `tcount` FROM `term` WHERE `oid`=%d AND `term`='%s'", - intval($r[0]['id']), + intval($original_item['id']), dbesc($term) ); if (DBM::is_result($x) && !$x[0]['blocktags'] && $t[0]['tcount'] == 0){ q("INSERT INTO term (`oid`, `otype`, `type`, `term`, `url`, `uid`) VALUE (%d, %d, %d, '%s', '%s', %d)", - intval($r[0]['id']), + intval($original_item['id']), $term_objtype, TERM_HASHTAG, dbesc($term), diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index 511cd0444a..208eb112c6 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -938,10 +938,10 @@ class DFRN if (($item['parent'] != $item['id']) || ($item['parent-uri'] !== $item['uri']) || (($item['thr-parent'] !== '') && ($item['thr-parent'] !== $item['uri']))) { $parent_item = (($item['thr-parent']) ? $item['thr-parent'] : $item['parent-uri']); - $parent = q("SELECT `guid`,`plink` FROM `item` WHERE `uri` = '%s' AND `uid` = %d", dbesc($parent_item), intval($item['uid'])); + $parent = Item::selectFirst(['guid','plink'], ['uri' => $parent_item, 'uid' => $item['uid']]); $attributes = ["ref" => $parent_item, "type" => "text/html", - "href" => $parent[0]['plink'], - "dfrn:diaspora_guid" => $parent[0]['guid']]; + "href" => $parent['plink'], + "dfrn:diaspora_guid" => $parent['guid']]; XML::addElement($doc, $entry, "thr:in-reply-to", "", $attributes); } @@ -2161,13 +2161,8 @@ class DFRN $is_a_remote_action = false; - $r = q( - "SELECT `item`.`parent-uri` FROM `item` - WHERE `item`.`uri` = '%s' - LIMIT 1", - dbesc($item["parent-uri"]) - ); - if (DBM::is_result($r)) { + $parent = Item::selectFirst(['parent-uri'], ['uri' => $item["parent-uri"]]); + if (DBM::is_result($parent)) { $r = q( "SELECT `item`.`forum_mode`, `item`.`wall` FROM `item` INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id` @@ -2175,9 +2170,9 @@ class DFRN AND `item`.`uid` = %d $sql_extra LIMIT 1", - dbesc($r[0]["parent-uri"]), - dbesc($r[0]["parent-uri"]), - dbesc($r[0]["parent-uri"]), + dbesc($parent["parent-uri"]), + dbesc($parent["parent-uri"]), + dbesc($parent["parent-uri"]), intval($importer["importer_uid"]) ); if (DBM::is_result($r)) { @@ -2318,25 +2313,15 @@ class DFRN $item["gravity"] = GRAVITY_LIKE; // only one like or dislike per person // splitted into two queries for performance issues - $r = q( - "SELECT `id` FROM `item` WHERE `uid` = %d AND `author-id` = %d AND `verb` = '%s' AND `parent-uri` = '%s' AND NOT `deleted` LIMIT 1", - intval($item["uid"]), - intval($item["author-id"]), - dbesc($item["verb"]), - dbesc($item["parent-uri"]) - ); - if (DBM::is_result($r)) { + $condition = ['uid' => $item["uid"], 'author-id' => $item["author-id"], + 'verb' => $item["verb"], 'parent-uri' => $item["parent-uri"]]; + if (dba::exists('item', $condition)) { return false; } - $r = q( - "SELECT `id` FROM `item` WHERE `uid` = %d AND `author-id` = %d AND `verb` = '%s' AND `thr-parent` = '%s' AND NOT `deleted` LIMIT 1", - intval($item["uid"]), - intval($item["author-id"]), - dbesc($item["verb"]), - dbesc($item["parent-uri"]) - ); - if (DBM::is_result($r)) { + $condition = ['uid' => $item["uid"], 'author-id' => $item["author-id"], + 'verb' => $item["verb"], 'thr-parent' => $item["parent-uri"]]; + if (dba::exists('item', $condition)) { return false; } } else { @@ -2348,22 +2333,17 @@ class DFRN $xt = XML::parseString($item["target"], false); if ($xt->type == ACTIVITY_OBJ_NOTE) { - $r = q( - "SELECT `id`, `tag` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", - dbesc($xt->id), - intval($importer["importer_uid"]) - ); - - if (!DBM::is_result($r)) { + $item_tag = Item::selectFirst(['id', 'tag'], ['uri' => $xt->id, 'uid' => $importer["importer_uid"]]); + if (!DBM::is_result($item_tag)) { logger("Query failed to execute, no result returned in " . __FUNCTION__); return false; } // extract tag, if not duplicate, add to parent item if ($xo->content) { - if (!stristr($r[0]["tag"], trim($xo->content))) { - $tag = $r[0]["tag"] . (strlen($r[0]["tag"]) ? ',' : '') . '#[url=' . $xo->id . ']'. $xo->content . '[/url]'; - Item::update(['tag' => $tag], ['id' => $r[0]["id"]]); + if (!stristr($item_tag["tag"], trim($xo->content))) { + $tag = $item_tag["tag"] . (strlen($item_tag["tag"]) ? ',' : '') . '#[url=' . $xo->id . ']'. $xo->content . '[/url]'; + Item::update(['tag' => $tag], ['id' => $item_tag["id"]]); } } } diff --git a/src/Worker/OnePoll.php b/src/Worker/OnePoll.php index e42612cd31..43526a372b 100644 --- a/src/Worker/OnePoll.php +++ b/src/Worker/OnePoll.php @@ -438,12 +438,10 @@ class OnePoll $refs_arr[$x] = "'" . Email::msgid2iri(str_replace(['<', '>', ' '],['', '', ''],dbesc($refs_arr[$x]))) . "'"; } } - $qstr = implode(',', $refs_arr); - $r = q("SELECT `parent-uri` FROM `item` USE INDEX (`uid_uri`) WHERE `uri` IN ($qstr) AND `uid` = %d LIMIT 1", - intval($importer_uid) - ); - if (DBM::is_result($r)) { - $datarray['parent-uri'] = $r[0]['parent-uri']; // Set the parent as the top-level item + $condition = ['uri' => $refs_arr, 'uid' => $importer_uid]; + $parent = Item::selectFirst(['parent-uri'], $condition); + if (DBM::is_result($parent)) { + $datarray['parent-uri'] = $parent['parent-uri']; // Set the parent as the top-level item } } @@ -472,12 +470,11 @@ class OnePoll // If it seems to be a reply but a header couldn't be found take the last message with matching subject if (empty($datarray['parent-uri']) && $reply) { - $r = q("SELECT `parent-uri` FROM `item` WHERE `title` = \"%s\" AND `uid` = %d AND `network` = '%s' ORDER BY `created` DESC LIMIT 1", - dbesc(protect_sprintf($datarray['title'])), - intval($importer_uid), - dbesc(NETWORK_MAIL)); - if (DBM::is_result($r)) { - $datarray['parent-uri'] = $r[0]['parent-uri']; + $condition = ['title' => $datarray['title'], 'uid' => importer_uid, 'network' => NETWORK_MAIL]; + $params = ['order' => ['created' => true]]; + $parent = Item::selectFirst(['parent-uri'], $condition, $params); + if (DBM::is_result($parent)) { + $datarray['parent-uri'] = $parent['parent-uri']; } } diff --git a/src/Worker/TagUpdate.php b/src/Worker/TagUpdate.php index f6a141ad6d..1ecc4b5e9b 100644 --- a/src/Worker/TagUpdate.php +++ b/src/Worker/TagUpdate.php @@ -27,7 +27,7 @@ class TagUpdate dba::close($messages); - $messages = dba::p("SELECT `guid` FROM `item` WHERE `uid` = 0"); + $messages = dba::select('item', ['guid'], ['uid' => 0]); logger('fetched messages: ' . dba::num_rows($messages)); while ($message = dba::fetch(messages)) { From 81ac7c33da119dbe0f9c4185c795b965305beb9d Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 21 Jun 2018 07:46:06 +0000 Subject: [PATCH 2/4] Order search results by id --- mod/search.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mod/search.php b/mod/search.php index 6580246e4a..0790098a53 100644 --- a/mod/search.php +++ b/mod/search.php @@ -211,7 +211,8 @@ function search_content(App $a) { } dba::close($terms); - $items = Item::selectForUser(local_user(), [], ['id' => array_reverse($itemids)]); + $params = ['order' => ['id' => true]]; + $items = Item::selectForUser(local_user(), [], ['id' => $itemids], $params); $r = dba::inArray($items); } else { logger("Start fulltext search for '".$search."'", LOGGER_DEBUG); From 5743bb0daec2f91f06689c84a69c8d7315311c51 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 21 Jun 2018 08:23:35 +0000 Subject: [PATCH 3/4] Fix Issue 5252 --- mod/search.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/mod/search.php b/mod/search.php index 0790098a53..d64ce7d0e1 100644 --- a/mod/search.php +++ b/mod/search.php @@ -21,7 +21,7 @@ function search_saved_searches() { $o = ''; $search = ((x($_GET,'search')) ? notags(trim(rawurldecode($_GET['search']))) : ''); - if (! Feature::isEnabled(local_user(),'savedsearch')) + if (!Feature::isEnabled(local_user(),'savedsearch')) return $o; $r = q("SELECT `id`,`term` FROM `search` WHERE `uid` = %d", @@ -184,7 +184,7 @@ function search_content(App $a) { break; } - if (! $search) + if (!$search) return $o; if (Config::get('system','only_tag_search')) @@ -211,9 +211,13 @@ function search_content(App $a) { } dba::close($terms); - $params = ['order' => ['id' => true]]; - $items = Item::selectForUser(local_user(), [], ['id' => $itemids], $params); - $r = dba::inArray($items); + if (!empty($itemids)) { + $params = ['order' => ['id' => true]]; + $items = Item::selectForUser(local_user(), [], ['id' => $itemids], $params); + $r = dba::inArray($items); + } else { + $r = []; + } } else { logger("Start fulltext search for '".$search."'", LOGGER_DEBUG); @@ -251,4 +255,3 @@ function search_content(App $a) { return $o; } - From d643e00d33883584ff599d92a8929351c6e48503 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 21 Jun 2018 15:14:01 +0000 Subject: [PATCH 4/4] Standards and a new function to fetch content --- include/api.php | 26 +++++++++++++------------- include/conversation.php | 2 +- mod/tagger.php | 2 +- src/Model/Item.php | 38 ++++++++++++++++++++++++++++++++++++-- src/Protocol/DFRN.php | 6 +++--- src/Protocol/Diaspora.php | 4 ++-- src/Protocol/OStatus.php | 2 +- src/Worker/Delivery.php | 2 +- src/Worker/Notifier.php | 2 +- 9 files changed, 59 insertions(+), 25 deletions(-) diff --git a/include/api.php b/include/api.php index 8b0d0c0d91..a5088756ae 100644 --- a/include/api.php +++ b/include/api.php @@ -1547,7 +1547,7 @@ function api_search($type) $params = ['order' => ['id' => true], 'limit' => [$start, $count]]; $statuses = Item::selectForUser(api_user(), [], $condition, $params); - $data['status'] = api_format_items(dba::inArray($statuses), $user_info); + $data['status'] = api_format_items(Item::inArray($statuses), $user_info); return api_format_data("statuses", $type, $data); } @@ -1614,7 +1614,7 @@ function api_statuses_home_timeline($type) $params = ['order' => ['id' => true], 'limit' => [$start, $count]]; $statuses = Item::selectForUser(api_user(), [], $condition, $params); - $items = dba::inArray($statuses); + $items = Item::inArray($statuses); $ret = api_format_items($items, $user_info, false, $type); @@ -1691,7 +1691,7 @@ function api_statuses_public_timeline($type) $params = ['order' => ['iid' => true], 'limit' => [$start, $count]]; $statuses = Item::selectThreadForUser(api_user(), Item::DISPLAY_FIELDLIST, $condition, $params); - $r = dba::inArray($statuses); + $r = Item::inArray($statuses); } else { $condition = ["`verb` = ? AND `id` > ? AND NOT `private` AND `wall` AND NOT `user`.`hidewall` AND `item`.`origin`", ACTIVITY_POST, $since_id]; @@ -1708,7 +1708,7 @@ function api_statuses_public_timeline($type) $params = ['order' => ['id' => true], 'limit' => [$start, $count]]; $statuses = Item::selectForUser(api_user(), [], $condition, $params); - $r = dba::inArray($statuses); + $r = Item::inArray($statuses); } $ret = api_format_items($r, $user_info, false, $type); @@ -1767,7 +1767,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(dba::inArray($statuses), $user_info, false, $type); + $ret = api_format_items(Item::inArray($statuses), $user_info, false, $type); $data = ['status' => $ret]; switch ($type) { @@ -1843,7 +1843,7 @@ function api_statuses_show($type) throw new BadRequestException("There is no status with this id."); } - $ret = api_format_items(dba::inArray($statuses), $user_info, false, $type); + $ret = api_format_items(Item::inArray($statuses), $user_info, false, $type); if ($conversation) { $data = ['status' => $ret]; @@ -1923,7 +1923,7 @@ function api_conversation_show($type) throw new BadRequestException("There is no status with id $id."); } - $ret = api_format_items(dba::inArray($statuses), $user_info, false, $type); + $ret = api_format_items(Item::inArray($statuses), $user_info, false, $type); $data = ['status' => $ret]; return api_format_data("statuses", $type, $data); @@ -2089,7 +2089,7 @@ function api_statuses_mentions($type) $params = ['order' => ['id' => true], 'limit' => [$start, $count]]; $statuses = Item::selectForUser(api_user(), [], $condition, $params); - $ret = api_format_items(dba::inArray($statuses), $user_info, false, $type); + $ret = api_format_items(Item::inArray($statuses), $user_info, false, $type); $data = ['status' => $ret]; switch ($type) { @@ -2169,7 +2169,7 @@ function api_statuses_user_timeline($type) $params = ['order' => ['id' => true], 'limit' => [$start, $count]]; $statuses = Item::selectForUser(api_user(), [], $condition, $params); - $ret = api_format_items(dba::inArray($statuses), $user_info, true, $type); + $ret = api_format_items(Item::inArray($statuses), $user_info, true, $type); $data = ['status' => $ret]; switch ($type) { @@ -2311,7 +2311,7 @@ function api_favorites($type) $statuses = Item::selectForUser(api_user(), [], $condition, $params); - $ret = api_format_items(dba::inArray($statuses), $user_info, false, $type); + $ret = api_format_items(Item::inArray($statuses), $user_info, false, $type); } $data = ['status' => $ret]; @@ -2728,7 +2728,7 @@ function api_format_items_activities(&$item, $type = "json") $condition = ['uid' => $item['uid'], 'thr-parent' => $item['uri']]; $ret = Item::selectForUser($item['uid'], ['author-id', 'verb'], $condition); - while ($item = dba::fetch($ret)) { + while ($item = Item::fetch($ret)) { // not used as result should be structured like other user data //builtin_activity_puller($i, $activities); @@ -3117,7 +3117,7 @@ function api_lists_statuses($type) $params = ['order' => ['id' => true], 'limit' => [$start, $count]]; $statuses = Item::selectForUser(api_user(), [], $condition, $params); - $items = api_format_items(dba::inArray($statuses), $user_info, false, $type); + $items = api_format_items(Item::inArray($statuses), $user_info, false, $type); $data = ['status' => $items]; switch ($type) { @@ -4636,7 +4636,7 @@ function prepare_photo_data($type, $scale, $photo_id) $statuses = Item::selectForUser(api_user(), [], $condition); // prepare output of comments - $commentData = api_format_items(dba::inArray($statuses), $user_info, false, $type); + $commentData = api_format_items(Item::inArray($statuses), $user_info, false, $type); $comments = []; if ($type == "xml") { $k = 0; diff --git a/include/conversation.php b/include/conversation.php index 5d013014b7..08220d4bb2 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -779,7 +779,7 @@ function conversation_add_children($parents, $block_authors, $order, $uid) { } $thread_items = Item::selectForUser(local_user(), [], $condition, $params); - $comments = dba::inArray($thread_items); + $comments = Item::inArray($thread_items); if (count($comments) != 0) { $items = array_merge($items, $comments); diff --git a/mod/tagger.php b/mod/tagger.php index 6267552636..717c094776 100644 --- a/mod/tagger.php +++ b/mod/tagger.php @@ -175,7 +175,7 @@ EOT; } // if the original post is on this site, update it. - $original_item = Item::selectFirst(['tag','id','uid'], ['origin' => true, 'uri' => $item['uri']]); + $original_item = Item::selectFirst(['tag', 'id', 'uid'], ['origin' => true, 'uri' => $item['uri']]); if (DBM::is_result($original_item)) { $x = q("SELECT `blocktags` FROM `user` WHERE `uid`=%d LIMIT 1", intval($original_item['uid']) diff --git a/src/Model/Item.php b/src/Model/Item.php index f448c6ba7f..d4c5e81704 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -56,6 +56,40 @@ class Item extends BaseObject 'author-id', 'author-link', 'owner-link', 'contact-uid', 'signed_text', 'signature', 'signer']; + /** + * @brief Fetch a single item row + * + * @param mixed $stmt statement object + * @return array current row + */ + public static function fetch($stmt) + { + $row = dba::fetch($stmt); + + return $row; + } + + /** + * @brief Fills an array with data from an item query + * + * @param object $stmt statement object + * @return array Data array + */ + public static function inArray($stmt, $do_close = true) { + if (is_bool($stmt)) { + return $stmt; + } + + $data = []; + while ($row = self::fetch($stmt)) { + $data[] = $row; + } + if ($do_close) { + dba::close($stmt); + } + return $data; + } + /** * Retrieve a single record from the item table for a given user and returns it in an associative array * @@ -118,7 +152,7 @@ class Item extends BaseObject if (is_bool($result)) { return $result; } else { - $row = dba::fetch($result); + $row = self::fetch($result); dba::close($result); return $row; } @@ -225,7 +259,7 @@ class Item extends BaseObject if (is_bool($result)) { return $result; } else { - $row = dba::fetch($result); + $row = self::fetch($result); dba::close($result); return $row; } diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index 208eb112c6..1047ffdfe2 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -246,7 +246,7 @@ class DFRN if (!empty($ids)) { $ret = Item::select(Item::DELIVER_FIELDLIST, ['id' => $ids]); - $items = dba::inArray($ret); + $items = Item::inArray($ret); } else { $items = []; } @@ -330,7 +330,7 @@ class DFRN } $ret = Item::select(Item::DELIVER_FIELDLIST, $condition); - $items = dba::inArray($ret); + $items = Item::inArray($ret); if (!DBM::is_result($items)) { killme(); } @@ -938,7 +938,7 @@ class DFRN if (($item['parent'] != $item['id']) || ($item['parent-uri'] !== $item['uri']) || (($item['thr-parent'] !== '') && ($item['thr-parent'] !== $item['uri']))) { $parent_item = (($item['thr-parent']) ? $item['thr-parent'] : $item['parent-uri']); - $parent = Item::selectFirst(['guid','plink'], ['uri' => $parent_item, 'uid' => $item['uid']]); + $parent = Item::selectFirst(['guid', 'plink'], ['uri' => $parent_item, 'uid' => $item['uid']]); $attributes = ["ref" => $parent_item, "type" => "text/html", "href" => $parent['plink'], "dfrn:diaspora_guid" => $parent['guid']]; diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index c42e8c2484..29fb42a808 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -2218,7 +2218,7 @@ class Diaspora // Send all existing comments and likes to the requesting server $comments = Item::select(['id', 'verb', 'self'], ['parent' => $item['id']]); - while ($comment = dba::fetch($comments)) { + while ($comment = Item::fetch($comments)) { if ($comment['id'] == $comment['parent']) { continue; } @@ -2771,7 +2771,7 @@ class Diaspora return false; } - while ($item = dba::fetch($r)) { + while ($item = Item::fetch($r)) { // Fetch the parent item $parent = Item::selectFirst(['author-link'], ['id' => $item["parent"]]); diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php index 957f60a2ce..2c826221e7 100644 --- a/src/Protocol/OStatus.php +++ b/src/Protocol/OStatus.php @@ -2152,7 +2152,7 @@ class OStatus $ret = Item::select([], $condition, $params); } - $items = dba::inArray($ret); + $items = Item::inArray($ret); $doc = new DOMDocument('1.0', 'utf-8'); $doc->formatOutput = true; diff --git a/src/Worker/Delivery.php b/src/Worker/Delivery.php index 15273762ab..e505f4bd70 100644 --- a/src/Worker/Delivery.php +++ b/src/Worker/Delivery.php @@ -64,7 +64,7 @@ class Delivery extends BaseObject $itemdata = Item::select([], $condition, $params); $items = []; - while ($item = dba::fetch($itemdata)) { + while ($item = Item::fetch($itemdata)) { if ($item['id'] == $parent_id) { $parent = $item; } diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index 61b296a265..fcf36bd55a 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -124,7 +124,7 @@ class Notifier { return; } - $items = dba::inArray($ret); + $items = Item::inArray($ret); // avoid race condition with deleting entries if ($items[0]['deleted']) {