diff --git a/public/language/en-GB/modules.json b/public/language/en-GB/modules.json index f952a5f2d8..40b8747097 100644 --- a/public/language/en-GB/modules.json +++ b/public/language/en-GB/modules.json @@ -90,6 +90,7 @@ "composer.zen_mode": "Zen Mode", "composer.select_category": "Select a category", "composer.textarea.placeholder": "Enter your post content here, drag and drop images", + "composer.post-queue-alert": "Hellođź‘‹!
This forum uses a post queue system, since you are a new user your post will be hidden until it is approved by our moderation team.", "composer.schedule-for": "Schedule topic for", "composer.schedule-date": "Date", "composer.schedule-time": "Time", diff --git a/public/openapi/read/config.yaml b/public/openapi/read/config.yaml index 795ef2f2d0..ceb99c0d58 100644 --- a/public/openapi/read/config.yaml +++ b/public/openapi/read/config.yaml @@ -29,6 +29,8 @@ get: type: boolean maintenanceMode: type: boolean + postQueue: + type: number minimumTitleLength: type: number maximumTitleLength: diff --git a/src/controllers/api.js b/src/controllers/api.js index 7aebe9c3e3..17f846b018 100644 --- a/src/controllers/api.js +++ b/src/controllers/api.js @@ -35,6 +35,7 @@ apiController.loadConfig = async function (req) { titleLayout: (meta.config.titleLayout || '{pageTitle} | {browserTitle}').replace(/{/g, '{').replace(/}/g, '}'), showSiteTitle: meta.config.showSiteTitle === 1, maintenanceMode: meta.config.maintenanceMode === 1, + postQueue: meta.config.postQueue, minimumTitleLength: meta.config.minimumTitleLength, maximumTitleLength: meta.config.maximumTitleLength, minimumPostLength: meta.config.minimumPostLength, diff --git a/src/posts/queue.js b/src/posts/queue.js index 565e21338b..7891dd4407 100644 --- a/src/posts/queue.js +++ b/src/posts/queue.js @@ -87,7 +87,7 @@ module.exports = function (Posts) { Posts.canUserPostContentWithLinks = async function (uid, content) { if (!content) { - return false; + return true; } const [reputation, isPrivileged] = await Promise.all([ user.getUserField(uid, 'reputation'), @@ -104,20 +104,25 @@ module.exports = function (Posts) { }; Posts.shouldQueue = async function (uid, data) { - const [userData, isMemberOfExempt, categoryQueueEnabled] = await Promise.all([ - user.getUserFields(uid, ['uid', 'reputation', 'postcount']), - groups.isMemberOfAny(uid, meta.config.groupsExemptFromPostQueue), - isCategoryQueueEnabled(data), - ]); + let shouldQueue = meta.config.postQueue; + if (shouldQueue) { + const [userData, isPrivileged, isMemberOfExempt, categoryQueueEnabled] = await Promise.all([ + user.getUserFields(uid, ['uid', 'reputation', 'postcount']), + user.isPrivileged(uid), + groups.isMemberOfAny(uid, meta.config.groupsExemptFromPostQueue), + isCategoryQueueEnabled(data), + ]); + shouldQueue = categoryQueueEnabled && + !isPrivileged && + !isMemberOfExempt && + ( + !userData.uid || + userData.reputation < meta.config.postQueueReputationThreshold || + userData.postcount <= 0 || + !await Posts.canUserPostContentWithLinks(uid, data.content) + ); + } - const shouldQueue = meta.config.postQueue && categoryQueueEnabled && - !isMemberOfExempt && - ( - !userData.uid || - userData.reputation < meta.config.postQueueReputationThreshold || - userData.postcount <= 0 || - !await Posts.canUserPostContentWithLinks(uid, data.content) - ); const result = await plugins.hooks.fire('filter:post.shouldQueue', { shouldQueue: !!shouldQueue, uid: uid, @@ -130,7 +135,7 @@ module.exports = function (Posts) { const type = getType(data); const cid = await getCid(type, data); if (!cid) { - throw new Error('[[error:invalid-cid]]'); + return true; } return await categories.getCategoryField(cid, 'postQueue'); }