mirror of
https://github.com/flarum/framework.git
synced 2025-03-15 00:05:12 +08:00
Add separate "start discussions without approval" permission
- Register required permissions so that "start discussions without approval" can only be set for groups that already have permission to "start discussions" (and same for reply) - Change the "hidden" trash badge into a more descriptive gavel badge for discussions that are awaiting approval closes flarum/core#904
This commit is contained in:
parent
0ab8bb95cc
commit
4282b9be20
17
extensions/approval/js/admin/dist/extension.js
vendored
17
extensions/approval/js/admin/dist/extension.js
vendored
@ -13,6 +13,23 @@ System.register('flarum/approval/main', ['flarum/extend', 'flarum/app', 'flarum/
|
||||
execute: function () {
|
||||
|
||||
app.initializers.add('approval', function () {
|
||||
extend(app, 'getRequiredPermissions', function (required, permission) {
|
||||
if (permission === 'discussion.startWithoutApproval') {
|
||||
required.push('startDiscussion');
|
||||
}
|
||||
if (permission === 'discussion.replyWithoutApproval') {
|
||||
required.push('discussion.reply');
|
||||
}
|
||||
});
|
||||
|
||||
extend(PermissionGrid.prototype, 'startItems', function (items) {
|
||||
items.add('startDiscussionsWithoutApproval', {
|
||||
icon: 'check',
|
||||
label: app.translator.trans('flarum-approval.admin.permissions.start_discussions_without_approval_label'),
|
||||
permission: 'discussion.startWithoutApproval'
|
||||
}, 95);
|
||||
});
|
||||
|
||||
extend(PermissionGrid.prototype, 'replyItems', function (items) {
|
||||
items.add('replyWithoutApproval', {
|
||||
icon: 'check',
|
||||
|
@ -3,6 +3,23 @@ import app from 'flarum/app';
|
||||
import PermissionGrid from 'flarum/components/PermissionGrid';
|
||||
|
||||
app.initializers.add('approval', () => {
|
||||
extend(app, 'getRequiredPermissions', function(required, permission) {
|
||||
if (permission === 'discussion.startWithoutApproval') {
|
||||
required.push('startDiscussion');
|
||||
}
|
||||
if (permission === 'discussion.replyWithoutApproval') {
|
||||
required.push('discussion.reply');
|
||||
}
|
||||
});
|
||||
|
||||
extend(PermissionGrid.prototype, 'startItems', items => {
|
||||
items.add('startDiscussionsWithoutApproval', {
|
||||
icon: 'check',
|
||||
label: app.translator.trans('flarum-approval.admin.permissions.start_discussions_without_approval_label'),
|
||||
permission: 'discussion.startWithoutApproval'
|
||||
}, 95);
|
||||
});
|
||||
|
||||
extend(PermissionGrid.prototype, 'replyItems', items => {
|
||||
items.add('replyWithoutApproval', {
|
||||
icon: 'check',
|
||||
|
17
extensions/approval/js/forum/dist/extension.js
vendored
17
extensions/approval/js/forum/dist/extension.js
vendored
@ -1,7 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
System.register('flarum/approval/main', ['flarum/extend', 'flarum/app', 'flarum/models/Discussion', 'flarum/models/Post', 'flarum/components/DiscussionListItem', 'flarum/components/CommentPost', 'flarum/components/Button', 'flarum/utils/PostControls'], function (_export, _context) {
|
||||
var extend, override, app, Discussion, Post, DiscussionListItem, CommentPost, Button, PostControls;
|
||||
System.register('flarum/approval/main', ['flarum/extend', 'flarum/app', 'flarum/models/Discussion', 'flarum/models/Post', 'flarum/components/Badge', 'flarum/components/DiscussionListItem', 'flarum/components/CommentPost', 'flarum/components/Button', 'flarum/utils/PostControls'], function (_export, _context) {
|
||||
var extend, override, app, Discussion, Post, Badge, DiscussionListItem, CommentPost, Button, PostControls;
|
||||
return {
|
||||
setters: [function (_flarumExtend) {
|
||||
extend = _flarumExtend.extend;
|
||||
@ -12,6 +12,8 @@ System.register('flarum/approval/main', ['flarum/extend', 'flarum/app', 'flarum/
|
||||
Discussion = _flarumModelsDiscussion.default;
|
||||
}, function (_flarumModelsPost) {
|
||||
Post = _flarumModelsPost.default;
|
||||
}, function (_flarumComponentsBadge) {
|
||||
Badge = _flarumComponentsBadge.default;
|
||||
}, function (_flarumComponentsDiscussionListItem) {
|
||||
DiscussionListItem = _flarumComponentsDiscussionListItem.default;
|
||||
}, function (_flarumComponentsCommentPost) {
|
||||
@ -26,6 +28,13 @@ System.register('flarum/approval/main', ['flarum/extend', 'flarum/app', 'flarum/
|
||||
app.initializers.add('flarum-approval', function () {
|
||||
Discussion.prototype.isApproved = Discussion.attribute('isApproved');
|
||||
|
||||
extend(Discussion.prototype, 'badges', function (items) {
|
||||
if (!this.isApproved()) {
|
||||
items.remove('hidden');
|
||||
items.add('awaitingApproval', m(Badge, { type: 'awaitingApproval', icon: 'gavel', label: app.translator.trans('flarum-approval.forum.badge.awaiting_approval_tooltip') }));
|
||||
}
|
||||
});
|
||||
|
||||
Post.prototype.isApproved = Post.attribute('isApproved');
|
||||
Post.prototype.canApprove = Post.attribute('canApprove');
|
||||
|
||||
@ -67,6 +76,10 @@ System.register('flarum/approval/main', ['flarum/extend', 'flarum/app', 'flarum/
|
||||
|
||||
PostControls.approveAction = function () {
|
||||
this.save({ isApproved: true });
|
||||
|
||||
if (this.number() === 1) {
|
||||
this.discussion().pushAttributes({ isApproved: true });
|
||||
}
|
||||
};
|
||||
}, -10); // set initializer priority to run after reports
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ import { extend, override } from 'flarum/extend';
|
||||
import app from 'flarum/app';
|
||||
import Discussion from 'flarum/models/Discussion';
|
||||
import Post from 'flarum/models/Post';
|
||||
import Badge from 'flarum/components/Badge';
|
||||
import DiscussionListItem from 'flarum/components/DiscussionListItem';
|
||||
import CommentPost from 'flarum/components/CommentPost';
|
||||
import Button from 'flarum/components/Button';
|
||||
@ -10,6 +11,13 @@ import PostControls from 'flarum/utils/PostControls';
|
||||
app.initializers.add('flarum-approval', () => {
|
||||
Discussion.prototype.isApproved = Discussion.attribute('isApproved');
|
||||
|
||||
extend(Discussion.prototype, 'badges', function(items) {
|
||||
if (!this.isApproved()) {
|
||||
items.remove('hidden');
|
||||
items.add('awaitingApproval', <Badge type="awaitingApproval" icon="gavel" label={app.translator.trans('flarum-approval.forum.badge.awaiting_approval_tooltip')}/>);
|
||||
}
|
||||
});
|
||||
|
||||
Post.prototype.isApproved = Post.attribute('isApproved');
|
||||
Post.prototype.canApprove = Post.attribute('canApprove');
|
||||
|
||||
@ -52,5 +60,9 @@ app.initializers.add('flarum-approval', () => {
|
||||
|
||||
PostControls.approveAction = function() {
|
||||
this.save({isApproved: true});
|
||||
|
||||
if (this.number() === 1) {
|
||||
this.discussion().pushAttributes({isApproved: true});
|
||||
}
|
||||
};
|
||||
}, -10); // set initializer priority to run after reports
|
||||
|
@ -5,3 +5,6 @@
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
.DiscussionListItem--unapproved {
|
||||
.DiscussionListItem--hidden();
|
||||
}
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
namespace Flarum\Approval\Listener;
|
||||
|
||||
use Flarum\Event\ConfigureClientView;
|
||||
use Flarum\Event\ConfigureWebApp;
|
||||
use Illuminate\Contracts\Events\Dispatcher;
|
||||
|
||||
class AddClientAssets
|
||||
@ -20,13 +20,13 @@ class AddClientAssets
|
||||
*/
|
||||
public function subscribe(Dispatcher $events)
|
||||
{
|
||||
$events->listen(ConfigureClientView::class, [$this, 'addAssets']);
|
||||
$events->listen(ConfigureWebApp::class, [$this, 'addAssets']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ConfigureClientView $event
|
||||
*/
|
||||
public function addAssets(ConfigureClientView $event)
|
||||
public function addAssets(ConfigureWebApp $event)
|
||||
{
|
||||
if ($event->isForum()) {
|
||||
$event->addAssets([
|
||||
|
@ -32,7 +32,8 @@ class UnapproveNewContent
|
||||
$post = $event->post;
|
||||
|
||||
if (! $post->exists) {
|
||||
if ($event->actor->can('replyWithoutApproval', $post->discussion)) {
|
||||
if (($post->discussion->number_index == 0 && $event->actor->can('startWithoutApproval', $post->discussion))
|
||||
|| $event->actor->can('replyWithoutApproval', $post->discussion)) {
|
||||
if ($post->is_approved === null) {
|
||||
$post->is_approved = true;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user