add ability to get specific preset, defaulting to all

master
tinect 2019-11-14 22:07:49 +01:00
parent f41c2a688a
commit 9f754c95b9
4 changed files with 33 additions and 18 deletions

View File

@ -1,5 +1,5 @@
<?php
function presets($_action, $_data = null)
function presets($_action, $_kind, $_object)
{
if ($_SESSION['mailcow_cc_role'] !== 'admin') {
$_SESSION['return'][] = [
@ -13,8 +13,9 @@ function presets($_action, $_data = null)
global $lang;
if ($_action === 'get') {
$kind = strtolower(trim($_data));
$kind = strtolower(trim($_kind));
$langSection = 'admin';
$presetsPath = __DIR__ . '/presets/' . $kind;
if (!in_array($kind, ['admin-rspamd', 'mailbox-sieve'], true)) {
return [];
@ -24,19 +25,13 @@ function presets($_action, $_data = null)
$langSection = 'mailbox';
}
if ($_object !== 'all') {
return getPresetFromFilePath($presetsPath . '/' . $_object . '.yml', $langSection);
}
$presets = [];
foreach (glob(__DIR__ . '/presets/' . $kind . '/*.yml') as $filename) {
$preset = Spyc::YAMLLoad($filename);
/* get translated headlines */
if (isset($preset['headline']) && strpos($preset['headline'], 'lang.') === 0) {
$langTextName = trim(substr($preset['headline'], 5));
if (isset($lang[$langSection][$langTextName])) {
$preset['headline'] = $lang[$langSection][$langTextName];
}
}
$presets[] = $preset;
foreach (glob($presetsPath . '/*.yml') as $filename) {
$presets[] = getPresetFromFilePath($filename, $langSection);
}
return $presets;
@ -44,3 +39,19 @@ function presets($_action, $_data = null)
return [];
}
function getPresetFromFilePath($filePath, $langSection)
{
global $lang;
$preset = Spyc::YAMLLoad($filePath);
$preset = ['name' => basename($filePath, '.yml')] + $preset;
/* get translated headlines */
if (isset($preset['headline']) && strpos($preset['headline'], 'lang.') === 0) {
$langTextName = trim(substr($preset['headline'], 5));
if (isset($lang[$langSection][$langTextName])) {
$preset['headline'] = $lang[$langSection][$langTextName];
}
}
return $preset;
}

View File

@ -3,7 +3,7 @@ var rspamd_presetsElem = document.getElementById("rspamd_presets");
if (rspamd_presetsElem) {
$.ajax({
dataType: 'json',
url: '/api/v1/get/presets/admin-rspamd',
url: '/api/v1/get/presets-admin-rspamd/all',
jsonp: false,
complete: function (data) {
if (data.responseText !== '{}') {

View File

@ -3,7 +3,7 @@ var sieve_presetsElem = document.getElementById("sieve_presets");
if (sieve_presetsElem) {
$.ajax({
dataType: 'json',
url: '/api/v1/get/presets/mailbox-sieve',
url: '/api/v1/get/presets-mailbox-sieve/all',
jsonp: false,
complete: function (data) {
if (data.responseText !== '{}') {

View File

@ -1071,8 +1071,12 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
break;
}
break;
case "presets":
process_get_return(presets('get', $object));
case "presets-admin-rspamd":
process_get_return(presets('get', 'admin-rspamd', $object));
break;
case "presets-mailbox-sieve":
process_get_return(presets('get', 'mailbox-sieve', $object));
break;
break;
// return no route found if no case is matched
default: