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.


Reply via email to