diff --git a/extend.php b/extend.php index 229ae42..fd08983 100644 --- a/extend.php +++ b/extend.php @@ -25,12 +25,12 @@ return [ (new Extend\Frontend('forum')) - ->js(__DIR__.'/js/dist/forum.js') - ->css(__DIR__.'/resources/less/forum.less'), + ->js(__DIR__ . '/js/dist/forum.js') + ->css(__DIR__ . '/resources/less/forum.less'), (new Extend\Frontend('admin')) - ->js(__DIR__.'/js/dist/admin.js') - ->css(__DIR__.'/resources/less/admin.less'), + ->js(__DIR__ . '/js/dist/admin.js') + ->css(__DIR__ . '/resources/less/admin.less'), (new Extend\Routes('api')) ->get('/criteria', 'criteria.index', Controller\ListCriteriaController::class) @@ -55,7 +55,7 @@ (new Extend\ServiceProvider) ->register(AutoModeratorProvider::class), - new Extend\Locales(__DIR__.'/resources/locale'), + new Extend\Locales(__DIR__ . '/resources/locale'), (new Extend\Console()) ->command(RecalculateCriteria::class), @@ -70,10 +70,12 @@ ->metricDriver('discussions_started', Metric\DiscussionsStarted::class) ->metricDriver('discussions_participated', Metric\DiscussionsParticipated::class) ->metricDriver('posts_made', Metric\PostsMade::class) + ->metricDriver('posts_read', Metric\PostsRead::class) ->metricDriver('likes_given', Metric\LikesGiven::class) ->metricDriver('likes_received', Metric\LikesReceived::class) ->metricDriver('best_answers', Metric\BestAnswers::class) ->metricDriver('moderator_strikes', Metric\ModeratorStrikes::class) + ->metricDriver('days_since_account_creation', Metric\DaysSinceAccountCreation::class) ->requirementDriver('email_confirmed', Requirement\EmailConfirmed::class) ->requirementDriver('email_matches_regex', Requirement\EmailMatchesRegex::class) ->requirementDriver('in_group', Requirement\InGroup::class) diff --git a/resources/locale/en.yml b/resources/locale/en.yml index 36bf2ba..b4b0dbe 100644 --- a/resources/locale/en.yml +++ b/resources/locale/en.yml @@ -11,10 +11,12 @@ askvortsov-auto-moderator: discussions_participated: Discussions Participated discussions_started: Discussions Started posts_made: Posts Made + posts_read: Posts Read likes_given: Likes Given likes_received: Likes Received best_answers: Best Answers moderator_strikes: Moderator Warnings Strikes + days_since_account_creation: Days since creating an account requirement_drivers: email_confirmed: Email Confirmed in_group: In Group @@ -80,7 +82,7 @@ askvortsov-auto-moderator: forum: edit_user: - managed_groups_heading: + managed_groups_heading: lib: group_id: Group ID @@ -88,4 +90,3 @@ askvortsov-auto-moderator: header: "Managed Groups:" group_item: " {groupName}" groups_not_editable: Groups managed by automoderator criteria cannot be added/removed to/from users manually to prevent inconsistencies. - diff --git a/src/Action/ActionDriverInterface.php b/src/Action/ActionDriverInterface.php index 2eb07d1..82cd24a 100644 --- a/src/Action/ActionDriverInterface.php +++ b/src/Action/ActionDriverInterface.php @@ -15,7 +15,7 @@ public function translationKey(): string; /** * A list of settings used by this action. - * + * * Keys should be setting names, values should be translation keys for placeholders. */ public function availableSettings(): array; @@ -34,5 +34,5 @@ public function extensionDependencies(): array; * Apply the action to the user. * Don't forget to dispatch any events that should be emitted! */ - public function execute(User $user, array $settings = [], User $lastEditedBy); -} \ No newline at end of file + public function execute(User $user, array $settings, User $lastEditedBy); +} diff --git a/src/Action/ActivateEmail.php b/src/Action/ActivateEmail.php index a692d36..0eeb897 100644 --- a/src/Action/ActivateEmail.php +++ b/src/Action/ActivateEmail.php @@ -14,11 +14,13 @@ public function translationKey(): string return 'askvortsov-auto-moderator.admin.action_drivers.activate_email'; } - public function availableSettings(): array { + public function availableSettings(): array + { return []; } - public function validateSettings(array $settings, Factory $validator): MessageBag { + public function validateSettings(array $settings, Factory $validator): MessageBag + { return $validator->make($settings, [])->errors(); } @@ -27,10 +29,11 @@ public function extensionDependencies(): array return []; } - public function execute(User $user, array $settings = [], User $lastEditedBy ) { + public function execute(User $user, array $settings, User $lastEditedBy) + { $user->is_email_confirmed = true; $user->save(); resolve('events')->dispatch(new Activated($user)); } -} \ No newline at end of file +} diff --git a/src/Action/AddToGroup.php b/src/Action/AddToGroup.php index 5f7fc32..1e4fb03 100644 --- a/src/Action/AddToGroup.php +++ b/src/Action/AddToGroup.php @@ -14,13 +14,15 @@ public function translationKey(): string return 'askvortsov-auto-moderator.admin.action_drivers.add_to_group'; } - public function availableSettings(): array { + public function availableSettings(): array + { return [ 'group_id' => 'askvortsov-auto-moderator.lib.group_id' ]; } - public function validateSettings(array $settings, Factory $validator): MessageBag { + public function validateSettings(array $settings, Factory $validator): MessageBag + { return $validator->make($settings, [ 'group_id' => 'required|integer', ])->errors(); @@ -31,11 +33,11 @@ public function extensionDependencies(): array return []; } - public function execute(User $user, array $settings = [], User $lastEditedBy ) { + public function execute(User $user, array $settings, User $lastEditedBy) + { $groups = $user->groups->toArray(); $user->groups()->syncWithoutDetaching([$settings['group_id']]); resolve('events')->dispatch(new GroupsChanged($user, $groups)); } - -} \ No newline at end of file +} diff --git a/src/Action/RemoveFromGroup.php b/src/Action/RemoveFromGroup.php index e80afa3..3119121 100644 --- a/src/Action/RemoveFromGroup.php +++ b/src/Action/RemoveFromGroup.php @@ -33,7 +33,7 @@ public function extensionDependencies(): array return []; } - public function execute(User $user, array $settings = [], User $lastEditedBy ) + public function execute(User $user, array $settings, User $lastEditedBy) { $groups = $user->groups->toArray(); $user->groups()->detach($settings['group_id']); diff --git a/src/Action/Suspend.php b/src/Action/Suspend.php index 8bf1b61..b608f33 100644 --- a/src/Action/Suspend.php +++ b/src/Action/Suspend.php @@ -37,7 +37,7 @@ public function extensionDependencies(): array return ['flarum-suspend']; } - public function execute(User $user, array $settings = [], User $lastEditedBy ) + public function execute(User $user, array $settings, User $lastEditedBy) { $days = Arr::get($settings, 'indefinitely', false) ? 365 * 100 : $settings['days']; diff --git a/src/Action/Unsuspend.php b/src/Action/Unsuspend.php index aac9f43..bde84c4 100644 --- a/src/Action/Unsuspend.php +++ b/src/Action/Unsuspend.php @@ -29,7 +29,7 @@ public function extensionDependencies(): array return ['flarum-suspend']; } - public function execute(User $user, array $settings = [], User $lastEditedBy ) + public function execute(User $user, array $settings, User $lastEditedBy) { $user->suspended_until = null; $user->save(); diff --git a/src/Metric/DaysSinceAccountCreation.php b/src/Metric/DaysSinceAccountCreation.php new file mode 100644 index 0000000..a215a67 --- /dev/null +++ b/src/Metric/DaysSinceAccountCreation.php @@ -0,0 +1,37 @@ +diff($user->joined_at)->format("%a"); + } +} diff --git a/src/Metric/PostsRead.php b/src/Metric/PostsRead.php new file mode 100644 index 0000000..d1a9f7a --- /dev/null +++ b/src/Metric/PostsRead.php @@ -0,0 +1,44 @@ + function (UserRead $event) { + return $event->state->user; + } + ]; + } + + public function getValue(User $user): int + { + // Find all read posts + // Count read post by last read post number + return $user->read()->sum('last_read_post_number'); + } +}