From 710f9eecb2b270b43bd1ed2a36e8d570ae71e8a6 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 7 Oct 2023 05:44:24 -0400 Subject: [PATCH] User Repository\UserDefinedChannel->selectByUid instead of Factory\UserDefinedChannel->getForUser - Rename Repository\Channel to Repository\UserDefinedChannel - Add new Collection\UserDefinedChannels class - Move Factory\Timeline->createFromTableRow to Factory\UserDefinedChannel --- .../Collection/UserDefinedChannels.php | 26 +++++++++++++ src/Content/Conversation/Factory/Timeline.php | 25 ++---------- .../Factory/UserDefinedChannel.php | 37 ++++++++++-------- .../{Channel.php => UserDefinedChannel.php} | 39 ++++++++++++++----- src/Content/Widget.php | 2 +- src/DI.php | 7 +--- src/Module/Conversation/Channel.php | 4 +- src/Module/Conversation/Community.php | 4 +- src/Module/Conversation/Network.php | 6 +-- src/Module/Conversation/Timeline.php | 6 +-- src/Module/Settings/Channels.php | 20 +++++----- src/Module/Settings/Display.php | 12 +++--- 12 files changed, 108 insertions(+), 80 deletions(-) create mode 100644 src/Content/Conversation/Collection/UserDefinedChannels.php rename src/Content/Conversation/Repository/{Channel.php => UserDefinedChannel.php} (73%) diff --git a/src/Content/Conversation/Collection/UserDefinedChannels.php b/src/Content/Conversation/Collection/UserDefinedChannels.php new file mode 100644 index 0000000000..5dc7326da6 --- /dev/null +++ b/src/Content/Conversation/Collection/UserDefinedChannels.php @@ -0,0 +1,26 @@ +. + * + */ + +namespace Friendica\Content\Conversation\Collection; + +class UserDefinedChannels extends Timelines +{ +} diff --git a/src/Content/Conversation/Factory/Timeline.php b/src/Content/Conversation/Factory/Timeline.php index 804f6a3382..a726762fd5 100644 --- a/src/Content/Conversation/Factory/Timeline.php +++ b/src/Content/Conversation/Factory/Timeline.php @@ -23,21 +23,21 @@ namespace Friendica\Content\Conversation\Factory; use Friendica\Capabilities\ICanCreateFromTableRow; use Friendica\Content\Conversation\Entity\Timeline as TimelineEntity; -use Friendica\Content\Conversation\Repository\Channel; +use Friendica\Content\Conversation\Repository\UserDefinedChannel; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; use Psr\Log\LoggerInterface; -class Timeline extends \Friendica\BaseFactory implements ICanCreateFromTableRow +class Timeline extends \Friendica\BaseFactory { /** @var L10n */ protected $l10n; /** @var IManageConfigValues The config */ protected $config; - /** @var Channel */ + /** @var UserDefinedChannel */ protected $channelRepository; - public function __construct(Channel $channel, L10n $l10n, LoggerInterface $logger, IManageConfigValues $config) + public function __construct(UserDefinedChannel $channel, L10n $l10n, LoggerInterface $logger, IManageConfigValues $config) { parent::__construct($logger); @@ -45,21 +45,4 @@ class Timeline extends \Friendica\BaseFactory implements ICanCreateFromTableRow $this->l10n = $l10n; $this->config = $config; } - - public function createFromTableRow(array $row): TimelineEntity - { - return new TimelineEntity( - $row['id'] ?? null, - $row['label'], - $row['description'] ?? null, - $row['access-key'] ?? null, - null, - $row['uid'], - $row['include-tags'] ?? null, - $row['exclude-tags'] ?? null, - $row['full-text-search'] ?? null, - $row['media-type'] ?? null, - $row['circle'] ?? null, - ); - } } diff --git a/src/Content/Conversation/Factory/UserDefinedChannel.php b/src/Content/Conversation/Factory/UserDefinedChannel.php index 1b067d08b0..12816126db 100644 --- a/src/Content/Conversation/Factory/UserDefinedChannel.php +++ b/src/Content/Conversation/Factory/UserDefinedChannel.php @@ -21,28 +21,31 @@ namespace Friendica\Content\Conversation\Factory; +use Friendica\Capabilities\ICanCreateFromTableRow; use Friendica\Content\Conversation\Collection\Timelines; +use Friendica\Content\Conversation\Entity; -final class UserDefinedChannel extends Timeline +final class UserDefinedChannel extends Timeline implements ICanCreateFromTableRow { - /** - * List of available user defined channels - * - * @param integer $uid - * @return Timelines - */ - public function getForUser(int $uid): Timelines - { - $tabs = []; - foreach ($this->channelRepository->selectByUid($uid) as $channel) { - $tabs[] = $channel; - } - - return new Timelines($tabs); - } - public function isTimeline(string $selectedTab, int $uid): bool { return is_numeric($selectedTab) && $uid && $this->channelRepository->existsById($selectedTab, $uid); } + + public function createFromTableRow(array $row): Entity\UserDefinedChannel + { + return new Entity\UserDefinedChannel( + $row['id'] ?? null, + $row['label'], + $row['description'] ?? null, + $row['access-key'] ?? null, + null, + $row['uid'], + $row['include-tags'] ?? null, + $row['exclude-tags'] ?? null, + $row['full-text-search'] ?? null, + $row['media-type'] ?? null, + $row['circle'] ?? null, + ); + } } diff --git a/src/Content/Conversation/Repository/Channel.php b/src/Content/Conversation/Repository/UserDefinedChannel.php similarity index 73% rename from src/Content/Conversation/Repository/Channel.php rename to src/Content/Conversation/Repository/UserDefinedChannel.php index 19fac3b0d8..1014711765 100644 --- a/src/Content/Conversation/Repository/Channel.php +++ b/src/Content/Conversation/Repository/UserDefinedChannel.php @@ -22,30 +22,48 @@ namespace Friendica\Content\Conversation\Repository; use Friendica\BaseCollection; -use Friendica\Content\Conversation\Entity\Timeline as TimelineEntity; -use Friendica\Content\Conversation\Entity\UserDefinedChannel; -use Friendica\Content\Conversation\Factory\Timeline; +use Friendica\Content\Conversation\Collection\UserDefinedChannels; +use Friendica\Content\Conversation\Entity; +use Friendica\Content\Conversation\Factory; use Friendica\Database\Database; use Psr\Log\LoggerInterface; -class Channel extends \Friendica\BaseRepository +class UserDefinedChannel extends \Friendica\BaseRepository { protected static $table_name = 'channel'; - public function __construct(Database $database, LoggerInterface $logger, Timeline $factory) + public function __construct(Database $database, LoggerInterface $logger, Factory\UserDefinedChannel $factory) { parent::__construct($database, $logger, $factory); } + /** + * @param array $condition + * @param array $params + * @return UserDefinedChannels + * @throws \Exception + */ + protected function _select(array $condition, array $params = []): BaseCollection + { + $rows = $this->db->selectToArray(static::$table_name, [], $condition, $params); + + $Entities = new UserDefinedChannels(); + foreach ($rows as $fields) { + $Entities[] = $this->factory->createFromTableRow($fields); + } + + return $Entities; + } + /** * Fetch a single user channel * * @param int $id The id of the user defined channel * @param int $uid The user that this channel belongs to. (Not part of the primary key) - * @return TimelineEntity + * @return Entity\UserDefinedChannel * @throws \Friendica\Network\HTTPException\NotFoundException */ - public function selectById(int $id, int $uid): TimelineEntity + public function selectById(int $id, int $uid): Entity\UserDefinedChannel { return $this->_selectOne(['id' => $id, 'uid' => $uid]); } @@ -78,14 +96,15 @@ class Channel extends \Friendica\BaseRepository * Fetch all user channels * * @param integer $uid - * @return BaseCollection + * @return UserDefinedChannels + * @throws \Exception */ - public function selectByUid(int $uid): BaseCollection + public function selectByUid(int $uid): UserDefinedChannels { return $this->_select(['uid' => $uid]); } - public function save(UserDefinedChannel $Channel): UserDefinedChannel + public function save(Entity\UserDefinedChannel $Channel): Entity\UserDefinedChannel { $fields = [ 'label' => $Channel->label, diff --git a/src/Content/Widget.php b/src/Content/Widget.php index 876fbc79e4..3147e99a56 100644 --- a/src/Content/Widget.php +++ b/src/Content/Widget.php @@ -574,7 +574,7 @@ class Widget } } - foreach (DI::UserDefinedChannelFactory()->getForUser($uid) as $channel) { + foreach (DI::userDefinedChannel()->selectByUid($uid) as $channel) { if (empty($enabled) || in_array($channel->code, $enabled)) { $channels[] = ['ref' => $channel->code, 'name' => $channel->label]; } diff --git a/src/DI.php b/src/DI.php index 0cb194ef40..4205640cc1 100644 --- a/src/DI.php +++ b/src/DI.php @@ -571,12 +571,9 @@ abstract class DI return self::$dice->create(Content\Conversation\Factory\Channel::class); } - /** - * @return Content\Conversation\Factory\UserDefinedChannel - */ - public static function UserDefinedChannelFactory() + public static function userDefinedChannel(): Content\Conversation\Repository\UserDefinedChannel { - return self::$dice->create(Content\Conversation\Factory\UserDefinedChannel::class); + return self::$dice->create(Content\Conversation\Repository\UserDefinedChannel::class); } /** diff --git a/src/Module/Conversation/Channel.php b/src/Module/Conversation/Channel.php index dab17c4e19..171236e966 100644 --- a/src/Module/Conversation/Channel.php +++ b/src/Module/Conversation/Channel.php @@ -28,7 +28,7 @@ use Friendica\Content\Conversation; use Friendica\Content\Conversation\Entity\Channel as ChannelEntity; use Friendica\Content\Conversation\Factory\UserDefinedChannel as UserDefinedChannelFactory; use Friendica\Content\Conversation\Factory\Timeline as TimelineFactory; -use Friendica\Content\Conversation\Repository\Channel as ChannelRepository; +use Friendica\Content\Conversation\Repository\UserDefinedChannel as ChannelRepository; use Friendica\Content\Conversation\Factory\Channel as ChannelFactory; use Friendica\Content\Conversation\Factory\Community as CommunityFactory; use Friendica\Content\Conversation\Factory\Network as NetworkFactory; @@ -105,7 +105,7 @@ class Channel extends Timeline if (empty($request['mode']) || ($request['mode'] != 'raw')) { $tabs = $this->getTabArray($this->channel->getTimelines($this->session->getLocalUserId()), 'channel'); - $tabs = array_merge($tabs, $this->getTabArray($this->userDefinedChannel->getForUser($this->session->getLocalUserId()), 'channel')); + $tabs = array_merge($tabs, $this->getTabArray($this->channelRepository->selectByUid($this->session->getLocalUserId()), 'channel')); $tabs = array_merge($tabs, $this->getTabArray($this->community->getTimelines(true), 'channel')); $tab_tpl = Renderer::getMarkupTemplate('common_tabs.tpl'); diff --git a/src/Module/Conversation/Community.php b/src/Module/Conversation/Community.php index 89af00043f..d0e3fb8702 100644 --- a/src/Module/Conversation/Community.php +++ b/src/Module/Conversation/Community.php @@ -28,7 +28,7 @@ use Friendica\Content\BoundariesPager; use Friendica\Content\Conversation; use Friendica\Content\Conversation\Entity\Community as CommunityEntity; use Friendica\Content\Conversation\Factory\Community as CommunityFactory; -use Friendica\Content\Conversation\Repository\Channel; +use Friendica\Content\Conversation\Repository\UserDefinedChannel; use Friendica\Content\Feature; use Friendica\Content\Nav; use Friendica\Content\Text\HTML; @@ -70,7 +70,7 @@ class Community extends Timeline /** @var SystemMessages */ protected $systemMessages; - public function __construct(Channel $channel, CommunityFactory $community, Conversation $conversation, App\Page $page, SystemMessages $systemMessages, Mode $mode, IHandleUserSessions $session, Database $database, IManagePersonalConfigValues $pConfig, IManageConfigValues $config, ICanCache $cache, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) + public function __construct(UserDefinedChannel $channel, CommunityFactory $community, Conversation $conversation, App\Page $page, SystemMessages $systemMessages, Mode $mode, IHandleUserSessions $session, Database $database, IManagePersonalConfigValues $pConfig, IManageConfigValues $config, ICanCache $cache, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) { parent::__construct($channel, $mode, $session, $database, $pConfig, $config, $cache, $l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); diff --git a/src/Module/Conversation/Network.php b/src/Module/Conversation/Network.php index 40f7d1239e..24e3e57891 100644 --- a/src/Module/Conversation/Network.php +++ b/src/Module/Conversation/Network.php @@ -27,7 +27,7 @@ use Friendica\Content\BoundariesPager; use Friendica\Content\Conversation; use Friendica\Content\Conversation\Entity\Network as NetworkEntity; use Friendica\Content\Conversation\Factory\Timeline as TimelineFactory; -use Friendica\Content\Conversation\Repository\Channel; +use Friendica\Content\Conversation\Repository\UserDefinedChannel; use Friendica\Content\Conversation\Factory\Channel as ChannelFactory; use Friendica\Content\Conversation\Factory\UserDefinedChannel as UserDefinedChannelFactory; use Friendica\Content\Conversation\Factory\Community as CommunityFactory; @@ -109,7 +109,7 @@ class Network extends Timeline /** @var NetworkFactory */ protected $networkFactory; - public function __construct(UserDefinedChannelFactory $userDefinedChannel, NetworkFactory $network, CommunityFactory $community, ChannelFactory $channelFactory, Channel $channel, App $app, TimelineFactory $timeline, SystemMessages $systemMessages, Mode $mode, Conversation $conversation, App\Page $page, IHandleUserSessions $session, Database $database, IManagePersonalConfigValues $pConfig, IManageConfigValues $config, ICanCache $cache, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) + public function __construct(UserDefinedChannelFactory $userDefinedChannel, NetworkFactory $network, CommunityFactory $community, ChannelFactory $channelFactory, UserDefinedChannel $channel, App $app, TimelineFactory $timeline, SystemMessages $systemMessages, Mode $mode, Conversation $conversation, App\Page $page, IHandleUserSessions $session, Database $database, IManagePersonalConfigValues $pConfig, IManageConfigValues $config, ICanCache $cache, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) { parent::__construct($channel, $mode, $session, $database, $pConfig, $config, $cache, $l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); @@ -287,7 +287,7 @@ class Network extends Timeline $network_timelines = $this->pConfig->get($this->session->getLocalUserId(), 'system', 'network_timelines', []); if (!empty($network_timelines)) { $tabs = array_merge($tabs, $this->getTabArray($this->channel->getTimelines($this->session->getLocalUserId()), 'network', 'channel')); - $tabs = array_merge($tabs, $this->getTabArray($this->userDefinedChannel->getForUser($this->session->getLocalUserId()), 'network', 'channel')); + $tabs = array_merge($tabs, $this->getTabArray($this->channelRepository->selectByUid($this->session->getLocalUserId()), 'network', 'channel')); $tabs = array_merge($tabs, $this->getTabArray($this->community->getTimelines(true), 'network', 'channel')); } diff --git a/src/Module/Conversation/Timeline.php b/src/Module/Conversation/Timeline.php index 8ddba16c71..eb362eba7b 100644 --- a/src/Module/Conversation/Timeline.php +++ b/src/Module/Conversation/Timeline.php @@ -26,7 +26,7 @@ use Friendica\App\Mode; use Friendica\BaseModule; use Friendica\Content\Conversation\Collection\Timelines; use Friendica\Content\Conversation\Entity\Channel as ChannelEntity; -use Friendica\Content\Conversation\Repository\Channel; +use Friendica\Content\Conversation\Repository\UserDefinedChannel; use Friendica\Core\Cache\Capability\ICanCache; use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Config\Capability\IManageConfigValues; @@ -80,10 +80,10 @@ class Timeline extends BaseModule protected $config; /** @var ICanCache */ protected $cache; - /** @var Channel */ + /** @var UserDefinedChannel */ protected $channelRepository; - public function __construct(Channel $channel, Mode $mode, IHandleUserSessions $session, Database $database, IManagePersonalConfigValues $pConfig, IManageConfigValues $config, ICanCache $cache, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) + public function __construct(UserDefinedChannel $channel, Mode $mode, IHandleUserSessions $session, Database $database, IManagePersonalConfigValues $pConfig, IManageConfigValues $config, ICanCache $cache, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) { parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); diff --git a/src/Module/Settings/Channels.php b/src/Module/Settings/Channels.php index 39d83a7e00..55938e06f9 100644 --- a/src/Module/Settings/Channels.php +++ b/src/Module/Settings/Channels.php @@ -22,8 +22,8 @@ namespace Friendica\Module\Settings; use Friendica\App; -use Friendica\Content\Conversation\Factory\Timeline; -use Friendica\Content\Conversation\Repository\Channel; +use Friendica\Content\Conversation\Factory; +use Friendica\Content\Conversation\Repository\UserDefinedChannel; use Friendica\Core\L10n; use Friendica\Core\Renderer; use Friendica\Core\Session\Capability\IHandleUserSessions; @@ -36,17 +36,17 @@ use Psr\Log\LoggerInterface; class Channels extends BaseSettings { - /** @var Channel */ + /** @var UserDefinedChannel */ private $channel; - /** @var Timeline */ - private $timeline; + /** @var Factory\UserDefinedChannel */ + private $userDefinedChannel; - public function __construct(Timeline $timeline, Channel $channel, App\Page $page, IHandleUserSessions $session, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) + public function __construct(Factory\UserDefinedChannel $userDefinedChannel, UserDefinedChannel $channel, App\Page $page, IHandleUserSessions $session, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) { parent::__construct($session, $page, $l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); - $this->timeline = $timeline; - $this->channel = $channel; + $this->userDefinedChannel = $userDefinedChannel; + $this->channel = $channel; } protected function post(array $request = []) @@ -63,7 +63,7 @@ class Channels extends BaseSettings self::checkFormSecurityTokenRedirectOnError('/settings/channels', 'settings_channels'); if (!empty($request['add_channel'])) { - $channel = $this->timeline->createFromTableRow([ + $channel = $this->userDefinedChannel->createFromTableRow([ 'label' => $request['new_label'], 'description' => $request['new_description'], 'access-key' => substr(mb_strtolower($request['new_access_key']), 0, 1), @@ -86,7 +86,7 @@ class Channels extends BaseSettings continue; } - $channel = $this->timeline->createFromTableRow([ + $channel = $this->userDefinedChannel->createFromTableRow([ 'id' => $id, 'label' => $request['label'][$id], 'description' => $request['description'][$id], diff --git a/src/Module/Settings/Display.php b/src/Module/Settings/Display.php index 68ac500212..b5dbf01eb8 100644 --- a/src/Module/Settings/Display.php +++ b/src/Module/Settings/Display.php @@ -28,7 +28,7 @@ use Friendica\Content\Conversation\Factory\Channel as ChannelFactory; use Friendica\Content\Conversation\Factory\Community as CommunityFactory; use Friendica\Content\Conversation\Factory\Network as NetworkFactory; use Friendica\Content\Conversation\Factory\Timeline as TimelineFactory; -use Friendica\Content\Conversation\Factory\UserDefinedChannel as UserDefinedChannelFactory; +use Friendica\Content\Conversation\Repository; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Hook; use Friendica\Core\L10n; @@ -59,7 +59,7 @@ class Display extends BaseSettings private $systemMessages; /** @var ChannelFactory */ protected $channel; - /** @var UserDefinedChannelFactory */ + /** @var Repository\UserDefinedChannel */ protected $userDefinedChannel; /** @var CommunityFactory */ protected $community; @@ -68,7 +68,7 @@ class Display extends BaseSettings /** @var TimelineFactory */ protected $timeline; - public function __construct(UserDefinedChannelFactory $userDefinedChannel, NetworkFactory $network, CommunityFactory $community, ChannelFactory $channel, TimelineFactory $timeline, SystemMessages $systemMessages, App $app, IManagePersonalConfigValues $pConfig, IManageConfigValues $config, IHandleUserSessions $session, App\Page $page, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) + public function __construct(Repository\UserDefinedChannel $userDefinedChannel, NetworkFactory $network, CommunityFactory $community, ChannelFactory $channel, TimelineFactory $timeline, SystemMessages $systemMessages, App $app, IManagePersonalConfigValues $pConfig, IManageConfigValues $config, IHandleUserSessions $session, App\Page $page, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) { parent::__construct($session, $page, $l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); @@ -267,8 +267,8 @@ class Display extends BaseSettings $timelines[] = [ 'label' => $timeline->label, 'description' => $timeline->description, - 'enable' => ["enable{$timeline->code}", '', in_array($timeline->code, $enabled_timelines)], - 'bookmark' => ["bookmark{$timeline->code}", '', in_array($timeline->code, $bookmarked_timelines)], + 'enable' => ["enable[{$timeline->code}]", '', in_array($timeline->code, $enabled_timelines)], + 'bookmark' => ["bookmark[{$timeline->code}]", '', in_array($timeline->code, $bookmarked_timelines)], ]; } @@ -357,7 +357,7 @@ class Display extends BaseSettings $timelines[] = $channel; } - foreach ($this->userDefinedChannel->getForUser($uid) as $channel) { + foreach ($this->userDefinedChannel->selectByUid($uid) as $channel) { $timelines[] = $channel; }