Dotclear

source: admin/update.php @ 1620:542c321dc040

Revision 1620:542c321dc040, 7.2 KB checked in by franck <carnet.franck.paul@…>, 11 years ago (diff)

Merge 2.5 into default

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
7# Licensed under the GPL version 2.0 license.
8# See LICENSE file or
9# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
10#
11# -- END LICENSE BLOCK -----------------------------------------
12
13require dirname(__FILE__).'/../inc/admin/prepend.php';
14
15if (!defined('DC_BACKUP_PATH')) {
16     define('DC_BACKUP_PATH',DC_ROOT);
17}
18
19dcPage::checkSuper();
20
21if (!is_readable(DC_DIGESTS)) {
22     dcPage::open(__('Dotclear update'));
23     echo '<h2>Access denied</h2>';
24     dcPage::close();
25     exit;
26}
27
28$updater = new dcUpdate(DC_UPDATE_URL,'dotclear',DC_UPDATE_VERSION,DC_TPL_CACHE.'/versions');
29$new_v = $updater->check(DC_VERSION, !empty($_GET['nocache']));
30$zip_file = $new_v ? DC_BACKUP_PATH.'/'.basename($updater->getFileURL()) : '';
31$version_info = $new_v ? $updater->getInfoURL() : '';
32
33# Hide "update me" message
34if (!empty($_GET['hide_msg'])) {
35     $updater->setNotify(false);
36     http::redirect('index.php');
37}
38
39$p_url = 'update.php';
40
41$step = isset($_GET['step']) ? $_GET['step'] : '';
42$step = in_array($step,array('check','download','backup','unzip')) ? $step : '';
43
44$default_tab = !empty($_GET['tab']) ? html::escapeHTML($_GET['tab']) : 'update';
45if (!empty($_POST['backup_file'])) {
46     $default_tab = 'files';
47}
48
49$archives = array();
50foreach (files::scanDir(DC_BACKUP_PATH) as $v) {
51     if (preg_match('/backup-([0-9A-Za-z\.-]+).zip/',$v)) {
52          $archives[] = $v;
53     }
54}
55if (!empty($archives)) {
56     usort($archives,"version_compare");
57} else {
58     $default_tab = 'update';
59}
60
61# Revert or delete backup file
62if (!empty($_POST['backup_file']) && in_array($_POST['backup_file'],$archives))
63{
64     $b_file = $_POST['backup_file'];
65     
66     try
67     {
68          if (!empty($_POST['b_del']))
69          {
70               if (!@unlink(DC_BACKUP_PATH.'/'.$b_file)) {
71                    throw new Exception(sprintf(__('Unable to delete file %s'),html::escapeHTML($b_file)));
72               }
73               http::redirect($p_url.'?tab=files');
74          }
75         
76          if (!empty($_POST['b_revert']))
77          {
78               $zip = new fileUnzip(DC_BACKUP_PATH.'/'.$b_file);
79               $zip->unzipAll(DC_BACKUP_PATH.'/');
80               @unlink(DC_BACKUP_PATH.'/'.$b_file);
81               http::redirect($p_url.'?tab=files');
82          }
83     }
84     catch (Exception $e)
85     {
86          $core->error->add($e->getMessage());
87     }
88}
89
90# Upgrade process
91if ($new_v && $step)
92{
93     try
94     {
95          $updater->setForcedFiles('inc/digests');
96         
97          switch ($step)
98          {
99               case 'check':
100                    $updater->checkIntegrity(DC_ROOT.'/inc/digests',DC_ROOT);
101                    http::redirect($p_url.'?step=download');
102                    break;
103               case 'download':
104                    $updater->download($zip_file);
105                    if (!$updater->checkDownload($zip_file)) {
106                         throw new Exception(
107                              sprintf(__('Downloaded Dotclear archive seems to be corrupted. '.
108                              'Try <a %s>download it</a> again.'),'href="'.$p_url.'?step=download"').
109                              ' '.
110                              __('If this problem persists try to '.
111                              '<a href="http://dotclear.org/download">update manually</a>.')
112                         );
113                    }
114                    http::redirect($p_url.'?step=backup');
115                    break;
116               case 'backup':
117                    $updater->backup(
118                         $zip_file, 'dotclear/inc/digests',
119                         DC_ROOT, DC_ROOT.'/inc/digests',
120                         DC_BACKUP_PATH.'/backup-'.DC_VERSION.'.zip'
121                    );
122                    http::redirect($p_url.'?step=unzip');
123                    break;
124               case 'unzip':
125                    $updater->performUpgrade(
126                         $zip_file, 'dotclear/inc/digests', 'dotclear',
127                         DC_ROOT, DC_ROOT.'/inc/digests'
128                    );
129                    break;
130          }
131     }
132     catch (Exception $e)
133     {
134          $msg = $e->getMessage();
135         
136          if ($e->getCode() == dcUpdate::ERR_FILES_CHANGED)
137          {
138               $msg =
139               __('The following files of your Dotclear installation '.
140               'have been modified so we won\'t try to update your installation. '.
141               'Please try to <a href="http://dotclear.org/download">update manually</a>.');
142          }
143          elseif ($e->getCode() == dcUpdate::ERR_FILES_UNREADABLE)
144          {
145               $msg =
146               sprintf(__('The following files of your Dotclear installation are not readable. '.
147               'Please fix this or try to make a backup file named %s manually.'),
148               '<strong>backup-'.DC_VERSION.'.zip</strong>');
149          }
150          elseif ($e->getCode() == dcUpdate::ERR_FILES_UNWRITALBE)
151          {
152               $msg =
153               __('The following files of your Dotclear installation cannot be written. '.
154               'Please fix this or try to <a href="http://dotclear.org/download">update manually</a>.');
155          }
156         
157          if (isset($e->bad_files)) {
158               $msg .=
159               '<ul><li><strong>'.
160               implode('</strong></li><li><strong>',$e->bad_files).
161               '</strong></li></ul>';
162          }
163         
164          $core->error->add($msg);
165         
166          $core->callBehavior('adminDCUpdateException',$e);
167     }
168}
169
170/* DISPLAY Main page
171-------------------------------------------------------- */
172dcPage::open(__('Dotclear update'),
173     (!$step ? 
174          dcPage::jsPageTabs($default_tab).
175          dcPage::jsLoad('js/_update.js')
176          : ''),
177     dcPage::breadcrumb(
178          array(
179               __('System') => '',
180               '<span class="page-title">'.__('Dotclear update').'</span>' => ''
181          ))
182);
183
184if (!$core->error->flag()) {
185     if (!empty($_GET['nocache'])) {
186          dcPage::success(__('Manual checking of update done successfully.'));
187     }
188}
189
190if (!$step)
191{
192     echo '<div class="multi-part" id="update" title="'.__('Dotclear update').'">';
193     if (empty($new_v))
194     {
195          echo '<p><strong>'.__('No newer Dotclear version available.').'</strong></p>'.
196          '<form action="'.$p_url.'" method="get">'.
197          '<p><input type="hidden" name="nocache" value="1" />'.
198          '<input type="submit" value="'.__('Force checking update Dotclear').'" /></p>'.
199          '</form>';
200     }
201     else
202     {
203          echo
204               '<p class="static-msg">'.sprintf(__('Dotclear %s is available.'),$new_v).
205                    ($version_info ? ' <a href="'.$version_info.'">('.__('Information about this version').')</a>' : '').
206                    '</p>'.
207         
208          '<p>'.__('To upgrade your Dotclear installation simply click on the following button. '.
209               'A backup file of your current installation will be created in your root directory.').'</p>'.
210          '<form action="'.$p_url.'" method="get">'.
211          '<p><input type="hidden" name="step" value="check" />'.
212          '<input type="submit" value="'.__('Update Dotclear').'" /></p>'.
213          '</form>';
214     }
215     echo '</div>';
216     
217     if (!empty($archives))
218     {
219          echo '<div class="multi-part" id="files" title="'.__('Manage backup files').'">';
220
221          echo
222          '<h3>'.__('Update backup files').'</h3>'.
223          '<p>'.__('The following files are backups of previously updates. '.
224          'You can revert your previous installation or delete theses files.').'</p>';
225         
226          echo '<form action="'.$p_url.'" method="post">';
227          foreach ($archives as $v) {
228               echo
229               '<p><label class="classic">'.form::radio(array('backup_file'),html::escapeHTML($v)).' '.
230               html::escapeHTML($v).'</label></p>';
231          }
232         
233          echo
234          '<p><strong>'.__('Please note that reverting your Dotclear version may have some '.
235          'unwanted side-effects. Consider reverting only if you experience strong issues with this new version.').'</strong> '.
236          sprintf(__('You should not revert to version prior to last one (%s).'),end($archives)).
237          '</p>'.
238          '<p><input type="submit" class="delete" name="b_del" value="'.__('Delete selected file').'" /> '.
239          '<input type="submit" name="b_revert" value="'.__('Revert to selected file').'" />'.
240          $core->formNonce().'</p>'.
241          '</form>';
242
243          echo '</div>';
244     }
245}
246elseif ($step == 'unzip' && !$core->error->flag())
247{
248     echo
249     '<p class="message">'.
250     __("Congratulations, you're one click away from the end of the update.").
251     ' <strong><a href="index.php?logout=1">'.__('Finish the update.').'</a></strong>'.
252     '</p>';
253}
254
255dcPage::close();
256?>
Note: See TracBrowser for help on using the repository browser.

Sites map