Dotclear

source: admin/update.php @ 1231:415e762385aa

Revision 1231:415e762385aa, 7.0 KB checked in by Denis Jean-Christian <contact@…>, 11 years ago (diff)

Forcer le test d'existance de mise à jour, closes #1412

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     $archives = array_reverse($archives);
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                    }
111                    http::redirect($p_url.'?step=backup');
112                    break;
113               case 'backup':
114                    $updater->backup(
115                         $zip_file, 'dotclear/inc/digests',
116                         DC_ROOT, DC_ROOT.'/inc/digests',
117                         DC_BACKUP_PATH.'/backup-'.DC_VERSION.'.zip'
118                    );
119                    http::redirect($p_url.'?step=unzip');
120                    break;
121               case 'unzip':
122                    $updater->performUpgrade(
123                         $zip_file, 'dotclear/inc/digests', 'dotclear',
124                         DC_ROOT, DC_ROOT.'/inc/digests'
125                    );
126                    break;
127          }
128     }
129     catch (Exception $e)
130     {
131          $msg = $e->getMessage();
132         
133          if ($e->getCode() == dcUpdate::ERR_FILES_CHANGED)
134          {
135               $msg =
136               __('The following files of your Dotclear installation '.
137               'have been modified so we won\'t try to update your installation. '.
138               'Please try to <a href="http://dotclear.org/download">update manually</a>.');
139          }
140          elseif ($e->getCode() == dcUpdate::ERR_FILES_UNREADABLE)
141          {
142               $msg =
143               sprintf(__('The following files of your Dotclear installation are not readable. '.
144               'Please fix this or try to make a backup file named %s manually.'),
145               '<strong>backup-'.DC_VERSION.'.zip</strong>');
146          }
147          elseif ($e->getCode() == dcUpdate::ERR_FILES_UNWRITALBE)
148          {
149               $msg =
150               __('The following files of your Dotclear installation cannot be written. '.
151               'Please fix this or try to <a href="http://dotclear.org/download">update manually</a>.');
152          }
153         
154          if (isset($e->bad_files)) {
155               $msg .=
156               '<ul><li><strong>'.
157               implode('</strong></li><li><strong>',$e->bad_files).
158               '</strong></li></ul>';
159          }
160         
161          $core->error->add($msg);
162         
163          $core->callBehavior('adminDCUpdateException',$e);
164     }
165}
166
167/* DISPLAY Main page
168-------------------------------------------------------- */
169dcPage::open(__('Dotclear update'),
170     (!$step ? dcPage::jsPageTabs($default_tab) : '')
171);
172
173if (!$core->error->flag()) {
174     echo '<h2>'.__('Dotclear update').'</h2>';
175     
176     if (!empty($_GET['nocache'])) {
177          dcPage::message(__('Manual checking of update done successfully.'));
178     }
179}
180
181if (!$step)
182{
183     echo '<div class="multi-part" id="update" title="'.__('Dotclear update').'">';
184     if (empty($new_v))
185     {
186          echo '<p><strong>'.__('No newer Dotclear version available.').'</strong></p>'.
187          '<form action="'.$p_url.'" method="get">'.
188          '<p><input type="hidden" name="nocache" value="1" />'.
189          '<input type="submit" value="'.__('Force checking update Dotclear').'" /></p>'.
190          '</form>';
191     }
192     else
193     {
194          echo
195               '<p class="static-msg">'.sprintf(__('Dotclear %s is available.'),$new_v).
196                    ($version_info ? ' <a href="'.$version_info.'">('.__('information about this version').')</a>' : '').
197                    '</p>'.
198         
199          '<p>'.__('To upgrade your Dotclear installation simply click on the following button. '.
200               'A backup file of your current installation will be created in your root directory.').'</p>'.
201          '<form action="'.$p_url.'" method="get">'.
202          '<p><input type="hidden" name="step" value="check" />'.
203          '<input type="submit" value="'.__('Update Dotclear').'" /></p>'.
204          '</form>';
205     }
206     echo '</div>';
207     
208     if (!empty($archives))
209     {
210          echo '<div class="multi-part" id="files" title="'.__('Manage backup files').'">';
211
212          echo
213          '<h3>'.__('Update backup files').'</h3>'.
214          '<p>'.__('The following files are backups of previously updates. '.
215          'You can revert your previous installation or delete theses files.').'</p>';
216         
217          echo '<form action="'.$p_url.'" method="post">';
218         
219          foreach ($archives as $v) {
220               echo
221               '<p><label class="classic">'.form::radio(array('backup_file'),html::escapeHTML($v)).' '.
222               html::escapeHTML($v).'</label></p>';
223          }
224         
225          echo
226          '<p><strong>'.__('Please note that reverting your Dotclear version may have some '.
227          'unwanted side-effects. Consider reverting only if you experience strong issues with this new version.').'</strong> '.
228          sprintf(__('You should not revert to version prior to last one (%s).'),end($archives)).
229          '</p>'.
230          '<p><input type="submit" class="delete" name="b_del" value="'.__('Delete selected file').'" /> '.
231          '<input type="submit" name="b_revert" value="'.__('Revert to selected file').'" />'.
232          $core->formNonce().'</p>'.
233          '</form>';
234
235          echo '</div>';
236     }
237}
238elseif ($step == 'unzip' && !$core->error->flag())
239{
240     echo
241     '<p class="message">'.
242     __("Congratulations, you're one click away from the end of the update.").
243     ' <strong><a href="index.php?logout=1">'.__('Finish the update.').'</a></strong>'.
244     '</p>';
245}
246
247dcPage::close();
248?>
Note: See TracBrowser for help on using the repository browser.

Sites map