Index: branches/RC/core/admin_templates/js/script.js
===================================================================
diff -u -N -r10326 -r10356
--- branches/RC/core/admin_templates/js/script.js (.../script.js) (revision 10326)
+++ branches/RC/core/admin_templates/js/script.js (.../script.js) (revision 10356)
@@ -91,6 +91,13 @@
submit_event($prefix_special, 'OnSetPerPage', null, null, $ajax);
}
+function set_refresh_interval($prefix_special, $refresh_interval, $ajax)
+{
+ set_form($prefix_special, $ajax);
+ set_hidden_field('refresh_interval', $refresh_interval);
+ submit_event($prefix_special, 'OnSetAutoRefreshInterval', null, null, $ajax);
+}
+
function submit_event(prefix_special, event, t, form_action, $ajax)
{
if (!Application.processHooks(prefix_special + ':' + event)) {
@@ -1376,17 +1383,21 @@
result.padding = padding;
result.borders = border;
+ result.outerHeight = obj.clientHeight + border[0] + border[2];
+ result.outerWidth = obj.clientHeight + border[1] + border[3];
+
return result;
}
-function findPos(obj) {
+function findPos(obj, with_scroll) {
+ if (!with_scroll) var with_scroll = false;
var curleft = curtop = 0;
if (obj.offsetParent) {
- curleft = obj.offsetLeft
- curtop = obj.offsetTop
+ curleft = obj.offsetLeft - (with_scroll ? obj.scrollLeft : 0)
+ curtop = obj.offsetTop - (with_scroll ? obj.scrollTop : 0)
while (obj = obj.offsetParent) {
- curleft += obj.offsetLeft
- curtop += obj.offsetTop
+ curleft += obj.offsetLeft - (with_scroll ? obj.scrollLeft : 0)
+ curtop += obj.offsetTop - (with_scroll ? obj.scrollTop : 0)
}
}
return [curleft,curtop];
Index: branches/RC/core/kernel/db/db_event_handler.php
===================================================================
diff -u -N -r10294 -r10356
--- branches/RC/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 10294)
+++ branches/RC/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 10356)
@@ -128,6 +128,9 @@
'OnExportProgress' => Array('self' => 'view|advanced:export'),
+ 'OnSetAutoRefreshInterval' => Array ('self' => 'view', 'subitem' => 'view'),
+ 'OnAutoRefreshToggle' => Array ('self' => 'view', 'subitem' => 'view'),
+
// theese event do not harm, but just in case check them too :)
'OnCancelEdit' => Array('self' => true, 'subitem' => true),
'OnCancel' => Array('self' => true, 'subitem' => true),
@@ -936,6 +939,42 @@
}
/**
+ * Sets grid refresh interval
+ *
+ * @param kEvent $event
+ */
+ function OnSetAutoRefreshInterval(&$event)
+ {
+ $refresh_interval = $this->Application->GetVar('refresh_interval');
+
+ $view_name = $this->Application->RecallVar($event->getPrefixSpecial().'_current_view');
+ $this->Application->StorePersistentVar($event->getPrefixSpecial().'_refresh_interval.'.$view_name, $refresh_interval);
+ }
+
+ /**
+ * Changes auto-refresh state for grid
+ *
+ * @param kEvent $event
+ */
+ function OnAutoRefreshToggle(&$event)
+ {
+ $refresh_intervals = $this->Application->ConfigValue('AutoRefreshIntervals');
+ if (!$refresh_intervals) {
+ return ;
+ }
+
+ $view_name = $this->Application->RecallVar($event->getPrefixSpecial().'_current_view');
+ $auto_refresh = $this->Application->RecallPersistentVar($event->getPrefixSpecial().'_auto_refresh.'.$view_name);
+
+ if ($auto_refresh === false) {
+ $refresh_intervals = explode(',', $refresh_intervals);
+ $this->Application->StorePersistentVar($event->getPrefixSpecial().'_refresh_interval.'.$view_name, $refresh_intervals[0]);
+ }
+
+ $this->Application->StorePersistentVar($event->getPrefixSpecial().'_auto_refresh.'.$view_name, $auto_refresh ? 0 : 1);
+ }
+
+ /**
* Creates needed sql query to load item,
* if no query is defined in config for
* special requested, then use default
Index: branches/RC/core/admin_templates/incs/menu_blocks.tpl
===================================================================
diff -u -N -r10326 -r10356
--- branches/RC/core/admin_templates/incs/menu_blocks.tpl (.../menu_blocks.tpl) (revision 10326)
+++ branches/RC/core/admin_templates/incs/menu_blocks.tpl (.../menu_blocks.tpl) (revision 10356)
@@ -3,26 +3,41 @@
- $Menus[''+'_filter_menu'].addItem(rs('.filter.', true), '', 'javascript:',);
+ $Menus[''].addItem(rs('.filter.', true), '', 'javascript:',);
+
+ $Menus[''].addItem(rs('.refresh_interval.'), '', 'javascript:set_refresh_interval("", , )', ['img/menu_dot.gif']);
+
+
- $Menus[''+'_filter_menu'].addSeparator();
+ $Menus[''].addSeparator();
-
+
// define ViewMenu
+
+ // auto refresh menu
+ $Menus[''+'_auto_refresh_menu'] = menuMgr.createMenu(rs('.auto_refresh.menu'));
+ $Menus[''+'_auto_refresh_menu'].applyBorder(false, false, false, false);
+ $Menus[''+'_auto_refresh_menu'].dropShadow("none");
+ $Menus[''+'_auto_refresh_menu'].showIcon = true;
+ $Menus[''+'_auto_refresh_menu'].addItem(rs('.auto_refresh.enabled'), '', 'javascript:submit_event("", "OnAutoRefreshToggle");', ['img/check_on.gif']);
+ $Menus[''+'_auto_refresh_menu'].addSeparator();
+
+
+
// filtring menu
$Menus[''+'_filter_menu'] = menuMgr.createMenu(rs('.filter.menu'));
$Menus[''+'_filter_menu'].applyBorder(false, false, false, false);
$Menus[''+'_filter_menu'].dropShadow("none");
$Menus[''+'_filter_menu'].showIcon = true;
- $Menus[''+'_filter_menu'].addItem(rs('.filter.all'), 'All','javascript:filters_remove_all("", );');
- $Menus[''+'_filter_menu'].addItem(rs('.filter.none'), 'None','javasript:filters_apply_all("", );');
+ $Menus[''+'_filter_menu'].addItem(rs('.filter.all'), '','javascript:filters_remove_all("", );');
+ $Menus[''+'_filter_menu'].addItem(rs('.filter.none'), '','javascript:filters_apply_all("", );');
$Menus[''+'_filter_menu'].addSeparator();
-
+
@@ -73,6 +88,10 @@
// $Menus[''+'_view_menu'].addItem(rs('.save_view'),'','javascript:myGrid.SaveWidths()');
+
+ $Menus[''+'_view_menu'].addItem(rs('.auto_refresh'), '', 'javascript:void()', null, true, null, rs('.auto_refresh.menu'), null);
+
+
$Menus[''+'_view_menu'].addItem(rs('.filters'), '', 'javascript:void()', null, true, null, rs('.filter.menu'), null);
Index: branches/RC/core/kernel/db/db_tag_processor.php
===================================================================
diff -u -N -r10116 -r10356
--- branches/RC/core/kernel/db/db_tag_processor.php (.../db_tag_processor.php) (revision 10116)
+++ branches/RC/core/kernel/db/db_tag_processor.php (.../db_tag_processor.php) (revision 10356)
@@ -70,8 +70,7 @@
$block_params['name'] = $params['spearator_block'];
$separator = $this->Application->ParseBlock($block_params);
$filter_menu = $this->Application->getUnitOption($this->Prefix,'FilterMenu');
- if(!$filter_menu)
- {
+ if (!$filter_menu) {
trigger_error('no filters defined for prefix '.$this->Prefix.', but DrawFilterMenu tag used', E_USER_WARNING);
return '';
}
@@ -80,9 +79,8 @@
$block_params['name'] = $params['item_block'];
$view_filter = $this->Application->RecallVar($this->getPrefixSpecial().'_view_filter');
- if($view_filter === false)
- {
- $event_params = Array('prefix'=>$this->Prefix,'special'=>$this->Special,'name'=>'OnRemoveFilters');
+ if ($view_filter === false) {
+ $event_params = Array ('prefix' => $this->Prefix, 'special' => $this->Special, 'name' => 'OnRemoveFilters');
$this->Application->HandleEvent( new kEvent($event_params) );
$view_filter = $this->Application->RecallVar($this->getPrefixSpecial().'_view_filter');
}
@@ -121,10 +119,94 @@
$filters[] = $this->Application->ParseBlock($block_params);
}
-
return implode('', $filters);
}
+ /**
+ * Draws auto-refresh submenu in View Menu.
+ *
+ * @param Array $params
+ * @return string
+ */
+ function DrawAutoRefreshMenu($params)
+ {
+ $refresh_intervals = $this->Application->ConfigValue('AutoRefreshIntervals');
+ if (!$refresh_intervals) {
+ trigger_error('no filters defined for prefix '.$this->Prefix.', but DrawAutoRefreshMenu tag used', E_USER_WARNING);
+ return '';
+ }
+
+ $refresh_intervals = explode(',', $refresh_intervals);
+ $view_name = $this->Application->RecallVar($this->getPrefixSpecial().'_current_view');
+ $current_refresh_interval = $this->Application->RecallPersistentVar($this->getPrefixSpecial().'_refresh_interval.'.$view_name);
+ if ($current_refresh_interval === false) {
+ // if no interval was selected before, then choose 1st interval
+ $current_refresh_interval = $refresh_intervals[0];
+ }
+
+ $ret = '';
+ $block_params = $this->prepareTagParams($params);
+ $block_params['name'] = $params['render_as'];
+
+ foreach ($refresh_intervals as $refresh_interval) {
+ $block_params['label'] = $this->_formatInterval($refresh_interval);
+ $block_params['refresh_interval'] = $refresh_interval;
+ $block_params['selected'] = $current_refresh_interval == $refresh_interval;
+ $ret .= $this->Application->ParseBlock($block_params);
+ }
+ return $ret;
+ }
+
+ /**
+ * Tells, that current grid is using auto refresh
+ *
+ * @param Array $params
+ * @return bool
+ */
+ function UseAutoRefresh($params)
+ {
+ $view_name = $this->Application->RecallVar($this->getPrefixSpecial().'_current_view');
+ return $this->Application->RecallPersistentVar($this->getPrefixSpecial().'_auto_refresh.'.$view_name);
+ }
+
+ /**
+ * Returns current grid refresh interval
+ *
+ * @param Array $params
+ * @return bool
+ */
+ function AutoRefreshInterval($params)
+ {
+ $view_name = $this->Application->RecallVar($this->getPrefixSpecial().'_current_view');
+ return $this->Application->RecallPersistentVar($this->getPrefixSpecial().'_refresh_interval.'.$view_name);
+ }
+
+ /**
+ * Formats time interval using given text for hours and minutes
+ *
+ * @param int $intervalmMinutes
+ * @param string $hour_text Text for hours
+ * @param string $min_text Text for minutes
+ * @return unknown
+ */
+ function _formatInterval($interval, $hour_text = 'h', $min_text = 'min')
+ {
+ // 65
+ $minutes = $interval % 60;
+ $hours = ($interval - $minutes) / 60;
+
+ $ret = '';
+ if ($hours) {
+ $ret .= $hours.$hour_text.' ';
+ }
+
+ if ($minutes) {
+ $ret .= $minutes.$min_text;
+ }
+
+ return $ret;
+ }
+
function IterateGridFields($params)
{
$mode = $params['mode'];