From cf56992444474a360686de03931df836be3069d5 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 7 Nov 2019 05:39:15 +0000 Subject: [PATCH] We can now pin our own posts --- database.sql | 5 +-- src/Model/Item.php | 33 +++++++++++++++++-- src/Object/Post.php | 17 ++++++++++ static/dbstructure.config.php | 5 +-- static/routes.config.php | 5 +-- view/js/main.js | 19 +++++++++++ view/templates/wall_thread.tpl | 3 ++ view/theme/frio/templates/wall_thread.tpl | 7 ++++ view/theme/quattro/templates/wall_thread.tpl | 4 +++ view/theme/smoothly/templates/wall_thread.tpl | 3 ++ view/theme/vier/templates/wall_thread.tpl | 4 +++ 11 files changed, 97 insertions(+), 8 deletions(-) diff --git a/database.sql b/database.sql index d42f61f902..e80c5cda22 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ --- Friendica 2019.09-rc (Dalmatian Bellflower) --- DB_UPDATE_VERSION 1322 +-- Friendica 2019.12-dev (Dalmatian Bellflower) +-- DB_UPDATE_VERSION 1324 -- ------------------------------------------ @@ -1281,6 +1281,7 @@ CREATE TABLE IF NOT EXISTS `user-item` ( `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `hidden` boolean NOT NULL DEFAULT '0' COMMENT 'Marker to hide an item from the user', `ignored` boolean COMMENT 'Ignore this thread if set', + `pinned` boolean COMMENT 'The item is pinned on the profile page', PRIMARY KEY(`uid`,`iid`) ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='User specific item data'; diff --git a/src/Model/Item.php b/src/Model/Item.php index 9501c8e5d2..882aa6444b 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -58,7 +58,7 @@ class Item extends BaseObject 'author-id', 'author-link', 'author-name', 'author-avatar', 'author-network', 'owner-id', 'owner-link', 'owner-name', 'owner-avatar', 'owner-network', 'contact-id', 'contact-uid', 'contact-link', 'contact-name', 'contact-avatar', - 'writable', 'self', 'cid', 'alias', + 'writable', 'self', 'cid', 'alias', 'pinned', 'event-id', 'event-created', 'event-edited', 'event-start', 'event-finish', 'event-summary', 'event-desc', 'event-location', 'event-type', 'event-nofinish', 'event-adjust', 'event-ignore', 'event-id', @@ -114,6 +114,35 @@ class Item extends BaseObject return self::$legacy_mode; } + /** + * Set the pinned state of an item + * + * @param integer $iid Item ID + * @param integer $uid User ID + * @param boolean $pinned Pinned state + */ + public static function setPinned(int $iid, int $uid, bool $pinned) + { + DBA::update('user-item', ['pinned' => $pinned], ['iid' => $iid, 'uid' => $uid], true); + } + + /** + * Get the pinned state + * + * @param integer $iid Item ID + * @param integer $uid User ID + * + * @return boolean pinned state + */ + public static function getPinned(int $iid, int $uid) + { + $useritem = DBA::selectFirst('user-item', ['pinned'], ['iid' => $iid, 'uid' => $uid]); + if (!DBA::isResult($useritem)) { + return false; + } + return (bool)$useritem['pinned']; + } + /** * @brief returns an activity index from an activity string * @@ -585,7 +614,7 @@ class Item extends BaseObject 'iaid' => 'internal-iaid']; if ($usermode) { - $fields['user-item'] = ['ignored' => 'internal-user-ignored']; + $fields['user-item'] = ['pinned', 'ignored' => 'internal-user-ignored']; } $fields['item-activity'] = ['activity', 'activity' => 'internal-activity']; diff --git a/src/Object/Post.php b/src/Object/Post.php index babf24e0d6..f3c607ee64 100644 --- a/src/Object/Post.php +++ b/src/Object/Post.php @@ -140,8 +140,10 @@ class Post extends BaseObject $sparkle = ''; $buttons = ''; $dropping = false; + $pin = false; $star = false; $ignore = false; + $ispinned = "unpinned"; $isstarred = "unstarred"; $indent = ''; $shiny = ''; @@ -284,6 +286,19 @@ class Post extends BaseObject } if ($conv->getProfileOwner() == local_user() && ($item['uid'] != 0)) { + if ($origin) { + $ispinned = ($item['pinned'] ? 'pinned' : 'unpinned'); + + $pin = [ + 'do' => L10n::t('pin'), + 'undo' => L10n::t('unpin'), + 'toggle' => L10n::t('toggle pin status'), + 'classdo' => $item['pinned'] ? 'hidden' : '', + 'classundo' => $item['pinned'] ? '' : 'hidden', + 'pinned' => L10n::t('pinned'), + ]; + } + $isstarred = (($item['starred']) ? "starred" : "unstarred"); $star = [ @@ -407,6 +422,8 @@ class Post extends BaseObject 'owner_name' => $owner_name_e, 'plink' => Item::getPlink($item), 'edpost' => $edpost, + 'ispinned' => $ispinned, + 'pin' => $pin, 'isstarred' => $isstarred, 'star' => $star, 'ignore' => $ignore, diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php index 53f8a8ed44..65e0b26a6a 100755 --- a/static/dbstructure.config.php +++ b/static/dbstructure.config.php @@ -34,7 +34,7 @@ use Friendica\Database\DBA; if (!defined('DB_UPDATE_VERSION')) { - define('DB_UPDATE_VERSION', 1323); + define('DB_UPDATE_VERSION', 1324); } return [ @@ -1384,7 +1384,8 @@ return [ "iid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => ["item" => "id"], "comment" => "Item id"], "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => ["user" => "uid"], "comment" => "User id"], "hidden" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Marker to hide an item from the user"], - "ignored" => ["type" => "boolean", "comment" => "Ignore this thread if set"] + "ignored" => ["type" => "boolean", "comment" => "Ignore this thread if set"], + "pinned" => ["type" => "boolean", "comment" => "The item is pinned on the profile page"] ], "indexes" => [ "PRIMARY" => ["uid", "iid"] diff --git a/static/routes.config.php b/static/routes.config.php index 1f2fe0ad1b..339860afe6 100644 --- a/static/routes.config.php +++ b/static/routes.config.php @@ -179,8 +179,9 @@ return [ '/{type}/{customize}/{name}' => [Module\Photo::class, [R::GET]], ], - '/pretheme' => [Module\ThemeDetails::class, [R::GET]], - '/probe' => [Module\Debug\Probe::class, [R::GET]], + '/pinned/{item:\d+}' => [Module\Pinned::class, [R::GET]], + '/pretheme' => [Module\ThemeDetails::class, [R::GET]], + '/probe' => [Module\Debug\Probe::class, [R::GET]], '/profile' => [ '/{nickname}' => [Module\Profile::class, [R::GET]], diff --git a/view/js/main.js b/view/js/main.js index 40db7c2a13..94644c5dfd 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -626,6 +626,25 @@ function dostar(ident) { }); } +function dopin(ident) { + ident = ident.toString(); + $('#like-rotator-' + ident).show(); + $.get('pinned/' + ident, function(data) { + if (data.match(/1/)) { + $('#pinned-' + ident).addClass('pinned'); + $('#pinned-' + ident).removeClass('unpinned'); + $('#pin-' + ident).addClass('hidden'); + $('#unpin-' + ident).removeClass('hidden'); + } else { + $('#pinned-' + ident).addClass('unpinned'); + $('#pinned-' + ident).removeClass('pinned'); + $('#pin-' + ident).removeClass('hidden'); + $('#unpin-' + ident).addClass('hidden'); + } + $('#like-rotator-' + ident).hide(); + }); +} + function doignore(ident) { ident = ident.toString(); $('#like-rotator-' + ident).show(); diff --git a/view/templates/wall_thread.tpl b/view/templates/wall_thread.tpl index a4834062c0..001bdaebb4 100644 --- a/view/templates/wall_thread.tpl +++ b/view/templates/wall_thread.tpl @@ -90,6 +90,9 @@ {{/if}} + {{if $item.pin}} + + {{/if}} {{if $item.star}} {{/if}} diff --git a/view/theme/frio/templates/wall_thread.tpl b/view/theme/frio/templates/wall_thread.tpl index 9d8d47355c..cffe1087bd 100644 --- a/view/theme/frio/templates/wall_thread.tpl +++ b/view/theme/frio/templates/wall_thread.tpl @@ -118,6 +118,13 @@ as the value of $top_child_total (this is done at the end of this file) {{/if}} + {{if $item.pin}} +
  • + + +
  • + {{/if}} + {{if $item.star}}
  • diff --git a/view/theme/quattro/templates/wall_thread.tpl b/view/theme/quattro/templates/wall_thread.tpl index bfb903c7b8..c3d6500021 100644 --- a/view/theme/quattro/templates/wall_thread.tpl +++ b/view/theme/quattro/templates/wall_thread.tpl @@ -93,6 +93,10 @@
    + {{if $item.pin}} + {{$item.pin.do}} + {{$item.pin.undo}} + {{/if}} {{if $item.star}} {{$item.star.do}} {{$item.star.undo}} diff --git a/view/theme/smoothly/templates/wall_thread.tpl b/view/theme/smoothly/templates/wall_thread.tpl index a4616d9c4c..7b56c9130f 100644 --- a/view/theme/smoothly/templates/wall_thread.tpl +++ b/view/theme/smoothly/templates/wall_thread.tpl @@ -107,6 +107,9 @@
    {{/if}} + {{if $item.pin}} + + {{/if}} {{if $item.star}} {{/if}} diff --git a/view/theme/vier/templates/wall_thread.tpl b/view/theme/vier/templates/wall_thread.tpl index eb9c2fe575..1d432ea453 100644 --- a/view/theme/vier/templates/wall_thread.tpl +++ b/view/theme/vier/templates/wall_thread.tpl @@ -122,6 +122,10 @@ {{/if}} {{/if}} + {{if $item.pin}} + {{$item.pin.do}} + {{$item.pin.undo}} + {{/if}} {{if $item.star}} {{$item.star.do}} {{$item.star.undo}} -- 2.39.5