Author: Jonathan.Wage
Date: 2010-01-30 10:56:04 +0100 (Sat, 30 Jan 2010)
New Revision: 27323

Modified:
   plugins/sfSympalPlugin/trunk/config/app.yml
   plugins/sfSympalPlugin/trunk/lib/cache/sfSympalCache.class.php
   plugins/sfSympalPlugin/trunk/lib/doctrine/sfSympalDoctrineQuery.class.php
   
plugins/sfSympalPlugin/trunk/lib/model/doctrine/PluginsfSympalContentTable.class.php
   
plugins/sfSympalPlugin/trunk/lib/model/doctrine/PluginsfSympalContentTypeTable.class.php
   
plugins/sfSympalPlugin/trunk/lib/model/doctrine/PluginsfSympalSiteTable.class.php
   
plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalAdminPlugin/config/sfSympalAdminPluginConfiguration.class.php
   
plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalAdminPlugin/modules/sympal_content/templates/_list_header.php
   
plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalAdminPlugin/modules/sympal_dashboard/lib/Basesympal_dashboardActions.class.php
   plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalAdminPlugin/web/js/menu.js
   
plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalEditorPlugin/web/js/editor.js
   plugins/sfSympalPlugin/trunk/lib/sfSympalConfig.class.php
   plugins/sfSympalPlugin/trunk/lib/sfSympalConfiguration.class.php
   plugins/sfSympalPlugin/trunk/lib/sfSympalContext.php
   plugins/sfSympalPlugin/trunk/lib/user/sfSympalUser.class.php
Log:
[1.4][sfSympalPlugin][1.0] Integrating Doctrine query and result cache with 
Sympal configurable by app.yml


Modified: plugins/sfSympalPlugin/trunk/config/app.yml
===================================================================
--- plugins/sfSympalPlugin/trunk/config/app.yml 2010-01-30 08:14:08 UTC (rev 
27322)
+++ plugins/sfSympalPlugin/trunk/config/app.yml 2010-01-30 09:56:04 UTC (rev 
27323)
@@ -144,6 +144,25 @@
     # Enable and disable the elastic textareas
     elastic_textareas: true
 
+    # Enable and disable the orm cache globally or control individual queries
+    orm_cache:
+      enabled: true
+      result: false
+      lifetime: 86400
+      queries:
+        sympal_get_content_types:
+          enabled: true
+          lifetime: 86400
+        sympal_get_user:
+          enabled: true
+          lifetime: 86400
+        sympal_context_get_site:
+          enabled: true
+          lifetime: 86400
+        sympal_get_content:
+          enabled: true
+          lifetime: 86400
+
     # Configure Sympal page caching. Enabling this feature turns on page 
caching for all pages
     page_cache:
       super: false

Modified: plugins/sfSympalPlugin/trunk/lib/cache/sfSympalCache.class.php
===================================================================
--- plugins/sfSympalPlugin/trunk/lib/cache/sfSympalCache.class.php      
2010-01-30 08:14:08 UTC (rev 27322)
+++ plugins/sfSympalPlugin/trunk/lib/cache/sfSympalCache.class.php      
2010-01-30 09:56:04 UTC (rev 27323)
@@ -25,6 +25,16 @@
     ));
   }
 
