1 | <?php |
---|
2 | # ***** BEGIN LICENSE BLOCK ***** |
---|
3 | # This file is part of daInstaller, a plugin for DotClear2. |
---|
4 | # Copyright (c) 2008-2011 Tomtom, Pep and contributors, for DotAddict.org. |
---|
5 | # All rights reserved. |
---|
6 | # |
---|
7 | # ***** END LICENSE BLOCK ***** |
---|
8 | if (!defined('DC_CONTEXT_ADMIN')) { return; } |
---|
9 | |
---|
10 | # Settings compatibility test |
---|
11 | if (!version_compare(DC_VERSION,'2.2-x','<')) { |
---|
12 | $core->blog->settings->addNamespace('dainstaller'); |
---|
13 | $s = $core->blog->settings->dainstaller; |
---|
14 | } |
---|
15 | else { |
---|
16 | $core->blog->settings->setNamespace('dainstaller'); |
---|
17 | $s = $core->blog->settings; |
---|
18 | } |
---|
19 | |
---|
20 | # Initialisation des variables |
---|
21 | $p_url = 'plugin.php?p=daInstaller'; |
---|
22 | $default_tab = !empty($_GET['tab']) ? html::escapeHTML($_GET['tab']) : 'plugins'; |
---|
23 | $page = !empty($_GET['page']) ? (integer)$_GET['page'] : 1; |
---|
24 | $nb_per_page = 10; |
---|
25 | $q = !empty($_GET['q']) ? trim(html::escapeHTML($_GET['q'])) : ''; |
---|
26 | $default_tab = !empty($q) ? 'search' : $default_tab; |
---|
27 | $mode = isset($_GET['mode']) ? html::escapeHTML($_GET['mode']) : 'plugins'; |
---|
28 | $ppaths = explode(PATH_SEPARATOR, DC_PLUGINS_ROOT); |
---|
29 | $plugins_path = array_pop($ppaths); |
---|
30 | $daInstaller = new daInstaller($core); |
---|
31 | unset($ppaths); |
---|
32 | |
---|
33 | $pages['plugins'] = $pages['themes'] = $pages['search'] = 1; |
---|
34 | $pages[$default_tab] = $page; |
---|
35 | |
---|
36 | # Ajout d'un plugin |
---|
37 | if (!empty($_POST['add_plugin']) && !empty($_POST['package_url'])) { |
---|
38 | try { |
---|
39 | $url = html::escapeHTML($_POST['package_url']); |
---|
40 | $dest = $plugins_path.'/'.basename($url); |
---|
41 | |
---|
42 | $ret_code = $daInstaller->processPackage($url,$dest,$core->plugins); |
---|
43 | http::redirect($p_url.'&p_added='.$ret_code); |
---|
44 | } |
---|
45 | catch (Exception $e) { |
---|
46 | $core->error->add($e->getMessage()); |
---|
47 | $default_tab = 'plugins'; |
---|
48 | } |
---|
49 | } |
---|
50 | # Mise à jour de plugins |
---|
51 | elseif (!empty($_POST['upd_plugins']) && !empty($_POST['plugins_id'])) { |
---|
52 | try { |
---|
53 | $daInstaller->check(); |
---|
54 | $ids = $_POST['plugins_id']; |
---|
55 | $modules = $daInstaller->getModules('plugins',true); |
---|
56 | |
---|
57 | foreach ($modules as $module) { |
---|
58 | if (in_array($module['id'],$ids)) { |
---|
59 | if (!$s->dainstaller_allow_multi_install) { |
---|
60 | $dest = $module['root'].'/../'.basename($module['file']); |
---|
61 | } |
---|
62 | else { |
---|
63 | $dest = $plugins_path.'/'.basename($module['file']); |
---|
64 | if ($module['root'] != $dest) @file_put_contents($module['root'].'/_disabled',''); |
---|
65 | } |
---|
66 | $ret_code[] = $daInstaller->processPackage($module['file'],$dest,$core->plugins); |
---|
67 | } |
---|
68 | } |
---|
69 | |
---|
70 | $arg = 'p_updated='.implode('|',$ids).'&p_status='.implode('|',$ret_code); |
---|
71 | |
---|
72 | http::redirect($p_url.'&tab=update&'.$arg); |
---|
73 | |
---|
74 | } |
---|
75 | catch (Exception $e) { |
---|
76 | $core->error->add($e->getMessage()); |
---|
77 | $default_tab = 'update'; |
---|
78 | } |
---|
79 | } |
---|
80 | # Ajout d'un thème |
---|
81 | elseif (!empty($_POST['add_theme']) && !empty($_POST['package_url'])) { |
---|
82 | try { |
---|
83 | $url = html::escapeHTML($_POST['package_url']); |
---|
84 | $dest = $core->blog->themes_path.'/'.basename($url); |
---|
85 | |
---|
86 | $core_themes = new dcModules($core); |
---|
87 | $core_themes->loadModules($core->blog->themes_path,null); |
---|
88 | $ret_code = $daInstaller->processPackage($url,$dest,$core_themes); |
---|
89 | http::redirect($p_url.'&tab=themes&t_added='.$ret_code); |
---|
90 | } |
---|
91 | catch (Exception $e) { |
---|
92 | unset($core_themes); |
---|
93 | $core->error->add($e->getMessage()); |
---|
94 | $default_tab = 'themes'; |
---|
95 | } |
---|
96 | } |
---|
97 | # Mise à jour de thèmes |
---|
98 | elseif (!empty($_POST['upd_themes']) && !empty($_POST['themes_id'])) { |
---|
99 | try { |
---|
100 | $daInstaller->check(); |
---|
101 | $core_themes = new dcModules($core); |
---|
102 | $core_themes->loadModules($core->blog->themes_path,null); |
---|
103 | $ids = $_POST['themes_id']; |
---|
104 | $modules = $daInstaller->getModules('themes',true); |
---|
105 | |
---|
106 | foreach ($modules as $module) { |
---|
107 | if (in_array($module['id'],$ids)) { |
---|
108 | $dest = $core->blog->themes_path.'/'.basename($module['file']); |
---|
109 | $ret_code[] = $daInstaller->processPackage($module['file'],$dest,$core_themes); |
---|
110 | } |
---|
111 | } |
---|
112 | |
---|
113 | $arg = 't_updated='.implode('|',$ids).'&t_status='.implode('|',$ret_code); |
---|
114 | |
---|
115 | http::redirect($p_url.'&tab=update&'.$arg); |
---|
116 | |
---|
117 | } |
---|
118 | catch (Exception $e) { |
---|
119 | unset($core_themes); |
---|
120 | $core->error->add($e->getMessage()); |
---|
121 | $default_tab = 'update'; |
---|
122 | } |
---|
123 | } |
---|
124 | |
---|
125 | # Et c'est parti ! |
---|
126 | $plugins_install = $core->plugins->installModules(); |
---|
127 | $daInstaller->check(false,true); |
---|
128 | |
---|
129 | /** |
---|
130 | * This function returns all error / success messages |
---|
131 | * |
---|
132 | * @return string |
---|
133 | */ |
---|
134 | function infoMessages() |
---|
135 | { |
---|
136 | $res = ''; |
---|
137 | $p_msg = '<p class="success">%s</p>'; |
---|
138 | $p_err = '<p class="error">%s</p>'; |
---|
139 | |
---|
140 | # Plugins install message |
---|
141 | if (!empty($_GET['p_added']) && $_GET['p_added'] != 2) { |
---|
142 | $res .= sprintf($p_msg,__('The plugin has been successfully installed.')); |
---|
143 | } |
---|
144 | # Themes install message |
---|
145 | if (!empty($_GET['t_added']) && $_GET['t_added'] != 2) { |
---|
146 | $res .= sprintf($p_msg,__('The theme has been successfully installed.')); |
---|
147 | } |
---|
148 | # Plugins update message |
---|
149 | if (!empty($_GET['p_updated'])) { |
---|
150 | $err = $upd = ''; |
---|
151 | $ids = explode('|',html::escapeHTML($_GET['p_updated'])); |
---|
152 | $status = explode('|',html::escapeHTML($_GET['p_status'])); |
---|
153 | foreach ($ids as $k => $v) { |
---|
154 | if ($status[$k] != 2) { |
---|
155 | $err .= '<li>'.$v.'</li>'; |
---|
156 | } |
---|
157 | else { |
---|
158 | $upd .= '<li>'.$v.'</li>'; |
---|
159 | } |
---|
160 | } |
---|
161 | if (!empty($err)) { |
---|
162 | $res .= '<div class="error">'.__('Following plugins have not been updated:').'<ul>'.$err.'</ul></div>'; |
---|
163 | } |
---|
164 | else { |
---|
165 | $res .= '<div class="success">'.__('Following plugins have been updated:').'<ul>'.$upd.'</ul></div>'; |
---|
166 | } |
---|
167 | } |
---|
168 | # Themes update message |
---|
169 | if (!empty($_GET['t_updated'])) { |
---|
170 | $err = $upd = ''; |
---|
171 | $ids = explode('|',html::escapeHTML($_GET['t_updated'])); |
---|
172 | $status = explode('|',html::escapeHTML($_GET['t_status'])); |
---|
173 | foreach ($ids as $k => $v) { |
---|
174 | if ($status[$k] != 2) { |
---|
175 | $err .= '<li>'.$v.'</li>'; |
---|
176 | } |
---|
177 | else { |
---|
178 | $upd .= '<li>'.$v.'</li>'; |
---|
179 | } |
---|
180 | } |
---|
181 | if (!empty($err)) { |
---|
182 | $res .= '<div class="error">'.__('Following themes have not been updated:').'<ul>'.$err.'</ul></div>'; |
---|
183 | } |
---|
184 | else { |
---|
185 | $res .= '<div class="success">'.__('Following themes have been updated:').'<ul>'.$upd.'</ul></div>'; |
---|
186 | } |
---|
187 | } |
---|
188 | # Plugins install settings messages |
---|
189 | if (!empty($plugins_install['success'])) { |
---|
190 | $res .= '<div class="success">'.__('Following plugins have been installed:').'<ul>'; |
---|
191 | foreach ($plugins_install['success'] as $k => $v) { |
---|
192 | $res .= '<li>'.$k.'</li>'; |
---|
193 | } |
---|
194 | $res .= '</ul></div>'; |
---|
195 | } |
---|
196 | if (!empty($plugins_install['failure'])) { |
---|
197 | $res .= '<div class="error">'.__('Following plugins have not been installed:').'<ul>'; |
---|
198 | foreach ($plugins_install['failure'] as $k => $v) { |
---|
199 | $res .= '<li>'.$k.' ('.$v.')</li>'; |
---|
200 | } |
---|
201 | $res .= '</ul></div>'; |
---|
202 | } |
---|
203 | |
---|
204 | return $res; |
---|
205 | } |
---|
206 | |
---|
207 | # Récupération de la liste des mises à jour des plugins |
---|
208 | # et préparation de l'objet d'affichage |
---|
209 | $u_p_rs = $daInstaller->getModules('plugins',true); |
---|
210 | $u_p_nb = count($u_p_rs); |
---|
211 | $u_p_rs = staticRecord::newFromArray($u_p_rs); |
---|
212 | $u_p_list = new daModulesUpdateList($core,$u_p_rs,$u_p_nb); |
---|
213 | |
---|
214 | # Récupération de la liste des mises à jour des thèmes |
---|
215 | # et préparation de l'objet d'affichage |
---|
216 | $u_t_rs = $daInstaller->getModules('themes',true); |
---|
217 | $u_t_nb = count($u_t_rs); |
---|
218 | $u_t_rs = staticRecord::newFromArray($u_t_rs); |
---|
219 | $u_t_list = new daModulesUpdateList($core,$u_t_rs,$u_t_nb); |
---|
220 | |
---|
221 | # Récupération de la liste des plugins disponibles |
---|
222 | # et préparation de l'objet d'affichage |
---|
223 | $avail_plugins = $daInstaller->getModules('plugins'); |
---|
224 | $a_p_nb = count($avail_plugins); |
---|
225 | $a_p_rs = staticRecord::newFromArray($avail_plugins); |
---|
226 | $a_p_list = new daModulesList($core,$a_p_rs,$a_p_nb); |
---|
227 | |
---|
228 | # Récupération de la liste des thèmes disponibles |
---|
229 | # et préparation de l'objet d'affichage |
---|
230 | $avail_themes = $daInstaller->getModules('themes'); |
---|
231 | $a_t_nb = count($avail_themes); |
---|
232 | $a_t_rs = staticRecord::newFromArray($avail_themes); |
---|
233 | $a_t_list = new daModulesList($core,$a_t_rs,$a_t_nb); |
---|
234 | |
---|
235 | # Récupération de la liste des plugins recherchés |
---|
236 | if (!empty($q)) |
---|
237 | { |
---|
238 | $default_tab = 'search'; |
---|
239 | $search_modules = $daInstaller->search($q,$mode); |
---|
240 | $s_m_nb = count($search_modules); |
---|
241 | $s_m_rs = staticRecord::newFromArray($search_modules); |
---|
242 | $s_m_list = new daModulesList($core,$s_m_rs,$s_m_nb); |
---|
243 | } |
---|
244 | |
---|
245 | # DISPLAY |
---|
246 | # ------- |
---|
247 | echo |
---|
248 | '<html>'. |
---|
249 | '<head>'. |
---|
250 | '<title>'.__('DotAddict.org Installer').'</title>'. |
---|
251 | dcPage::jsModal(). |
---|
252 | dcPage::jsPageTabs($default_tab). |
---|
253 | dcPage::jsLoad('index.php?pf=daInstaller/js/_dainstaller.js'). |
---|
254 | '<link rel="stylesheet" href="index.php?pf=daInstaller/style.css" type="text/css" />'. |
---|
255 | '</head>'. |
---|
256 | '<body>'. |
---|
257 | |
---|
258 | dcPage::breadcrumb( |
---|
259 | array( |
---|
260 | __('System') => '', |
---|
261 | '<span class="page-title">'.__('DotAddict.org Installer').'</span>' => '' |
---|
262 | )). |
---|
263 | |
---|
264 | infoMessages(); |
---|
265 | |
---|
266 | echo |
---|
267 | '<p>'.__('Install and update your extensions live from DotAddict.org').'</p>'; |
---|
268 | |
---|
269 | echo |
---|
270 | '<!-- Available updates -->'. |
---|
271 | '<div class="multi-part" id="update" title="'.__('Available updates').'">'; |
---|
272 | if ($u_p_nb > 0 || $u_t_nb > 0) { |
---|
273 | echo |
---|
274 | '<p><strong>'.__('Detected updates for your system').'</strong></p>'. |
---|
275 | '<p class="form-note warn">'. |
---|
276 | __('Changes can be required after installation of updates. Click on a support link before to be aware about'). |
---|
277 | '</p>'; |
---|
278 | } |
---|
279 | else { |
---|
280 | echo '<p><strong>'.__('No update available').'</strong></p>'; |
---|
281 | } |
---|
282 | $u_p_list->display('plugins',$p_url); |
---|
283 | $u_t_list->display('themes',$p_url); |
---|
284 | echo |
---|
285 | '</div>'. |
---|
286 | '<!-- Get more plugins -->'. |
---|
287 | '<div class="multi-part" id="plugins" title="'.__('Get more plugins').'">'. |
---|
288 | '<p><strong>'.($a_p_nb > 0 ? sprintf(__('Available plugins (%s)'),$a_p_nb) : '').'</strong></p>'; |
---|
289 | $a_p_list->display($pages['plugins'],$nb_per_page,'plugins',$p_url); |
---|
290 | echo |
---|
291 | '</div>'. |
---|
292 | '<!-- Get more themes -->'. |
---|
293 | '<div class="multi-part" id="themes" title="'.__('Get more themes').'">'. |
---|
294 | '<p><strong>'.($a_t_nb > 0 ? sprintf(__('Available themes (%s)'),$a_t_nb) : '').'</strong></p>'; |
---|
295 | $a_t_list->display($pages['themes'],5,'themes',$p_url); |
---|
296 | echo |
---|
297 | '</div>'. |
---|
298 | '<!-- Search -->'. |
---|
299 | '<div class="multi-part" id="search" title="'.__('Search').'">'. |
---|
300 | '<form method="get" action="'.$p_url.'" class="fieldset">'. |
---|
301 | '<h3>'.__('Search').'</h3>'. |
---|
302 | '<p>'.form::hidden('p','daInstaller'). |
---|
303 | '<label for="q" class="classic">'.__('Query:').' </label> '. |
---|
304 | form::field('q',30,255,html::escapeHTML($q)).'</p>'. |
---|
305 | '<p><label for="mode" class="classic">'. |
---|
306 | form::radio(array('mode','mode'),'plugins',$mode == 'plugins'). |
---|
307 | ' '.__('Plugins').' </label> '. |
---|
308 | '<label for="mode2" class="classic">'. |
---|
309 | form::radio(array('mode','mode2'),'themes',$mode == 'themes'). |
---|
310 | ' '.__('Themes').' </label></p>'. |
---|
311 | '<p><input type="submit" value="'.__('Search').'" /></p>'. |
---|
312 | '</form>'; |
---|
313 | if (!empty($q)) { |
---|
314 | echo '<p><strong>'.sprintf(__('%u %s found'),$s_m_nb,__($mode)).'</strong></p>'; |
---|
315 | if ($s_m_nb > 0) { |
---|
316 | $s_m_list->display($pages['search'],$nb_per_page,'search-'.$mode,$p_url); |
---|
317 | } |
---|
318 | } |
---|
319 | echo |
---|
320 | '</div>'; |
---|
321 | |
---|
322 | dcPage::helpBlock('da_installer'); |
---|
323 | |
---|
324 | echo |
---|
325 | '</body>'. |
---|
326 | '</html>'; |
---|