Author: ornicar2
Date: 2010-01-28 20:52:10 +0100 (Thu, 28 Jan 2010)
New Revision: 27286
Added:
plugins/diemPlugin/trunk/dmAdminPlugin/web/js/dmAdminPing.js
plugins/diemPlugin/trunk/dmCorePlugin/lib/model/doctrine/PluginDmLock.class.php
plugins/diemPlugin/trunk/dmCorePlugin/lib/model/doctrine/PluginDmLockTable.class.php
plugins/diemPlugin/trunk/dmCorePlugin/web/js/dmCorePing.js
Modified:
plugins/diemPlugin/trunk/dmAdminPlugin/config/dm/assets.yml
plugins/diemPlugin/trunk/dmAdminPlugin/data/generator/dmAdminDoctrineModule/dmAdmin/template/templates/_form.php
plugins/diemPlugin/trunk/dmAdminPlugin/lib/filter/dmAdminInitFilter.php
plugins/diemPlugin/trunk/dmAdminPlugin/lib/response/asset/dmAdminAssetConfig.php
plugins/diemPlugin/trunk/dmAdminPlugin/lib/view/html/layout/dmAdminLayoutHelper.php
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmInterface/templates/_toolBar.php
plugins/diemPlugin/trunk/dmAdminPlugin/web/css/bars.css
plugins/diemPlugin/trunk/dmAdminPlugin/web/css/flash.css
plugins/diemPlugin/trunk/dmAdminPlugin/web/js/dmAdminCtrl.js
plugins/diemPlugin/trunk/dmCorePlugin/config/dm/assets.yml
plugins/diemPlugin/trunk/dmCorePlugin/config/dm/config.yml
plugins/diemPlugin/trunk/dmCorePlugin/config/doctrine/schema.yml
plugins/diemPlugin/trunk/dmCorePlugin/data/dm/i18n/en_fr.yml
plugins/diemPlugin/trunk/dmCorePlugin/lib/filter/dmFilter.php
plugins/diemPlugin/trunk/dmCorePlugin/lib/filter/dmInitFilter.php
plugins/diemPlugin/trunk/dmCorePlugin/lib/view/html/layout/dmCoreLayoutHelper.php
plugins/diemPlugin/trunk/dmCorePlugin/modules/dmCore/config/security.yml
plugins/diemPlugin/trunk/dmCorePlugin/modules/dmCore/lib/BasedmCoreActions.class.php
plugins/diemPlugin/trunk/dmCorePlugin/web/css/mediaBar.css
plugins/diemPlugin/trunk/dmCorePlugin/web/css/pageBar.css
plugins/diemPlugin/trunk/dmCorePlugin/web/js/dmCoreEditCtrl.js
plugins/diemPlugin/trunk/dmFrontPlugin/lib/filter/dmFrontInitFilter.php
plugins/diemPlugin/trunk/dmFrontPlugin/web/css/toolBar.css
Log:
[Diem]
- implemented real-time resource locks [NEED DOCTRINE MIGRATION]
- fixed editing style for webkit based browsers
- updated french translations
- cleaned init filters
Modified: plugins/diemPlugin/trunk/dmAdminPlugin/config/dm/assets.yml
===================================================================
--- plugins/diemPlugin/trunk/dmAdminPlugin/config/dm/assets.yml 2010-01-28
19:44:36 UTC (rev 27285)
+++ plugins/diemPlugin/trunk/dmAdminPlugin/config/dm/assets.yml 2010-01-28
19:52:10 UTC (rev 27286)
@@ -21,6 +21,7 @@
history: dmAdminHistoryCtrl
sitemap: dmAdminSitemap
diagram: dmAdminDiagram
+ ping: dmAdminPing
css:
Modified:
plugins/diemPlugin/trunk/dmAdminPlugin/data/generator/dmAdminDoctrineModule/dmAdmin/template/templates/_form.php
===================================================================
---
plugins/diemPlugin/trunk/dmAdminPlugin/data/generator/dmAdminDoctrineModule/dmAdmin/template/templates/_form.php
2010-01-28 19:44:36 UTC (rev 27285)
+++
plugins/diemPlugin/trunk/dmAdminPlugin/data/generator/dmAdminDoctrineModule/dmAdmin/template/templates/_form.php
2010-01-28 19:52:10 UTC (rev 27286)
@@ -3,6 +3,8 @@
<div class="sf_admin_form">
+ <div class="dm_active_locks"></div>
+
[?php $formActions = get_partial('<?php echo $this->getModuleName()
?>/form_action_bar', array('<?php echo $this->getSingularName() ?>' => $<?php
echo $this->getSingularName() ?>, 'form' => $form, 'configuration' =>
$configuration, 'helper' => $helper, 'nearRecords' => $nearRecords)); ?]
[?php echo $form->renderFormTag(url_for(
Modified:
plugins/diemPlugin/trunk/dmAdminPlugin/lib/filter/dmAdminInitFilter.php
===================================================================
--- plugins/diemPlugin/trunk/dmAdminPlugin/lib/filter/dmAdminInitFilter.php
2010-01-28 19:44:36 UTC (rev 27285)
+++ plugins/diemPlugin/trunk/dmAdminPlugin/lib/filter/dmAdminInitFilter.php
2010-01-28 19:52:10 UTC (rev 27286)
@@ -16,20 +16,20 @@
$this->loadAssetConfig();
+ $this->updateLock();
+
$filterChain->execute();
-
- $response = $this->context->getResponse();
// If response has no title, generate one with the H1
- if ($response->isHtmlForHuman() && !$response->getTitle())
+ if ($this->response->isHtmlForHuman() && !$this->response->getTitle())
{
- preg_match('|<h1[^>]*>(.*)</h1>|iuUx', $response->getContent(),
$matches);
+ preg_match('|<h1[^>]*>(.*)</h1>|iuUx', $this->response->getContent(),
$matches);
if (isset($matches[1]))
{
$title = 'Admin : '.strip_tags($matches[1]).' -
'.dmConfig::get('site_name');
- $response->setContent(str_replace('<title></title>',
'<title>'.$title.'</title>', $response->getContent()));
+ $this->response->setContent(str_replace('<title></title>',
'<title>'.$title.'</title>', $this->response->getContent()));
}
}
}
Modified:
plugins/diemPlugin/trunk/dmAdminPlugin/lib/response/asset/dmAdminAssetConfig.php
===================================================================
---
plugins/diemPlugin/trunk/dmAdminPlugin/lib/response/asset/dmAdminAssetConfig.php
2010-01-28 19:44:36 UTC (rev 27285)
+++
plugins/diemPlugin/trunk/dmAdminPlugin/lib/response/asset/dmAdminAssetConfig.php
2010-01-28 19:52:10 UTC (rev 27286)
@@ -49,10 +49,12 @@
'core.toolBar',
'core.pageBar',
'core.mediaBar',
+ 'core.ping',
'admin.ctrl',
'admin.toolBar',
'admin.pageBar',
- 'admin.mediaBar'
+ 'admin.mediaBar',
+ 'admin.ping'
);
}
}
\ No newline at end of file
Modified:
plugins/diemPlugin/trunk/dmAdminPlugin/lib/view/html/layout/dmAdminLayoutHelper.php
===================================================================
---
plugins/diemPlugin/trunk/dmAdminPlugin/lib/view/html/layout/dmAdminLayoutHelper.php
2010-01-28 19:44:36 UTC (rev 27285)
+++
plugins/diemPlugin/trunk/dmAdminPlugin/lib/view/html/layout/dmAdminLayoutHelper.php
2010-01-28 19:52:10 UTC (rev 27286)
@@ -48,5 +48,13 @@
return $html;
}
+ protected function getJavascriptConfig()
+ {
+ $config = parent::getJavascriptConfig();
+
+ $config['record_id'] =
$this->serviceContainer->getService('request')->getParameter('pk', 0);
+ return $config;
+ }
+
}
\ No newline at end of file
Modified:
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmInterface/templates/_toolBar.php
===================================================================
---
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmInterface/templates/_toolBar.php
2010-01-28 19:44:36 UTC (rev 27285)
+++
plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmInterface/templates/_toolBar.php
2010-01-28 19:52:10 UTC (rev 27286)
@@ -4,15 +4,11 @@
echo £link('dmAuth/signout')->textTitle($sf_user->getUsername().' :
'.__('Logout'))->set('.widget16.s16block.s16_signout');
-// echo £link()->textTitle(__('Home'))->set('.widget16.s16block.s16_home');
-
if ($sf_user->can('clear_cache'))
{
echo £link('dmCore/refresh')->textTitle(__('Update
project'))->set('.dm_refresh_link.widget16.s16block.s16_clear');
}
-// echo £link('dmCodeEditor/index')->textTitle(__('Code
Editor'))->set('.widget16.s16block.s16_code_editor');
-
echo £('div.dm_menu.widget16', $menu->render());
if (isset($cultureSelect))
@@ -30,6 +26,8 @@
}
echo £link('app:front')->textTitle(__('Go to site'))->set('.widget16.ml10');
+
+ echo £('div.dm_active_users');
if (sfConfig::get('sf_web_debug'))
{
Modified: plugins/diemPlugin/trunk/dmAdminPlugin/web/css/bars.css
===================================================================
--- plugins/diemPlugin/trunk/dmAdminPlugin/web/css/bars.css 2010-01-28
19:44:36 UTC (rev 27285)
+++ plugins/diemPlugin/trunk/dmAdminPlugin/web/css/bars.css 2010-01-28
19:52:10 UTC (rev 27286)
@@ -1,6 +1,7 @@
#dm_tool_bar {
top: 0;
-moz-box-shadow: 0 4px 4px #888;
+ -webkit-box-shadow: 0 4px 4px #888;
}
#dm_media_bar {
@@ -65,6 +66,7 @@
overflow: auto;
background: #fff;
-moz-box-shadow: 4px 4px 4px #888;
+ -webkit-box-shadow: 4px 4px 4px #888;
}
#dm_tool_bar ul.level0 > li.ui-state-active ul.level1 {
@@ -132,4 +134,20 @@
bottom: 0;
background: url(../../core/images/monitor_bar_bg.png) bottom left no-repeat;
width: 100%;
+}
+
+#dm_tool_bar div.dm_active_users {
+ margin-left: 5px;
+}
+
+#dm_tool_bar div.dm_active_users span {
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ background: #FFFFFF;
+ color: #000000;
+ float: left;
+ margin-top: 5px;
+ margin-left: 5px;
+ opacity: 0.7;
+ padding: 2px 5px;
}
\ No newline at end of file
Modified: plugins/diemPlugin/trunk/dmAdminPlugin/web/css/flash.css
===================================================================
--- plugins/diemPlugin/trunk/dmAdminPlugin/web/css/flash.css 2010-01-28
19:44:36 UTC (rev 27285)
+++ plugins/diemPlugin/trunk/dmAdminPlugin/web/css/flash.css 2010-01-28
19:52:10 UTC (rev 27286)
@@ -1,13 +1,17 @@
-#flash {
+#flash, div.dm_active_locks {
margin-bottom: 5px;
cursor: pointer;
}
-#flash li.flash {
+#flash li.flash,
+div.dm_active_locks span {
border: 1px solid;
padding: 5px;
margin-top: 5px;
color: #333;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ display: block;
}
#flash li.info {
@@ -15,7 +19,8 @@
border-color: #CAD3A6;
}
-#flash li.alert {
+#flash li.alert,
+div.dm_active_locks span {
background: #F8F2B7 url(../images/flash/yellow.gif) repeat-x top left;
border-color: #DBD6A1;
}
Modified: plugins/diemPlugin/trunk/dmAdminPlugin/web/js/dmAdminCtrl.js
===================================================================
--- plugins/diemPlugin/trunk/dmAdminPlugin/web/js/dmAdminCtrl.js
2010-01-28 19:44:36 UTC (rev 27285)
+++ plugins/diemPlugin/trunk/dmAdminPlugin/web/js/dmAdminCtrl.js
2010-01-28 19:52:10 UTC (rev 27286)
@@ -30,6 +30,8 @@
this.autoLoading();
this.checkVersion();
+
+ this.launchPing();
},
checkVersion: function()
Added: plugins/diemPlugin/trunk/dmAdminPlugin/web/js/dmAdminPing.js
===================================================================
--- plugins/diemPlugin/trunk/dmAdminPlugin/web/js/dmAdminPing.js
(rev 0)
+++ plugins/diemPlugin/trunk/dmAdminPlugin/web/js/dmAdminPing.js
2010-01-28 19:52:10 UTC (rev 27286)
@@ -0,0 +1,49 @@
+(function($)
+{
+
+ $.dm.ping = $.extend($.dm.corePing, {
+
+ users: '',
+ locks: '',
+
+ init: function(options)
+ {
+ self = this;
+
+ self.initCore(options);
+ },
+
+ pong: function(data)
+ {
+ var self = $.dm.ping;
+
+ if(data.users != self.users)
+ {
+ self.renderUsers(data.users.split('|'));
+ self.users = data.users;
+ }
+
+ if(data.locks != self.locks)
+ {
+ self.renderLocks(data.locks.split('|'));
+ self.locks = data.locks;
+ }
+
+ setTimeout(self.ping, self.options.delay);
+ },
+
+ renderUsers: function(users)
+ {
+ $('#dm_tool_bar
div.dm_active_users').html('<span>'+users.join('</span><span>')+'</span>');
+ },
+
+ renderLocks: function(locks)
+ {
+ if($locks = $('#dm_admin_content div.dm_active_locks').orNot())
+ {
+ $locks.html(locks[0] ? '<span>'+locks.join('</span><span>')+'</span>'
: '');
+ }
+ }
+ });
+
+})(jQuery);
Modified: plugins/diemPlugin/trunk/dmCorePlugin/config/dm/assets.yml
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/config/dm/assets.yml 2010-01-28
19:44:36 UTC (rev 27285)
+++ plugins/diemPlugin/trunk/dmCorePlugin/config/dm/assets.yml 2010-01-28
19:52:10 UTC (rev 27286)
@@ -14,6 +14,7 @@
mediaBar: dmCoreMediaBar
auth: dmCoreAuth
codeArea: dmCoreCodeArea
+ ping: dmCorePing
lib:
symfony_debug: symfony/debug
Modified: plugins/diemPlugin/trunk/dmCorePlugin/config/dm/config.yml
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/config/dm/config.yml 2010-01-28
19:44:36 UTC (rev 27285)
+++ plugins/diemPlugin/trunk/dmCorePlugin/config/dm/config.yml 2010-01-28
19:52:10 UTC (rev 27286)
@@ -50,6 +50,7 @@
security:
remember_cookie_name: # defaults to
"dm_remember_%project_name%"
remember_key_expiration_age: # defaults to 15 days
+ active_user_timeout: 10 # time in seconds to consider a user
is no more active
###### dm internal config ######
Modified: plugins/diemPlugin/trunk/dmCorePlugin/config/doctrine/schema.yml
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/config/doctrine/schema.yml
2010-01-28 19:44:36 UTC (rev 27285)
+++ plugins/diemPlugin/trunk/dmCorePlugin/config/doctrine/schema.yml
2010-01-28 19:52:10 UTC (rev 27286)
@@ -168,6 +168,27 @@
header: { type: string(60000) }
description: { type: string(60000) }
+DmLock:
+ columns:
+ user_id: { type: integer, notnull: true }
+ user_name: { type: string(255), notnull: true }
+ module: { type: string(127), notnull: true }
+ action: { type: string(127), notnull: true }
+ record_id: { type: integer, unsigned: true, notnull: true,
default: 0 }
+ time: { type: integer, notnull: true }
+ app: { type: string(127), notnull: true }
+ url: { type: string(255), notnull: true }
+ culture: { type: string(15), notnull: true }
+ indexes:
+ dmLockIndex:
+ fields: [ user_id, module, action, record_id ]
+ type: unique
+ relations:
+ User:
+ class: DmUser
+ local: user_id
+ onDelete: CASCADE
+
# SEO SCHEMA
DmAutoSeo:
Modified: plugins/diemPlugin/trunk/dmCorePlugin/data/dm/i18n/en_fr.yml
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/data/dm/i18n/en_fr.yml
2010-01-28 19:44:36 UTC (rev 27285)
+++ plugins/diemPlugin/trunk/dmCorePlugin/data/dm/i18n/en_fr.yml
2010-01-28 19:52:10 UTC (rev 27286)
@@ -400,4 +400,5 @@
"Paste": "Coller"
"Drag & drop links here from the left PAGE panel": "Glisser-déposer une page
ici depuis le panneau PAGES"
"Click to edit": "Cliquer pour modifier"
-"Code generation": "Génération du code"
\ No newline at end of file
+"Code generation": "Génération du code"
+"%user% is browsing this page, you should not modify it now.": "%user% est
déjà sur cette page, vous ne devriez pas la modifier maintenant."
\ No newline at end of file
Modified: plugins/diemPlugin/trunk/dmCorePlugin/lib/filter/dmFilter.php
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/lib/filter/dmFilter.php
2010-01-28 19:44:36 UTC (rev 27285)
+++ plugins/diemPlugin/trunk/dmCorePlugin/lib/filter/dmFilter.php
2010-01-28 19:52:10 UTC (rev 27286)
@@ -3,7 +3,9 @@
abstract class dmFilter extends sfFilter
{
protected
- $request;
+ $request,
+ $response,
+ $user;
/**
* Initializes this Filter.
@@ -16,6 +18,8 @@
public function initialize($context, $parameters = array())
{
$this->request = $context->getRequest();
+ $this->response = $context->getResponse();
+ $this->user = $context->getUser();
return parent::initialize($context, $parameters);
}
Modified: plugins/diemPlugin/trunk/dmCorePlugin/lib/filter/dmInitFilter.php
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/lib/filter/dmInitFilter.php
2010-01-28 19:44:36 UTC (rev 27285)
+++ plugins/diemPlugin/trunk/dmCorePlugin/lib/filter/dmInitFilter.php
2010-01-28 19:52:10 UTC (rev 27286)
@@ -3,11 +3,29 @@
abstract class dmInitFilter extends dmFilter
{
+ protected function updateLock()
+ {
+ if(class_exists('DmLock') && $this->user->can('admin') &&
$this->response->isHtmlForHuman())
+ {
+ dmDb::table('DmLock')->update(array(
+ 'user_id' => $this->user->getUserId(),
+ 'user_name' => $this->user->getUser()->get('username'),
+ 'time' => $_SERVER['REQUEST_TIME'],
+ 'app' => sfConfig::get('sf_app'),
+ 'module' => $this->request->getParameter('module'),
+ 'action' => $this->request->getParameter('action'),
+ 'record_id' => $this->request->getParameter('pk', 0),
+ 'culture' => $this->user->getCulture(),
+ 'url' => str_replace($this->request->getAbsoluteUrlRoot(), '',
$this->request->getUri())
+ ));
+ }
+ }
+
protected function loadAssetConfig()
{
- if ($this->context->getResponse()->isHtmlForHuman())
+ if ($this->response->isHtmlForHuman())
{
-
$this->context->getResponse()->setAssetConfig($this->context->get('asset_config'));
+ $this->response->setAssetConfig($this->context->get('asset_config'));
}
}
@@ -27,7 +45,7 @@
$appUrlKey = implode('-', array(sfConfig::get('sf_app'),
sfConfig::get('sf_environment')));
- $appUrl =
$this->request->getUriPrefix().$this->context->getRequest()->getScriptName();
+ $appUrl =
$this->request->getUriPrefix().$this->request->getScriptName();
if (!isset($knownBaseUrls[$appUrlKey]) || $knownBaseUrls[$appUrlKey] !==
$appUrl)
{
Added:
plugins/diemPlugin/trunk/dmCorePlugin/lib/model/doctrine/PluginDmLock.class.php
===================================================================
---
plugins/diemPlugin/trunk/dmCorePlugin/lib/model/doctrine/PluginDmLock.class.php
(rev 0)
+++
plugins/diemPlugin/trunk/dmCorePlugin/lib/model/doctrine/PluginDmLock.class.php
2010-01-28 19:52:10 UTC (rev 27286)
@@ -0,0 +1,16 @@
+<?php
+
+/**
+ * PluginDmLock
+ *
+ * This class has been auto-generated by the Doctrine ORM Framework
+ *
+ * @package ##PACKAGE##
+ * @subpackage ##SUBPACKAGE##
+ * @author ##NAME## <##EMAIL##>
+ * @version SVN: $Id: Builder.php 7021 2010-01-12 20:39:49Z lsmith $
+ */
+abstract class PluginDmLock extends BaseDmLock
+{
+
+}
\ No newline at end of file
Added:
plugins/diemPlugin/trunk/dmCorePlugin/lib/model/doctrine/PluginDmLockTable.class.php
===================================================================
---
plugins/diemPlugin/trunk/dmCorePlugin/lib/model/doctrine/PluginDmLockTable.class.php
(rev 0)
+++
plugins/diemPlugin/trunk/dmCorePlugin/lib/model/doctrine/PluginDmLockTable.class.php
2010-01-28 19:52:10 UTC (rev 27286)
@@ -0,0 +1,100 @@
+<?php
+/**
+ */
+class PluginDmLockTable extends myDoctrineTable
+{
+
+ /*
+ * @return array usernames of current active users on the same page
+ */
+ public function getLocks(array $data)
+ {
+ $locks = dmDb::pdo(
+ sprintf(
+ 'SELECT DISTINCT a.user_name FROM %s a WHERE a.user_id != ? AND
a.module = ? AND a.action = ? AND a.record_id = ? ORDER BY a.user_name ASC',
+ $this->getTableName()
+ ),
+ array($data['user_id'], $data['module'], $data['action'],
$data['record_id'])
+ )->fetchAll(PDO::FETCH_NUM);
+
+ return $this->toUsernames($locks);
+ }
+
+ /*
+ * @return array usernames of current active users
+ */
+ public function getUserNames()
+ {
+ $locks = dmDb::pdo(
+ sprintf('SELECT DISTINCT a.user_name FROM %s a ORDER BY a.user_name
ASC', $this->getTableName()),
+ array()
+ )->fetchAll(PDO::FETCH_NUM);
+
+ return $this->toUsernames($locks);
+ }
+
+ protected function toUsernames(array $locks)
+ {
+ $usernames = array();
+ foreach($locks as $lock)
+ {
+ $usernames[] = $lock[0];
+ }
+
+ return $usernames;
+ }
+
+ /*
+ * When a user displays a page
+ */
+ public function update(array $data)
+ {
+ $lock = $this->findOneByData($data);
+
+ if(!$lock)
+ {
+ $lock = $this->create($data)->saveGet();
+ }
+ else
+ {
+ $lock->merge($data)->save();
+ }
+
+ $this->removeOldLocks();
+ }
+
+ /*
+ * When receiving an ajax ping
+ */
+ public function ping(array $data)
+ {
+ $lock = $this->findOneByData($data);
+
+ if(!$lock)
+ {
+ throw new dmException('No lock for '.implode(', ', $data));
+ }
+
+ $lock->merge($data)->save();
+
+ $this->removeOldLocks();
+ }
+
+ public function removeOldLocks()
+ {
+ dmDb::pdo(
+ sprintf('DELETE FROM %s WHERE time < ?', $this->getTableName()),
+ array($_SERVER['REQUEST_TIME'] -
sfConfig::get('dm_security_active_user_timeout', 10))
+ );
+ }
+
+ public function findOneByData(array $data)
+ {
+ return $this->createQuery('a')
+ ->where('a.user_id = ?', $data['user_id'])
+ ->andWhere('a.module = ?', $data['module'])
+ ->andWhere('a.action = ?', $data['action'])
+ ->andWhere('a.record_id = ?', $data['record_id'])
+ ->fetchRecord();
+ }
+}
\ No newline at end of file
Modified:
plugins/diemPlugin/trunk/dmCorePlugin/lib/view/html/layout/dmCoreLayoutHelper.php
===================================================================
---
plugins/diemPlugin/trunk/dmCorePlugin/lib/view/html/layout/dmCoreLayoutHelper.php
2010-01-28 19:44:36 UTC (rev 27285)
+++
plugins/diemPlugin/trunk/dmCorePlugin/lib/view/html/layout/dmCoreLayoutHelper.php
2010-01-28 19:52:10 UTC (rev 27286)
@@ -217,7 +217,8 @@
'script_name' => sfConfig::get('sf_no_script_name') ?
trim($requestContext['relative_url_root'], '/').'/' :
$requestContext['script_name'].'/',
'debug' => sfConfig::get('sf_debug') ? true : false,
'culture' =>
$this->serviceContainer->getParameter('user.culture'),
- 'module' =>
$this->serviceContainer->getParameter('controller.module')
+ 'module' =>
$this->serviceContainer->getParameter('controller.module'),
+ 'action' =>
$this->serviceContainer->getParameter('controller.action')
));
}
Modified:
plugins/diemPlugin/trunk/dmCorePlugin/modules/dmCore/config/security.yml
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/modules/dmCore/config/security.yml
2010-01-28 19:44:36 UTC (rev 27285)
+++ plugins/diemPlugin/trunk/dmCorePlugin/modules/dmCore/config/security.yml
2010-01-28 19:52:10 UTC (rev 27286)
@@ -12,4 +12,8 @@
thumbnail:
is_secure: true
+ credential: admin
+
+ping:
+ is_secure: true
credential: admin
\ No newline at end of file
Modified:
plugins/diemPlugin/trunk/dmCorePlugin/modules/dmCore/lib/BasedmCoreActions.class.php
===================================================================
---
plugins/diemPlugin/trunk/dmCorePlugin/modules/dmCore/lib/BasedmCoreActions.class.php
2010-01-28 19:44:36 UTC (rev 27285)
+++
plugins/diemPlugin/trunk/dmCorePlugin/modules/dmCore/lib/BasedmCoreActions.class.php
2010-01-28 19:52:10 UTC (rev 27286)
@@ -2,6 +2,42 @@
class BasedmCoreActions extends dmBaseActions
{
+
+ public function executePing(dmWebRequest $request)
+ {
+ $recordId = $this->request->getParameter('record_id', 0);
+
+ $data = array(
+ 'user_id' => $this->getUser()->getUserId(),
+ 'time' => $_SERVER['REQUEST_TIME'],
+ 'app' => sfConfig::get('sf_app'),
+ 'module' => $this->request->getParameter('sf_module'),
+ 'action' => $this->request->getParameter('sf_action'),
+ 'record_id' => $recordId,
+ 'culture' => $this->getUser()->getCulture()
+ );
+
+ dmDb::table('DmLock')->ping($data);
+
+ $users = dmDb::table('DmLock')->getUserNames();
+ $locks = $recordId ? dmDb::table('DmLock')->getLocks($data) : array();
+
+ if(!empty($locks))
+ {
+ foreach($locks as $index => $lock)
+ {
+ $locks[$index] = $this->getService('i18n')->__('%user% is browsing
this page, you should not modify it now.', array(
+ '%user%' => '<strong>'.$lock.'</strong>'
+ ));
+ }
+ }
+
+ return $this->renderJson(array(
+ 'users' => implode('|', $users),
+ 'locks' => implode('|', $locks)
+ ));
+ }
+
public function executeThumbnail(dmWebRequest $request)
{
$tag = $this->getHelper()->£media($request->getParameter('source'));
Modified: plugins/diemPlugin/trunk/dmCorePlugin/web/css/mediaBar.css
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/web/css/mediaBar.css 2010-01-28
19:44:36 UTC (rev 27285)
+++ plugins/diemPlugin/trunk/dmCorePlugin/web/css/mediaBar.css 2010-01-28
19:52:10 UTC (rev 27286)
@@ -21,6 +21,7 @@
overflow: hidden;
font-size: 11px;
-moz-box-shadow: -3px 0 4px #888;
+ -webkit-box-shadow: -3px 0 4px #888;
}
#dm_media_bar_toggler {
Modified: plugins/diemPlugin/trunk/dmCorePlugin/web/css/pageBar.css
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/web/css/pageBar.css 2010-01-28
19:44:36 UTC (rev 27285)
+++ plugins/diemPlugin/trunk/dmCorePlugin/web/css/pageBar.css 2010-01-28
19:52:10 UTC (rev 27286)
@@ -21,6 +21,7 @@
overflow: hidden;
font-size: 11px;
-moz-box-shadow: 3px 0 4px #888;
+ -webkit-box-shadow: 3px 0 4px #888;
}
#dm_page_bar_toggler {
Modified: plugins/diemPlugin/trunk/dmCorePlugin/web/js/dmCoreEditCtrl.js
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/web/js/dmCoreEditCtrl.js
2010-01-28 19:44:36 UTC (rev 27285)
+++ plugins/diemPlugin/trunk/dmCorePlugin/web/js/dmCoreEditCtrl.js
2010-01-28 19:52:10 UTC (rev 27286)
@@ -2,6 +2,11 @@
{
$.dm.coreEditCtrl = $.extend($.dm.coreCtrl, {
+
+ launchPing: function()
+ {
+ $.dm.ping.init(this.options);
+ },
liveEvents: function()
{
@@ -12,6 +17,8 @@
{
return false;
}
+
+ return true;
});
$('div.ui-dialog a.close_dialog').live('click', function()
Added: plugins/diemPlugin/trunk/dmCorePlugin/web/js/dmCorePing.js
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/web/js/dmCorePing.js
(rev 0)
+++ plugins/diemPlugin/trunk/dmCorePlugin/web/js/dmCorePing.js 2010-01-28
19:52:10 UTC (rev 27286)
@@ -0,0 +1,52 @@
+(function($)
+{
+
+ $.dm.corePing = {
+
+ options: {},
+
+ initCore: function(options)
+ {
+ var self = $.dm.ping;
+
+ self.options = $.extend({
+ delay: 3000,
+ url: $.dm.ctrl.getHref('+/dmCore/ping')
+ }, options || {});
+
+ self.ping();
+ },
+
+ ping: function()
+ {
+ var self = $.dm.ping;
+
+ $.ajax({
+ dataType: 'json',
+ url: self.options.url,
+ data: self.getPingData(),
+ success: self.pong,
+ error: self.pong
+ });
+ },
+
+ getPingData: function()
+ {
+ var self = $.dm.ping;
+
+ return {
+ sf_module: self.options.module,
+ sf_action: self.options.action,
+ record_id: self.options.record_id
+ };
+ },
+
+ pong: function(data)
+ {
+ var self = $.dm.ping;
+
+ setTimeout(self.ping, self.options.delay);
+ }
+ };
+
+})(jQuery);
\ No newline at end of file
Modified:
plugins/diemPlugin/trunk/dmFrontPlugin/lib/filter/dmFrontInitFilter.php
===================================================================
--- plugins/diemPlugin/trunk/dmFrontPlugin/lib/filter/dmFrontInitFilter.php
2010-01-28 19:44:36 UTC (rev 27285)
+++ plugins/diemPlugin/trunk/dmFrontPlugin/lib/filter/dmFrontInitFilter.php
2010-01-28 19:52:10 UTC (rev 27286)
@@ -37,10 +37,10 @@
{
if (($page = $this->context->getPage()) && ($h1 = $page->_getI18n('h1')))
{
- $this->context->getResponse()->setContent(preg_replace(
+ $this->response->setContent(preg_replace(
'|<h1(.*)>.*</h1>|iuU',
'<h1$1>'.$h1.'</h1>',
- $this->context->getResponse()->getContent()
+ $this->response->getContent()
));
}
}
Modified: plugins/diemPlugin/trunk/dmFrontPlugin/web/css/toolBar.css
===================================================================
--- plugins/diemPlugin/trunk/dmFrontPlugin/web/css/toolBar.css 2010-01-28
19:44:36 UTC (rev 27285)
+++ plugins/diemPlugin/trunk/dmFrontPlugin/web/css/toolBar.css 2010-01-28
19:52:10 UTC (rev 27286)
@@ -80,6 +80,7 @@
overflow: auto;
background: #fff;
-moz-box-shadow: 4px -4px 4px #888;
+ -webkit-box-shadow: 4px -4px 4px #888;
}
#dm_tool_bar ul.level0 > li.ui-state-active ul.level1 {
--
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.