+  public static function getOrmCacheDriver()
+  {
+    if (extension_loaded('apc'))
+    {
+      return new Doctrine_Cache_Apc(array('prefix' => 'doctrine'));
+    } else {
+      return new Doctrine_Cache_Array();
+    }
+  }
+
   public function clear()
   {
     $this->_contentTypes = null;
@@ -139,7 +149,7 @@
   {
     try {
       $typesArray = array();
-      $contentTypes = 
Doctrine_Core::getTable('sfSympalContentType')->findAll();
+      $contentTypes = 
Doctrine_Core::getTable('sfSympalContentType')->getAllContentTypes();
       foreach ($contentTypes as $contentType)
       {
         $typesArray[$contentType['id']] = $contentType['name'];

Modified: 
plugins/sfSympalPlugin/trunk/lib/doctrine/sfSympalDoctrineQuery.class.php
===================================================================
--- plugins/sfSympalPlugin/trunk/lib/doctrine/sfSympalDoctrineQuery.class.php   
2010-01-30 08:14:08 UTC (rev 27322)
+++ plugins/sfSympalPlugin/trunk/lib/doctrine/sfSympalDoctrineQuery.class.php   
2010-01-30 09:56:04 UTC (rev 27323)
@@ -2,4 +2,13 @@
 
 class sfSympalDoctrineQuery extends Doctrine_Query
 {
+  public function enableSympalResultCache($key)
+  {
+    if ($lifetime = sfSympalConfig::shouldUseResultCache($key))
+    {
+      $this->useResultCache(true, $lifetime, $key);
+    }
+
+    return $this;
+  }
 }
\ No newline at end of file

Modified: 
plugins/sfSympalPlugin/trunk/lib/model/doctrine/PluginsfSympalContentTable.class.php
===================================================================
--- 
plugins/sfSympalPlugin/trunk/lib/model/doctrine/PluginsfSympalContentTable.class.php
        2010-01-30 08:14:08 UTC (rev 27322)
+++ 
plugins/sfSympalPlugin/trunk/lib/model/doctrine/PluginsfSympalContentTable.class.php
        2010-01-30 09:56:04 UTC (rev 27323)
@@ -139,6 +139,8 @@
       }
     }
 
+    $q->enableSympalResultCache('sympal_get_content');
+
     return $q->fetchOne();
   }
 

Modified: 
plugins/sfSympalPlugin/trunk/lib/model/doctrine/PluginsfSympalContentTypeTable.class.php
===================================================================
--- 
plugins/sfSympalPlugin/trunk/lib/model/doctrine/PluginsfSympalContentTypeTable.class.php
    2010-01-30 08:14:08 UTC (rev 27322)
+++ 
plugins/sfSympalPlugin/trunk/lib/model/doctrine/PluginsfSympalContentTypeTable.class.php
    2010-01-30 09:56:04 UTC (rev 27323)
@@ -4,16 +4,13 @@
  */
 class PluginsfSympalContentTypeTable extends sfSympalDoctrineTable
 {
-  protected $_findAllResults;
-
-  public function findAll($hydrationMode = null)
+  public function getAllContentTypes()
   {
-    if (!$this->_findAllResults)
-    {
-      $this->_findAllResults = $this->createQuery('dctrn_find')
-        ->orderBy('name ASC')
-        ->execute(array(), $hydrationMode);
-    }
-    return $this->_findAllResults;
+    $q = $this->createQuery('t')
+      ->orderBy('t.name ASC');
+
+    $q->enableSympalResultCache('sympal_get_content_types');
+
+    return $q->execute();
   }
 }
\ No newline at end of file

Modified: 
plugins/sfSympalPlugin/trunk/lib/model/doctrine/PluginsfSympalSiteTable.class.php
===================================================================
--- 
plugins/sfSympalPlugin/trunk/lib/model/doctrine/PluginsfSympalSiteTable.class.php
   2010-01-30 08:14:08 UTC (rev 27322)
+++ 
plugins/sfSympalPlugin/trunk/lib/model/doctrine/PluginsfSympalSiteTable.class.php
   2010-01-30 09:56:04 UTC (rev 27323)
@@ -4,16 +4,4 @@
  */
 class PluginsfSympalSiteTable extends sfSympalDoctrineTable
 {
-  protected $_byIdentifierCache = array();
-
-  public function findOneBySlug($slug)
-  {
-    if (!isset($this->_byIdentifierCache[$slug]))
-    {
-      $record = $this->findOneBy('slug', $slug);
-
-      $this->_byIdentifierCache[$slug] = $record;
-    }
-    return $this->_byIdentifierCache[$slug];
-  }
 }
\ No newline at end of file

Modified: 
plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalAdminPlugin/config/sfSympalAdminPluginConfiguration.class.php
===================================================================
--- 
plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalAdminPlugin/config/sfSympalAdminPluginConfiguration.class.php
      2010-01-30 08:14:08 UTC (rev 27322)
+++ 
plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalAdminPlugin/config/sfSympalAdminPluginConfiguration.class.php
      2010-01-30 09:56:04 UTC (rev 27323)
@@ -51,7 +51,7 @@
 
     $user = sfContext::getInstance()->getUser();
 
-    $contentTypes = Doctrine_Core::getTable('sfSympalContentType')->findAll();
+    $contentTypes = 
Doctrine_Core::getTable('sfSympalContentType')->getAllContentTypes();
     foreach ($contentTypes as $contentType)
     {
       $manageContent->addChild($contentType->getLabel(), 
'@sympal_content_list_type?type='.$contentType->getId());

Modified: 
plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalAdminPlugin/modules/sympal_content/templates/_list_header.php
===================================================================
--- 
plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalAdminPlugin/modules/sympal_content/templates/_list_header.php
      2010-01-30 08:14:08 UTC (rev 27322)
+++ 
plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalAdminPlugin/modules/sympal_content/templates/_list_header.php
      2010-01-30 09:56:04 UTC (rev 27323)
@@ -1,4 +1,4 @@
-<?php $contentTypes = 
Doctrine_Core::getTable('sfSympalContentType')->findAll() ?>
+<?php $contentTypes = 
Doctrine_Core::getTable('sfSympalContentType')->getAllContentTypes() ?>
 <div id="sympal_content_type_menu">
   <h3><?php echo __('Change Content Type') ?></h3>
   <ul>

Modified: 
plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalAdminPlugin/modules/sympal_dashboard/lib/Basesympal_dashboardActions.class.php
===================================================================
--- 
plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalAdminPlugin/modules/sympal_dashboard/lib/Basesympal_dashboardActions.class.php
     2010-01-30 08:14:08 UTC (rev 27322)
+++ 
plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalAdminPlugin/modules/sympal_dashboard/lib/Basesympal_dashboardActions.class.php
     2010-01-30 09:56:04 UTC (rev 27323)
@@ -40,7 +40,7 @@
       ->setRoute('@sympal_content')
       ->setCredentials(array('ManageContent'));
 
-    $contentTypes = Doctrine_Core::getTable('sfSympalContentType')->findAll();
+    $contentTypes = 
Doctrine_Core::getTable('sfSympalContentType')->getAllContentTypes();
 
     foreach ($contentTypes as $contentType)
     {

Modified: 
plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalAdminPlugin/web/js/menu.js
===================================================================
--- plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalAdminPlugin/web/js/menu.js 
2010-01-30 08:14:08 UTC (rev 27322)
+++ plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalAdminPlugin/web/js/menu.js 
2010-01-30 09:56:04 UTC (rev 27323)
@@ -1,4 +1,8 @@
 $(function() {
+  // Top admin menu bar mouseover and mouseout events for dropdown menus
+  $('.sympal_admin_menu ul > li').bind('mouseover', sympalAdminMenuOpen);
+  $('.sympal_admin_menu ul > li').bind('mouseout', sympalAdminMenuClose);
+
   // Override the webdebug toolbar and how it is hidden and displayed
   $('#sfWebDebugBar a:first').click(function() {
     if ($('#sfWebDebugDetails').css('visibility') == 'visible')
@@ -10,4 +14,38 @@
     sfWebDebugToggleMenu();
     return false;
   });
-});
\ No newline at end of file
+});
+
+// Top admin menu bar
+var timeout    = 1000;
+var closetimer = 0;
+var sympalMenuItem = 0;
+
+function sympalAdminMenuOpen()
+{
+  sympalAdminMenuCancelTimer();
+  sympalAdminMenuClose();
+  sympalMenuItem = $(this).find('ul').show();
+}
+
+function sympalAdminMenuClose()
+{
+  if (sympalMenuItem)
+  {
+    sympalMenuItem.hide();
+  }
+}
+
+function sympalAdminMenuTimer()
+{
+  closetimer = window.setTimeout(sympalAdminMenuClose, timeout);
+}
+
+function sympalAdminMenuCancelTimer()
+{
+  if (closetimer)
+  {
+    window.clearTimeout(closetimer);
+    closetimer = null;
+  }
+}
\ No newline at end of file

Modified: 
plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalEditorPlugin/web/js/editor.js
===================================================================
--- 
plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalEditorPlugin/web/js/editor.js  
    2010-01-30 08:14:08 UTC (rev 27322)
+++ 
plugins/sfSympalPlugin/trunk/lib/plugins/sfSympalEditorPlugin/web/js/editor.js  
    2010-01-30 09:56:04 UTC (rev 27323)
@@ -2,10 +2,6 @@
 
 $(function()
 {
-  // Top admin menu bar mouseover and mouseout events for dropdown menus
-  $('.sympal_admin_menu ul > li').bind('mouseover', sympalAdminMenuOpen);
-  $('.sympal_admin_menu ul > li').bind('mouseout', sympalAdminMenuClose);
-
   // Content publishing fancybox
   $('#sympal_assets #sympal_ask_confirmation input.no').live('click', 
function() {
     $('#sympal_assets').load($('.toggle_sympal_assets').attr('rel'));
@@ -194,40 +190,6 @@
   $.cookie('sympal_inline_edit_mode', 'true');
 }
 
-// Top admin menu bar
-var timeout    = 1000;
-var closetimer = 0;
-var sympalMenuItem = 0;
-
-function sympalAdminMenuOpen()
-{
-  sympalAdminMenuCancelTimer();
-  sympalAdminMenuClose();
-  sympalMenuItem = $(this).find('ul').show();
-}
-
-function sympalAdminMenuClose()
-{
-  if (sympalMenuItem)
-  {
-    sympalMenuItem.hide();
-  }
-}
-
-function sympalAdminMenuTimer()
-{
-  closetimer = window.setTimeout(sympalAdminMenuClose, timeout);
-}
-
-function sympalAdminMenuCancelTimer()
-{
-  if (closetimer)
-  {
-    window.clearTimeout(closetimer);
-    closetimer = null;
-  }
-}
-
 function sympalTinyMCETriggerSave()
 {
   tinyMCE.triggerSave();

Modified: plugins/sfSympalPlugin/trunk/lib/sfSympalConfig.class.php
===================================================================
--- plugins/sfSympalPlugin/trunk/lib/sfSympalConfig.class.php   2010-01-30 
08:14:08 UTC (rev 27322)
+++ plugins/sfSympalPlugin/trunk/lib/sfSympalConfig.class.php   2010-01-30 
09:56:04 UTC (rev 27323)
@@ -2,6 +2,20 @@
 
 class sfSympalConfig extends sfConfig
 {
+  public static function shouldUseResultCache($key)
+  {
+    if 
(isset(self::$config['app_sympal_config_orm_cache']['queries'][$key]['enabled'])
+      && 
self::$config['app_sympal_config_orm_cache']['queries'][$key]['enabled']
+      && isset(self::$config['app_sympal_config_orm_cache']['result'])
+      && self::$config['app_sympal_config_orm_cache']['result']
+    )
+    {
+      return 
isset(self::$config['app_sympal_config_orm_cache']['queries'][$key]['lifetime'])
 ? self::$config['app_sympal_config_orm_cache']['queries'][$key]['lifetime'] : 
self::$config['app_sympal_config_orm_cache']['lifetime'];
+    } else {
+      return false;
+    }
+  }
+
   public static function getLanguageCodes()
   {
     return !empty(self::$config['app_sympal_config_language_codes']) ? 
self::$config['app_sympal_config_language_codes'] : array();

Modified: plugins/sfSympalPlugin/trunk/lib/sfSympalConfiguration.class.php
===================================================================
--- plugins/sfSympalPlugin/trunk/lib/sfSympalConfiguration.class.php    
2010-01-30 08:14:08 UTC (rev 27322)
+++ plugins/sfSympalPlugin/trunk/lib/sfSympalConfiguration.class.php    
2010-01-30 09:56:04 UTC (rev 27323)
@@ -26,7 +26,14 @@
     $this->_doctrineManager = Doctrine_Manager::getInstance();
 
     $this->_initializeSymfonyConfig();
+    $this->_markClassesAsSafe();
+    $this->_connectEvents();
+    $this->_configureSuperCache();
+    $this->_configureDoctrine();
+  }
 
+  private function _markClassesAsSafe()
+  {
     sfOutputEscaper::markClassesAsSafe(array(
       'sfSympalContent',
       'sfSympalContentTranslation',
@@ -42,7 +49,10 @@
       'sfSympalServerCheckHtmlRenderer',
       'sfSympalSitemapGenerator'
     ));
+  }
 
+  private function _connectEvents()
+  {
     $this->_dispatcher->connect('context.load_factories', array($this, 
'bootstrap'));
     $this->_dispatcher->connect('component.method_not_found', array(new 
sfSympalActions(), 'extend'));
     $this->_dispatcher->connect('controller.change_action', array($this, 
'initializeTheme'));
@@ -50,21 +60,43 @@
     $this->_dispatcher->connect('form.method_not_found', array(new 
sfSympalForm(), 'extend'));
     $this->_dispatcher->connect('form.post_configure', array('sfSympalForm', 
'listenToFormPostConfigure'));
     $this->_dispatcher->connect('form.filter_values', array('sfSympalForm', 
'listenToFormFilterValues'));
+    $this->_dispatcher->connect('task.cache.clear', array($this, 
'listenToTaskCacheClear'));
+  }
 
+  private function _configureSuperCache()
+  {
     if (sfSympalConfig::get('page_cache', 'super') && 
sfConfig::get('sf_cache'))
     {
       $superCache = new sfSympalSuperCache($this);
       $this->_dispatcher->connect('response.filter_content', 
array($superCache, 'listenToResponseFilterContent'));
     }
+  }
 
-    $this->_dispatcher->connect('task.cache.clear', array($this, 
'listenToTaskCacheClear'));
-
+  private function _configureDoctrine()
+  {
     
$this->_doctrineManager->setAttribute(Doctrine_Core::ATTR_HYDRATE_OVERWRITE, 
false);
     $this->_doctrineManager->setAttribute(Doctrine_Core::ATTR_TABLE_CLASS, 
'sfSympalDoctrineTable');
     $this->_doctrineManager->setAttribute(Doctrine_Core::ATTR_QUERY_CLASS, 
'sfSympalDoctrineQuery');
     
$this->_doctrineManager->setAttribute(Doctrine_Core::ATTR_COLLECTION_CLASS, 
'sfSympalDoctrineCollection');
+    $this->_configureDoctrineCache();    
   }
 
+  private function _configureDoctrineCache()
+  {
+    if (sfSympalConfig::get('orm_cache', 'enabled', true))
+    {
+      $driver = sfSympalCache::getOrmCacheDriver();
+
+      $this->_doctrineManager->setAttribute(Doctrine_Core::ATTR_QUERY_CACHE, 
$driver);
+
+      if (sfSympalConfig::get('orm_cache', 'result', false))
+      {
+        
$this->_doctrineManager->setAttribute(Doctrine_Core::ATTR_RESULT_CACHE, 
$driver);
+        
$this->_doctrineManager->setAttribute(Doctrine_Core::ATTR_RESULT_CACHE_LIFESPAN,
 sfSympalConfig::get('orm_cache', 'lifetime', 86400));
+      }
+    }
+  }
+
   public function listenToTaskCacheClear(sfEvent $event)
   {
     $event->getSubject()->logSection('sympal', 'Clearing web cache folder');

Modified: plugins/sfSympalPlugin/trunk/lib/sfSympalContext.php
===================================================================
--- plugins/sfSympalPlugin/trunk/lib/sfSympalContext.php        2010-01-30 
08:14:08 UTC (rev 27322)
+++ plugins/sfSympalPlugin/trunk/lib/sfSympalContext.php        2010-01-30 
09:56:04 UTC (rev 27323)
@@ -70,6 +70,7 @@
       $this->_site =  Doctrine_Core::getTable('sfSympalSite')
         ->createQuery('s')
         ->where('s.slug = ?', $this->_siteSlug)
+        ->enableSympalResultCache('sympal_context_get_site')
         ->fetchOne();
     }
     return $this->_site;

Modified: plugins/sfSympalPlugin/trunk/lib/user/sfSympalUser.class.php
===================================================================
--- plugins/sfSympalPlugin/trunk/lib/user/sfSympalUser.class.php        
2010-01-30 08:14:08 UTC (rev 27322)
+++ plugins/sfSympalPlugin/trunk/lib/user/sfSympalUser.class.php        
2010-01-30 09:56:04 UTC (rev 27323)
@@ -67,4 +67,26 @@
   {
     return $this->getAttribute('sympal_current_theme');
   }
+
+  public function getGuardUser()
+  {
+    if (!$this->user && $id = $this->getAttribute('user_id', null, 
'sfGuardSecurityUser'))
+    {
+      $q = Doctrine_Core::getTable('sfGuardUser')->createQuery('u')
+        ->where('u.id = ?', $id)
+        ->limit(1);
+
+      $q->enableSympalResultCache('sympal_get_user');
+
+      if (!$this->user = $q->fetchOne())
+      {
+        // the user does not exist anymore in the database
+        $this->signOut();
+
+        throw new sfException('The user does not exist anymore in the 
database.');
+      }
+    }
+
+    return $this->user;
+  }
 }
\ 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