Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix bug & several new features #6

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions extend.php
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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),
Expand All @@ -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)
Expand Down
5 changes: 3 additions & 2 deletions resources/locale/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -80,12 +82,11 @@ askvortsov-auto-moderator:

forum:
edit_user:
managed_groups_heading:
managed_groups_heading:

lib:
group_id: Group ID
managed_groups:
header: "Managed Groups:"
group_item: "<badge></badge> {groupName}"
groups_not_editable: Groups managed by automoderator criteria cannot be added/removed to/from users manually to prevent inconsistencies.

6 changes: 3 additions & 3 deletions src/Action/ActionDriverInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
}
public function execute(User $user, array $settings, User $lastEditedBy);
}
11 changes: 7 additions & 4 deletions src/Action/ActivateEmail.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}

Expand All @@ -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));
}
}
}
12 changes: 7 additions & 5 deletions src/Action/AddToGroup.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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));
}

}
}
2 changes: 1 addition & 1 deletion src/Action/RemoveFromGroup.php
Original file line number Diff line number Diff line change
Expand Up @@ -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']);
Expand Down
2 changes: 1 addition & 1 deletion src/Action/Suspend.php
Original file line number Diff line number Diff line change
Expand Up @@ -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'];

Expand Down
2 changes: 1 addition & 1 deletion src/Action/Unsuspend.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
37 changes: 37 additions & 0 deletions src/Metric/DaysSinceAccountCreation.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

/*
* This file is part of askvortsov/flarum-auto-moderator
*
* Copyright (c) 2021 Alexander Skvortsov.
*
* For detailed copyright and license information, please view the
* LICENSE file that was distributed with this source code.
*/

namespace Askvortsov\AutoModerator\Metric;

use Flarum\User\User;
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
use Flarum\User\User;
use Carbon\Carbon;
use Flarum\User\User;


class DaysSinceAccountCreation implements MetricDriverInterface
{
public function translationKey(): string
{
return 'askvortsov-auto-moderator.admin.metric_drivers.days_since_account_creation';
}

public function extensionDependencies(): array
{
return [];
}

public function eventTriggers(): array
{
return [];
}

public function getValue(User $user): int
{
return (new \DateTime())->diff($user->joined_at)->format("%a");
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
return (new \DateTime())->diff($user->joined_at)->format("%a");
return (new \DateTime())->diff($user->joined_at ?? Carbon::now())->format("%a");

}
}
44 changes: 44 additions & 0 deletions src/Metric/PostsRead.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php

/*
* This file is part of askvortsov/flarum-auto-moderator
*
* Copyright (c) 2021 Alexander Skvortsov.
*
* For detailed copyright and license information, please view the
* LICENSE file that was distributed with this source code.
*/

namespace Askvortsov\AutoModerator\Metric;

use Flarum\Discussion\Event\UserRead;
use Flarum\User\User;

class PostsRead implements MetricDriverInterface
{
public function translationKey(): string
{
return 'askvortsov-auto-moderator.admin.metric_drivers.posts_read';
}

public function extensionDependencies(): array
{
return [];
}

public function eventTriggers(): array
{
return [
UserRead::class => 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');
}
}