1
0
mirror of https://github.com/flarum/core.git synced 2025-08-13 11:54:32 +02:00

Added Change Tags Item to PermissionGrid

Fixed missing bower install and added TODO for translation

Added check to allow edit of tags for author in backend

Fixed code style, added translation key

Extracted tag permissions into method and restored original extension.js

Adressing chaining of policy issue
This commit is contained in:
David Bohn
2015-11-10 10:05:34 +01:00
parent 56460a057f
commit 5c52f3fae0
3 changed files with 67 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
import { extend } from 'flarum/extend';
import PermissionGrid from 'flarum/components/PermissionGrid';
import SettingDropdown from 'flarum/components/SettingDropdown';
export default function() {
extend(PermissionGrid.prototype, 'startItems', items => {
items.add('allowTagChange', {
icon: 'tags',
label: app.translator.trans('flarum-tags.admin.permissions.allow_edit_tags_label'),
setting: () => {
const minutes = parseInt(app.settings.allow_tag_change, 10);
return SettingDropdown.component({
defaultLabel: minutes
? app.translator.transChoice('core.admin.permissions_controls.allow_some_minutes_button', minutes, {count: minutes})
: app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button'),
key: 'allow_tag_change',
options: [
{value: '-1', label: app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button')},
{value: '10', label: app.translator.trans('core.admin.permissions_controls.allow_ten_minutes_button')},
{value: 'reply', label: app.translator.trans('core.admin.permissions_controls.allow_until_reply_button')}
]
});
}
}, 90);
});
}

View File

@@ -3,6 +3,7 @@ import addTagsPermissionScope from 'flarum/tags/addTagsPermissionScope';
import addTagPermission from 'flarum/tags/addTagPermission';
import addTagsPane from 'flarum/tags/addTagsPane';
import addTagsHomePageOption from 'flarum/tags/addTagsHomePageOption';
import addTagChangePermission from 'flarum/tags/addTagChangePermission';
app.initializers.add('flarum-tags', app => {
app.store.models.tags = Tag;
@@ -11,4 +12,5 @@ app.initializers.add('flarum-tags', app => {
addTagPermission();
addTagsPane();
addTagsHomePageOption();
addTagChangePermission();
});

View File

@@ -10,10 +10,12 @@
namespace Flarum\Tags\Access;
use Carbon\Carbon;
use Flarum\Core\Access\AbstractPolicy;
use Flarum\Core\Discussion;
use Flarum\Core\User;
use Flarum\Event\ScopeHiddenDiscussionVisibility;
use Flarum\Settings\SettingsRepositoryInterface;
use Flarum\Tags\Tag;
use Illuminate\Contracts\Events\Dispatcher;
use Illuminate\Database\Eloquent\Builder;
@@ -21,11 +23,26 @@ use Illuminate\Database\Query\Expression;
class DiscussionPolicy extends AbstractPolicy
{
/**
* {@inheritdoc}
*/
protected $model = Discussion::class;
/**
* @var SettingsRepositoryInterface
*/
protected $settings;
/**
* @param SettingsRepositoryInterface $settings
* @param Gate $gate
*/
public function __construct(SettingsRepositoryInterface $settings)
{
$this->settings = $settings;
}
/**
* {@inheritdoc}
*/
@@ -103,4 +120,25 @@ class DiscussionPolicy extends AbstractPolicy
->where('discussions.id', new Expression('discussion_id'));
});
}
/**
* This method checks, if the user is still allowed to edit the tags
* based on the configuration item
* @param User $actor
* @param Discussion $discussion
* @return bool
*/
public function tag(User $actor, Discussion $discussion)
{
if ($discussion->start_user_id == $actor->id) {
$allowEditTags = $this->settings->get('allow_tag_change');
if ($allowEditTags === '-1'
|| ($allowEditTags === 'reply' && $discussion->participants_count <= 1)
|| ($discussion->start_time->diffInMinutes(new Carbon) < $allowEditTags)
) {
return true;
}
}
}
}