diff options
author | ArthurHoaro <arthur@hoa.ro> | 2015-11-18 17:40:42 +0100 |
---|---|---|
committer | ArthurHoaro <arthur@hoa.ro> | 2016-01-31 18:54:48 +0100 |
commit | dea0ba28f950867532eae572e7bcda49e81bbcf0 (patch) | |
tree | 8a9c4f9d7525a2ba249bbaaabe456c2d0941293b /application/Config.php | |
parent | 423e2a8b13dc0069c83f3e540f576aa1b89fe5d5 (diff) | |
download | Shaarli-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.php | 114 |
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 | */ | ||
85 | function 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 | */ | ||
133 | function 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 | */ | ||
158 | function 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 | */ | ||
239 | class 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 | } | ||