-
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathextend.php
More file actions
95 lines (82 loc) · 4.44 KB
/
extend.php
File metadata and controls
95 lines (82 loc) · 4.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php
/*
* This file is part of datlechin/flarum-birthdays.
*
* Copyright (c) 2022 Ngo Quoc Dat.
*
* For the full copyright and license information, please view the LICENSE.md
* file that was distributed with this source code.
*/
namespace Datlechin\Birthdays;
use Datlechin\Birthdays\Access\UserPolicy;
use Datlechin\Birthdays\Filter\BirthdayFilter;
use Flarum\Api\Context;
use Flarum\Api\Resource;
use Flarum\Api\Schema;
use Flarum\Extend;
use Flarum\Search\Database\DatabaseSearchDriver;
use Flarum\Settings\SettingsRepositoryInterface;
use Flarum\User\Search\UserSearcher;
use Flarum\User\User;
use Flarum\User\UserValidator;
use Symfony\Contracts\Translation\TranslatorInterface;
return [
(new Extend\Frontend('forum'))
->route('/birthdays', 'birthdays')
->js(__DIR__ . '/js/dist/forum.js')
->css(__DIR__ . '/less/forum.less'),
(new Extend\Frontend('admin'))
->js(__DIR__ . '/js/dist/admin.js'),
new Extend\Locales(__DIR__ . '/locale'),
(new Extend\ApiResource(Resource\UserResource::class))
->fields(fn () => [
Schema\Str::make('birthday')
->visible(fn (User $user, Context $context) => $context->getActor()->can('viewBirthday', $user))
->writable(fn (User $user, Context $context) => $context->getActor()->can('editBirthday', $user))
->nullable()
->required(function (Context $context) {
$settings = resolve(SettingsRepositoryInterface::class);
return $context->creating()
&& (bool) $settings->get('datlechin-birthdays.required')
&& (bool) $settings->get('datlechin-birthdays.set_on_registration');
})
->rule('nullable')
->rule('date')
->rule(function () {
$minAge = (int) resolve(SettingsRepositoryInterface::class)->get('datlechin-birthdays.min_age');
return sprintf('before:-%s years', $minAge);
})
->validationMessages([
'birthday.required' => resolve(TranslatorInterface::class)->trans('datlechin-birthdays.api.birthday_required_message'),
'birthday.before' => resolve(TranslatorInterface::class)->trans('datlechin-birthdays.api.invalid_age_message', [
'minAge' => (int) resolve(SettingsRepositoryInterface::class)->get('datlechin-birthdays.min_age'),
]),
])
->get(fn (User $user) => $user->birthday)
->set(function (User $user, ?string $value) {
$user->birthday = ($value === '' || $value === null) ? null : $value;
}),
Schema\Boolean::make('showDobDate')
->visible(fn (User $user, Context $context) => $context->getActor()->can('viewBirthday', $user))
->writable(fn (User $user, Context $context) => $context->getActor()->can('editBirthday', $user))
->get(fn (User $user) => (bool) $user->showDobDate),
Schema\Boolean::make('showDobYear')
->visible(fn (User $user, Context $context) => $context->getActor()->can('viewBirthday', $user))
->writable(fn (User $user, Context $context) => $context->getActor()->can('editBirthday', $user))
->get(fn (User $user) => (bool) $user->showDobYear),
Schema\Boolean::make('canEditOwnBirthday')
->visible(fn (User $user, Context $context) => $context->getActor()->can('viewBirthday', $user))
->get(fn (User $user, Context $context) => $context->getActor()->id === $user->id && $context->getActor()->can('editOwnBirthday', $user)),
]),
(new Extend\Settings())
->serializeToForum('datlechin-birthdays.setBirthdayOnRegistration', 'datlechin-birthdays.set_on_registration', 'boolval')
->serializeToForum('datlechin-birthdays.dateFormat', 'datlechin-birthdays.date_format', 'strval')
->serializeToForum('datlechin-birthdays.dateNoneYearFormat', 'datlechin-birthdays.date_none_year_format', 'strval')
->default('datlechin-birthdays.min_age', 13),
(new Extend\Validator(UserValidator::class))
->configure(AddBirthdayValidation::class),
(new Extend\Policy())
->modelPolicy(User::class, UserPolicy::class),
(new Extend\SearchDriver(DatabaseSearchDriver::class))
->addFilter(UserSearcher::class, BirthdayFilter::class),
];