Aleksander Machniak
2013-03-07 a6ceb4ea49cd50b2872f6031d83f54d174d7792a
commit | author | age
e6bb83 1 #!/usr/bin/env php
T 2 <?php
3 /*
4  +-----------------------------------------------------------------------+
5  | bin/installto.sh                                                      |
6  |                                                                       |
7  | This file is part of the Roundcube Webmail client                     |
471d55 8  | Copyright (C) 2012, The Roundcube Dev Team                            |
7fe381 9  |                                                                       |
T 10  | Licensed under the GNU General Public License version 3 or            |
11  | any later version with exceptions for skins & plugins.                |
12  | See the README file for a full license statement.                     |
e6bb83 13  |                                                                       |
T 14  | PURPOSE:                                                              |
15  |   Update an existing Roundcube installation with files from           |
16  |   this version                                                        |
17  +-----------------------------------------------------------------------+
18  | Author: Thomas Bruederli <roundcube@gmail.com>                        |
19  +-----------------------------------------------------------------------+
20 */
21
22 define('INSTALL_PATH', realpath(dirname(__FILE__) . '/..') . '/' );
23
6cc3f5 24 require_once INSTALL_PATH . 'program/include/clisetup.php';
e6bb83 25
T 26 $target_dir = unslashify($_SERVER['argv'][1]);
27
28 if (empty($target_dir) || !is_dir(realpath($target_dir)))
29   die("Invalid target: not a directory\nUsage: installto.sh <TARGET>\n");
30
31 // read version from iniset.php
32 $iniset = @file_get_contents($target_dir . '/program/include/iniset.php');
33 if (!preg_match('/define\(.RCMAIL_VERSION.,\s*.([0-9.]+[a-z-]*)/', $iniset, $m))
34   die("No valid Roundcube installation found at $target_dir\n");
35
36 $oldversion = $m[1];
37
a07926 38 if (version_compare(version_parse($oldversion), version_parse(RCMAIL_VERSION), '>='))
e6bb83 39   die("Installation at target location is up-to-date!\n");
T 40
41 echo "Upgrading from $oldversion. Do you want to continue? (y/N)\n";
42 $input = trim(fgets(STDIN));
43
44 if (strtolower($input) == 'y') {
45   $err = false;
46   echo "Copying files to target location...";
54d074 47   foreach (array('program','installer','bin','SQL','plugins','skins') as $dir) {
373b11 48     if (!system("rsync -avC " . INSTALL_PATH . "$dir/* $target_dir/$dir/")) {
e6bb83 49       $err = true;
T 50       break;
51     }
52   }
471d55 53   foreach (array('index.php','.htaccess','config/main.inc.php.dist','config/db.inc.php.dist','CHANGELOG','README.md','UPGRADING','LICENSE') as $file) {
373b11 54     if (!system("rsync -av " . INSTALL_PATH . "$file $target_dir/$file")) {
e6bb83 55       $err = true;
T 56       break;
57     }
58   }
59   echo "done.\n\n";
471d55 60
TB 61   if (is_dir("$target_dir/skins/default")) {
62       echo "Removing old default skin...";
a025cd 63       system("rm -rf $target_dir/skins/default $target_dir/plugins/jqueryui/themes/default");
471d55 64       foreach (glob(INSTALL_PATH . "plugins/*/skins") as $plugin_skin_dir) {
TB 65           $plugin_skin_dir = preg_replace('!^.*' . INSTALL_PATH . '!', '', $plugin_skin_dir);
a025cd 66           if (is_dir("$target_dir/$plugin_skin_dir/classic"))
TB 67             system("rm -rf $target_dir/$plugin_skin_dir/default");
471d55 68       }
TB 69       echo "done.\n\n";
70   }
71
e6bb83 72   if (!$err) {
T 73     echo "Running update script at target...\n";
74     system("cd $target_dir && bin/update.sh --version=$oldversion");
75     echo "All done.\n";
76   }
77 }
78 else
79   echo "Update cancelled. See ya!\n";
80
81 ?>