diff --git a/admin/inc/class.uicurrentsessions.inc.php b/admin/inc/class.uicurrentsessions.inc.php
new file mode 100644
index 0000000000..06cf6c3d6e
--- /dev/null
+++ b/admin/inc/class.uicurrentsessions.inc.php
@@ -0,0 +1,168 @@
+ *
+ * -------------------------------------------- *
+ * This program is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU General Public License as published by the *
+ * Free Software Foundation; either version 2 of the License, or (at your *
+ * option) any later version. *
+ \**************************************************************************/
+
+ /* $Id$ */
+
+ class uicurrentsessions
+ {
+ var $template;
+ var $bo;
+ var $public_functions = array(
+ 'list_sessions' => True,
+ 'kill' => True
+ );
+
+ function uicurrentsessions()
+ {
+ if ($GLOBALS['phpgw']->acl->check('current_sessions_access',1,'admin'))
+ {
+ $GLOBALS['phpgw']->redirect_link('/index.php');
+ }
+ $this->template = createobject('phpgwapi.Template',PHPGW_APP_TPL);
+ $this->bo = createobject('admin.bocurrentsessions');
+ $this->nextmatchs = createobject('phpgwapi.nextmatchs');
+ }
+
+ function header()
+ {
+ if(!@is_object($GLOBALS['phpgw']->js))
+ {
+ $GLOBALS['phpgw']->js = CreateObject('phpgwapi.javascript');
+ }
+ $GLOBALS['phpgw']->js->validate_file('jscode','openwindow','admin');
+ $GLOBALS['phpgw']->common->phpgw_header();
+ echo parse_navbar();
+ }
+
+ function store_location($info)
+ {
+ $GLOBALS['phpgw']->session->appsession('currentsessions_session_data','admin',$info);
+ }
+
+ function list_sessions()
+ {
+ $info = $GLOBALS['phpgw']->session->appsession('currentsessions_session_data','admin');
+ if (! is_array($info))
+ {
+ $info = array(
+ 'start' => 0,
+ 'sort' => 'asc',
+ 'order' => 'session_dla'
+ );
+ $this->store_location($info);
+ }
+
+ if ($GLOBALS['start'] || $GLOBALS['sort'] || $GLOBALS['order'])
+ {
+ if ($GLOBALS['start'] == 0 || $GLOBALS['start'] && $GLOBALS['start'] != $info['start'])
+ {
+ $info['start'] = $GLOBALS['start'];
+ }
+
+ if ($GLOBALS['sort'] && $GLOBALS['sort'] != $info['sort'])
+ {
+ $info['sort'] = $GLOBALS['sort'];
+ }
+
+ if ($GLOBALS['order'] && $GLOBALS['order'] != $info['order'])
+ {
+ $info['order'] = $GLOBALS['order'];
+ }
+
+ $this->store_location($info);
+ }
+
+ $GLOBALS['phpgw_info']['flags']['app_header'] = lang('Admin').' - '.lang('List of current users');
+ $this->header();
+
+ $this->template->set_file('current','currentusers.tpl');
+ $this->template->set_block('current','list','list');
+ $this->template->set_block('current','row','row');
+
+ $can_view_action = !$GLOBALS['phpgw']->acl->check('current_sessions_access',2,'admin');
+ $can_view_ip = !$GLOBALS['phpgw']->acl->check('current_sessions_access',4,'admin');
+ $can_kill = !$GLOBALS['phpgw']->acl->check('current_sessions_access',8,'admin');
+
+ $total = $this->bo->total();
+
+ $this->template->set_var('bg_color',$GLOBALS['phpgw_info']['theme']['bg_color']);
+ $this->template->set_var('left_next_matchs',$this->nextmatchs->left('/admin/currentusers.php',$info['start'],$total));
+ $this->template->set_var('right_next_matchs',$this->nextmatchs->right('/admin/currentusers.php',$info['start'],$total));
+ $this->template->set_var('th_bg',$GLOBALS['phpgw_info']['theme']['th_bg']);
+
+ $this->template->set_var('sort_loginid',$this->nextmatchs->show_sort_order($info['sort'],'session_lid',$info['order'],
+ '/admin/currentusers.php',lang('LoginID')));
+ $this->template->set_var('sort_ip',$this->nextmatchs->show_sort_order($info['sort'],'session_ip',$info['order'],
+ '/admin/currentusers.php',lang('IP')));
+ $this->template->set_var('sort_login_time',$this->nextmatchs->show_sort_order($info['sort'],'session_logintime',$info['order'],
+ '/admin/currentusers.php',lang('Login Time')));
+ $this->template->set_var('sort_action',$this->nextmatchs->show_sort_order($info['sort'],'session_action',$info['order'],
+ '/admin/currentusers.php',lang('Action')));
+ $this->template->set_var('sort_idle',$this->nextmatchs->show_sort_order($info['sort'],'session_dla',$info['order'],
+ '/admin/currentusers.php',lang('idle')));
+ $this->template->set_var('lang_kill',lang('Kill'));
+
+ $values = $this->bo->list_sessions($info['start'],$info['order'],$info['sort']);
+
+ while (list(,$value) = @each($values))
+ {
+ $this->nextmatchs->template_alternate_row_color($this->template);
+
+ $this->template->set_var('row_loginid',$value['session_lid']);
+
+ $this->template->set_var('row_ip',$can_view_ip?$value['session_ip']:' ');
+
+ $this->template->set_var('row_logintime',$value['session_logintime']);
+ $this->template->set_var('row_idle',$value['session_idle']);
+
+ if ($value['session_action'] && $can_view_action)
+ {
+ $this->template->set_var('row_action',$GLOBALS['phpgw']->strip_html($value['session_action']));
+ }
+ else
+ {
+ $this->template->set_var('row_action',' ');
+ }
+
+ if ($value['session_id'] != $GLOBALS['phpgw_info']['user']['sessionid'] && $can_kill)
+ {
+ $this->template->set_var('row_kill','' . lang('Kill').'');
+ }
+ else
+ {
+ $this->template->set_var('row_kill',' ');
+ }
+
+ $this->template->parse('rows','row',True);
+ }
+
+ $this->template->pfp('out','list');
+ }
+
+ function kill()
+ {
+ if ($GLOBALS['phpgw']->acl->check('current_sessions_access',8,'admin'))
+ {
+ $GLOBALS['phpgw']->redirect_link('/index.php');
+ }
+ $GLOBALS['phpgw_info']['flags']['app_header'] = lang('Admin').' - '.lang('Kill session');
+ $this->header();
+ $this->template->set_file('form','kill_session.tpl');
+
+ $this->template->set_var('lang_message',lang('Are you sure you want to kill this session ?'));
+ $this->template->set_var('link_no','' . lang('No') . '');
+ $this->template->set_var('link_yes','' . lang('Yes') . '');
+
+ $this->template->pfp('out','form');
+ }
+ }