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 = '<?php /* ';
private static $VERSION_END_TAG = ' */ ?>';
*
* @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
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) {
$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;
/*
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'])) {
public function testGetLatestGitVersionCodeInvalidUrl()
{
$this->assertFalse(
- ApplicationUtils::getLatestGitVersionCode('htttp://null.io', 0)
+ ApplicationUtils::getLatestGitVersionCode('htttp://null.io', 1)
);
}
/**
* A newer version is available
*/
- public function testCheckUpdateNewVersionNew()
+ public function testCheckUpdateNewVersionAvailable()
{
$newVersion = '1.8.3';
FakeApplicationUtils::$VERSION_CODE = $newVersion;
$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
*/
{$value}
{/loop}
</div>
-{if="$newversion"}
- <div id="newversion"><span id="version_id">●</span> Shaarli {$newversion} is <a href="https://github.com/shaarli/Shaarli/releases">available</a>.</div>
+{if="$newVersion"}
+<div id="newversion">
+ <span id="version_id">●</span> Shaarli {$newVersion} is
+ <a href="https://github.com/shaarli/Shaarli/releases">available</a>.
+</div>
+{/if}
+{if="$versionError"}
+<div id="newversion">
+ Error: {$versionError}
+</div>
{/if}
{if="isLoggedIn()"}
<script>function confirmDeleteLink() { var agree=confirm("Are you sure you want to delete this link ?"); if (agree) return true ; else return false ; }</script>