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.