Dotclear

source: admin/update.php @ 768:286d19997978

Revision 768:286d19997978, 6.1 KB checked in by alex, 12 years ago (diff)

Reverted [12f5542d3362]

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2011 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);
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$archives = array();
45foreach (files::scanDir(DC_BACKUP_PATH) as $v) {
46     if (preg_match('/backup-([0-9A-Za-z\.-]+).zip/',$v)) {
47          $archives[] = $v;
48     }
49}
50
51# Revert or delete backup file
52if (!empty($_POST['backup_file']) && in_array($_POST['backup_file'],$archives))
53{
54     $b_file = $_POST['backup_file'];
55     
56     try
57     {
58          if (!empty($_POST['b_del']))
59          {
60               if (!@unlink(DC_BACKUP_PATH.'/'.$b_file)) {
61                    throw new Exception(sprintf(__('Unable to delete file %s'),html::escapeHTML($b_file)));
62               }
63               http::redirect($p_url);
64          }
65         
66          if (!empty($_POST['b_revert']))
67          {
68               $zip = new fileUnzip(DC_BACKUP_PATH.'/'.$b_file);
69               $zip->unzipAll(DC_BACKUP_PATH.'/');
70               @unlink(DC_BACKUP_PATH.'/'.$b_file);
71               http::redirect($p_url);
72          }
73     }
74     catch (Exception $e)
75     {
76          $core->error->add($e->getMessage());
77     }
78}
79
80# Upgrade process
81if ($new_v && $step)
82{
83     try
84     {
85          $updater->setForcedFiles('inc/digests');
86         
87          switch ($step)
88          {
89               case 'check':
90                    $updater->checkIntegrity(DC_ROOT.'/inc/digests',DC_ROOT);
91                    http::redirect($p_url.'?step=download');
92                    break;
93               case 'download':
94                    $updater->download($zip_file);
95                    if (!$updater->checkDownload($zip_file)) {
96                         throw new Exception(
97                              sprintf(__('Downloaded Dotclear archive seems to be corrupted. '.
98                              'Try <a %s>download it</a> again.'),'href="'.$p_url.'?step=download"')
99                         );
100                    }
101                    http::redirect($p_url.'?step=backup');
102                    break;
103               case 'backup':
104                    $updater->backup(
105                         $zip_file, 'dotclear/inc/digests',
106                         DC_ROOT, DC_ROOT.'/inc/digests',
107                         DC_BACKUP_PATH.'/backup-'.DC_VERSION.'.zip'
108                    );
109                    http::redirect($p_url.'?step=unzip');
110                    break;
111               case 'unzip':
112                    $updater->performUpgrade(
113                         $zip_file, 'dotclear/inc/digests', 'dotclear',
114                         DC_ROOT, DC_ROOT.'/inc/digests'
115                    );
116                    break;
117          }
118     }
119     catch (Exception $e)
120     {
121          $msg = $e->getMessage();
122         
123          if ($e->getCode() == dcUpdate::ERR_FILES_CHANGED)
124          {
125               $msg =
126               __('The following files of your Dotclear installation '.
127               'have been modified so we won\'t try to update your installation. '.
128               'Please try to <a href="http://dotclear.org/download">update manually</a>.');
129          }
130          elseif ($e->getCode() == dcUpdate::ERR_FILES_UNREADABLE)
131          {
132               $msg =
133               sprintf(__('The following files of your Dotclear installation are not readable. '.
134               'Please fix this or try to make a backup file named %s manually.'),
135               '<strong>backup-'.DC_VERSION.'.zip</strong>');
136          }
137          elseif ($e->getCode() == dcUpdate::ERR_FILES_UNWRITALBE)
138          {
139               $msg =
140               __('The following files of your Dotclear installation cannot be written. '.
141               'Please fix this or try to <a href="http://dotclear.org/download">update manually</a>.');
142          }
143         
144          if (isset($e->bad_files)) {
145               $msg .=
146               '<ul><li><strong>'.
147               implode('</strong></li><li><strong>',$e->bad_files).
148               '</strong></li></ul>';
149          }
150         
151          $core->error->add($msg);
152     }
153}
154
155/* DISPLAY Main page
156-------------------------------------------------------- */
157dcPage::open(__('Dotclear update'));
158
159if (!$core->error->flag()) {
160     echo '<h2>'.__('Dotclear update').'</h2>';
161}
162
163if (!$step)
164{
165     if (empty($new_v))
166     {
167          echo '<p><strong>'.__('No newer Dotclear version available.').'</strong></p>';
168     }
169     else
170     {
171          echo
172               '<p class="static-msg">'.sprintf(__('Dotclear %s is available.'),$new_v).
173                    ($version_info ? ' <a href="'.$version_info.'">('.__('information about this version').')</a>' : '').
174                    '</p>'.
175         
176          '<p>'.__('To upgrade your Dotclear installation simply click on the following button. '.
177               'A backup file of your current installation will be created in your root directory.').'</p>'.
178          '<form action="'.$p_url.'" method="get">'.
179          '<p><input type="hidden" name="step" value="check" />'.
180          '<input type="submit" value="'.__('Update Dotclear').'" /></p>'.
181          '</form>';
182     }
183     
184     if (!empty($archives))
185     {
186          echo
187          '<h3>'.__('Update backup files').'</h3>'.
188          '<p>'.__('The following files are backups of previously updates. '.
189          'You can revert your previous installation or delete theses files.').'</p>';
190         
191          echo '<form action="'.$p_url.'" method="post">';
192         
193          foreach ($archives as $v) {
194               echo
195               '<p><label class="classic">'.form::radio(array('backup_file'),html::escapeHTML($v)).' '.
196               html::escapeHTML($v).'</label></p>';
197          }
198         
199          echo
200          '<p><strong>'.__('Please note that reverting your Dotclear version may have some '.
201          'unwanted side-effects. Consider reverting only if you experience strong issues with this new version.').'</strong> '.
202          sprintf(__('You should not revert to version prior to last one (%s).'),end($archives)).
203          '</p>'.
204          '<p><input type="submit" class="delete" name="b_del" value="'.__('Delete selected file').'" /> '.
205          '<input type="submit" name="b_revert" value="'.__('Revert to selected file').'" />'.
206          $core->formNonce().'</p>'.
207          '</form>';
208     }
209}
210elseif ($step == 'unzip' && !$core->error->flag())
211{
212     echo
213     '<p class="message">'.
214     __("Congratulations, you're one click away from the end of the update.").
215     ' <strong><a href="index.php?logout=1">'.__('Finish the update.').'</a></strong>'.
216     '</p>';
217}
218
219dcPage::close();
220?>
Note: See TracBrowser for help on using the repository browser.

Sites map