浏览代码

add ability to get specific preset, defaulting to all

tinect 5 年之前
父节点
当前提交
9f754c95b9
共有 4 个文件被更改,包括 33 次插入18 次删除
  1. 25 14
      data/web/inc/functions.presets.inc.php
  2. 1 1
      data/web/js/presets/rspamd.js
  3. 1 1
      data/web/js/presets/sieveMailbox.js
  4. 6 2
      data/web/json_api.php

+ 25 - 14
data/web/inc/functions.presets.inc.php

@@ -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;
+}

+ 1 - 1
data/web/js/presets/rspamd.js

@@ -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 !== '{}') {

+ 1 - 1
data/web/js/presets/sieveMailbox.js

@@ -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 !== '{}') {

+ 6 - 2
data/web/json_api.php

@@ -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: