From 16a081871c025692b771bc3d96ac0bb331387aa9 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Mon, 20 Aug 2018 06:26:05 +0200 Subject: [PATCH] Improved profile page, improved "limit" handling (#5639) * Improved profile page, improved "limit" handling * Update will now work again * Update will work now --- include/conversation.php | 1 + mod/community.php | 5 ++-- mod/profile.php | 61 +++++++++++++--------------------------- mod/redir.php | 2 +- src/Database/DBA.php | 2 +- src/Worker/DBClean.php | 18 ++++++------ 6 files changed, 34 insertions(+), 55 deletions(-) diff --git a/include/conversation.php b/include/conversation.php index 665d9d4831..db14558871 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -471,6 +471,7 @@ function conversation(App $a, array $items, $mode, $update, $preview = false, $o . "'; var profile_page = " . $a->pager['page'] . "; \r\n"; } } elseif ($mode === 'profile') { + $items = conversation_add_children($items, false, $order, $uid); $profile_owner = $a->profile['profile_uid']; if (!$update) { diff --git a/mod/community.php b/mod/community.php index cb4f69c917..f148191bbc 100644 --- a/mod/community.php +++ b/mod/community.php @@ -195,15 +195,14 @@ function community_getitems($start, $itemspage, $content) INNER JOIN `contact` AS `author` ON `author`.`id`=`item`.`author-id` WHERE `thread`.`visible` AND NOT `thread`.`deleted` AND NOT `thread`.`moderated` AND NOT `thread`.`private` AND `thread`.`wall` AND `thread`.`origin` - ORDER BY `thread`.`commented` DESC LIMIT " . intval($start) . ", " . intval($itemspage) - ); + ORDER BY `thread`.`commented` DESC LIMIT ?, ?", $start, $itemspage); return DBA::toArray($r); } elseif ($content == 'global') { $r = DBA::p("SELECT `uri` FROM `thread` INNER JOIN `item` ON `item`.`id` = `thread`.`iid` INNER JOIN `contact` AS `author` ON `author`.`id`=`item`.`author-id` WHERE `thread`.`uid` = 0 AND NOT `author`.`hidden` AND NOT `author`.`blocked` - ORDER BY `thread`.`commented` DESC LIMIT " . intval($start) . ", " . intval($itemspage)); + ORDER BY `thread`.`commented` DESC LIMIT ?, ?", $start, $itemspage); return DBA::toArray($r); } diff --git a/mod/profile.php b/mod/profile.php index 5d7489ebb4..4f2e22d674 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -23,7 +23,7 @@ use Friendica\Util\DateTimeFormat; function profile_init(App $a) { - if (!x($a->page, 'aside')) { + if (empty($a->page['aside'])) { $a->page['aside'] = ''; } @@ -54,15 +54,15 @@ function profile_init(App $a) $blocked = !local_user() && !remote_user() && Config::get('system', 'block_public'); $userblock = !local_user() && !remote_user() && $a->profile['hidewall']; - if (x($a->profile, 'page-flags') && $a->profile['page-flags'] == Contact::PAGE_COMMUNITY) { + if (!empty($a->profile['page-flags']) && $a->profile['page-flags'] == Contact::PAGE_COMMUNITY) { $a->page['htmlhead'] .= ''; } - if (x($a->profile, 'openidserver')) { + if (!empty($a->profile['openidserver'])) { $a->page['htmlhead'] .= '' . "\r\n"; } - if (x($a->profile, 'openid')) { + if (!empty($a->profile['openid'])) { $delegate = strstr($a->profile['openid'], '://') ? $a->profile['openid'] : 'https://' . $a->profile['openid']; $a->page['htmlhead'] .= '' . "\r\n"; } @@ -109,7 +109,7 @@ function profile_content(App $a, $update = 0) } } - if (!x($category)) { + if (empty($category)) { $category = defaults($_GET, 'category', ''); } @@ -140,7 +140,7 @@ function profile_content(App $a, $update = 0) $contact_id = 0; - if (x($_SESSION, 'remote') && is_array($_SESSION['remote'])) { + if (!empty($_SESSION['remote'])) { foreach ($_SESSION['remote'] as $v) { if ($v['uid'] == $a->profile['profile_uid']) { $contact_id = $v['cid']; @@ -171,14 +171,14 @@ function profile_content(App $a, $update = 0) $is_owner = local_user() == $a->profile['profile_uid']; $last_updated_key = "profile:" . $a->profile['profile_uid'] . ":" . local_user() . ":" . remote_user(); - if (x($a->profile, 'hidewall') && !$is_owner && !$remote_contact) { + if (!empty($a->profile['hidewall']) && !$is_owner && !$remote_contact) { notice(L10n::t('Access to this profile has been restricted.') . EOL); return; } if (!$update) { $tab = false; - if (x($_GET, 'tab')) { + if (!empty($_GET['tab'])) { $tab = notags(trim($_GET['tab'])); } @@ -196,7 +196,7 @@ function profile_content(App $a, $update = 0) $commvisitor = $commpage && $remote_contact; $a->page['aside'] .= posted_date_widget(System::baseUrl(true) . '/profile/' . $a->profile['nickname'], $a->profile['profile_uid'], true); - $a->page['aside'] .= Widget::categories(System::baseUrl(true) . '/profile/' . $a->profile['nickname'], (x($category) ? xmlify($category) : '')); + $a->page['aside'] .= Widget::categories(System::baseUrl(true) . '/profile/' . $a->profile['nickname'], (!empty($category) ? xmlify($category) : '')); $a->page['aside'] .= Widget::tagCloud(); if (can_write_wall($a->profile['profile_uid'])) { @@ -227,7 +227,7 @@ function profile_content(App $a, $update = 0) $sql_extra2 = ''; if ($update) { - $last_updated = (x($_SESSION['last_updated'], $last_updated_key) ? $_SESSION['last_updated'][$last_updated_key] : 0); + $last_updated = (!empty($_SESSION['last_updated'][$last_updated_key]) ? $_SESSION['last_updated'][$last_updated_key] : 0); // If the page user is the owner of the page we should query for unseen // items. Otherwise use a timestamp of the last succesful update request. @@ -238,7 +238,7 @@ function profile_content(App $a, $update = 0) $sql_extra4 = " AND `item`.`received` > '" . $gmupdate . "'"; } - $r = q("SELECT distinct(parent) AS `item_id`, `item`.`network` AS `item_network`, `item`.`created` + $items = q("SELECT DISTINCT(`parent-uri`) AS `uri` FROM `item` INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND NOT `contact`.`blocked` AND NOT `contact`.`pending` WHERE `item`.`uid` = %d AND `item`.`visible` AND @@ -250,38 +250,33 @@ function profile_content(App $a, $update = 0) intval($a->profile['profile_uid']), intval(GRAVITY_ACTIVITY) ); - if (!DBA::isResult($r)) { + if (!DBA::isResult($items)) { return ''; } } else { $sql_post_table = ""; - if (x($category)) { + if (!empty($category)) { $sql_post_table = sprintf("INNER JOIN (SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d ORDER BY `tid` DESC) AS `term` ON `item`.`id` = `term`.`oid` ", DBA::escape(protect_sprintf($category)), intval(TERM_OBJ_POST), intval(TERM_CATEGORY), intval($a->profile['profile_uid'])); } - if (x($hashtags)) { + if (!empty($hashtags)) { $sql_post_table .= sprintf("INNER JOIN (SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d ORDER BY `tid` DESC) AS `term` ON `item`.`id` = `term`.`oid` ", DBA::escape(protect_sprintf($hashtags)), intval(TERM_OBJ_POST), intval(TERM_HASHTAG), intval($a->profile['profile_uid'])); } - if ($datequery) { + if (!empty($datequery)) { $sql_extra2 .= protect_sprintf(sprintf(" AND `thread`.`created` <= '%s' ", DBA::escape(DateTimeFormat::convert($datequery, 'UTC', date_default_timezone_get())))); } - if ($datequery2) { + if (!empty($datequery2)) { $sql_extra2 .= protect_sprintf(sprintf(" AND `thread`.`created` >= '%s' ", DBA::escape(DateTimeFormat::convert($datequery2, 'UTC', date_default_timezone_get())))); } - // Belongs the profile page to a forum? + // Does the profile page belong to a forum? // If not then we can improve the performance with an additional condition - $r = q("SELECT `uid` FROM `user` WHERE `uid` = %d AND `page-flags` IN (%d, %d)", - intval($a->profile['profile_uid']), - intval(Contact::PAGE_COMMUNITY), - intval(Contact::PAGE_PRVGROUP) - ); - - if (!DBA::isResult($r)) { + $condition = ['uid' => $a->profile['profile_uid'], 'page-flags' => [Contact::PAGE_COMMUNITY, Contact::PAGE_PRVGROUP]]; + if (!DBA::exists('user', $condition)) { $sql_extra3 = sprintf(" AND `thread`.`contact-id` = %d ", intval(intval($a->profile['contact_id']))); } else { $sql_extra3 = ""; @@ -305,7 +300,7 @@ function profile_content(App $a, $update = 0) $pager_sql = sprintf(" LIMIT %d, %d ", intval($a->pager['start']), intval($a->pager['itemspage'])); - $r = q("SELECT `thread`.`iid` AS `item_id`, `thread`.`network` AS `item_network` + $items = q("SELECT `item`.`uri` FROM `thread` STRAIGHT_JOIN `item` ON `item`.`id` = `thread`.`iid` $sql_post_table @@ -321,31 +316,15 @@ function profile_content(App $a, $update = 0) ); } - $parents_arr = []; - $parents_str = ''; - // Set a time stamp for this page. We will make use of it when we // search for new items (update routine) $_SESSION['last_updated'][$last_updated_key] = time(); - if (DBA::isResult($r)) { - foreach ($r as $rr) { - $parents_arr[] = $rr['item_id']; - } - - $condition = ['uid' => $a->profile['profile_uid'], 'parent' => $parents_arr]; - $result = Item::selectForUser($a->profile['profile_uid'], [], $condition); - $items = conv_sort(Item::inArray($result), 'created'); - } else { - $items = []; - } - if ($is_owner && !$update && !Config::get('theme', 'hide_eventlist')) { $o .= Profile::getBirthdays(); $o .= Profile::getEventsReminderHTML(); } - if ($is_owner) { $unseen = Item::exists(['wall' => true, 'unseen' => true, 'uid' => local_user()]); if ($unseen) { diff --git a/mod/redir.php b/mod/redir.php index 727b70d660..28d20b65a2 100644 --- a/mod/redir.php +++ b/mod/redir.php @@ -80,7 +80,7 @@ function redir_init(App $a) { } // Doing remote auth with dfrn. - if (local_user()&& (!empty($contact['dfrn-id']) || !empty($contact['issued-id']))) { + if (local_user() && (!empty($contact['dfrn-id']) || !empty($contact['issued-id']))) { $dfrn_id = $orig_id = (($contact['issued-id']) ? $contact['issued-id'] : $contact['dfrn-id']); if ($contact['duplex'] && $contact['issued-id']) { diff --git a/src/Database/DBA.php b/src/Database/DBA.php index c0b783c29d..9dc1984afb 100644 --- a/src/Database/DBA.php +++ b/src/Database/DBA.php @@ -1459,7 +1459,7 @@ class DBA $limit_string = ''; if (isset($params['limit']) && is_int($params['limit'])) { - $limit_string = " LIMIT " . $params['limit']; + $limit_string = " LIMIT " . intval($params['limit']); } if (isset($params['limit']) && is_array($params['limit'])) { diff --git a/src/Worker/DBClean.php b/src/Worker/DBClean.php index c839bced19..ca0da954c0 100644 --- a/src/Worker/DBClean.php +++ b/src/Worker/DBClean.php @@ -84,7 +84,7 @@ class DBClean { $r = DBA::p("SELECT `id` FROM `item` WHERE `uid` = 0 AND NOT EXISTS (SELECT `guid` FROM `item` AS `i` WHERE `item`.`guid` = `i`.`guid` AND `i`.`uid` != 0) AND `received` < UTC_TIMESTAMP() - INTERVAL ? DAY AND `id` >= ? - ORDER BY `id` LIMIT ".intval($limit), $days_unclaimed, $last_id); + ORDER BY `id` LIMIT ?", $days_unclaimed, $last_id, $limit); $count = DBA::numRows($r); if ($count > 0) { logger("found global item orphans: ".$count); @@ -106,7 +106,7 @@ class DBClean { logger("Deleting items without parents. Last ID: ".$last_id); $r = DBA::p("SELECT `id` FROM `item` WHERE NOT EXISTS (SELECT `id` FROM `item` AS `i` WHERE `item`.`parent` = `i`.`id`) - AND `id` >= ? ORDER BY `id` LIMIT ".intval($limit), $last_id); + AND `id` >= ? ORDER BY `id` LIMIT ?", $last_id, $limit); $count = DBA::numRows($r); if ($count > 0) { logger("found item orphans without parents: ".$count); @@ -132,7 +132,7 @@ class DBClean { logger("Deleting orphaned data from thread table. Last ID: ".$last_id); $r = DBA::p("SELECT `iid` FROM `thread` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`parent` = `thread`.`iid`) AND `iid` >= ? - ORDER BY `iid` LIMIT ".intval($limit), $last_id); + ORDER BY `iid` LIMIT ?", $last_id, $limit); $count = DBA::numRows($r); if ($count > 0) { logger("found thread orphans: ".$count); @@ -158,7 +158,7 @@ class DBClean { logger("Deleting orphaned data from notify table. Last ID: ".$last_id); $r = DBA::p("SELECT `iid`, `id` FROM `notify` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `notify`.`iid`) AND `id` >= ? - ORDER BY `id` LIMIT ".intval($limit), $last_id); + ORDER BY `id` LIMIT ?", $last_id, $limit); $count = DBA::numRows($r); if ($count > 0) { logger("found notify orphans: ".$count); @@ -184,7 +184,7 @@ class DBClean { logger("Deleting orphaned data from notify-threads table. Last ID: ".$last_id); $r = DBA::p("SELECT `id` FROM `notify-threads` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`parent` = `notify-threads`.`master-parent-item`) AND `id` >= ? - ORDER BY `id` LIMIT ".intval($limit), $last_id); + ORDER BY `id` LIMIT ?", $last_id, $limit); $count = DBA::numRows($r); if ($count > 0) { logger("found notify-threads orphans: ".$count); @@ -210,7 +210,7 @@ class DBClean { logger("Deleting orphaned data from sign table. Last ID: ".$last_id); $r = DBA::p("SELECT `iid`, `id` FROM `sign` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `sign`.`iid`) AND `id` >= ? - ORDER BY `id` LIMIT ".intval($limit), $last_id); + ORDER BY `id` LIMIT ?", $last_id, $limit); $count = DBA::numRows($r); if ($count > 0) { logger("found sign orphans: ".$count); @@ -236,7 +236,7 @@ class DBClean { logger("Deleting orphaned data from term table. Last ID: ".$last_id); $r = DBA::p("SELECT `oid`, `tid` FROM `term` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `term`.`oid`) AND `tid` >= ? - ORDER BY `tid` LIMIT ".intval($limit), $last_id); + ORDER BY `tid` LIMIT ?", $last_id, $limit); $count = DBA::numRows($r); if ($count > 0) { logger("found term orphans: ".$count); @@ -303,7 +303,7 @@ class DBClean { $r = DBA::p("SELECT `id` FROM `item` WHERE `uid` = 0 AND NOT EXISTS (SELECT `guid` FROM `item` AS `i` WHERE `item`.`guid` = `i`.`guid` AND `i`.`uid` != 0) AND `received` < UTC_TIMESTAMP() - INTERVAL 90 DAY AND `id` >= ? AND `id` <= ? - ORDER BY `id` LIMIT ".intval($limit), $last_id, $till_id); + ORDER BY `id` LIMIT ?", $last_id, $till_id, $limit); $count = DBA::numRows($r); if ($count > 0) { logger("found global item entries from expired threads: ".$count); @@ -326,7 +326,7 @@ class DBClean { logger("Deleting old conversations. Last created: ".$last_id); $r = DBA::p("SELECT `received`, `item-uri` FROM `conversation` WHERE `received` < UTC_TIMESTAMP() - INTERVAL ? DAY - ORDER BY `received` LIMIT ".intval($limit), $days); + ORDER BY `received` LIMIT ?", $days, $limit); $count = DBA::numRows($r); if ($count > 0) { logger("found old conversations: ".$count);