[1046] | 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="message">%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="static-msg">'.__('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="static-msg">'.__('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="static-msg">'.__('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 | infoMessages(). |
---|
| 258 | '<h2>'.__('DotAddict.org Installer').'</h2>'. |
---|
| 259 | '<p>'.__('Install and update your extensions live from DotAddict.org').'</p>'; |
---|
| 260 | |
---|
| 261 | echo |
---|
| 262 | '<!-- Available updates -->'. |
---|
| 263 | '<div class="multi-part" id="update" title="'.__('Available updates').'">'; |
---|
| 264 | if ($u_p_nb > 0 || $u_t_nb > 0) { |
---|
| 265 | echo |
---|
| 266 | '<p><strong>'.__('Detected updates for your system').'</strong></p>'. |
---|
| 267 | '<p class="form-note warn">'. |
---|
| 268 | __('Changes can be required after installation of updates. Click on a support link before to be aware about'). |
---|
| 269 | '</p>'; |
---|
| 270 | } |
---|
| 271 | else { |
---|
| 272 | echo '<p><strong>'.__('No update available').'</strong></p>'; |
---|
| 273 | } |
---|
| 274 | $u_p_list->display('plugins',$p_url); |
---|
| 275 | $u_t_list->display('themes',$p_url); |
---|
| 276 | echo |
---|
| 277 | '</div>'. |
---|
| 278 | '<!-- Get more plugins -->'. |
---|
| 279 | '<div class="multi-part" id="plugins" title="'.__('Get more plugins').'">'. |
---|
| 280 | '<p><strong>'.($a_p_nb > 0 ? sprintf(__('Available plugins (%s)'),$a_p_nb) : '').'</strong></p>'; |
---|
| 281 | $a_p_list->display($pages['plugins'],$nb_per_page,'plugins',$p_url); |
---|
| 282 | echo |
---|
| 283 | '</div>'. |
---|
| 284 | '<!-- Get more themes -->'. |
---|
| 285 | '<div class="multi-part" id="themes" title="'.__('Get more themes').'">'. |
---|
| 286 | '<p><strong>'.($a_t_nb > 0 ? sprintf(__('Available themes (%s)'),$a_t_nb) : '').'</strong></p>'; |
---|
| 287 | $a_t_list->display($pages['themes'],5,'themes',$p_url); |
---|
| 288 | echo |
---|
| 289 | '</div>'. |
---|
| 290 | '<!-- Search -->'. |
---|
| 291 | '<div class="multi-part" id="search" title="'.__('Search').'">'. |
---|
| 292 | '<fieldset><legend>'.__('Search options'). |
---|
| 293 | '</legend>'. |
---|
| 294 | '<form method="get" action="'.$p_url.'">'. |
---|
| 295 | '<p>'.form::hidden('p','daInstaller'). |
---|
| 296 | '<label for="q" class="classic">'.__('Query:').' '. |
---|
| 297 | form::field('q',30,255,html::escapeHTML($q)). |
---|
| 298 | '</label> '. |
---|
| 299 | '<label for="mode" class="classic">'. |
---|
| 300 | form::radio(array('mode','mode'),'plugins',$mode == 'plugins'). |
---|
| 301 | ' '.__('Plugins').' </label> '. |
---|
| 302 | '<label for="mode2" class="classic">'. |
---|
| 303 | form::radio(array('mode','mode2'),'themes',$mode == 'themes') |
---|
| 304 | .' '.__('Themes').' </label> '. |
---|
| 305 | '<input type="submit" value="'.__('Search').'" /></p>'. |
---|
| 306 | '</form>'. |
---|
| 307 | '</fieldset>'; |
---|
| 308 | if (!empty($q)) { |
---|
| 309 | echo '<p><strong>'.sprintf(__('%u %s found'),$s_m_nb,__($mode)).'</strong></p>'; |
---|
| 310 | if ($s_m_nb > 0) { |
---|
| 311 | $s_m_list->display($pages['search'],$nb_per_page,'search-'.$mode,$p_url); |
---|
| 312 | } |
---|
| 313 | } |
---|
| 314 | echo |
---|
| 315 | '</div>'; |
---|
| 316 | |
---|
| 317 | dcPage::helpBlock('da_installer'); |
---|
| 318 | |
---|
| 319 | echo |
---|
| 320 | '</body>'. |
---|
| 321 | '</html>'; |
---|