From 70e95eef62b514b336ecb83eecc48b0fffe86330 Mon Sep 17 00:00:00 2001 From: dartcafe Date: Sat, 8 Jul 2023 17:41:41 +0200 Subject: [PATCH 1/7] Fix preferences Signed-off-by: dartcafe --- lib/Service/PollService.php | 5 ++--- lib/Service/PreferencesService.php | 11 +++++------ 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/lib/Service/PollService.php b/lib/Service/PollService.php index e76733c9e..df0156624 100644 --- a/lib/Service/PollService.php +++ b/lib/Service/PollService.php @@ -27,7 +27,6 @@ use OCA\Polls\Db\Poll; use OCA\Polls\Db\PollMapper; use OCA\Polls\Db\Preferences; -use OCA\Polls\Db\PreferencesMapper; use OCA\Polls\Db\VoteMapper; use OCA\Polls\Event\PollArchivedEvent; use OCA\Polls\Event\PollCreatedEvent; @@ -67,12 +66,12 @@ public function __construct( private Poll $poll, private PollMapper $pollMapper, private Preferences $preferences, - private PreferencesMapper $preferencesMapper, + private PreferencesService $preferencesService, private VoteMapper $voteMapper, ) { $this->userId = $this->userSession->getUser()?->getUID() ?? ''; if ($this->userId) { - $this->preferences = $this->preferencesMapper->find($this->userId); + $this->preferences = $this->preferencesService->load($this->userId); } } diff --git a/lib/Service/PreferencesService.php b/lib/Service/PreferencesService.php index 115e497ca..f33ab18f2 100644 --- a/lib/Service/PreferencesService.php +++ b/lib/Service/PreferencesService.php @@ -42,20 +42,19 @@ public function __construct( $this->load(); } - public function load(): void { + public function load(): Preferences { try { $this->preferences = $this->preferencesMapper->find($this->userId); } catch (DoesNotExistException $e) { + $this->preferences = new Preferences(); + $this->preferences->setTimestamp(time()); + $this->preferences->setPreferences(json_encode(Preferences::DEFAULT)); if ($this->userId) { - $this->preferences = new Preferences(); $this->preferences->setUserId($this->userId); - $this->preferences->setTimestamp(time()); - $this->preferences->setPreferences(json_encode(Preferences::DEFAULT)); $this->preferences = $this->preferencesMapper->insert($this->preferences); - } else { - throw new NotAuthorizedException; } } + return $this->preferences; } /** From 9e806ac9f9b8286a2100c04e57f190166c0cd9b8 Mon Sep 17 00:00:00 2001 From: dartcafe Date: Sat, 8 Jul 2023 17:44:37 +0200 Subject: [PATCH 2/7] changelog Signed-off-by: dartcafe --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8745362b2..4eae11e31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ All notable changes to this project will be documented in this file. ### Fixes - Fix date shifting and sequence problems with daylight saving times - Bring back notifications + - Eliminate preferences error logging on first time usage ## [5.1.0] - 2023-06-27 ### Changes - Added user option to remove outdated polls from th "Relevant" list From 692e9b2ba2618386f144850a8c06247e4163fcd7 Mon Sep 17 00:00:00 2001 From: dartcafe Date: Sat, 8 Jul 2023 17:51:33 +0200 Subject: [PATCH 3/7] fix Signed-off-by: dartcafe --- lib/Service/PollService.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/Service/PollService.php b/lib/Service/PollService.php index df0156624..c1cb289c9 100644 --- a/lib/Service/PollService.php +++ b/lib/Service/PollService.php @@ -70,9 +70,7 @@ public function __construct( private VoteMapper $voteMapper, ) { $this->userId = $this->userSession->getUser()?->getUID() ?? ''; - if ($this->userId) { - $this->preferences = $this->preferencesService->load($this->userId); - } + $this->preferences = $this->preferencesService->load(); } /** From 7307822b096bc23aee5c656058bab58c8757d041 Mon Sep 17 00:00:00 2001 From: dartcafe Date: Sat, 8 Jul 2023 21:51:36 +0200 Subject: [PATCH 4/7] refactor: removed unused classes Signed-off-by: dartcafe --- lib/Db/TableManager.php | 4 ---- lib/Migration/RepairSteps/DeleteInvalidRecords.php | 14 -------------- 2 files changed, 18 deletions(-) diff --git a/lib/Db/TableManager.php b/lib/Db/TableManager.php index 5a8bf6200..473ecf77a 100644 --- a/lib/Db/TableManager.php +++ b/lib/Db/TableManager.php @@ -42,11 +42,7 @@ public function __construct( private IConfig $config, private IDBConnection $connection, private LoggerInterface $logger, - private LogMapper $logMapper, private OptionMapper $optionMapper, - private PreferencesMapper $preferencesMapper, - private ShareMapper $shareMapper, - private SubscriptionMapper $subscriptionMapper, private VoteMapper $voteMapper, private WatchMapper $watchMapper, ) { diff --git a/lib/Migration/RepairSteps/DeleteInvalidRecords.php b/lib/Migration/RepairSteps/DeleteInvalidRecords.php index 7183363cc..83733f7e3 100644 --- a/lib/Migration/RepairSteps/DeleteInvalidRecords.php +++ b/lib/Migration/RepairSteps/DeleteInvalidRecords.php @@ -24,16 +24,9 @@ namespace OCA\Polls\Migration\RepairSteps; -use OCA\Polls\Db\LogMapper; -use OCA\Polls\Db\OptionMapper; use OCA\Polls\Db\Poll; -use OCA\Polls\Db\PreferencesMapper; -use OCA\Polls\Db\ShareMapper; -use OCA\Polls\Db\SubscriptionMapper; use OCA\Polls\Db\TableManager; -use OCA\Polls\Db\VoteMapper; use OCA\Polls\Db\WatchMapper; -use OCP\IConfig; use OCP\IDBConnection; use OCP\Migration\IOutput; use OCP\Migration\IRepairStep; @@ -44,14 +37,7 @@ */ class DeleteInvalidRecords implements IRepairStep { public function __construct( - private IConfig $config, private IDBConnection $connection, - private LogMapper $logMapper, - private OptionMapper $optionMapper, - private PreferencesMapper $preferencesMapper, - private ShareMapper $shareMapper, - private SubscriptionMapper $subscriptionMapper, - private VoteMapper $voteMapper, private WatchMapper $watchMapper, private TableManager $tableManager ) { From 4e3817f564c6ea2de1124da73263913b63bb2ec2 Mon Sep 17 00:00:00 2001 From: dartcafe Date: Sat, 8 Jul 2023 21:51:51 +0200 Subject: [PATCH 5/7] refactor: rename variable Signed-off-by: dartcafe --- lib/Cron/UserDeletedJob.php | 22 +++++++++++----------- lib/Listener/UserDeletedListener.php | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/Cron/UserDeletedJob.php b/lib/Cron/UserDeletedJob.php index 0c840c493..43cf84731 100644 --- a/lib/Cron/UserDeletedJob.php +++ b/lib/Cron/UserDeletedJob.php @@ -61,9 +61,9 @@ public function __construct( * @return void */ protected function run($argument) { - $owner = $argument['owner']; - $this->logger->info('Deleting polls for deleted user {user}', [ - 'user' => $owner + $userId = $argument['userId']; + $this->logger->info('Deleting polls for deleted user id {user}', [ + 'user' => $userId ]); $replacementName = 'deleted_' . $this->secureRandom->generate( @@ -73,13 +73,13 @@ protected function run($argument) { ISecureRandom::CHAR_UPPER ); - $this->pollMapper->deleteByUserId($owner); - $this->logMapper->deleteByUserId($owner); - $this->shareMapper->deleteByIdAndType($owner, Share::TYPE_USER); - $this->preferencesMapper->deleteByUserId($owner); - $this->subscriptionMapper->deleteByUserId($owner); - $this->commentMapper->renameUserId($owner, $replacementName); - $this->optionMapper->renameUserId($owner, $replacementName); - $this->voteMapper->renameUserId($owner, $replacementName); + $this->pollMapper->deleteByUserId($userId); + $this->logMapper->deleteByUserId($userId); + $this->shareMapper->deleteByIdAndType($userId, Share::TYPE_USER); + $this->preferencesMapper->deleteByUserId($userId); + $this->subscriptionMapper->deleteByUserId($userId); + $this->commentMapper->renameUserId($userId, $replacementName); + $this->optionMapper->renameUserId($userId, $replacementName); + $this->voteMapper->renameUserId($userId, $replacementName); } } diff --git a/lib/Listener/UserDeletedListener.php b/lib/Listener/UserDeletedListener.php index a90d81f29..2f9a6c45e 100644 --- a/lib/Listener/UserDeletedListener.php +++ b/lib/Listener/UserDeletedListener.php @@ -40,6 +40,6 @@ protected function addCronJob() : void { if (!($this->event instanceof UserDeletedEvent)) { return; } - $this->jobList->add(UserDeletedJob::class, ['owner' => $this->event->getUser()->getUID()]); + $this->jobList->add(UserDeletedJob::class, ['userId' => $this->event->getUser()->getUID()]); } } From e815fb3e48853ebebe04666fade9fbca229e9287 Mon Sep 17 00:00:00 2001 From: dartcafe Date: Sun, 9 Jul 2023 02:30:20 +0200 Subject: [PATCH 6/7] fix and optimizations Signed-off-by: dartcafe --- CHANGELOG.md | 2 + lib/Controller/PreferencesController.php | 6 +-- lib/Db/Preferences.php | 8 ++-- lib/Db/PreferencesMapper.php | 2 +- lib/Service/CalendarService.php | 8 ++-- lib/Service/PollService.php | 2 +- lib/Service/PreferencesService.php | 47 ++++++++++++------------ src/js/Api/userSettings.js | 4 +- src/js/store/modules/settings.js | 28 +------------- 9 files changed, 41 insertions(+), 66 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a329df9a..bf2157abb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ All notable changes to this project will be documented in this file. - Bring back notifications - fix notification subscription - Eliminate preferences error logging on first time usage +### Changes + - Set default view to table layout even for text polls, list layout is still the default layout when in mobile mode ## [5.1.0] - 2023-06-27 ### Changes - Added user option to remove outdated polls from th "Relevant" list diff --git a/lib/Controller/PreferencesController.php b/lib/Controller/PreferencesController.php index a917283cf..47d7a7d67 100644 --- a/lib/Controller/PreferencesController.php +++ b/lib/Controller/PreferencesController.php @@ -38,7 +38,7 @@ public function __construct( ISession $session, private PreferencesService $preferencesService, private CalendarService $calendarService, - private IUserSession $userSession + private IUserSession $userSession, ) { parent::__construct($appName, $request, $session); } @@ -56,11 +56,11 @@ public function get(): JSONResponse { * Write preferences * @NoAdminRequired */ - public function write(array $settings): JSONResponse { + public function write(array $preferences): JSONResponse { if (!$this->userSession->isLoggedIn()) { return new JSONResponse([], Http::STATUS_OK); } - return $this->response(fn () => $this->preferencesService->write($settings)); + return $this->response(fn () => $this->preferencesService->write($preferences)); } /** diff --git a/lib/Db/Preferences.php b/lib/Db/Preferences.php index 6dcf689cb..8aba93881 100644 --- a/lib/Db/Preferences.php +++ b/lib/Db/Preferences.php @@ -42,7 +42,7 @@ class Preferences extends Entity implements JsonSerializable { public const DEFAULT = [ 'useCommentsAlternativeStyling' => false, 'useAlternativeStyling' => false, - 'calendarPeek' => true, + 'calendarPeek' => false, 'checkCalendars' => [], 'checkCalendarsBefore' => 0, 'checkCalendarsAfter' => 0, @@ -60,6 +60,9 @@ class Preferences extends Entity implements JsonSerializable { public function __construct() { $this->addType('timestamp', 'int'); + + // initialize with default values + $this->setPreferences(json_encode(self::DEFAULT)); } public function getPreferences_decoded() { @@ -102,9 +105,6 @@ public function getCheckCalendarsAfter(): int { */ public function jsonSerialize(): array { return [ - 'id' => $this->getId(), - 'userId' => $this->getUserId(), - 'timestamp' => $this->getTimestamp(), 'preferences' => json_decode($this->preferences) ?? '', ]; } diff --git a/lib/Db/PreferencesMapper.php b/lib/Db/PreferencesMapper.php index 00893d67d..a31f463c4 100644 --- a/lib/Db/PreferencesMapper.php +++ b/lib/Db/PreferencesMapper.php @@ -43,7 +43,7 @@ public function __construct(IDBConnection $db) { * @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException if more than one result * @return Preferences */ - public function find(string $userId): Preferences { + public function find(?string $userId): Preferences { $qb = $this->db->getQueryBuilder(); $qb->select('*') diff --git a/lib/Service/CalendarService.php b/lib/Service/CalendarService.php index 5e4bb4a43..f01d1e489 100644 --- a/lib/Service/CalendarService.php +++ b/lib/Service/CalendarService.php @@ -40,14 +40,14 @@ class CalendarService { /** @var ICalendar[] */ private array $calendars; - private Preferences $preferences; - + public function __construct( private CalendarManager $calendarManager, + private CurrentUser $currentUser, private ISession $session, - private PreferencesService $preferencesService, private OptionMapper $optionMapper, - private CurrentUser $currentUser, + private Preferences $preferences, + private PreferencesService $preferencesService, ) { $this->preferences = $this->preferencesService->get(); $this->getCalendarsForPrincipal(); diff --git a/lib/Service/PollService.php b/lib/Service/PollService.php index c1cb289c9..c49379738 100644 --- a/lib/Service/PollService.php +++ b/lib/Service/PollService.php @@ -70,7 +70,7 @@ public function __construct( private VoteMapper $voteMapper, ) { $this->userId = $this->userSession->getUser()?->getUID() ?? ''; - $this->preferences = $this->preferencesService->load(); + $this->preferences = $this->preferencesService->get(); } /** diff --git a/lib/Service/PreferencesService.php b/lib/Service/PreferencesService.php index f33ab18f2..d16c25f32 100644 --- a/lib/Service/PreferencesService.php +++ b/lib/Service/PreferencesService.php @@ -30,50 +30,49 @@ use OCP\IUserSession; class PreferencesService { - private Preferences $preferences; - private string $userId; - + private ?string $userId = null, + public function __construct( - private PreferencesMapper $preferencesMapper, private IUserSession $userSession, + private PreferencesMapper $preferencesMapper, + private Preferences $preferences, ) { - $this->userId = $this->userSession->getUser()?->getUID() ?? ''; - $this->preferences = new Preferences; + $this->userId = $this->userSession->getUser()?->getUID(); $this->load(); } - public function load(): Preferences { + public function load(?string $userId): Preferences { try { - $this->preferences = $this->preferencesMapper->find($this->userId); - } catch (DoesNotExistException $e) { - $this->preferences = new Preferences(); - $this->preferences->setTimestamp(time()); - $this->preferences->setPreferences(json_encode(Preferences::DEFAULT)); - if ($this->userId) { - $this->preferences->setUserId($this->userId); - $this->preferences = $this->preferencesMapper->insert($this->preferences); - } + $this->preferences = $this->preferencesMapper->find($userId ?? $this->userId); + } catch (DoesNotExistException $e) { + $this->preferences = new Preferences; } + return $this->preferences; } - /** - * Read all preferences - */ public function get(): Preferences { return $this->preferences; } - + /** * Write references */ - public function write(array $settings): Preferences { + public function write(array $preferences): Preferences { if (!$this->userId) { - throw new NotAuthorizedException; + throw new NotAuthorizedException(); } - $this->preferences->setPreferences(json_encode($settings)); + $this->preferences->setPreferences(json_encode($preferences)); $this->preferences->setTimestamp(time()); - return $this->preferencesMapper->update($this->preferences); + $this->preferences->setUserId($this->userId); + + if ($this->preferences->getId() > 0) { + return $this->preferencesMapper->update($this->preferences); + } else { + return $this->preferencesMapper->insert($this->preferences); + + } + } } diff --git a/src/js/Api/userSettings.js b/src/js/Api/userSettings.js index ecd09be8c..f70f1e978 100644 --- a/src/js/Api/userSettings.js +++ b/src/js/Api/userSettings.js @@ -32,11 +32,11 @@ const userSettings = { }) }, - writeUserSettings(settings) { + writeUserSettings(preferences) { return httpInstance.request({ method: 'POST', url: 'preferences', - data: { settings }, + data: { preferences }, cancelToken: cancelTokenHandlerObject[this.writeUserSettings.name].handleRequestCancellation().token, }) }, diff --git a/src/js/store/modules/settings.js b/src/js/store/modules/settings.js index 85727f592..4feea6ed7 100644 --- a/src/js/store/modules/settings.js +++ b/src/js/store/modules/settings.js @@ -32,7 +32,7 @@ const defaultSettings = () => ({ checkCalendars: [], checkCalendarsBefore: 0, checkCalendarsAfter: 0, - defaultViewTextPoll: 'list-view', + defaultViewTextPoll: 'table-view', defaultViewDatePoll: 'table-view', performanceThreshold: 1000, pollCombo: [], @@ -58,20 +58,6 @@ const mutations = { }, setPreference(state, payload) { - // change values in case of old settings - if (payload.defaultViewTextPoll === 'desktop') { - payload.defaultViewTextPoll = 'table-view' - } - if (payload.defaultViewTextPoll === 'mobile') { - payload.defaultViewTextPoll = 'list-view' - } - if (payload.defaultViewDatePoll === 'desktop') { - payload.defaultViewDatePoll = 'table-view' - } - if (payload.defaultViewDatePoll === 'mobile') { - payload.defaultViewDatePoll = 'list-view' - } - Object.keys(payload).filter((key) => key in state.user).forEach((key) => { state.user[key] = payload[key] }) @@ -125,18 +111,6 @@ const actions = { async get(context) { try { const response = await UserSettingsAPI.getUserSettings() - if (response.data.preferences.defaultViewTextPoll === 'desktop') { - response.data.preferences.defaultViewTextPoll = 'table-view' - } - if (response.data.preferences.defaultViewTextPoll === 'mobile') { - response.data.preferences.defaultViewTextPoll = 'list-view' - } - if (response.data.preferences.defaultViewDatePoll === 'desktop') { - response.data.preferences.defaultViewDatePoll = 'table-view' - } - if (response.data.preferences.defaultViewDatePoll === 'mobile') { - response.data.preferences.defaultViewDatePoll = 'list-view' - } context.commit('setPreference', response.data.preferences) } catch (e) { if (e?.code === 'ERR_CANCELED') return From f84829c979c7cf9d347558b9fc7b28b98824b835 Mon Sep 17 00:00:00 2001 From: dartcafe Date: Sun, 9 Jul 2023 02:33:07 +0200 Subject: [PATCH 7/7] fixes Signed-off-by: dartcafe --- lib/Service/PreferencesService.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Service/PreferencesService.php b/lib/Service/PreferencesService.php index d16c25f32..61fde2ead 100644 --- a/lib/Service/PreferencesService.php +++ b/lib/Service/PreferencesService.php @@ -30,7 +30,7 @@ use OCP\IUserSession; class PreferencesService { - private ?string $userId = null, + private ?string $userId = null; public function __construct( private IUserSession $userSession, @@ -41,7 +41,7 @@ public function __construct( $this->load(); } - public function load(?string $userId): Preferences { + public function load(?string $userId = null): Preferences { try { $this->preferences = $this->preferencesMapper->find($userId ?? $this->userId); } catch (DoesNotExistException $e) {