update ACP page for 3.2.x and up

This commit is contained in:
Barış Soner Uşaklı 2024-02-05 12:59:32 -05:00
parent 8b1a0a2ad0
commit d66b629765
3 changed files with 87 additions and 84 deletions

View file

@ -6,60 +6,63 @@ const Sockets = require('./lib/sockets');
const Hooks = require('./lib/hooks');
const Scheduler = require('./lib/scheduler');

(function (Plugin) {
Plugin.hooks = Hooks;
const Plugin = module.exports;

Plugin.load = function (params, callback) {
function renderAdmin(req, res) {
res.render(`admin/plugins/${Config.plugin.id}`, {});
}

params.router.get(`/admin/plugins/${Config.plugin.id}`, params.middleware.admin.buildHeader, renderAdmin);
params.router.get(`/api/admin/plugins/${Config.plugin.id}`, renderAdmin);
Plugin.hooks = Hooks;

NodeBB.PluginSockets[Config.plugin.id] = Sockets;
NodeBB.AdminSockets[Config.plugin.id] = Config.adminSockets;
Plugin.load = function (params, callback) {
const routeHelpers = require.main.require('./src/routes/helpers');
const { router } = params;

NodeBB.app = params.app;
Scheduler.start();

Config.init(callback);
};

Plugin.addAdminNavigation = function (adminHeader, callback) {
adminHeader.plugins.push({
route: `/plugins/${Config.plugin.id}`,
icon: Config.plugin.icon,
name: Config.plugin.name,
routeHelpers.setupAdminPageRoute(router, `/admin/plugins/${Config.plugin.id}`, (req, res) => {
res.render(`admin/plugins/${Config.plugin.id}`, {
title: 'Poll',
});
});

callback(null, adminHeader);
};
NodeBB.PluginSockets[Config.plugin.id] = Sockets;
NodeBB.AdminSockets[Config.plugin.id] = Config.adminSockets;

Plugin.registerFormatting = function (payload, callback) {
payload.options.push({
name: 'poll',
className: `fa ${Config.plugin.icon}`,
title: '[[poll:creator_title]]',
});
NodeBB.app = params.app;
Scheduler.start();

callback(null, payload);
};
Config.init(callback);
};

Plugin.addPrivilege = function (hookData) {
hookData.privileges.set(
'poll:create', { label: '[[poll:admin.create-poll]]' },
);
};
Plugin.addAdminNavigation = function (adminHeader, callback) {
adminHeader.plugins.push({
route: `/plugins/${Config.plugin.id}`,
icon: Config.plugin.icon,
name: Config.plugin.name,
});

Plugin.copyPrivilegesFrom = function (data, callback) {
if (data.privileges.indexOf('poll:create') === -1) {
data.privileges.push('poll:create');
}
callback(null, adminHeader);
};

if (data.privileges.indexOf('groups:poll:create') === -1) {
data.privileges.push('groups:poll:create');
}
callback(null, data);
};
}(exports));
Plugin.registerFormatting = function (payload, callback) {
payload.options.push({
name: 'poll',
className: `fa ${Config.plugin.icon}`,
title: '[[poll:creator_title]]',
});

callback(null, payload);
};

Plugin.addPrivilege = function (hookData) {
hookData.privileges.set(
'poll:create', { label: '[[poll:admin.create-poll]]' },
);
};

Plugin.copyPrivilegesFrom = function (data, callback) {
if (data.privileges.indexOf('poll:create') === -1) {
data.privileges.push('poll:create');
}

if (data.privileges.indexOf('groups:poll:create') === -1) {
data.privileges.push('groups:poll:create');
}
callback(null, data);
};

View file

@ -26,7 +26,7 @@
"cron": "^1.8.2"
},
"nbbpm": {
"compatibility": "^3.0.0"
"compatibility": "^3.2.0"
},
"devDependencies": {
"eslint": "^7.31.0",

View file

@ -1,11 +1,21 @@
<div class="row">
<div class="col-lg-9">
<form class="form poll-settings">
<div class="card">
<div class="card-header">[[poll:poll]]</div>
<div class="card-body">
<div class="row">
<div class="col-lg-6">
<div class="acp-page-container">
<div component="settings/main/header" class="row border-bottom py-2 m-0 sticky-top acp-page-main-header align-items-center">
<div class="col-12 col-md-8 px-0 mb-1 mb-md-0">
<h4 class="fw-bold tracking-tight mb-0">{title}</h4>
</div>
<div class="col-12 col-md-4 px-0 px-md-3 text-end">
<button id="reset" class="btn btn-warning btn-sm fw-semibold ff-secondary text-center text-nowrap">[[poll:reset]]</button>
<button id="save" class="btn btn-primary btn-sm fw-semibold ff-secondary text-center text-nowrap">[[admin/admin:save-changes]]</button>
</div>
</div>

<div class="row m-0">
<div id="spy-container" class="col-12 px-0 mb-4" tabindex="0">
<form class="form poll-settings">
<div class="card">
<div class="card-header">[[poll:poll]]</div>
<div class="card-body">
<div class="mb-3">
<h6>[[poll:toggles]]</h6>
<div class="mb-3">
<div class="form-check">
@ -14,7 +24,7 @@
</div>
</div>
</div>
<div class="col-lg-6">
<div class="mb-3">
<h6>[[poll:limits]]</h6>
<div>
<label class="form-label" for="maxPollOptions">[[poll:max_options]]</label>
@ -23,36 +33,26 @@
</div>
</div>
</div>
</div>

<div class="card">
<div class="card-header">[[poll:defaults]]</div>
<div class="card-body">
<div class="row">
<div class="col-lg-6">
<div class="mb-3">
<label class="form-label" for="defaultsTitle">[[poll:default_title]]</label>
<input type="text" class="form-control" id="defaultsTitle" placeholder="Poll" data-key="defaults.title">
</div>
<div>
<label class="form-label" for="defaultsMaxVotes">[[poll:max_votes]]</label>
<input type="number" class="form-control" id="defaultsMaxVotes" placeholder="1" min="1" max="100" data-key="defaults.maxvotes">
<p class="form-text">[[poll:info_choices]]</p>
</div>
<div class="card">
<div class="card-header">[[poll:defaults]]</div>
<div class="card-body">
<div class="mb-3">
<label class="form-label" for="defaultsTitle">[[poll:default_title]]</label>
<input type="text" class="form-control" id="defaultsTitle" placeholder="Poll" data-key="defaults.title">
</div>
<div>
<label class="form-label" for="defaultsMaxVotes">[[poll:max_votes]]</label>
<input type="number" class="form-control" id="defaultsMaxVotes" placeholder="1" min="1" max="100" data-key="defaults.maxvotes">
<p class="form-text">[[poll:info_choices]]</p>
</div>
</div>
</div>
</div>
</form>
</div>
</form>
</div>

<!-- IMPORT admin/partials/settings/toc.tpl -->
</div>
</div>


<div class="col-lg-3">
<div class="card">
<div class="card-header">[[poll:settings]]</div>
<div class="card-body">
<button id="save" class="btn btn-primary btn-block">[[poll:save]]</button>
<button id="reset" class="btn btn-warning btn-block">[[poll:reset]]</button>
</div>
</div>
</div>
</div>