예제 #1
0
 /**
  * Assign values needed to display the logs page to the theme based on handlervars and parameters.
  *
  */
 private function fetch_logs($params = NULL)
 {
     $locals = array('do_delete' => false, 'log_ids' => null, 'nonce' => '', 'timestamp' => '', 'PasswordDigest' => '', 'change' => '', 'limit' => 20, 'offset' => 0, 'user' => 0, 'date' => 'any', 'module' => '0', 'type' => '0', 'severity' => 'any', 'address' => '0', 'search' => '', 'do_search' => false, 'index' => 1);
     foreach ($locals as $varname => $default) {
         ${$varname} = isset($this->handler_vars[$varname]) ? $this->handler_vars[$varname] : $default;
         $this->theme->{$varname} = ${$varname};
     }
     if ($do_delete && isset($log_ids)) {
         $okay = true;
         if (empty($nonce) || empty($timestamp) || empty($PasswordDigest)) {
             $okay = false;
         }
         $wsse = Utils::WSSE($nonce, $timestamp);
         if ($PasswordDigest != $wsse['digest']) {
             $okay = false;
         }
         if ($okay) {
             foreach ($log_ids as $id) {
                 $ids[] = array('id' => $id);
             }
             $to_delete = EventLog::get(array('nolimit' => 1));
             $count = 0;
             foreach ($to_delete as $log) {
                 $log->delete();
                 $count++;
             }
             Session::notice(_t('Deleted %d logs', array($count)));
         }
         Utils::redirect();
     }
     $this->theme->severities = LogEntry::list_severities();
     $any = array('0' => 'Any');
     $modulelist = LogEntry::list_logentry_types();
     $modules = array();
     $types = array();
     $addresses = $any;
     $ips = DB::get_column('SELECT DISTINCT(ip) FROM {log}');
     foreach ($ips as $ip) {
         $addresses[$ip] = long2ip($ip);
     }
     $this->theme->addresses = $addresses;
     foreach ($modulelist as $modulename => $typearray) {
         $modules['0,' . implode(',', $typearray)] = $modulename;
         foreach ($typearray as $typename => $typevalue) {
             if (!isset($types[$typename])) {
                 $types[$typename] = '0';
             }
             $types[$typename] .= ',' . $typevalue;
         }
     }
     $types = array_flip($types);
     $this->theme->types = array_merge($any, $types);
     $this->theme->modules = array_merge($any, $modules);
     // set up the users
     $users_temp = DB::get_results('SELECT DISTINCT username, user_id FROM {users} JOIN {log} ON {users}.id = {log}.user_id ORDER BY username ASC');
     array_unshift($users_temp, new QueryRecord(array('username' => 'All', 'user_id' => 0)));
     foreach ($users_temp as $user_temp) {
         $users[$user_temp->user_id] = $user_temp->username;
     }
     $this->theme->users = $users;
     // set up dates.
     $dates = DB::get_column('SELECT timestamp FROM {log} ORDER BY timestamp DESC');
     $dates = array_map(create_function('$date', 'return HabariDateTime::date_create( $date )->get(\'Y-m\');'), $dates);
     array_unshift($dates, 'Any');
     $dates = array_combine($dates, $dates);
     $this->theme->dates = $dates;
     // prepare the WSSE tokens
     $this->theme->wsse = Utils::WSSE();
     $arguments = array('severity' => LogEntry::severity($severity), 'limit' => $limit, 'offset' => $offset);
     // deduce type_id from module and type
     $r_type = explode(',', substr($type, 2));
     $r_module = explode(',', substr($module, 2));
     if ($type != '0' && $module != '0') {
         $arguments['type_id'] = array_intersect($r_type, $r_module);
     } elseif ($type == '0') {
         $arguments['type_id'] = $r_module;
     } elseif ($module == '0') {
         $arguments['type_id'] = $r_type;
     }
     if ('0' != $address) {
         $arguments['ip'] = $address;
     }
     if ('any' != strtolower($date)) {
         list($arguments['year'], $arguments['month']) = explode('-', $date);
     }
     if ('' != $search) {
         $arguments['criteria'] = $search;
     }
     if ('0' != $user) {
         $arguments['user_id'] = $user;
     }
     if (is_array($params)) {
         $arguments = array_merge($arguments, $params);
     }
     $this->theme->logs = EventLog::get($arguments);
     $monthcts = EventLog::get(array_merge($arguments, array('month_cts' => true)));
     foreach ($monthcts as $month) {
         if (isset($years[$month->year])) {
             $years[$month->year][] = $month;
         } else {
             $years[$month->year] = array($month);
         }
     }
     if (isset($years)) {
         $this->theme->years = $years;
     } else {
         $this->theme->years = array();
     }
 }
예제 #2
0
 private function fetch_log_modules_types()
 {
     $module_list = LogEntry::list_logentry_types();
     $modules = $types = array('any' => 'Any');
     foreach ($module_list as $module_name => $type_array) {
         // Utils::slugify() gives us a safe key to use - this is what will be handed to the filter after a POST as well
         $modules[Utils::slugify($module_name)] = $module_name;
         foreach ($type_array as $type_name => $type_value) {
             $types[Utils::slugify($type_name)] = $type_name;
         }
     }
     return array('modules' => $modules, 'types' => $types);
 }