diff options
| -rw-r--r-- | INSTALL | 4 | ||||
| -rw-r--r-- | UPGRADING | 9 | ||||
| -rwxr-xr-x | bin/installto.sh | 4 | ||||
| -rwxr-xr-x | bin/update.sh | 56 | ||||
| -rw-r--r-- | composer.json-dist | 2 | 
5 files changed, 66 insertions, 9 deletions
| @@ -39,7 +39,7 @@ REQUIREMENTS    or SQLite support in PHP  * One of the above databases with permission to create tables  * An SMTP server (recommended) or PHP configured for mail delivery -* Composer installed either locally or globally +* Composer installed either locally or globally (https://getcomposer.org)  INSTALLATION @@ -49,7 +49,7 @@ INSTALLATION  2. Install dependencies using composer:     - get composer from https://getcomposer.org/download/     - rename the composer.json-dist file into composer.json -   - run `php composer.phar install` +   - run `php composer.phar install --no-dev`  3. Make sure that the following directories (and the files within)     are writable by the webserver     - /temp @@ -40,15 +40,18 @@ it on a unix system, you need to do the following operations by hand:     directory into the target folder:     ./skins/     ./plugins/ -4. Run ./bin/update.sh from the commandline OR +   ./vendor/ +4. Run `./bin/update.sh` from the commandline OR     open http://url-to-roundcube/installer/ in a browser and choose "3 Test config".     To enable the latter one, you have to temporary set 'enable_installer'     to true in your local config/config.inc.php file.     WARNING: See SQLite database upgrade below.  5. Let the update script/installer check your configuration and     update your config files and database schema as suggested by the updater. -6. Make sure 'enable_installer' is set to false again. -7. See Post-Upgrade Activities section. +5. If you previously installed plugins through composer, update dependencies +   by running `php composer.phar update --no-dev` +7. Make sure 'enable_installer' is set to false again. +8. See Post-Upgrade Activities section.  Post-Upgrade Activities diff --git a/bin/installto.sh b/bin/installto.sh index d239c633d..e69560caa 100755 --- a/bin/installto.sh +++ b/bin/installto.sh @@ -5,7 +5,7 @@   | bin/installto.sh                                                      |   |                                                                       |   | This file is part of the Roundcube Webmail client                     | - | Copyright (C) 2012, The Roundcube Dev Team                            | + | Copyright (C) 2014, The Roundcube Dev Team                            |   |                                                                       |   | Licensed under the GNU General Public License version 3 or            |   | any later version with exceptions for skins & plugins.                | @@ -50,7 +50,7 @@ if (strtolower($input) == 'y') {        break;      }    } -  foreach (array('index.php','.htaccess','config/defaults.inc.php','CHANGELOG','README.md','UPGRADING','LICENSE') as $file) { +  foreach (array('index.php','.htaccess','config/defaults.inc.php','composer.json-dist','CHANGELOG','README.md','UPGRADING','LICENSE') as $file) {      if (!system("rsync -av " . INSTALL_PATH . "$file $target_dir/$file")) {        $err = true;        break; diff --git a/bin/update.sh b/bin/update.sh index cbacb940a..9d3508ede 100755 --- a/bin/update.sh +++ b/bin/update.sh @@ -5,7 +5,7 @@   | bin/update.sh                                                         |   |                                                                       |   | This file is part of the Roundcube Webmail client                     | - | Copyright (C) 2010-2013, The Roundcube Dev Team                       | + | Copyright (C) 2010-2014, The Roundcube Dev Team                       |   |                                                                       |   | Licensed under the GNU General Public License version 3 or            |   | any later version with exceptions for skins & plugins.                | @@ -162,6 +162,60 @@ if ($RCI->configured) {      $success = !$res;    } +  // update composer dependencies +  if (is_file(INSTALL_PATH . 'composer.json') && is_readable(INSTALL_PATH . 'composer.json-dist')) { +    $composer_data = json_decode(file_get_contents(INSTALL_PATH . 'composer.json'), true); +    $composer_template = json_decode(file_get_contents(INSTALL_PATH . 'composer.json-dist'), true); +    $comsposer_json = null; + +    // update the require section with the new dependencies +    if (is_array($composer_data['require']) && is_array($composer_template['require'])) { +      $composer_data['require'] = array_merge($composer_data['require'], $composer_template['require']); +      /* TO BE ADDED LATER +      $old_packages = array(); +      for ($old_packages as $pkg) { +        if (array_key_exists($composer_data['require'], $pkg)) { +          unset($composer_data['require'][$pkg]); +        } +      } +      */ +    } + +    // use the JSON encoder from the Composer package +    if (is_file('composer.phar')) { +      include 'phar://composer.phar/src/Composer/Json/JsonFile.php'; +      $comsposer_json = \Composer\Json\JsonFile::encode($composer_data); +    } +    // PHP 5.4's json_encode() does the job, too +    else if (defined('JSON_PRETTY_PRINT')) { +      $comsposer_json = json_encode($composer_data, JSON_PRETTY_PRINT & JSON_UNESCAPED_SLASHES); +    } +    else { +      $success = false; +      $comsposer_json = null; +    } + +    // write updated composer.json back to disk +    if (0&&$comsposer_json && is_writeable(INSTALL_PATH . 'composer.json')) { +      $success &= (bool)file_put_contents(INSTALL_PATH . 'composer.json', $comsposer_json); +    } +    else { +      echo "WARNING: unable to update composer.json!\n"; +      echo "Please replace the 'require' section in your composer.json with the following:\n"; + +      $require_json = ''; +      foreach ($composer_data['require'] as $pkg => $ver) { +        $require_json .= sprintf('        "%s": "%s",'."\n", $pkg, $ver); +      } + +      echo '    "require": {'."\n"; +      echo rtrim($require_json, ",\n"); +      echo "\n    }\n\n"; +    } + +    echo "NOTE: Update dependencies by running `php composer.phar update --no-dev`\n"; +  } +    // index contacts for fulltext searching    if ($opts['version'] && version_compare(version_parse($opts['version']), '0.6.0', '<')) {      system("php " . INSTALL_PATH . 'bin/indexcontacts.sh'); diff --git a/composer.json-dist b/composer.json-dist index 02dfa5847..144027771 100644 --- a/composer.json-dist +++ b/composer.json-dist @@ -30,7 +30,7 @@      ],      "require": {          "php": ">=5.3.7", -        "roundcube/plugin-installer": ">=0.1.3", +        "roundcube/plugin-installer": ">=0.1.5",          "pear/mail_mime": ">=1.8.9",          "pear/mail_mime-decode": ">=1.5.5",          "pear/net_smtp": "dev-master", | 
