Plugins. A plugin gets this page for free by * shipping plugins//settings.json instead of hand-coding a form; see * engine/function/plugin_settings.php for the schema. */ if (!defined('ACP_ROOT')) { http_response_code(403); die('Direct access denied.'); } $plugin = znote_plugin_sanitize((string)($_GET['plugin'] ?? $_POST['plugin'] ?? '')); $known = znote_plugins(); if ($plugin === '' || !isset($known[$plugin]) || !znote_plugin_settings_has($plugin)) { acp_flash_error(t_default('acp.plgset.no_such', 'That plugin has no settings.json.')); acp_redirect('plugins'); } $manifest = $known[$plugin]; $schema = znote_plugin_settings_schema($plugin); if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (!acp_verify_csrf()) { acp_flash_error(t_default('acp.csrf_failed', 'Your session expired, please try again.')); acp_redirect('plugin_settings', array('plugin' => $plugin)); } $errors = znote_plugin_settings_save($plugin, $_POST); if ($errors) { acp_flash_error(t_default('acp.plgset.save_failed', 'Some fields were not valid and kept their previous value: {fields}.', ['fields' => implode(', ', $errors)])); } else { acp_log('plugin.settings_save', $plugin); acp_flash_success(t_default('acp.plgset.saved', 'Settings saved.')); } acp_redirect('plugin_settings', array('plugin' => $plugin)); } $values = znote_plugin_settings_get($plugin); ?> h($manifest['name'])]), h($manifest['description'])); ?>
$field): $value = $values[$key] ?? $field['default']; $id = 'plgset_' . $key; ?>
>
$optLabel): ?>