diff --git a/admin/inc/class.admin_accesslog.inc.php b/admin/inc/class.admin_accesslog.inc.php
index 205703a2e8..fc322d8cb0 100644
--- a/admin/inc/class.admin_accesslog.inc.php
+++ b/admin/inc/class.admin_accesslog.inc.php
@@ -100,11 +100,16 @@ class admin_accesslog
if ($GLOBALS['egw']->session->sessionid_access_log == $row['sessionid'] && $query['session_list'])
{
$readonlys['kill['.$row['sessionid'].']'] = $readonlys['selected['.$row['sessionid'].']'] = true;
+ $readonlys["kill[$row[sessionid]]"]= true;
+ $row['class'] .= ' rowNoDelete ';
}
// do not allow to delete access log off active sessions
if (!$row['lo'] && $row['session_dla'] > time()-$GLOBALS['egw_info']['server']['sessions_timeout'] && !$query['session_list'])
{
$readonlys['delete['.$row['sessionid'].']'] = $readonlys['selected['.$row['sessionid'].']'] = true;
+
+ $readonlys["delete[$row[sessionid]]"]= true;
+ $row['class'] .= ' rowNoDelete ';
}
unset($row['session_php']); // for security reasons, do NOT give real PHP sessionid to UI
}
@@ -128,7 +133,7 @@ class admin_accesslog
*/
function index(array $content=null, $msg='', $sessions_list=false)
{
- //_debug_array($content);
+
if (is_array($content)) $sessions_list = $content['nm']['session_list'];
// check if user has access to requested functionality
@@ -154,6 +159,8 @@ class admin_accesslog
//'default_cols' => // I columns to use if there's no user or default pref (! as first char uses all but the named columns), default all columns
'csv_fields' => false, // I false=disable csv export, true or unset=enable it with auto-detected fieldnames,
//or array with name=>label or name=>array('label'=>label,'type'=>type) pairs (type is a eT widget-type)
+ 'actions' => $this->get_actions($sessions_list),
+ 'row_id' => 'sessionid',
);
if ((int)$_GET['account_id'])
{
@@ -169,72 +176,147 @@ class admin_accesslog
}
$content['nm']['session_list'] = $sessions_list;
}
- elseif(isset($content['nm']['rows']['delete']) || isset($content['delete']))
+ error_log(__METHOD__. ' accesslog =>' . array2string($content['nm']['selected']));
+ if ($content['nm']['action'])
{
- if (isset($content['nm']['rows']['delete']))
+
+ if (!count($content['nm']['selected']) && !$content['nm']['select_all'])
{
- list($sessionid) = each($content['nm']['rows']['delete']);
- unset($content['nm']['rows']['delete']);
+ $msg = lang('You need to select some entries first!');
}
else
{
- unset($content['delete']);
- $sessionid = $content['nm']['rows']['selected'];
- }
- $del_msg= $this->so->delete(array('sessionid' => $sessionid));
- if ($sessionid && $del_msg)
- {
- $msg = lang('%1 log entries deleted.',$del_msg);
- }
- else
- {
- $msg = lang('Error deleting log entry!');
- }
- }
- elseif(isset($content['nm']['rows']['kill']) || isset($content['kill']))
- {
- if (isset($content['nm']['rows']['kill']))
- {
- list($sessionid) = each($content['nm']['rows']['kill']);
- $sessionid = array($sessionid);
- unset($content['nm']['rows']['kill']);
- }
- else
- {
- unset($content['kill']);
- $sessionid = $content['nm']['rows']['selected'];
- }
- if (($key = array_search($GLOBALS['egw']->session->sessionid_access_log, $sessionid)))
- {
- unset($sessionid[$key]); // dont allow to kill own sessions
- }
- if ($GLOBALS['egw']->acl->check('current_sessions_access',8,'admin'))
- {
- $msg = lang('Permission denied!');
- }
- else
- {
- foreach((array)$sessionid as $id)
- {
- $GLOBALS['egw']->session->destroy($id);
+
+ if ($this->action($content['nm']['action'],$content['nm']['selected']
+ ,$success,$failed,$action_msg,$msg))
+ { // In case of action success
+ switch ($action_msg)
+ {
+ case'deleted':
+ $msg = lang('%1 log entries deleted.',$success);
+ break;
+ case'killed':
+ $msg = lang('%1 sessions killed',$success);
+ }
+ }
+ elseif($failed) // In case of action failiure
+ {
+ switch ($action_msg)
+ {
+ case'deleted':
+ $msg = lang('Error deleting log entry!');
+ break;
+ case'killed':
+ $msg = lang('Permission denied!');
+ }
}
- $msg = lang('%1 sessions killed',count($sessionid));
}
}
- $readonlys['kill'] = !$sessions_list;
- $readonlys['delete'] = $sessions_list;
$content['msg'] = $msg;
$content['percent'] = 100.0 * $GLOBALS['egw']->db->query(
'SELECT ((SELECT COUNT(*) FROM '.self::TABLE.' WHERE lo != 0) / COUNT(*)) FROM '.self::TABLE,
__LINE__,__FILE__)->fetchColumn();
- $tmpl = new etemplate('admin.accesslog');
+ $tmpl = new etemplate_new('admin.accesslog');
$tmpl->exec('admin.admin_accesslog.index',$content,$sel_options,$readonlys,array(
'nm' => $content['nm'],
));
}
+ /**
+ * Apply an action to multiple logs
+ *
+ * @param type $action
+ * @param type $checked
+ * @param type $use_all
+ * @param type $success
+ * @param int $failed
+ * @param type $action_msg
+ * @param type $msg
+ * @return type number of failed
+ */
+ function action($action,$checked,&$success,&$failed,&$action_msg,&$msg)
+ {
+
+ $success = $failed = 0;
+ error_log(__METHOD__.'selected:' . array2string($checked). 'action:' . $action);
+ switch ($action)
+ {
+ case "delete":
+ $action_msg = "deleted";
+ $del_msg= $this->so->delete(array('sessionid' => $checked));
+ if ($checked && $del_msg)
+ {
+ $success = $del_msg;
+ }
+ else
+ {
+ $failed ++;
+ }
+ break;
+ case "kill":
+ $action_msg = "killed";
+ $sessionid = $checked;
+ if (($key = array_search($GLOBALS['egw']->session->sessionid_access_log, $sessionid)))
+ {
+ unset($sessionid[$key]); // dont allow to kill own sessions
+ }
+ if ($GLOBALS['egw']->acl->check('current_sessions_access',8,'admin'))
+ {
+ $failed ++;
+ }
+ else
+ {
+ foreach((array)$sessionid as $id)
+ {
+ $GLOBALS['egw']->session->destroy($id);
+ }
+ $success= count($sessionid);
+ }
+ break;
+ }
+ return !$failed;
+ }
+
+ /**
+ * Get actions / context menu for index
+ *
+ * Changes here, require to log out, as $content['nm'] get stored in session!
+ *
+ * @return array see nextmatch_widget::egw_actions()
+ */
+ private static function get_actions($sessions_list)
+ {
+
+ if ($sessions_list)
+ {
+ // error_log(__METHOD__. $sessions_list);
+ $actions= array(
+ 'kill' => array(
+ 'caption' => 'Kill',
+ 'confirm' => 'Kill this session',
+ 'confirm_multiple' => 'Kill these sessions',
+ 'group' => $group,
+ ),
+ );
+
+ }
+ else
+ {
+ $actions= array(
+ 'delete' => array(
+ 'caption' => 'Delete',
+ 'confirm' => 'Delete this entry',
+ 'confirm_multiple' => 'Delete these entries',
+ 'group' => $group,
+ 'disableClass' => 'rowNoDelete',
+ ),
+ );
+ }
+ return $actions;
+ }
+
/**
* Display session list
*
diff --git a/admin/templates/default/accesslog.xet b/admin/templates/default/accesslog.xet
index 9924c232ce..02b99ffa9e 100644
--- a/admin/templates/default/accesslog.xet
+++ b/admin/templates/default/accesslog.xet
@@ -13,8 +13,6 @@
-
-
@@ -26,12 +24,7 @@
-
-
-
-
-
@@ -44,13 +37,7 @@
-
-
-
-
-
-
@@ -74,11 +61,6 @@
-
-
-
-
-