]> git.mxchange.org Git - friendica.git/commitdiff
Using a view for the network page
authorMichael <heluecht@pirati.ca>
Sat, 15 Aug 2020 11:31:34 +0000 (11:31 +0000)
committerMichael <heluecht@pirati.ca>
Sat, 15 Aug 2020 11:31:34 +0000 (11:31 +0000)
database.sql
mod/network.php
static/dbstructure.config.php
static/dbview.config.php

index 59320fe8729f96ce72e8cdf1c3aed10d29b5dd1b..3236870f3750fd1ef97d045c6c77b5d69b232a1a 100644 (file)
@@ -1,6 +1,6 @@
 -- ------------------------------------------
 -- Friendica 2020.09-dev (Red Hot Poker)
--- DB_UPDATE_VERSION 1359
+-- DB_UPDATE_VERSION 1360
 -- ------------------------------------------
 
 
@@ -1388,6 +1388,65 @@ CREATE VIEW `tag-view` AS SELECT
                        LEFT JOIN `tag` ON `post-tag`.`tid` = `tag`.`id`
                        LEFT JOIN `contact` ON `post-tag`.`cid` = `contact`.`id`;
 
+--
+-- VIEW network-thread-view
+--
+DROP VIEW IF EXISTS `network-thread-view`;
+CREATE VIEW `network-thread-view` AS SELECT 
+       `item`.`uri-id` AS `uri-id`,
+       `item`.`uri` AS `uri`,
+       `item`.`parent-uri-id` AS `parent-uri-id`,
+       `thread`.`iid` AS `parent`,
+       `thread`.`iid` AS `item_id`,
+       `thread`.`received` AS `received`,
+       `thread`.`commented` AS `commented`,
+       `thread`.`created` AS `created`,
+       `thread`.`uid` AS `uid`,
+       `thread`.`starred` AS `starred`,
+       `thread`.`mention` AS `mention`,
+       `thread`.`network` AS `network`,
+       `thread`.`contact-id` AS `contact-id`
+       FROM `thread`
+                       STRAIGHT_JOIN `contact` ON `contact`.`id` = `thread`.`contact-id` AND (NOT `contact`.`blocked` OR `contact`.`pending`)
+                       STRAIGHT_JOIN `item` ON `item`.`id` = `thread`.`iid`
+                       LEFT JOIN `user-item` ON `user-item`.`iid` = `item`.`id` AND `user-item`.`uid` = `thread`.`uid`
+                       LEFT JOIN `user-contact` AS `author` ON `author`.`uid` = `thread`.`uid` AND `author`.`cid` = `thread`.`author-id`
+                       LEFT JOIN `user-contact` AS `owner` ON `owner`.`uid` = `thread`.`uid` AND `owner`.`cid` = `thread`.`owner-id`
+                       WHERE `thread`.`visible` AND NOT `thread`.`deleted` AND NOT `thread`.`moderated`
+                       AND (`user-item`.`hidden` IS NULL OR NOT `user-item`.`hidden`)
+                       AND (`author`.`blocked` IS NULL OR NOT `author`.`blocked`)
+                       AND (`owner`.`blocked` IS NULL OR NOT `owner`.`blocked`);
+
+--
+-- VIEW network-item-view
+--
+DROP VIEW IF EXISTS `network-item-view`;
+CREATE VIEW `network-item-view` AS SELECT 
+       `item`.`parent-uri-id` AS `uri-id`,
+       `item`.`parent-uri` AS `uri`,
+       `item`.`parent` AS `parent`,
+       `item`.`parent` AS `item_id`,
+       `item`.`received` AS `received`,
+       `item`.`commented` AS `commented`,
+       `item`.`created` AS `created`,
+       `item`.`uid` AS `uid`,
+       `item`.`starred` AS `starred`,
+       `item`.`mention` AS `mention`,
+       `item`.`network` AS `network`,
+       `item`.`unseen` AS `unseen`,
+       `item`.`gravity` AS `gravity`,
+       `item`.`contact-id` AS `contact-id`
+       FROM `item`
+                       INNER JOIN `thread` ON `thread`.`iid` = `item`.`parent`
+                       STRAIGHT_JOIN `contact` ON `contact`.`id` = `thread`.`contact-id` AND (NOT `contact`.`blocked` OR `contact`.`pending`)
+                       LEFT JOIN `user-item` ON `user-item`.`iid` = `item`.`id` AND `user-item`.`uid` = `thread`.`uid`
+                       LEFT JOIN `user-contact` AS `author` ON `author`.`uid` = `thread`.`uid` AND `author`.`cid` = `thread`.`author-id`
+                       LEFT JOIN `user-contact` AS `owner` ON `owner`.`uid` = `thread`.`uid` AND `owner`.`cid` = `thread`.`owner-id`
+                       WHERE `thread`.`visible` AND NOT `thread`.`deleted` AND NOT `thread`.`moderated`
+                       AND (`user-item`.`hidden` IS NULL OR NOT `user-item`.`hidden`)
+                       AND (`author`.`blocked` IS NULL OR NOT `author`.`blocked`)
+                       AND (`owner`.`blocked` IS NULL OR NOT `owner`.`blocked`);
+
 --
 -- VIEW owner-view
 --
