Author: ornicar2
Date: 2010-01-20 03:45:09 +0100 (Wed, 20 Jan 2010)
New Revision: 26906
Added:
plugins/diemPlugin/trunk/dmAdminPlugin/lib/webService/dmDiemVersionCheck.php
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmAdmin/templates/versionCheckSuccess.php
plugins/diemPlugin/trunk/dmCorePlugin/test/unit/dmCoreTest.php
plugins/diemPlugin/trunk/dmCorePlugin/test/unit/dmVersionCheckTest.php
Modified:
plugins/diemPlugin/trunk/dmAdminPlugin/config/dm/services.yml
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmAdmin/lib/BasedmAdminActions.class.php
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmAdmin/templates/indexSuccess.php
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmInterface/templates/_flash.php
plugins/diemPlugin/trunk/dmAdminPlugin/web/css/main.css
plugins/diemPlugin/trunk/dmAdminPlugin/web/js/dmAdminCtrl.js
plugins/diemPlugin/trunk/dmCorePlugin/lib/config/dmConfig.php
plugins/diemPlugin/trunk/dmCorePlugin/lib/core/dmBase.php
plugins/diemPlugin/trunk/dmCorePlugin/lib/doctrine/database/dmDb.php
plugins/diemPlugin/trunk/dmCorePlugin/lib/filter/dmFilter.php
plugins/diemPlugin/trunk/dmCorePlugin/lib/webService/dmWebBrowser.php
Log:
[Diem]
- added diem_version_check service
- added dm version methods
- added unit tests for diem_version_check service and dm version methods
- fixed web_browser service user-agent
- added dmFilter->getService method
- added version check message on admin homepage
Modified: plugins/diemPlugin/trunk/dmAdminPlugin/config/dm/services.yml
===================================================================
--- plugins/diemPlugin/trunk/dmAdminPlugin/config/dm/services.yml
2010-01-20 00:18:10 UTC (rev 26905)
+++ plugins/diemPlugin/trunk/dmAdminPlugin/config/dm/services.yml
2010-01-20 02:45:09 UTC (rev 26906)
@@ -56,6 +56,11 @@
xml_sitemap_generator.options: []
link_tag_factory.class: dmAdminLinkTagFactory # Builds a link_tag
service from a source
+
+ diem_version_check.class: dmDiemVersionCheck # Responsible for checking if
a new version is available
+ diem_version_check.options:
+ enabled: true
+ url: http://diem-project.org/service/current-version
services:
@@ -132,4 +137,9 @@
xml_sitemap_generator:
class: %xml_sitemap_generator.class%
shared: false
- arguments: [ @dispatcher, @filesystem, @i18n,
%xml_sitemap_generator.options% ]
\ No newline at end of file
+ arguments: [ @dispatcher, @filesystem, @i18n,
%xml_sitemap_generator.options% ]
+
+ diem_version_check:
+ class: %diem_version_check.class%
+ shared: false
+ arguments: [ @service_container,
%diem_version_check.options% ]
\ No newline at end of file
Added:
plugins/diemPlugin/trunk/dmAdminPlugin/lib/webService/dmDiemVersionCheck.php
===================================================================
---
plugins/diemPlugin/trunk/dmAdminPlugin/lib/webService/dmDiemVersionCheck.php
(rev 0)
+++
plugins/diemPlugin/trunk/dmAdminPlugin/lib/webService/dmDiemVersionCheck.php
2010-01-20 02:45:09 UTC (rev 26906)
@@ -0,0 +1,68 @@
+<?php
+
+class dmDiemVersionCheck extends dmConfigurable
+{
+ protected
+ $serviceContainer,
+ $cache;
+
+ public function __construct(dmBaseServiceContainer $serviceContainer, array
$options)
+ {
+ $this->serviceContainer = $serviceContainer;
+
+ $this->initialize($options);
+ }
+
+ protected function initialize(array $options)
+ {
+ $this->configure($options);
+
+ $this->cache = array();
+ }
+
+ public function shouldCheck()
+ {
+ return !$this->getService('user')->getAttribute('version_check', false,
'dm');
+ }
+
+ public function isUpToDate()
+ {
+ $this->getService('user')->setAttribute('version_check', true, 'dm');
+
+ $serverVersion =
$this->getLatestServerVersionForBranch(dm::getVersionBranch());
+
+ return $this->versionCompare(dm::getVersion(), $serverVersion) >= 0;
+ }
+
+ public function getRecommendedUpgrade()
+ {
+ return $this->isUpToDate() ? null :
$this->getLatestServerVersionForBranch(dm::getVersionBranch());
+ }
+
+ public function getLatestServerVersionForBranch($branch)
+ {
+ if (isset($this->cache[$branch]))
+ {
+ return $this->cache[$branch];
+ }
+
+ return $this->cache['branch'] = $this->getService('web_browser')
+ ->get($this->getOption('url').'/'.str_replace('.', '_', $branch))
+ ->getResponseText();
+ }
+
+ protected function getService($name)
+ {
+ return $this->serviceContainer->getService($name);
+ }
+
+ protected function versionCompare($version1, $version2)
+ {
+ return version_compare($this->fixVersionName($version1),
$this->fixVersionName($version2));
+ }
+
+ protected function fixVersionName($version)
+ {
+ return strtr($version, array('-ALPHA' => '.1.', '-BETA' => '.2.', '-RC' =>
'.3.'));
+ }
+}
\ No newline at end of file
Modified:
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmAdmin/lib/BasedmAdminActions.class.php
===================================================================
---
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmAdmin/lib/BasedmAdminActions.class.php
2010-01-20 00:18:10 UTC (rev 26905)
+++
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmAdmin/lib/BasedmAdminActions.class.php
2010-01-20 02:45:09 UTC (rev 26906)
@@ -5,8 +5,20 @@
public function executeIndex(dmWebRequest $request)
{
$this->homepageManager = $this->getService('homepage_manager');
+
+ $this->checkVersion = $this->getUser()->can('system') &&
$this->getService('diem_version_check')->shouldCheck();
}
+ public function executeVersionCheck()
+ {
+ $this->versionCheck = $this->getService('diem_version_check');
+
+ if($this->versionCheck->isUpToDate())
+ {
+ return $this->renderText('');
+ }
+ }
+
public function executeModuleType(dmWebRequest $request)
{
$this->forward404Unless(
Modified:
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmAdmin/templates/indexSuccess.php
===================================================================
---
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmAdmin/templates/indexSuccess.php
2010-01-20 00:18:10 UTC (rev 26905)
+++
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmAdmin/templates/indexSuccess.php
2010-01-20 02:45:09 UTC (rev 26906)
@@ -2,4 +2,9 @@
echo £('h1', dmConfig::get('site_name'));
+if($checkVersion)
+{
+ echo £('div#dm_async_version_check');
+}
+
echo $homepageManager->render();
\ No newline at end of file
Added:
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmAdmin/templates/versionCheckSuccess.php
===================================================================
---
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmAdmin/templates/versionCheckSuccess.php
(rev 0)
+++
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmAdmin/templates/versionCheckSuccess.php
2010-01-20 02:45:09 UTC (rev 26906)
@@ -0,0 +1,8 @@
+<?php
+
+echo £('div.dm_version_check_upgrade.ui-corner-all', array('title' =>
__('Close')),
+ __('Diem %version% is available. Upgrade is recommended: %link%', array(
+ '%version%' => $versionCheck->getRecommendedUpgrade(),
+ '%link%' => £link('http://diem-project.org/download')
+ ))
+);
\ No newline at end of file
Modified:
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmInterface/templates/_flash.php
===================================================================
---
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmInterface/templates/_flash.php
2010-01-20 00:18:10 UTC (rev 26905)
+++
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmInterface/templates/_flash.php
2010-01-20 02:45:09 UTC (rev 26906)
@@ -12,7 +12,7 @@
$html .= £o("ul.flashs.".$class.'s');
foreach($messages as $message)
{
- $html .= £("li.flash.ui-corner-all.".$class,
+ $html .= £('li.flash.ui-corner-all.'.$class,
£('span.icon.fleft.mr5.s16block.s16_'.$class).
nl2br(__($message, array(), 'admin'))
);
Modified: plugins/diemPlugin/trunk/dmAdminPlugin/web/css/main.css
===================================================================
--- plugins/diemPlugin/trunk/dmAdminPlugin/web/css/main.css 2010-01-20
00:18:10 UTC (rev 26905)
+++ plugins/diemPlugin/trunk/dmAdminPlugin/web/css/main.css 2010-01-20
02:45:09 UTC (rev 26906)
@@ -1,4 +1,4 @@
-body{font:12px
arial,helvetica,verdana,sans-serif;*font-size:small;*font:x-small;}select,input,button,textarea{font:99%
arial,helvetica,clean,sans-serif;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}
+body{font:12px
arial,helvetica,verdana,sans-serif;*font-size:small;*font:x-small;}select,input,button,textarea{font:99%
arial,helvetica,clean,sans-serif;}table{font-size:inherit;font:100%;}pre,code{font-family:monospace;font-size:108%;line-height:100%;}
h1{
font-size:138.5%;
height: 2em;
@@ -157,4 +157,14 @@
div.dm_admin_homepage_column .dm_box {
margin: 0 5px 10px 5px;
+}
+
+div.dm_version_check_upgrade {
+ cursor: pointer;
+ border: 1px solid;
+ padding: 5px;
+ margin: 5px 0;
+ color: #333;
+ background: #DFE9B8 url(../images/flash/green.gif) repeat-x top left;
+ border-color: #CAD3A6;
}
\ No newline at end of file
Modified: plugins/diemPlugin/trunk/dmAdminPlugin/web/js/dmAdminCtrl.js
===================================================================
--- plugins/diemPlugin/trunk/dmAdminPlugin/web/js/dmAdminCtrl.js
2010-01-20 00:18:10 UTC (rev 26905)
+++ plugins/diemPlugin/trunk/dmAdminPlugin/web/js/dmAdminCtrl.js
2010-01-20 02:45:09 UTC (rev 26906)
@@ -30,7 +30,23 @@
this.liveEvents();
this.autoLoading();
+
+ this.checkVersion();
},
+
+ checkVersion: function()
+ {
+ if($versionCheck = $('#dm_async_version_check').orNot())
+ {
+ $.ajax({
+ url: $.dm.ctrl.getHref('+/dmAdmin/versionCheck'),
+ success: function(html)
+ {
+ $versionCheck.html(html).click(function() {
$versionCheck.remove(); });
+ }
+ });
+ }
+ },
autoLoading: function()
{
Modified: plugins/diemPlugin/trunk/dmCorePlugin/lib/config/dmConfig.php
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/lib/config/dmConfig.php
2010-01-20 00:18:10 UTC (rev 26905)
+++ plugins/diemPlugin/trunk/dmCorePlugin/lib/config/dmConfig.php
2010-01-20 02:45:09 UTC (rev 26906)
@@ -181,7 +181,6 @@
public static function isCli()
{
return defined('STDIN');
-// return !isset($_SERVER['HTTP_HOST']);
}
public static function canSystemCall()
Modified: plugins/diemPlugin/trunk/dmCorePlugin/lib/core/dmBase.php
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/lib/core/dmBase.php 2010-01-20
00:18:10 UTC (rev 26905)
+++ plugins/diemPlugin/trunk/dmCorePlugin/lib/core/dmBase.php 2010-01-20
02:45:09 UTC (rev 26906)
@@ -28,6 +28,8 @@
self::resetStartTime();
+ self::$version = DIEM_VERSION;
+
self::$dir = null === $dir ? realpath(dirname(__FILE__).'/../../..') :
$dir;
require_once(self::$dir.'/dmCorePlugin/lib/config/dmProjectConfiguration.php');
@@ -67,6 +69,40 @@
exit;
}
+
+ public static function setVersion($version)
+ {
+ self::$version = $version;
+ }
+
+ public static function getVersion()
+ {
+ return self::$version;
+ }
+
+ public static function getVersionMajor()
+ {
+ $parts = explode('.', self::getVersion());
+ return $parts[0];
+ }
+
+ public static function getVersionMinor()
+ {
+ $parts = explode('.', self::getVersion());
+ return $parts[1];
+ }
+
+ public static function getVersionMaintenance()
+ {
+ $parts = explode('.', self::getVersion());
+ return $parts[2];
+ }
+
+ public static function getVersionBranch()
+ {
+ $parts = explode('.', self::getVersion());
+ return $parts[0].'.'.$parts[1];
+ }
/*
* Symfony common objects accessors
@@ -122,7 +158,6 @@
return dmContext::getInstance()->getHelper();
}
-
/*
* Gadgets
*/
Modified: plugins/diemPlugin/trunk/dmCorePlugin/lib/doctrine/database/dmDb.php
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/lib/doctrine/database/dmDb.php
2010-01-20 00:18:10 UTC (rev 26905)
+++ plugins/diemPlugin/trunk/dmCorePlugin/lib/doctrine/database/dmDb.php
2010-01-20 02:45:09 UTC (rev 26906)
@@ -45,7 +45,10 @@
{
return self::table($class)->create($values);
}
-
+
+ /*
+ * @return PDOStatement
+ */
public static function pdo($query, array $values = array(),
Doctrine_Connection $conn = null)
{
$conn = null === $conn ?
Doctrine_Manager::getInstance()->getCurrentConnection() : $conn;
Modified: plugins/diemPlugin/trunk/dmCorePlugin/lib/filter/dmFilter.php
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/lib/filter/dmFilter.php
2010-01-20 00:18:10 UTC (rev 26905)
+++ plugins/diemPlugin/trunk/dmCorePlugin/lib/filter/dmFilter.php
2010-01-20 02:45:09 UTC (rev 26906)
@@ -19,4 +19,9 @@
return parent::initialize($context, $parameters);
}
+
+ public function getService($name, $class = null)
+ {
+ return $this->context->get($name, $class);
+ }
}
\ No newline at end of file
Modified: plugins/diemPlugin/trunk/dmCorePlugin/lib/webService/dmWebBrowser.php
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/lib/webService/dmWebBrowser.php
2010-01-20 00:18:10 UTC (rev 26905)
+++ plugins/diemPlugin/trunk/dmCorePlugin/lib/webService/dmWebBrowser.php
2010-01-20 02:45:09 UTC (rev 26906)
@@ -7,11 +7,11 @@
{
parent::__construct($defaultHeaders, $adapterClass, $adapterOptions);
- $this->setUserAgent(sprintf('%s (%s) powered by Diem/%s (%s)'),
+ $this->setUserAgent(sprintf('%s (%s) Diem/%s (%s)',
dmConfig::get('site_name'),
- dmArray::get($_SERVER, 'HTTP_HOST'),
+ dmArray::get($_SERVER, 'HTTP_HOST', '?'),
DIEM_VERSION,
'http://diem-project.org'
- );
+ ));
}
}
\ No newline at end of file
Added: plugins/diemPlugin/trunk/dmCorePlugin/test/unit/dmCoreTest.php
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/test/unit/dmCoreTest.php
(rev 0)
+++ plugins/diemPlugin/trunk/dmCorePlugin/test/unit/dmCoreTest.php
2010-01-20 02:45:09 UTC (rev 26906)
@@ -0,0 +1,40 @@
+<?php
+
+require_once(dirname(__FILE__).'/helper/dmUnitTestHelper.php');
+$helper = new dmUnitTestHelper();
+$helper->boot();
+
+$t = new lime_test(12);
+
+$t->comment('Weird version numbers will be shown during this test.');
+$t->comment('Diem real version number is '.DIEM_VERSION);
+
+dm::setVersion('5.2.14');
+
+$t->is(dm::getVersion(), '5.2.14', 'Diem version is 5.2.14');
+
+$t->is(dm::getVersionMajor(), '5', 'Diem version major is 5');
+
+$t->is(dm::getVersionMinor(), '2', 'Diem version minor is 2');
+
+$t->is(dm::getVersionMaintenance(), '14', 'Diem version maintenance is 14');
+
+$t->is(dm::getVersionBranch(), '5.2', 'Diem version branch is 5.2');
+
+dm::setVersion('5.0.0-BETA4_DEV');
+
+$t->is(dm::getVersion(), '5.0.0-BETA4_DEV', 'Diem version is 5.0.0-BETA4_DEV');
+
+$t->is(dm::getVersionMajor(), '5', 'Diem version major is 5');
+
+$t->is(dm::getVersionMinor(), '0', 'Diem version minor is 0');
+
+$t->is(dm::getVersionMaintenance(), '0-BETA4_DEV', 'Diem version maintenance
is 0-BETA4_DEV');
+
+$t->is(dm::getVersionBranch(), '5.0', 'Diem version branch is 5.0');
+
+dm::setVersion(DIEM_VERSION);
+
+$t->is(version_compare('5.0.0-BETA4_DEV', '5.0.0'), -1, '5.0.0-BETA4_DEV <
5.0.0');
+
+$t->is(version_compare('5.0.0', '5.0.1'), -1, '5.0.0 < 5.0.1');
\ No newline at end of file
Added: plugins/diemPlugin/trunk/dmCorePlugin/test/unit/dmVersionCheckTest.php
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/test/unit/dmVersionCheckTest.php
(rev 0)
+++ plugins/diemPlugin/trunk/dmCorePlugin/test/unit/dmVersionCheckTest.php
2010-01-20 02:45:09 UTC (rev 26906)
@@ -0,0 +1,69 @@
+<?php
+
+require_once(dirname(__FILE__).'/helper/dmUnitTestHelper.php');
+$helper = new dmUnitTestHelper();
+$helper->boot('admin');
+
+$t = new lime_test();
+
+$t->comment('Weird version numbers will be shown during this test.');
+$t->comment('Diem real version number is '.DIEM_VERSION);
+
+class dmDiemVersionCheckMock extends dmDiemVersionCheck
+{
+ protected function initialize(array $options)
+ {
+ parent::initialize($options);
+
+ $this->cache = array(
+ '5.0' => '5.0.4',
+ '5.1' => '5.1.0-BETA2'
+ );
+ }
+}
+
+$versionCheck = $helper->get('diem_version_check', 'dmDiemVersionCheckMock');
+
+dm::setVersion('5.0.0-BETA1');
+
+$t->is(dm::getVersion(), '5.0.0-BETA1', 'Diem version is 5.0.0-BETA1');
+
+$t->ok($versionCheck->shouldCheck(), 'versionCheck should check');
+
+$t->is($versionCheck->getLatestServerVersionForBranch('5.0'), '5.0.4', 'Latest
version for 5.0 is 5.0.4');
+
+$t->is($versionCheck->getLatestServerVersionForBranch('5.1'), '5.1.0-BETA2',
'Latest version for 5.1 is 5.1.0-BETA2');
+
+$t->is($versionCheck->isUpToDate(), false, 'Diem is not up to date');
+
+$t->is($versionCheck->getRecommendedUpgrade(), '5.0.4', 'Recommended upgrade
is 5.0.4');
+
+dm::setVersion('5.0.4');
+
+$t->is(dm::getVersion(), '5.0.4', 'Diem version is 5.0.4');
+
+$t->ok(!$versionCheck->shouldCheck(), 'versionCheck should not check');
+
+$t->is($versionCheck->getLatestServerVersionForBranch('5.0'), '5.0.4', 'Latest
version for 5.0 is 5.0.4');
+
+$t->is($versionCheck->getLatestServerVersionForBranch('5.1'), '5.1.0-BETA2',
'Latest version for 5.1 is 5.1.0-BETA2');
+
+$t->is($versionCheck->isUpToDate(), true, 'Diem is up to date');
+
+$t->is($versionCheck->getRecommendedUpgrade(), null, 'Recommended upgrade is
null');
+
+dm::setVersion('5.1.0-ALPHA4');
+
+$t->is(dm::getVersion(), '5.1.0-ALPHA4', 'Diem version is 5.1.0-ALPHA4');
+
+$t->ok(!$versionCheck->shouldCheck(), 'versionCheck should not check');
+
+$t->is($versionCheck->getLatestServerVersionForBranch('5.0'), '5.0.4', 'Latest
version for 5.0 is 5.0.4');
+
+$t->is($versionCheck->getLatestServerVersionForBranch('5.1'), '5.1.0-BETA2',
'Latest version for 5.1 is 5.1.0-BETA2');
+
+$t->is($versionCheck->isUpToDate(), false, 'Diem is not up to date');
+
+$t->is($versionCheck->getRecommendedUpgrade(), '5.1.0-BETA2', 'Recommended
upgrade is 5.1.0-BETA2');
+
+dm::setVersion(DIEM_VERSION);
\ No newline at end of file
--
You received this message because you are subscribed to the Google Groups
"symfony SVN" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/symfony-svn?hl=en.