diff --git a/src/classes/html2fpdf/fpdf.php b/src/classes/html2fpdf/fpdf.php index 0661ae9..7dcfbee 100644 --- a/src/classes/html2fpdf/fpdf.php +++ b/src/classes/html2fpdf/fpdf.php @@ -1171,7 +1171,10 @@ function WriteFlowingBlock( $s , $outofblock = false ) case 'J': foreach ( $content as $k => $chunk ) { - $this->restoreFont( $font[ $k ] ); +// BEGIN FIX BY ANDRE + if ( isset($font[ $k ]) ) + $this->restoreFont( $font[ $k ] ); +// END FIX BY ANDRE $stringWidth = $this->GetStringWidth( $chunk ) + ( $this->ws * substr_count( $chunk, ' ' ) / $this->k ); // determine which borders should be used $b = ''; @@ -1200,7 +1203,10 @@ function WriteFlowingBlock( $s , $outofblock = false ) case 'C': foreach ( $content as $k => $chunk ) { - $this->restoreFont( $font[ $k ] ); +// BEGIN FIX BY ANDRE + if ( isset($font[ $k ]) ) + $this->restoreFont( $font[ $k ] ); +// END FIX BY ANDRE $stringWidth = $this->GetStringWidth( $chunk ) + ( $this->ws * substr_count( $chunk, ' ' ) / $this->k ); // determine which borders should be used $b = ''; diff --git a/src/classes/reports/report.eventlog.logonlogoff.class.php b/src/classes/reports/report.eventlog.logonlogoff.class.php new file mode 100644 index 0000000..36e0b83 --- /dev/null +++ b/src/classes/reports/report.eventlog.logonlogoff.class.php @@ -0,0 +1,482 @@ +. + * + * A copy of the GPL can be found in the file "COPYING" in this + * distribution. + ********************************************************************* +*/ + +// --- Avoid directly accessing this file! +if ( !defined('IN_PHPLOGCON') ) +{ + die('Hacking attempt'); + exit; +} +// --- + +// --- Basic Includes! +require_once($gl_root_path . 'classes/reports/report.class.php'); +// --- + +class Report_logonlogoff extends Report { + // Common Properties + public $_reportVersion = 1; // Internally Version of the ReportEngine + public $_reportID = "report.eventlog.logonlogoff.class"; // ID for the report, needs to be unique! + public $_reportFileBasicName = "report.eventlog.logonlogoff"; // Basic Filename for reportfiles + public $_reportTitle = "EventLog Logon/Logoff Report"; // Display name for the report + public $_reportDescription = "This is a EventLog Logon/Logoff Summary Report"; + public $_reportHelpArticle = "http://loganalyzer.adiscon.com/plugins/reports/eventlog-logonlogoff"; + public $_reportNeedsInit = false; // True means that this report needs additional init stuff + public $_reportInitialized = false; // True means report is installed + + // Advanced Report Options + private $_maxHosts = 20; // Threshold for maximum hosts to analyse! + private $_maxLogOnLogOffsPerHost = 100; // Threshold for maximum amount of logon/logoffs to analyse per host + private $_colorThreshold = 10; // Threshold for coloured display of Eventcounter + + // Constructor + public function Report_logonlogoff() { +// $this->_logStreamConfigObj = $streamConfigObj; + + // Fill fields we need for this report + $this->_arrProperties[] = SYSLOG_UID; + $this->_arrProperties[] = SYSLOG_DATE; + $this->_arrProperties[] = SYSLOG_HOST; + $this->_arrProperties[] = SYSLOG_MESSAGETYPE; + $this->_arrProperties[] = SYSLOG_SEVERITY; + $this->_arrProperties[] = SYSLOG_EVENT_ID; + $this->_arrProperties[] = SYSLOG_EVENT_SOURCE; + $this->_arrProperties[] = SYSLOG_EVENT_USER; +// $this->_arrProperties[] = SYSLOG_MESSAGE; +// $this->_arrProperties[] = MISC_CHECKSUM; + + // Init Customfilters Array + $this->_arrCustomFilters['_maxHosts'] = array ( 'InternalID' => '_maxHosts', + 'DisplayLangID' => 'ln_report_maxHosts_displayname', + 'DescriptLangID'=> 'ln_report_maxHosts_description', + FILTER_TYPE => FILTER_TYPE_NUMBER, + 'DefaultValue' => 20, + 'MinValue' => 1, +/* 'MaxValue' => 0,*/ + ); + $this->_arrCustomFilters['_maxLogOnLogOffsPerHost'] = + array ( 'InternalID' => '_maxLogOnLogOffsPerHost', + 'DisplayLangID' => 'ln_report_maxLogOnLogOffsPerHost_displayname', + 'DescriptLangID'=> 'ln_report_maxLogOnLogOffsPerHost_description', + FILTER_TYPE => FILTER_TYPE_NUMBER, + 'DefaultValue' => 100, + 'MinValue' => 1, +/* 'MaxValue' => 0,*/ + ); + $this->_arrCustomFilters['_colorThreshold'] = + array ( 'InternalID' => '_colorThreshold', + 'DisplayLangID' => 'ln_report_colorThreshold_displayname', + 'DescriptLangID'=> 'ln_report_colorThreshold_description', + FILTER_TYPE => FILTER_TYPE_NUMBER, + 'DefaultValue' => 10, + 'MinValue' => 1, +/* 'MaxValue' => 0,*/ + ); + + + + } + + /** + * startDataProcessing, analysing data + * + * @param arrProperties array in: Properties wish list. + * @return integer Error stat + */ + public function startDataProcessing() + { + global $content, $severity_colors, $gl_starttime, $fields; + + // Create Filter string, append filter for EventLog Type msgs! + $szFilters = $this->_filterString . " " . + $fields[SYSLOG_MESSAGETYPE]['SearchField'] . ":=" . IUT_NT_EventReport . ",=" . IUT_WEVTMONV2 . " "; /* Include EventLog v1 and v2 */ + + // Set Filter string + $this->_streamObj->SetFilter( $szFilters ); + + // Need to Open stream first! + $res = $this->_streamObj->Open( $this->_arrProperties, true ); + if ( $res == SUCCESS ) + { + // Set to common content variables + $this->SetCommonContentVariables(); + + // Set report specific content variables + $content["_colorThreshold"] = $this->_colorThreshold; + + // --- Report logic starts here + $content["report_rendertime"] = ""; + + // Step 1: Gather Summaries + // Obtain data from the logstream! + $content["report_summary"] = $this->_streamObj->ConsolidateDataByField( SYSLOG_HOST, 0, SYSLOG_HOST, SORTING_ORDER_DESC, null, false ); + + // TimeStats + $nowtime = microtime_float(); + $content["report_rendertime"] .= number_format($nowtime - $gl_starttime, 2, '.', '') . "s, "; + + // If data is valid, we have an array! + if ( is_array($content["report_summary"]) && count($content["report_summary"]) > 0 ) + { + // Count Total Events + $iTotalEvents = 0; + + foreach ($content["report_summary"] as &$tmpReportData ) + { + $tmpReportData['DisplayName'] = $tmpReportData[SYSLOG_HOST]; + $tmpReportData['bgcolor'] = "#BBBBBB"; // $severity_colors[ $tmpReportData[SYSLOG_SEVERITY] ]; + + $iTotalEvents += $tmpReportData['itemcount']; + } + + // Prepent Item with totalevents count + $totalItem['DisplayName'] = "Total Events"; + $totalItem['bgcolor'] = "#999999"; + $totalItem['itemcount'] = $iTotalEvents; + + // Prepent to array + array_unshift( $content["report_summary"], $totalItem ); + } + else + return ERROR_REPORT_NODATA; + +/* + // Get List of hosts + $content["report_computers"] = $this->_streamObj->ConsolidateItemListByField( SYSLOG_HOST, $this->_maxHosts, SYSLOG_HOST, SORTING_ORDER_DESC ); + + // TimeStats + $nowtime = microtime_float(); + $content["report_rendertime"] .= number_format($nowtime - $gl_starttime, 2, '.', '') . "s, "; + + if ( is_array($content["report_computers"]) && count($content["report_computers"]) > 0 ) + { + // Create plain hosts list for Consolidate function + foreach ( $content["report_computers"] as $tmpComputer ) + $arrHosts[] = $tmpComputer[SYSLOG_HOST]; + } + else + return ERROR_REPORT_NODATA; +*/ + + // This function will consolidate the Events based per Host! + $this->ConsolidateLogonLogoffs(); // ($arrHosts); + + // TimeStats + $nowtime = microtime_float(); + $content["report_rendertime"] .= number_format($nowtime - $gl_starttime, 2, '.', '') . "s "; + // --- + } + else + return $ret; + + // Return success! + return SUCCESS; + } + + + /** + * InitReport, empty + * + */ + public function InitReport() + { + // Nothing to do + return SUCCESS; + } + + + /** + * RemoveReport, empty + * + */ + public function RemoveReport() + { + // Nothing to do + return SUCCESS; + } + + + /** + * validateLicense, check license code + * + */ + public function validateLicense() + { + // This is a free report! + return SUCCESS; + } + + /** + * Init advanced settings from _customFilters string + */ + public function InitAdvancedSettings() + { + // Parse and Split _customFilters + if ( strlen($this->_customFilters) > 0 ) + { + // First of all split by comma + $tmpFilterValues = explode( ",", $this->_customFilters ); + + //Loop through mappings + foreach ($tmpFilterValues as &$myFilterValue ) + { + // Split subvalues + $tmpArray = explode( "=>", $myFilterValue ); + + // Set into temporary array + $tmpfilterid = trim($tmpArray[0]); + + // Set advanced property + if ( isset($this->_arrCustomFilters[$tmpfilterid]) ) + { + // Copy New value first! + $szNewVal = trim($tmpArray[1]); + + // Negated logic + if ( + $this->_arrCustomFilters[$tmpfilterid][FILTER_TYPE] == FILTER_TYPE_NUMBER && + !(isset($this->_arrCustomFilters[$tmpfilterid]['MinValue']) && intval($szNewVal) < $this->_arrCustomFilters[$tmpfilterid]['MinValue']) && + !(isset($this->_arrCustomFilters[$tmpfilterid]['MaxValue']) && intval($szNewVal) >= $this->_arrCustomFilters[$tmpfilterid]['MaxValue']) + ) + { + if ( $tmpfilterid == '_maxHosts' ) + $this->_maxHosts = intval($szNewVal); + else if ( $tmpfilterid == '_maxLogOnLogOffsPerHost' ) + $this->_maxLogOnLogOffsPerHost = intval($szNewVal); + else if ( $tmpfilterid == '_colorThreshold' ) + $this->_colorThreshold = intval($szNewVal); + } + else + { + // Write to debuglog + OutputDebugMessage("Failed setting advanced report option property '" . $tmpfilterid . "', value not in value range!", DEBUG_ERROR); + } + } + } + } + } + + + /* + * Implementation of CheckLogStreamSource + */ + public function CheckLogStreamSource( $mySourceID ) + { + // Call basic report Check function + $res = $this->CheckLogStreamSourceByPropertyArray( $mySourceID, array(SYSLOG_HOST, MISC_CHECKSUM, SYSLOG_DATE, SYSLOG_EVENT_ID, SYSLOG_MESSAGETYPE), null ); + + // return results! + return $res; + } + + + /* + * Implementation of CreateLogStreamIndexes | Will create missing INDEXES + */ + public function CreateLogStreamIndexes( $mySourceID ) + { + // Call basic report Check function + $res = $this->CreateLogStreamIndexesByPropertyArray( $mySourceID, array(SYSLOG_HOST, MISC_CHECKSUM, SYSLOG_DATE, SYSLOG_EVENT_ID, SYSLOG_MESSAGETYPE) ); + + // return results! + return $res; + } + + + /* + * Implementation of CreateLogStreamIndexes | Will create missing TRIGGER + */ + public function CreateLogStreamTrigger( $mySourceID ) + { + // Dummy return SUCCESS! + return SUCCESS; + } + + + // --- Private functions... + /** + * Helper function to consolidate events + */ + private function ConsolidateLogonLogoffs() // ( $arrHosts ) + { + global $content, $gl_starttime, $fields; + + // Now open the stream for data processing + $res = $this->_streamObj->Open( $this->_arrProperties, true ); + if ( $res == SUCCESS ) + { + // --- New Method to consolidate data! + // TimeStats + $nowtime = microtime_float(); + $content["report_rendertime"] .= number_format($nowtime - $gl_starttime, 2, '.', '') . "s "; + + // Update all Checksums first! +//not needed $this->_streamObj->UpdateAllMessageChecksum(); + + // TimeStats + $nowtime = microtime_float(); + $content["report_rendertime"] .= number_format($nowtime - $gl_starttime, 2, '.', '') . "s "; + + // Get all LOGON Data + // Set custom filters + $this->_streamObj->ResetFilters(); + $this->_streamObj->SetFilter( + $this->_filterString . " " . + $fields[SYSLOG_MESSAGETYPE]['SearchField'] . ":=" . IUT_NT_EventReport . ",=" . IUT_WEVTMONV2 . " " . + $fields[SYSLOG_EVENT_ID]['SearchField'] . ":=528,4624" ); /* Include EventIDs for new and old Eventlog API*/ + $content["report_consdata"]['logon']['cons_events'] = $this->_streamObj->ConsolidateDataByField( SYSLOG_EVENT_USER, $this->_maxLogOnLogOffsPerHost, SYSLOG_EVENT_USER, SORTING_ORDER_DESC, null, true, true ); + foreach ( $content["report_consdata"]['logon']['cons_events'] as &$myConsData ) + { + // Set Basic data entries + if (!isset( $content['filter_severity_list'][$myConsData[SYSLOG_SEVERITY]] )) + $myConsData[SYSLOG_SEVERITY] = SYSLOG_NOTICE; // Set default in this case + } + // Set Basic properties + $content["report_consdata"]['logon']['DataCaption'] = "Logon Events"; + + + // Get all LOGOFF Data + // Set custom filters + $this->_streamObj->ResetFilters(); + $this->_streamObj->SetFilter( + $this->_filterString . " " . + $fields[SYSLOG_MESSAGETYPE]['SearchField'] . ":=" . IUT_NT_EventReport . ",=" . IUT_WEVTMONV2 . " " . + $fields[SYSLOG_EVENT_ID]['SearchField'] . ":=538,4634" ); /* Include EventIDs for new and old Eventlog API*/ + $content["report_consdata"]['logoff']['cons_events'] = $this->_streamObj->ConsolidateDataByField( SYSLOG_EVENT_USER, $this->_maxLogOnLogOffsPerHost, SYSLOG_EVENT_USER, SORTING_ORDER_DESC, null, true, true ); + foreach ( $content["report_consdata"]['logoff']['cons_events'] as &$myConsData ) + { + // Set Basic data entries + if (!isset( $content['filter_severity_list'][$myConsData[SYSLOG_SEVERITY]] )) + $myConsData[SYSLOG_SEVERITY] = SYSLOG_NOTICE; // Set default in this case + } + // Set Basic properties + $content["report_consdata"]['logoff']['DataCaption'] = "Logoff Events"; + +/* foreach ( $arrHosts as $myHost ) + { + // Set custom filters + $this->_streamObj->ResetFilters(); + $this->_streamObj->SetFilter( $this->_filterString . " " . $fields[SYSLOG_MESSAGETYPE]['SearchField'] . ":=" . IUT_NT_EventReport . ",=" . IUT_WEVTMONV2 . " " . $fields[SYSLOG_HOST]['SearchField'] . ":=" . $myHost ); + + // Set Host Item Basics if not set yet + $content["report_consdata"][ $myHost ][SYSLOG_HOST] = $myHost; + + // Get Data for single host + $content["report_consdata"][ $myHost ]['cons_events'] = $this->_streamObj->ConsolidateDataByField( SYSLOG_EVENT_ID, $this->_maxLogOnLogOffsPerHost, SYSLOG_EVENT_USER, SORTING_ORDER_DESC, null, true, true ); + //print_r ($fields[SYSLOG_MESSAGE]); + foreach ( $content["report_consdata"][ $myHost ]['cons_events'] as &$myConsData ) + { + // Set Basic data entries + if (!isset( $content['filter_severity_list'][$myConsData[SYSLOG_SEVERITY]] )) + $myConsData[SYSLOG_SEVERITY] = SYSLOG_NOTICE; // Set default in this case + } + } +*/ + + // TimeStats + $nowtime = microtime_float(); + $content["report_rendertime"] .= number_format($nowtime - $gl_starttime, 2, '.', '') . "s "; + // --- + + + // Start Postprocessing + foreach( $content["report_consdata"] as &$tmpConsolidatedData ) + { + // First use callback function to sort array + uasort($tmpConsolidatedData['cons_events'], "MultiSortArrayByItemCountDesc"); + +/* + // Remove entries according to _maxLogOnLogOffsPerHost + if ( count($tmpConsolidatedComputer['cons_events']) > $this->_maxLogOnLogOffsPerHost ) + { + $iDropCount = 0; + + do + { + array_pop($tmpConsolidatedComputer['cons_events']); + $iDropCount++; + } while ( count($tmpConsolidatedComputer['cons_events']) > $this->_maxLogOnLogOffsPerHost ); + + // Append a dummy entry which shows count of all other events + if ( $iDropCount > 0 ) + { + $lastEntry[SYSLOG_SEVERITY] = SYSLOG_NOTICE; + $lastEntry[SYSLOG_EVENT_ID] = "-"; + $lastEntry[SYSLOG_EVENT_SOURCE] = $content['LN_GEN_ALL_OTHER_EVENTS']; + $lastEntry[SYSLOG_MESSAGE] = $content['LN_GEN_ALL_OTHER_EVENTS']; + $lastEntry['itemcount'] = $iDropCount; + $lastEntry['FirstEvent_Date'] = "-"; + $lastEntry['LastEvent_Date'] = "-"; + + $tmpConsolidatedComputer['cons_events'][] = $lastEntry; + } + } +*/ + // TimeStats + $nowtime = microtime_float(); + $content["report_rendertime"] .= number_format($nowtime - $gl_starttime, 2, '.', '') . "s "; + + // PostProcess Events! + foreach( $tmpConsolidatedData["cons_events"] as &$tmpMyEvent ) + { + $tmpMyEvent['FirstEvent_Date_Formatted'] = GetFormatedDate( $tmpMyEvent['firstoccurrence_date'] ); + $tmpMyEvent['LastEvent_Date_Formatted'] = GetFormatedDate( $tmpMyEvent['lastoccurrence_date'] ); + $tmpMyEvent['syslogseverity_text'] = $content['filter_severity_list'][ $tmpMyEvent['syslogseverity'] ]["DisplayName"]; + $tmpMyEvent['syslogseverity_bgcolor'] = $this->GetSeverityBGColor($tmpMyEvent['syslogseverity']); + } + } + // --- + } + + // Work done! + return SUCCESS; + } + + /* + * Helper function to obtain Severity background color + */ + private function GetSeverityBGColor( $nSeverity ) + { + global $severity_colors; + + if ( isset( $severity_colors[$nSeverity] ) ) + return $severity_colors[$nSeverity]; + else + return $severity_colors[SYSLOG_INFO]; //Default + } + +} + +?> \ No newline at end of file diff --git a/src/classes/reports/report.eventlog.logonlogoff/report.eventlog.logonlogoff.css b/src/classes/reports/report.eventlog.logonlogoff/report.eventlog.logonlogoff.css new file mode 100644 index 0000000..688a9dd --- /dev/null +++ b/src/classes/reports/report.eventlog.logonlogoff/report.eventlog.logonlogoff.css @@ -0,0 +1,576 @@ +/* Generell Tag Classes */ +BODY +{ + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + color: #000000; + background-color: #f9f9f9; + + scrollbar-face-color: #DEE3E7; + scrollbar-highlight-color: #FFFFFF; + scrollbar-shadow-color: #DEE3E7; + scrollbar-3dlight-color: #D1D7DC; + scrollbar-arrow-color: #006699; + scrollbar-track-color: #EFEFEF; + scrollbar-darkshadow-color: #98AAB1; +} + +TD +{ + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; + color: #000000 +} + +/* Default Link Classes */ +a:link,a:active,a:visited,a.postlink +{ + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-weight: bold; + text-decoration:none; + + background-color: transparent; + color:#38140E; +} +a:hover +{ + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-weight: bold; + color:#CC0000; +} +/*---*/ + +/* Context Link Classes */ +a.contextlink:link,a.contextlink:active,a.contextlink:visited,a.contextlink +{ + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-weight: bold; + background-color: transparent; + color:#3814BB; + text-decoration:underline; +} +a.contextlink:hover +{ + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-weight:bold; + color:#3844FF; + text-decoration:none; +} +/*---*/ + +img +{ + border: 0px; +} + +/* Title Classes */ +.title +{ + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; + font-weight:bold; + + background-color: #C6B097; + color: #032D5D; + + border: 1px solid; + border-color: #ACBED6 #3B679B #3B679B #ACBED6; + height: 20px; + text-align:center; + vertical-align:middle; +} +A.title, A.title:active, A.title:visited +{ + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; + font-weight:bold; + + COLOR: #ED9D10; + TEXT-DECORATION: none; +} +A.title:hover +{ + COLOR: #982D00; + TEXT-DECORATION: none; +} +.titleSecond +{ + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight:bold; + + background-color: #E3D2AE; + background-image: url(images/bg_4.png); + background-repeat: repeat-x; + color: #1A3745; + + height: 18px; + text-align:center; + vertical-align:middle; +} + + +/* Default Font Classes */ +font +{ + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; +} + +/* Table / Border Classes */ +.table_with_border +{ + background-color:#EEF2F6; + border:1px solid; + border-color: #CCCCCC #000000 #000000 #CCCCCC; +} + +.table_with_border_second +{ + background-color:#D5E0E7; + border:1px solid; + border-color: #CCCCCC #000000 #000000 #CCCCCC; +} + +.table_with_border_light +{ + background-color:#CCCCCC; + border:1px #AAAAAA solid; +} + +.with_border +{ + text-indent:3px; + background-color:#CCCCCC; + border:1px #AAAAAA solid; +} + +.with_border_alternate +{ + text-indent:3px; + background-color:#CCCCCC; + border:1px #AAAAAA ridge; +} + +.mainheader +{ + border:1px solid; + background-color:#C7CBD1; + border-color: #44617D #203040 #203040 #44617D; +} + +.mainfooter +{ + height: 20px; + background-color:#DDDDDD; + border-top: #97A8B9 1px solid; + border-bottom: #6592BD 1px solid; +} + +.imageborder +{ + border:1px solid; + border-color: #44617D #203040 #203040 #44617D; +} + +/* Cells for listening */ +.line0 +{ + font-size: 7pt; + color: #000000; + background-color: #DDDDDD; +} +.line0:hover +{ + background-color:#F9F9F9; +} + +.line1 +{ + font-size: 7pt; + color: #000000; + background-color: #EEEEEE; +} +.line1:hover +{ + background-color:#F9F9F9; +} + +.line2 +{ + font-size: 7pt; + color: #000000; + background-color: #F5F5F5; +} +.line2:hover +{ + background-color:#F9F9F9; +} +.tableBackground +{ + font-size: 10px; + color: #000000; + background-color: #F5F5F5; +} + +.lineColouredWhite, .lineColouredWhite:hover, a.lineColouredWhite +{ + font-size: 10px; + color: #FFFFFF; +} +.lineColouredBlack, .lineColouredBlack:hover, a.lineColouredBlack +{ + font-size: 10px; + color: #000000; +} + +/* TOP Menu Classes */ +.topmenu1begin +{ + height: 16px; + border:0px; + padding: 2px 2px 0px 2px; + vertical-align: middle; + + background-color: #4E6485; +} +.topmenu1 +{ + height: 16px; + border:1px ridge; + border-color: #79AABE #09506C #79AABE #79AABE; + padding: 2px 2px 0px 2px; + vertical-align: middle; + + font: 10px Verdana, Arial, Helvetica, sans-serif; + color: #FFFFFF; + background-color: #4E6485; +} +.topmenu1:hover +{ + color: #FFFF99; + border:1px inset; + border-color: #79AABE #09506C #79AABE #79AABE; + background-color: #6A88B8; + text-decoration: none; +} +.topmenuend +{ + height: 16px; + font: 10px Verdana, Arial, Helvetica, sans-serif; + color: #FFFFFF; + background-color: #4E6485; +} +.topmenuextra +{ + height: 16px; + font: 10px Verdana, Arial, Helvetica, sans-serif; + color: #FFFFFF; + background-color: #B8D4E0; +} +.topmenu2begin +{ + height: 16px; + border:0px; + padding: 2px 2px 0px 2px; + vertical-align: middle; + + background-color: #7A92A6; +} +.topmenu2 +{ + height: 16px; + border:1px ridge; + border-color: #BDEEFF #79AABE #09506C #09506C; + padding: 2px 2px 0px 2px; + vertical-align: middle; + + font: 10px Verdana, Arial, Helvetica, sans-serif; + color: #FFFFFF; + background-color: #7A92A6; +} +.topmenu2:hover +{ + color: #FFFF99; + border:1px inset; + border-color: #BDEEFF #79AABE #09506C #09506C; + background-color: #6A88B8; + text-decoration: none; +} +.topmenu2_link, A.topmenu2_link +{ + color: #FFDD22; +} +.topmenu2_link:hover, A.topmenu2_link:hover +{ + color: #FFFF99; + text-decoration: none; +} +.topmenu2end +{ + height: 16px; + border:1px inset; + border-color: #BDEEFF #79AABE #09506C #09506C; + font: 10px Verdana, Arial, Helvetica, sans-serif; + color: #FFFFFF; + background-color: #7A92A6; +} +.topmenu3begin +{ + height: 16px; + border:0px; + padding: 2px 2px 0px 2px; + vertical-align: middle; + + background-color: #D4DAE3; +} +.topmenu3 +{ + height: 16px; + border:1px ridge; + border-color: #BDEEFF #79AABE #09506C #09506C; + padding: 2px 2px 0px 2px; + vertical-align: middle; + + font: 10px Arial, Verdana, Helvetica, sans-serif; + color: #FFFFFF; + background-color: #D4DAE3; +} +.topmenu3:hover +{ + color: #FFFF99; + border:1px inset; + border-color: #BDEEFF #79AABE #09506C #09506C; + background-color: #ACCBFD; + text-decoration: none; +} +.topmenu3end +{ + height: 16px; + font: 10px Arial, Verdana, Helvetica, sans-serif; + color: #FFFFFF; + background-color: #D4DAE3; +} +.topmenu1_link, a.topmenu1_link, a.topmenu1_link:visited, .topmenu2_link, a.topmenu2_link, a.topmenu2_link:visited, .topmenu3_link, a.topmenu3_link, a.topmenu3_link:visited +{ + vertical-align: middle; + height: 16px; + + color: #FFDD22; + font-weight:bold; + text-decoration: none; +} +.topmenu1_link:hover, .topmenu2_link:hover, .topmenu3_link:hover +{ + vertical-align: middle; + + color: #FFFF99; + font-weight:bold; + text-decoration: none; +} + + + +/* Cell Columns */ +.cellmenu1 +{ + border:1px ridge; + border-color: #79AABE #09506C #09506C #79AABE; + + text-indent:0px; + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight:bold; + + background-color: #2E79A0; + + color: #FFFFFF; +} +.cellmenu1_naked +{ + border:1px ridge; + border-color: #79AABE #09506C #09506C #79AABE; + background-color: #2E79A0; + + text-indent:0px; + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight:bold; + + color: #FFFFFF; +} +.cellmenu1:hover .cellmenu1_naked:hover +{ + color: #FFFF99; + text-decoration: none; +} +A.cellmenu1_link +{ + color: #FFFF55; + text-decoration: underline; +} +A.cellmenu1_link:hover +{ + color: #FFBB55; + text-decoration: none; +} + +.cellmenu2 +{ + border:1px inset; + border-color: #79AABE #09506C #09506C #79AABE; + + text-indent:0px; + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight:bold; + + background-color: #9FDAF1; + color: #393327; +} +.cellmenu2_naked +{ + text-indent:0px; + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight:bold; + + color: #393327; + border:1px inset; + border-color: #79AABE #09506C #09506C #79AABE; + background-color: #9FDAF1; +} + +.cellmenu2:hover, .cellmenu2_naked:hover +{ + color: #A31D32; + text-decoration: none; +} + +/* Usefull Text Classes */ +.ErrorMsg +{ + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 12px; + font-weight: bold; + + COLOR: #FF0000; +} +.PriorityEmergency +{ + color: #FFFFFF; + background-color: #ff4444; + border-top: black 1px solid; + border-bottom: black 1px solid; + border-right: gray 1px solid; +} +.PriorityAlert +{ + color: #FFFFFF; + background-color: #dd00dd; + border-top: black 1px solid; + border-bottom: black 1px solid; + border-right: gray 1px solid; +} +.PriorityCrit +{ + color: #FFFFFF; + background-color: #dd9900; + border-top: black 1px solid; + border-bottom: black 1px solid; + border-right: gray 1px solid; +} +.PriorityError +{ + color: #FFFFFF; + background-color: #CC0000; + border-top: black 1px solid; + border-bottom: black 1px solid; + border-right: gray 1px solid; +} +.PriorityWarning +{ + color: #FFFFFF; + background-color: #FFAA00; + border-top: black 1px solid; + border-bottom: black 1px solid; + border-right: gray 1px solid; +} +.PriorityNotice +{ + color: #FFFFFF; + background-color: #66CC33; + border-top: black 1px solid; + border-bottom: black 1px solid; + border-right: gray 1px solid; +} +.PriorityInfo +{ + color: #000000; + background-color: #ABF1FF; + border-top: black 1px solid; + border-bottom: black 1px solid; + border-right: gray 1px solid; +} +.PriorityDebug +{ + color: #FFFFFF; + background-color: #3333ff; + border-top: black 1px solid; + border-bottom: black 1px solid; + border-right: gray 1px solid; +} + +/* Form elements */ +select, input, button, textarea +{ + background-color: #E8E7E2; + color:#000000; + + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; + + border: 1px solid; + border-color: #233B51 #124A7C #124A7C #233B51; +} + +.SearchFormControl +{ + height: 20px; + margin: 2px; + background-color: #E8E7E2; + color:#000000; + + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; + + border: 1px solid; + border-color: #233B51 #124A7C #124A7C #233B51; +} + +.SearchFormTextbox +{ + height: 20px; + margin: 2px; + background-color: #E8E7E2; + color:#000000; + + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; + + border: 1px solid; + border-color: #233B51 #124A7C #124A7C #233B51; +} + +.highlighted +{ + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; + + color: #BB0000 +} + diff --git a/src/classes/reports/report.eventlog.logonlogoff/report.eventlog.logonlogoff.lang.en.php b/src/classes/reports/report.eventlog.logonlogoff/report.eventlog.logonlogoff.lang.en.php new file mode 100644 index 0000000..b8b6393 --- /dev/null +++ b/src/classes/reports/report.eventlog.logonlogoff/report.eventlog.logonlogoff.lang.en.php @@ -0,0 +1,57 @@ +. + * + * A copy of the GPL can be found in the file "COPYING" in this + * distribution. + ********************************************************************* +*/ +global $content; + +// Global Stuff +$content['ln_report_event_summary'] = "Event Summary"; +$content['ln_report_computer_summary'] = "Computer Summary"; +$content['ln_report_consolidation'] = "Logon / Logoff Events consolidated per User"; +$content['ln_report_summary'] = "Report Summary"; +$content['ln_report_number'] = "No."; +$content['ln_report_firstevent'] = "First Event"; +$content['ln_report_lastevent'] = "Last Event"; +$content['ln_report_user'] = "Domain & Username"; +$content['ln_report_severity'] = "Type"; +$content['ln_report_host'] = "Servername"; +$content['ln_report_description'] = "Description"; +$content['ln_report_count'] = "Count"; +$content['ln_report_maxHosts_displayname'] = "Max hosts"; +$content['ln_report_maxHosts_description'] = "The maximum number of hosts which will be displayed."; +$content['ln_report_maxLogOnLogOffsPerHost_displayname'] = "Max Logon/Logoffs per host/user"; +$content['ln_report_maxLogOnLogOffsPerHost_description'] = "The maximum number of Logon/Logoff events displayed per host/user."; +$content['ln_report_colorThreshold_displayname'] = "Counter Threshold"; +$content['ln_report_colorThreshold_description'] = "If the amount of consolidated events is higher then this threshold, the countfield will be marked red."; +$content['ln_report_'] = ""; +$content['ln_report_'] = ""; +$content['ln_report_'] = ""; +$content['ln_report_'] = ""; +$content['ln_report_'] = ""; +$content['ln_report_'] = ""; +$content['ln_report_'] = ""; + +?> \ No newline at end of file diff --git a/src/classes/reports/report.eventlog.logonlogoff/report.eventlog.logonlogoff.template.html b/src/classes/reports/report.eventlog.logonlogoff/report.eventlog.logonlogoff.template.html new file mode 100644 index 0000000..8ae2cda --- /dev/null +++ b/src/classes/reports/report.eventlog.logonlogoff/report.eventlog.logonlogoff.template.html @@ -0,0 +1,152 @@ + + + + {report_title} + + + + + + + + + + + + + + + + + + + +
{report_title}
{LN_REPORT_GENERATEDTIME} {report_gentime}
{report_comment}
+ + + + + + + + + + + +
{LN_REPORT_FILTERS}
{FilterType}{FilterDisplay}
+ +
+ +

+ + + + + + + + + +
{ln_report_summary}
+ + + + + + + + + + + +
{ln_report_event_summary}
{DisplayName}{itemcount}
+ + + + + + + + +
{ln_report_computer_summary}
+ + {FROMHOST}({itemcount}), + +
+ +
+ +

+ + + + + + +
{ln_report_consolidation}
+ + + +

{DataCaption}

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{ln_report_number}{ln_report_count}{ln_report_firstevent}{ln_report_lastevent}{ln_report_user}{ln_report_severity}{ln_report_host}
{ZAEHLER}{itemcount}{itemcount}{FirstEvent_Date_Formatted}{LastEvent_Date_Formatted}{user}{syslogseverity_text}{FROMHOST}
+ + + + + + + + + + + + + + +
Made by Adiscon GmbH (2009-2011) +  Report Version {report_version} + +  Partners: + +  Rsyslog | +  WinSyslog + + + {LN_REPORT_FOOTER_ENDERED}: {report_rendertime} +  | {LN_FOOTER_DBQUERIES}: {TOTALQUERIES} + +
+ + + + \ No newline at end of file diff --git a/src/classes/reports/report.eventlog.logonlogoff/report.eventlog.logonlogoff.template.pdf b/src/classes/reports/report.eventlog.logonlogoff/report.eventlog.logonlogoff.template.pdf new file mode 100644 index 0000000..87369f5 --- /dev/null +++ b/src/classes/reports/report.eventlog.logonlogoff/report.eventlog.logonlogoff.template.pdf @@ -0,0 +1,102 @@ + + + + {report_title} + + + + +

{report_title}

+

{LN_REPORT_GENERATEDTIME} {report_gentime}

+

{report_comment}

+ + +
+ + + + + + + + + + +
{LN_REPORT_FILTERS}
{FilterType}{FilterDisplay}
+ + +
+ +

{ln_report_summary}

+ + + + + + + + + + + +
{ln_report_event_summary}
{DisplayName}{itemcount}
+ +
+ +

{ln_report_consolidation}

+ + +

{DataCaption}

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
{ln_report_number}{ln_report_count}{ln_report_firstevent}{ln_report_lastevent}{ln_report_user}{ln_report_severity}{ln_report_host}
{ZAEHLER}{itemcount}{itemcount}{FirstEvent_Date_Formatted}{LastEvent_Date_Formatted}{user}{syslogseverity_text}{FROMHOST}
+ + +

+ + + + + + + + + + + +
Made by Adiscon GmbH (2009-2011)  Report Version {report_version} Partners: Rsyslog |  WinSyslog
+ + {LN_REPORT_FOOTER_ENDERED}: {report_rendertime} +  | {LN_FOOTER_DBQUERIES}: {TOTALQUERIES} + +
+ + + \ No newline at end of file