| 1 | #!/usr/bin/env php |
|---|
| 2 | <?php |
|---|
| 3 | /* |
|---|
| 4 | +-----------------------------------------------------------------------+ |
|---|
| 5 | | bin/installto.sh | |
|---|
| 6 | | | |
|---|
| 7 | | This file is part of the Roundcube Webmail client | |
|---|
| 8 | | Copyright (C) 2012, The Roundcube Dev Team | |
|---|
| 9 | | | |
|---|
| 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. | |
|---|
| 13 | | | |
|---|
| 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 | |
|---|
| 24 | require_once INSTALL_PATH . 'program/include/clisetup.php'; |
|---|
| 25 | |
|---|
| 26 | $target_dir = unslashify($_SERVER['argv'][1]); |
|---|
| 27 | |
|---|
| 28 | if (empty($target_dir) || !is_dir(realpath($target_dir))) |
|---|
| 29 | rcube::raise_error("Invalid target: not a directory\nUsage: installto.sh <TARGET>", false, true); |
|---|
| 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 | rcube::raise_error("No valid Roundcube installation found at $target_dir", false, true); |
|---|
| 35 | |
|---|
| 36 | $oldversion = $m[1]; |
|---|
| 37 | |
|---|
| 38 | if (version_compare(version_parse($oldversion), version_parse(RCMAIL_VERSION), '>=')) |
|---|
| 39 | rcube::raise_error("Installation at target location is up-to-date!", false, true); |
|---|
| 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..."; |
|---|
| 47 | foreach (array('program','installer','bin','SQL','plugins','skins') as $dir) { |
|---|
| 48 | if (!system("rsync -avC " . INSTALL_PATH . "$dir/* $target_dir/$dir/")) { |
|---|
| 49 | $err = true; |
|---|
| 50 | break; |
|---|
| 51 | } |
|---|
| 52 | } |
|---|
| 53 | foreach (array('index.php','.htaccess','config/main.inc.php.dist','config/db.inc.php.dist','CHANGELOG','README.md','UPGRADING','LICENSE') as $file) { |
|---|
| 54 | if (!system("rsync -av " . INSTALL_PATH . "$file $target_dir/$file")) { |
|---|
| 55 | $err = true; |
|---|
| 56 | break; |
|---|
| 57 | } |
|---|
| 58 | } |
|---|
| 59 | echo "done.\n\n"; |
|---|
| 60 | |
|---|
| 61 | if (is_dir("$target_dir/skins/default")) { |
|---|
| 62 | echo "Removing old default skin..."; |
|---|
| 63 | system("rm -rf $target_dir/skins/default $target_dir/plugins/jqueryui/themes/default"); |
|---|
| 64 | foreach (glob(INSTALL_PATH . "plugins/*/skins") as $plugin_skin_dir) { |
|---|
| 65 | $plugin_skin_dir = preg_replace('!^.*' . INSTALL_PATH . '!', '', $plugin_skin_dir); |
|---|
| 66 | if (is_dir("$target_dir/$plugin_skin_dir/classic")) |
|---|
| 67 | system("rm -rf $target_dir/$plugin_skin_dir/default"); |
|---|
| 68 | } |
|---|
| 69 | echo "done.\n\n"; |
|---|
| 70 | } |
|---|
| 71 | |
|---|
| 72 | if (!$err) { |
|---|
| 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 | ?> |
|---|