diff --git a/application/ApplicationUtils.php b/application/ApplicationUtils.php index c7414b7..6d87811 100644 --- a/application/ApplicationUtils.php +++ b/application/ApplicationUtils.php @@ -5,7 +5,7 @@ class ApplicationUtils { private static $GIT_URL = 'https://raw.githubusercontent.com/shaarli/Shaarli'; - private static $GIT_BRANCH = 'master'; + private static $GIT_BRANCHES = array('master', 'stable'); private static $VERSION_FILE = 'shaarli_version.php'; private static $VERSION_START_TAG = ''; @@ -52,8 +52,12 @@ class ApplicationUtils * * @return mixed the new version code if available and greater, else 'false' */ - public static function checkUpdate( - $currentVersion, $updateFile, $checkInterval, $enableCheck, $isLoggedIn) + public static function checkUpdate($currentVersion, + $updateFile, + $checkInterval, + $enableCheck, + $isLoggedIn, + $branch='stable') { if (! $isLoggedIn) { // Do not check versions for visitors @@ -75,10 +79,16 @@ class ApplicationUtils return false; } + if (! in_array($branch, self::$GIT_BRANCHES)) { + throw new Exception( + 'Invalid branch selected for updates: "' . $branch . '"' + ); + } + // Late Static Binding allows overriding within tests // See http://php.net/manual/en/language.oop5.late-static-bindings.php $latestVersion = static::getLatestGitVersionCode( - self::$GIT_URL . '/' . self::$GIT_BRANCH . '/' . self::$VERSION_FILE + self::$GIT_URL . '/' . $branch . '/' . self::$VERSION_FILE ); if (! $latestVersion) { diff --git a/index.php b/index.php index 90045d6..a100563 100644 --- a/index.php +++ b/index.php @@ -92,7 +92,8 @@ $GLOBALS['config']['ENABLE_THUMBNAILS'] = true; $GLOBALS['config']['ENABLE_LOCALCACHE'] = true; // Update check frequency for Shaarli. 86400 seconds=24 hours -$GLOBALS['config']['UPDATECHECK_INTERVAL'] = 86400 ; +$GLOBALS['config']['UPDATECHECK_BRANCH'] = 'stable'; +$GLOBALS['config']['UPDATECHECK_INTERVAL'] = 86400; /* @@ -631,18 +632,23 @@ class pageBuilder private function initialize() { $this->tpl = new RainTPL; - $this->tpl->assign( - 'newversion', - escape( - ApplicationUtils::checkUpdate( - shaarli_version, - $GLOBALS['config']['UPDATECHECK_FILENAME'], - $GLOBALS['config']['UPDATECHECK_INTERVAL'], - $GLOBALS['config']['ENABLE_UPDATECHECK'], - isLoggedIn() - ) - ) - ); + + try { + $version = ApplicationUtils::checkUpdate( + shaarli_version, + $GLOBALS['config']['UPDATECHECK_FILENAME'], + $GLOBALS['config']['UPDATECHECK_INTERVAL'], + $GLOBALS['config']['ENABLE_UPDATECHECK'], + isLoggedIn(), + $GLOBALS['config']['UPDATECHECK_BRANCH'] + ); + $this->tpl->assign('newVersion', escape($version)); + + } catch (Exception $exc) { + logm($exc->getMessage()); + $this->tpl->assign('versionError', escape($exc->getMessage())); + } + $this->tpl->assign('feedurl', escape(index_url($_SERVER))); $searchcrits = ''; // Search criteria if (!empty($_GET['searchtags'])) { diff --git a/tests/ApplicationUtilsTest.php b/tests/ApplicationUtilsTest.php index 437c21f..6064357 100644 --- a/tests/ApplicationUtilsTest.php +++ b/tests/ApplicationUtilsTest.php @@ -75,7 +75,7 @@ class ApplicationUtilsTest extends PHPUnit_Framework_TestCase public function testGetLatestGitVersionCodeInvalidUrl() { $this->assertFalse( - ApplicationUtils::getLatestGitVersionCode('htttp://null.io', 0) + ApplicationUtils::getLatestGitVersionCode('htttp://null.io', 1) ); } @@ -102,7 +102,7 @@ class ApplicationUtilsTest extends PHPUnit_Framework_TestCase /** * A newer version is available */ - public function testCheckUpdateNewVersionNew() + public function testCheckUpdateNewVersionAvailable() { $newVersion = '1.8.3'; FakeApplicationUtils::$VERSION_CODE = $newVersion; @@ -134,6 +134,16 @@ class ApplicationUtilsTest extends PHPUnit_Framework_TestCase $this->assertFalse($version); } + /** + * Test update checks - invalid Git branch + * @expectedException Exception + * @expectedExceptionMessageRegExp /Invalid branch selected for updates/ + */ + public function testCheckUpdateInvalidGitBranch() + { + ApplicationUtils::checkUpdate('', 'null', 0, true, true, 'unstable'); + } + /** * Shaarli is up-to-date */ diff --git a/tpl/page.footer.html b/tpl/page.footer.html index 6c29850..b20aae5 100644 --- a/tpl/page.footer.html +++ b/tpl/page.footer.html @@ -4,8 +4,16 @@ {$value} {/loop} -{if="$newversion"} -
Shaarli {$newversion} is available.
+{if="$newVersion"} +
+ Shaarli {$newVersion} is + available. +
+{/if} +{if="$versionError"} +
+ Error: {$versionError} +
{/if} {if="isLoggedIn()"}