mirror of
https://github.com/flarum/core.git
synced 2025-07-18 07:11:17 +02: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:
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 () {
|
execute: function () {
|
||||||
|
|
||||||
app.initializers.add('approval', 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) {
|
extend(PermissionGrid.prototype, 'replyItems', function (items) {
|
||||||
items.add('replyWithoutApproval', {
|
items.add('replyWithoutApproval', {
|
||||||
icon: 'check',
|
icon: 'check',
|
||||||
|
@@ -3,6 +3,23 @@ import app from 'flarum/app';
|
|||||||
import PermissionGrid from 'flarum/components/PermissionGrid';
|
import PermissionGrid from 'flarum/components/PermissionGrid';
|
||||||
|
|
||||||
app.initializers.add('approval', () => {
|
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 => {
|
extend(PermissionGrid.prototype, 'replyItems', items => {
|
||||||
items.add('replyWithoutApproval', {
|
items.add('replyWithoutApproval', {
|
||||||
icon: 'check',
|
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';
|
'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) {
|
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, DiscussionListItem, CommentPost, Button, PostControls;
|
var extend, override, app, Discussion, Post, Badge, DiscussionListItem, CommentPost, Button, PostControls;
|
||||||
return {
|
return {
|
||||||
setters: [function (_flarumExtend) {
|
setters: [function (_flarumExtend) {
|
||||||
extend = _flarumExtend.extend;
|
extend = _flarumExtend.extend;
|
||||||
@@ -12,6 +12,8 @@ System.register('flarum/approval/main', ['flarum/extend', 'flarum/app', 'flarum/
|
|||||||
Discussion = _flarumModelsDiscussion.default;
|
Discussion = _flarumModelsDiscussion.default;
|
||||||
}, function (_flarumModelsPost) {
|
}, function (_flarumModelsPost) {
|
||||||
Post = _flarumModelsPost.default;
|
Post = _flarumModelsPost.default;
|
||||||
|
}, function (_flarumComponentsBadge) {
|
||||||
|
Badge = _flarumComponentsBadge.default;
|
||||||
}, function (_flarumComponentsDiscussionListItem) {
|
}, function (_flarumComponentsDiscussionListItem) {
|
||||||
DiscussionListItem = _flarumComponentsDiscussionListItem.default;
|
DiscussionListItem = _flarumComponentsDiscussionListItem.default;
|
||||||
}, function (_flarumComponentsCommentPost) {
|
}, function (_flarumComponentsCommentPost) {
|
||||||
@@ -26,6 +28,13 @@ System.register('flarum/approval/main', ['flarum/extend', 'flarum/app', 'flarum/
|
|||||||
app.initializers.add('flarum-approval', function () {
|
app.initializers.add('flarum-approval', function () {
|
||||||
Discussion.prototype.isApproved = Discussion.attribute('isApproved');
|
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.isApproved = Post.attribute('isApproved');
|
||||||
Post.prototype.canApprove = Post.attribute('canApprove');
|
Post.prototype.canApprove = Post.attribute('canApprove');
|
||||||
|
|
||||||
@@ -67,6 +76,10 @@ System.register('flarum/approval/main', ['flarum/extend', 'flarum/app', 'flarum/
|
|||||||
|
|
||||||
PostControls.approveAction = function () {
|
PostControls.approveAction = function () {
|
||||||
this.save({ isApproved: true });
|
this.save({ isApproved: true });
|
||||||
|
|
||||||
|
if (this.number() === 1) {
|
||||||
|
this.discussion().pushAttributes({ isApproved: true });
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}, -10); // set initializer priority to run after reports
|
}, -10); // set initializer priority to run after reports
|
||||||
}
|
}
|
||||||
|
@@ -2,6 +2,7 @@ import { extend, override } from 'flarum/extend';
|
|||||||
import app from 'flarum/app';
|
import app from 'flarum/app';
|
||||||
import Discussion from 'flarum/models/Discussion';
|
import Discussion from 'flarum/models/Discussion';
|
||||||
import Post from 'flarum/models/Post';
|
import Post from 'flarum/models/Post';
|
||||||
|
import Badge from 'flarum/components/Badge';
|
||||||
import DiscussionListItem from 'flarum/components/DiscussionListItem';
|
import DiscussionListItem from 'flarum/components/DiscussionListItem';
|
||||||
import CommentPost from 'flarum/components/CommentPost';
|
import CommentPost from 'flarum/components/CommentPost';
|
||||||
import Button from 'flarum/components/Button';
|
import Button from 'flarum/components/Button';
|
||||||
@@ -10,6 +11,13 @@ import PostControls from 'flarum/utils/PostControls';
|
|||||||
app.initializers.add('flarum-approval', () => {
|
app.initializers.add('flarum-approval', () => {
|
||||||
Discussion.prototype.isApproved = Discussion.attribute('isApproved');
|
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.isApproved = Post.attribute('isApproved');
|
||||||
Post.prototype.canApprove = Post.attribute('canApprove');
|
Post.prototype.canApprove = Post.attribute('canApprove');
|
||||||
|
|
||||||
@@ -52,5 +60,9 @@ app.initializers.add('flarum-approval', () => {
|
|||||||
|
|
||||||
PostControls.approveAction = function() {
|
PostControls.approveAction = function() {
|
||||||
this.save({isApproved: true});
|
this.save({isApproved: true});
|
||||||
|
|
||||||
|
if (this.number() === 1) {
|
||||||
|
this.discussion().pushAttributes({isApproved: true});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}, -10); // set initializer priority to run after reports
|
}, -10); // set initializer priority to run after reports
|
||||||
|
@@ -5,3 +5,6 @@
|
|||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.DiscussionListItem--unapproved {
|
||||||
|
.DiscussionListItem--hidden();
|
||||||
|
}
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
namespace Flarum\Approval\Listener;
|
namespace Flarum\Approval\Listener;
|
||||||
|
|
||||||
use Flarum\Event\ConfigureClientView;
|
use Flarum\Event\ConfigureWebApp;
|
||||||
use Illuminate\Contracts\Events\Dispatcher;
|
use Illuminate\Contracts\Events\Dispatcher;
|
||||||
|
|
||||||
class AddClientAssets
|
class AddClientAssets
|
||||||
@@ -20,13 +20,13 @@ class AddClientAssets
|
|||||||
*/
|
*/
|
||||||
public function subscribe(Dispatcher $events)
|
public function subscribe(Dispatcher $events)
|
||||||
{
|
{
|
||||||
$events->listen(ConfigureClientView::class, [$this, 'addAssets']);
|
$events->listen(ConfigureWebApp::class, [$this, 'addAssets']);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param ConfigureClientView $event
|
* @param ConfigureClientView $event
|
||||||
*/
|
*/
|
||||||
public function addAssets(ConfigureClientView $event)
|
public function addAssets(ConfigureWebApp $event)
|
||||||
{
|
{
|
||||||
if ($event->isForum()) {
|
if ($event->isForum()) {
|
||||||
$event->addAssets([
|
$event->addAssets([
|
||||||
|
@@ -32,7 +32,8 @@ class UnapproveNewContent
|
|||||||
$post = $event->post;
|
$post = $event->post;
|
||||||
|
|
||||||
if (! $post->exists) {
|
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) {
|
if ($post->is_approved === null) {
|
||||||
$post->is_approved = true;
|
$post->is_approved = true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user