aboutsummaryrefslogtreecommitdiffhomepage
path: root/application/Config.php
diff options
context:
space:
mode:
authorArthurHoaro <arthur@hoa.ro>2015-11-18 17:40:42 +0100
committerArthurHoaro <arthur@hoa.ro>2016-01-31 18:54:48 +0100
commitdea0ba28f950867532eae572e7bcda49e81bbcf0 (patch)
tree8a9c4f9d7525a2ba249bbaaabe456c2d0941293b /application/Config.php
parent423e2a8b13dc0069c83f3e540f576aa1b89fe5d5 (diff)
downloadShaarli-dea0ba28f950867532eae572e7bcda49e81bbcf0.tar.gz
Shaarli-dea0ba28f950867532eae572e7bcda49e81bbcf0.tar.zst
Shaarli-dea0ba28f950867532eae572e7bcda49e81bbcf0.zip
Fixes #378 - Plugin administration UI.
Diffstat (limited to 'application/Config.php')
-rw-r--r--application/Config.php114
1 files changed, 114 insertions, 0 deletions
diff --git a/application/Config.php b/application/Config.php
index c71ef68c..9af5a535 100644
--- a/application/Config.php
+++ b/application/Config.php
@@ -74,6 +74,106 @@ function writeConfig($config, $isLoggedIn)
74} 74}
75 75
76/** 76/**
77 * Process plugin administration form data and save it in an array.
78 *
79 * @param array $formData Data sent by the plugin admin form.
80 *
81 * @return array New list of enabled plugin, ordered.
82 *
83 * @throws PluginConfigOrderException Plugins can't be sorted because their order is invalid.
84 */
85function save_plugin_config($formData)
86{
87 // Make sure there are no duplicates in orders.
88 if (!validate_plugin_order($formData)) {
89 throw new PluginConfigOrderException();
90 }
91
92 $plugins = array();
93 $newEnabledPlugins = array();
94 foreach ($formData as $key => $data) {
95 if (startsWith($key, 'order')) {
96 continue;
97 }
98
99 // If there is no order, it means a disabled plugin has been enabled.
100 if (isset($formData['order_' . $key])) {
101 $plugins[(int) $formData['order_' . $key]] = $key;
102 }
103 else {
104 $newEnabledPlugins[] = $key;
105 }
106 }
107
108 // New enabled plugins will be added at the end of order.
109 $plugins = array_merge($plugins, $newEnabledPlugins);
110
111 // Sort plugins by order.
112 if (!ksort($plugins)) {
113 throw new PluginConfigOrderException();
114 }
115
116 $finalPlugins = array();
117 // Make plugins order continuous.
118 foreach ($plugins as $plugin) {
119 $finalPlugins[] = $plugin;
120 }
121
122 return $finalPlugins;
123}
124
125/**
126 * Validate plugin array submitted.
127 * Will fail if there is duplicate orders value.
128 *
129 * @param array $formData Data from submitted form.
130 *
131 * @return bool true if ok, false otherwise.
132 */
133function validate_plugin_order($formData)
134{
135 $orders = array();
136 foreach ($formData as $key => $value) {
137 // No duplicate order allowed.
138 if (in_array($value, $orders)) {
139 return false;
140 }
141
142 if (startsWith($key, 'order')) {
143 $orders[] = $value;
144 }
145 }
146
147 return true;
148}
149
150/**
151 * Affect plugin parameters values into plugins array.
152 *
153 * @param mixed $plugins Plugins array ($plugins[<plugin_name>]['parameters']['param_name'] = <value>.
154 * @param mixed $config Plugins configuration.
155 *
156 * @return mixed Updated $plugins array.
157 */
158function load_plugin_parameter_values($plugins, $config)
159{
160 $out = $plugins;
161 foreach ($plugins as $name => $plugin) {
162 if (empty($plugin['parameters'])) {
163 continue;
164 }
165
166 foreach ($plugin['parameters'] as $key => $param) {
167 if (!empty($config[$key])) {
168 $out[$name]['parameters'][$key] = $config[$key];
169 }
170 }
171 }
172
173 return $out;
174}
175
176/**
77 * Milestone 0.9 - shaarli/Shaarli#41: options.php is not supported anymore. 177 * Milestone 0.9 - shaarli/Shaarli#41: options.php is not supported anymore.
78 * ==> if user is loggedIn, merge its content with config.php, then delete options.php. 178 * ==> if user is loggedIn, merge its content with config.php, then delete options.php.
79 * 179 *
@@ -132,3 +232,17 @@ class UnauthorizedConfigException extends Exception
132 $this->message = 'You are not authorized to alter config.'; 232 $this->message = 'You are not authorized to alter config.';
133 } 233 }
134} 234}
235
236/**
237 * Exception used if an error occur while saving plugin configuration.
238 */
239class PluginConfigOrderException extends Exception
240{
241 /**
242 * Construct exception.
243 */
244 public function __construct()
245 {
246 $this->message = 'An error occurred while trying to save plugins loading order.';
247 }
248}