index b493f7770c53b249ee76e4fbdbd434e665ed4cd7..0002743ab0dff1d8714dba5cee9e919d29a187d3 100644 (file)
@@ -499,19 +499,24 @@ function networkThreadedView(App $a, $update, $parent)
                $o .= status_editor($a, $x);
        }
 
-       $sql_table = $update ? '`item`' : '`thread`';
+       $condition1 = ['uid' => local_user()];
+       $condition2 = [];
 
-       $sql_extra = ($star ? " AND `thread`.`starred` " : '') .
-               ($conv ? " AND $sql_table.`mention`" : '') .
-               ($nets ? sprintf(" AND $sql_table.`network` = '%s' ", DBA::escape($nets)) : '');
+       if ($star) {
+               $condition1['starred'] = true;
+       }
+       if ($conv) {
+               $condition1['mention'] = true;
+       }
+       if ($nets) {
+               $condition1['network'] = $nets;
+       }
 
        if ($datequery) {
-               $sql_extra .= Strings::protectSprintf(sprintf(" AND $sql_table.received <= '%s' ",
-                               DBA::escape(DateTimeFormat::convert($datequery, 'UTC', date_default_timezone_get()))));
+               $condition2 = DBA::mergeConditions($condition2, ["`received` <= ? ", DateTimeFormat::convert($datequery, 'UTC', date_default_timezone_get())]);
        }
        if ($datequery2) {
-               $sql_extra .= Strings::protectSprintf(sprintf(" AND $sql_table.received >= '%s' ",
-                               DBA::escape(DateTimeFormat::convert($datequery2, 'UTC', date_default_timezone_get()))));
+               $condition2 = DBA::mergeConditions($condition2, ["`received` >= ? ", DateTimeFormat::convert($datequery2, 'UTC', date_default_timezone_get())]);
        }
 
        if ($gid) {
@@ -525,7 +530,7 @@ function networkThreadedView(App $a, $update, $parent)
                        // NOTREACHED
                }
 
