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'];