-               $sql_extra .= sprintf(" AND `thread`.`contact-id` IN (SELECT `contact-id` FROM `group_member` WHERE `gid` = %d) ", intval($gid));
+               $condition2 = DBA::mergeConditions($condition2, ["`contact-id` IN (SELECT `contact-id` FROM `group_member` WHERE `gid` = ?)", $gid]);
 
                $o = Renderer::replaceMacros(Renderer::getMarkupTemplate('section_title.tpl'), [
                        '$title' => DI::l10n()->t('Group: %s', $group['name'])
@@ -533,7 +538,7 @@ function networkThreadedView(App $a, $update, $parent)
        } elseif ($cid) {
                $contact = Contact::getById($cid);
                if (DBA::isResult($contact)) {
-                       $sql_extra .= " AND " . $sql_table . ".`contact-id` = " . intval($cid);
+                       $condition1['contact-id'] = $cid;
 
                        $o = Renderer::replaceMacros(Renderer::getMarkupTemplate('viewcontact_template.tpl'), [
                                'contacts' => [ModuleContact::getContactTemplateVars($contact)],
@@ -558,8 +563,6 @@ function networkThreadedView(App $a, $update, $parent)
                $order_mode = 'commented';
        }
 
-       $sql_order = "$sql_table.$ordering";
-
        $pager = new Pager(DI::l10n(), DI::args()->getQueryString());
 
        networkPager($a, $pager);
@@ -572,22 +575,22 @@ function networkThreadedView(App $a, $update, $parent)
        switch ($order_mode) {
                case 'received':
                        if ($last_received != '') {
-                               $sql_extra .= sprintf(" AND $sql_table.`received` < '%s'", DBA::escape($last_received));
+                               $condition2 = DBA::mergeConditions($condition2, ["`received` < ?", $last_received]);
                        }
                        break;
                case 'commented':
                        if ($last_commented != '') {
-                               $sql_extra .= sprintf(" AND $sql_table.`commented` < '%s'", DBA::escape($last_commented));
+                               $condition2 = DBA::mergeConditions($condition2, ["`commented` < ?", $last_commented]);
                        }
                        break;
                case 'created':
                        if ($last_created != '') {
-                               $sql_extra .= sprintf(" AND $sql_table.`created` < '%s'", DBA::escape($last_created));
+                               $condition2 = DBA::mergeConditions($condition2, ["`created` < ?", $last_created]);
                        }
                        break;
                case 'uriid':
                        if ($last_uriid > 0) {
-                               $sql_extra .= sprintf(" AND $sql_table.`uri-id` < '%s'", DBA::escape($last_uriid));
+                               $condition2 = DBA::mergeConditions($condition2, ["`uri-id` < ?", $last_uriid]);
                        }
                        break;
        }
@@ -596,46 +599,23 @@ function networkThreadedView(App $a, $update, $parent)
        if ($update) {
                if (!empty($parent)) {
                        // Load only a single thread
-                       $sql_extra2 = "`item`.`id` = ".intval($parent);
+                       $condition1['id'] = $parent;
                } elseif ($order === 'post') {
                        // Only load new toplevel posts
-                       $sql_extra2 = "`item`.`unseen` AND `item`.`gravity` = " . GRAVITY_PARENT;
+                       $condition1['unseen'] = true;
+                       $condition1['gravity'] = GRAVITY_PARENT;
                } else {
                        // Load all unseen items
-                       $sql_extra2 = "`item`.`unseen`";
+                       $condition1['unseen'] = true;
                }
 
-               $r = q("SELECT `item`.`parent-uri` AS `uri`, `item`.`parent` AS `item_id`, $sql_order AS `order_date`
-                       FROM `item`
-                       INNER JOIN `thread` ON `thread`.`iid` = `item`.`parent`
-                       STRAIGHT_JOIN `contact` ON `contact`.`id` = `thread`.`contact-id`
-                               AND (NOT `contact`.`blocked` OR `contact`.`pending`)
-                       LEFT JOIN `user-item` ON `user-item`.`iid` = `item`.`id` AND `user-item`.`uid` = %d
-                       WHERE `thread`.`uid` = %d AND `thread`.`visible` AND NOT `thread`.`deleted`
-                       AND (`user-item`.`hidden` IS NULL OR NOT `user-item`.`hidden`)
-                       AND NOT `thread`.`moderated` AND $sql_extra2
-                       $sql_extra
-                       ORDER BY `order_date` DESC LIMIT 100",
-                       intval(local_user()),
-                       intval(local_user())
-               );
+               $condition = DBA::mergeConditions($condition1, $condition2);
+               $params = ['order' => [$order_mode => true], 'limit' => 100];
+               $r = DBA::selectToArray('network-item-view', [], $condition, $params);
        } else {
-               $r = q("SELECT `item`.`uri`, `thread`.`iid` AS `item_id`, $sql_order AS `order_date`
-                       FROM `thread`
-                       STRAIGHT_JOIN `contact` ON `contact`.`id` = `thread`.`contact-id`
-                               AND (NOT `contact`.`blocked` OR `contact`.`pending`)
-                       STRAIGHT_JOIN `item` ON `item`.`id` = `thread`.`iid`
-                       LEFT JOIN `user-item` ON `user-item`.`iid` = `item`.`id` AND `user-item`.`uid` = %d
-                       WHERE `thread`.`uid` = %d AND `thread`.`visible` AND NOT `thread`.`deleted`
-                       AND (`user-item`.`hidden` IS NULL OR NOT `user-item`.`hidden`)
-                       AND NOT `thread`.`moderated`
-                       $sql_extra
-                       ORDER BY `order_date` DESC LIMIT %d, %d",
-                       intval(local_user()),
-                       intval(local_user()),
-                       intval($pager->getStart()),
-                       intval($pager->getItemsPerPage())
-               );
+               $condition = DBA::mergeConditions($condition1, $condition2);
+               $params = ['order' => [$order_mode => true], 'limit' => [$pager->getStart(), $pager->getItemsPerPage()]];
+               $r = DBA::selectToArray('network-thread-view', [], $condition, $params);
        }
 
        return $o . network_display_post($a, $pager, (!$gid && !$cid && !$star), $update, $ordering, $r);
index e9232f07243f89b41d442173c7f0c3f449715adb..aa1552f9c0018b374963561c547f326e3ad724f8 100755 (executable)
@@ -54,7 +54,7 @@
 use Friendica\Database\DBA;
 
 if (!defined('DB_UPDATE_VERSION')) {
-       define('DB_UPDATE_VERSION', 1359);
+       define('DB_UPDATE_VERSION', 1360);
 }
 
 return [
index 47bf9709000ee8d43e79cfdf0f6e4911b68a8538..50cd2a1e5a7aa3f415b15a7569555d4e8ff7b75f 100755 (executable)
@@ -68,6 +68,61 @@ return [
                        LEFT JOIN `tag` ON `post-tag`.`tid` = `tag`.`id`
                        LEFT JOIN `contact` ON `post-tag`.`cid` = `contact`.`id`"
        ],
+       "network-thread-view" => [
+               "fields" => [
+                       "uri-id" => ["item", "uri-id"],
+                       "uri" => ["item", "uri"],
+                       "parent-uri-id" => ["item", "parent-uri-id"],
+                       "parent" => ["thread", "iid"],
+                       "item_id" => ["thread", "iid"],
+                       "received" => ["thread", "received"],
+                       "commented" => ["thread", "commented"],
+                       "created" => ["thread", "created"],
+                       "uid" => ["thread", "uid"],
+                       "starred" => ["thread", "starred"],
+                       "mention" => ["thread", "mention"],
+                       "network" => ["thread", "network"],
+                       "contact-id" => ["thread", "contact-id"],
+               ],
+               "query" => "FROM `thread`
+                       STRAIGHT_JOIN `contact` ON `contact`.`id` = `thread`.`contact-id` AND (NOT `contact`.`blocked` OR `contact`.`pending`)
+                       STRAIGHT_JOIN `item` ON `item`.`id` = `thread`.`iid`
+                       LEFT JOIN `user-item` ON `user-item`.`iid` = `item`.`id` AND `user-item`.`uid` = `thread`.`uid`
+                       LEFT JOIN `user-contact` AS `author` ON `author`.`uid` = `thread`.`uid` AND `author`.`cid` = `thread`.`author-id`
+                       LEFT JOIN `user-contact` AS `owner` ON `owner`.`uid` = `thread`.`uid` AND `owner`.`cid` = `thread`.`owner-id`
+                       WHERE `thread`.`visible` AND NOT `thread`.`deleted` AND NOT `thread`.`moderated`
+                       AND (`user-item`.`hidden` IS NULL OR NOT `user-item`.`hidden`)
+                       AND (`author`.`blocked` IS NULL OR NOT `author`.`blocked`)
+                       AND (`owner`.`blocked` IS NULL OR NOT `owner`.`blocked`)"
+       ],
+       "network-item-view" => [
+               "fields" => [
+                       "uri-id" => ["item", "parent-uri-id"],
+                       "uri" => ["item", "parent-uri"],
+                       "parent" => ["item", "parent"],
+                       "item_id" => ["item", "parent"],
+                       "received" => ["item", "received"],
+                       "commented" => ["item", "commented"],
+                       "created" => ["item", "created"],
+                       "uid" => ["item", "uid"],
+                       "starred" => ["item", "starred"],
+                       "mention" => ["item", "mention"],
+                       "network" => ["item", "network"],
+                       "unseen" => ["item", "unseen"],
+                       "gravity" => ["item", "gravity"],
+                       "contact-id" => ["item", "contact-id"],
+               ],
+               "query" => "FROM `item`
+                       INNER JOIN `thread` ON `thread`.`iid` = `item`.`parent`
+                       STRAIGHT_JOIN `contact` ON `contact`.`id` = `thread`.`contact-id` AND (NOT `contact`.`blocked` OR `contact`.`pending`)
+                       LEFT JOIN `user-item` ON `user-item`.`iid` = `item`.`id` AND `user-item`.`uid` = `thread`.`uid`
+                       LEFT JOIN `user-contact` AS `author` ON `author`.`uid` = `thread`.`uid` AND `author`.`cid` = `thread`.`author-id`
+                       LEFT JOIN `user-contact` AS `owner` ON `owner`.`uid` = `thread`.`uid` AND `owner`.`cid` = `thread`.`owner-id`
+                       WHERE `thread`.`visible` AND NOT `thread`.`deleted` AND NOT `thread`.`moderated`
+                       AND (`user-item`.`hidden` IS NULL OR NOT `user-item`.`hidden`)
+                       AND (`author`.`blocked` IS NULL OR NOT `author`.`blocked`)
+                       AND (`owner`.`blocked` IS NULL OR NOT `owner`.`blocked`)"
+       ],
        "owner-view" => [
                "fields" => [
                        "id" => ["contact", "id"],