From 08e0b26874f03f4a986e444d0982809a72e70a8e Mon Sep 17 00:00:00 2001 From: Cameron Date: Sun, 24 Jan 2021 06:47:04 -0800 Subject: [PATCH] Removed 'log' plugin from repo. Now found at https://github.com/e107inc/log --- e107_handlers/admin_ui.php | 8 +- e107_handlers/plugin_class.php | 2 +- e107_plugins/banner/plugin.xml | 2 +- e107_plugins/chatbox_menu/plugin.xml | 2 +- e107_plugins/log/admin_config.php | 1314 ----------- e107_plugins/log/consolidate.php | 857 ------- e107_plugins/log/e_help.php | 45 - e107_plugins/log/e_meta.php | 105 - e107_plugins/log/e_shortcode.php | 106 - e107_plugins/log/e_url.php | 49 - e107_plugins/log/images/abrowse.png | Bin 786 -> 0 bytes e107_plugins/log/images/amaya.png | Bin 743 -> 0 bytes e107_plugins/log/images/android.png | Bin 424 -> 0 bytes e107_plugins/log/images/ant.png | Bin 580 -> 0 bytes e107_plugins/log/images/aol.png | Bin 623 -> 0 bytes e107_plugins/log/images/aol2.png | Bin 623 -> 0 bytes e107_plugins/log/images/avantbrowser.png | Bin 941 -> 0 bytes e107_plugins/log/images/avantgo.png | Bin 645 -> 0 bytes e107_plugins/log/images/aweb.png | Bin 508 -> 0 bytes e107_plugins/log/images/bar.png | Bin 220 -> 0 bytes e107_plugins/log/images/beonex.png | Bin 663 -> 0 bytes e107_plugins/log/images/beos.png | Bin 275 -> 0 bytes e107_plugins/log/images/blazer.png | Bin 530 -> 0 bytes e107_plugins/log/images/camino.png | Bin 545 -> 0 bytes e107_plugins/log/images/chimera.png | Bin 545 -> 0 bytes e107_plugins/log/images/chrome.png | Bin 945 -> 0 bytes e107_plugins/log/images/columbus.png | Bin 259 -> 0 bytes e107_plugins/log/images/crazybrowser.png | Bin 915 -> 0 bytes e107_plugins/log/images/curl.png | Bin 447 -> 0 bytes e107_plugins/log/images/deepnet.png | Bin 742 -> 0 bytes e107_plugins/log/images/dillo.png | Bin 721 -> 0 bytes e107_plugins/log/images/doris.png | Bin 724 -> 0 bytes e107_plugins/log/images/epiphany.png | Bin 653 -> 0 bytes e107_plugins/log/images/explorer.png | Bin 590 -> 0 bytes e107_plugins/log/images/firebird.png | Bin 516 -> 0 bytes e107_plugins/log/images/firefox.png | Bin 804 -> 0 bytes e107_plugins/log/images/freebsd.png | Bin 598 -> 0 bytes e107_plugins/log/images/galeon.png | Bin 695 -> 0 bytes e107_plugins/log/images/html.png | Bin 540 -> 0 bytes e107_plugins/log/images/ibrowse.png | Bin 259 -> 0 bytes e107_plugins/log/images/icab.png | Bin 432 -> 0 bytes e107_plugins/log/images/ice.png | Bin 511 -> 0 bytes e107_plugins/log/images/isilox.png | Bin 776 -> 0 bytes e107_plugins/log/images/k-meleon.png | Bin 588 -> 0 bytes e107_plugins/log/images/konqueror.png | Bin 282 -> 0 bytes e107_plugins/log/images/links.png | Bin 277 -> 0 bytes e107_plugins/log/images/linux.png | Bin 320 -> 0 bytes e107_plugins/log/images/logo.png | Bin 2390 -> 0 bytes e107_plugins/log/images/lotus.png | Bin 328 -> 0 bytes e107_plugins/log/images/lunascape.png | Bin 912 -> 0 bytes e107_plugins/log/images/lynx.png | Bin 1006 -> 0 bytes e107_plugins/log/images/mac.png | Bin 282 -> 0 bytes e107_plugins/log/images/maxthon.png | Bin 834 -> 0 bytes e107_plugins/log/images/mbrowser.png | Bin 722 -> 0 bytes e107_plugins/log/images/mosaic.png | Bin 657 -> 0 bytes e107_plugins/log/images/mozilla.png | Bin 819 -> 0 bytes e107_plugins/log/images/mozilla2.png | Bin 819 -> 0 bytes e107_plugins/log/images/multibrowser.png | Bin 844 -> 0 bytes e107_plugins/log/images/nautilus.png | Bin 748 -> 0 bytes e107_plugins/log/images/netbsd.png | Bin 329 -> 0 bytes e107_plugins/log/images/netcaptor.png | Bin 558 -> 0 bytes e107_plugins/log/images/netfront.png | Bin 778 -> 0 bytes e107_plugins/log/images/netpositive.png | Bin 843 -> 0 bytes e107_plugins/log/images/netscape.png | Bin 203 -> 0 bytes e107_plugins/log/images/netscape2.png | Bin 203 -> 0 bytes e107_plugins/log/images/nokia.png | Bin 450 -> 0 bytes e107_plugins/log/images/omniweb.png | Bin 823 -> 0 bytes e107_plugins/log/images/openbsd.png | Bin 358 -> 0 bytes e107_plugins/log/images/opera.png | Bin 284 -> 0 bytes e107_plugins/log/images/oregano.png | Bin 875 -> 0 bytes e107_plugins/log/images/phaseout.png | Bin 857 -> 0 bytes e107_plugins/log/images/phoenix.png | Bin 684 -> 0 bytes e107_plugins/log/images/proxomitron.png | Bin 560 -> 0 bytes e107_plugins/log/images/remove.png | Bin 790 -> 0 bytes e107_plugins/log/images/robot.png | Bin 406 -> 0 bytes e107_plugins/log/images/safari.png | Bin 759 -> 0 bytes e107_plugins/log/images/screen.png | Bin 545 -> 0 bytes e107_plugins/log/images/shiira.png | Bin 810 -> 0 bytes e107_plugins/log/images/sleipnir.png | Bin 906 -> 0 bytes e107_plugins/log/images/slimbrowser.png | Bin 892 -> 0 bytes e107_plugins/log/images/spiders.png | Bin 865 -> 0 bytes e107_plugins/log/images/staroffice.png | Bin 302 -> 0 bytes e107_plugins/log/images/stats_16.png | Bin 1166 -> 0 bytes e107_plugins/log/images/stats_32.png | Bin 2465 -> 0 bytes e107_plugins/log/images/sunos.png | Bin 200 -> 0 bytes e107_plugins/log/images/sunrise.png | Bin 863 -> 0 bytes e107_plugins/log/images/unix.png | Bin 478 -> 0 bytes e107_plugins/log/images/unknown.png | Bin 1013 -> 0 bytes e107_plugins/log/images/unspecified.png | Bin 1013 -> 0 bytes e107_plugins/log/images/voyager.png | Bin 717 -> 0 bytes e107_plugins/log/images/w3m.png | Bin 669 -> 0 bytes .../log/images/web%20indexing%20robot.png | Bin 406 -> 0 bytes e107_plugins/log/images/webtv.png | Bin 295 -> 0 bytes e107_plugins/log/images/windows.png | Bin 752 -> 0 bytes e107_plugins/log/images/xiino.png | Bin 825 -> 0 bytes e107_plugins/log/js/awesomechart.js | 1403 ----------- e107_plugins/log/languages/English.php | 84 - e107_plugins/log/languages/English_admin.php | 105 - .../log/languages/English_admin_log.php | 100 - e107_plugins/log/languages/English_global.php | 9 - e107_plugins/log/languages/English_log.php | 10 - .../log/languages/English_log_help.php | 37 - e107_plugins/log/log.php | 310 --- e107_plugins/log/log_sql.php | 7 - e107_plugins/log/loginfo.php | 317 --- e107_plugins/log/logs/null.txt | 0 e107_plugins/log/plugin.xml | 23 - e107_plugins/log/stats.php | 2074 ----------------- e107_plugins/log/stats_csv.php | 336 --- e107_plugins/log/templates/log_template.php | 214 -- 110 files changed, 7 insertions(+), 7512 deletions(-) delete mode 100644 e107_plugins/log/admin_config.php delete mode 100644 e107_plugins/log/consolidate.php delete mode 100644 e107_plugins/log/e_help.php delete mode 100644 e107_plugins/log/e_meta.php delete mode 100644 e107_plugins/log/e_shortcode.php delete mode 100644 e107_plugins/log/e_url.php delete mode 100644 e107_plugins/log/images/abrowse.png delete mode 100644 e107_plugins/log/images/amaya.png delete mode 100644 e107_plugins/log/images/android.png delete mode 100644 e107_plugins/log/images/ant.png delete mode 100644 e107_plugins/log/images/aol.png delete mode 100644 e107_plugins/log/images/aol2.png delete mode 100644 e107_plugins/log/images/avantbrowser.png delete mode 100644 e107_plugins/log/images/avantgo.png delete mode 100644 e107_plugins/log/images/aweb.png delete mode 100644 e107_plugins/log/images/bar.png delete mode 100644 e107_plugins/log/images/beonex.png delete mode 100644 e107_plugins/log/images/beos.png delete mode 100644 e107_plugins/log/images/blazer.png delete mode 100644 e107_plugins/log/images/camino.png delete mode 100644 e107_plugins/log/images/chimera.png delete mode 100644 e107_plugins/log/images/chrome.png delete mode 100644 e107_plugins/log/images/columbus.png delete mode 100644 e107_plugins/log/images/crazybrowser.png delete mode 100644 e107_plugins/log/images/curl.png delete mode 100644 e107_plugins/log/images/deepnet.png delete mode 100644 e107_plugins/log/images/dillo.png delete mode 100644 e107_plugins/log/images/doris.png delete mode 100644 e107_plugins/log/images/epiphany.png delete mode 100644 e107_plugins/log/images/explorer.png delete mode 100644 e107_plugins/log/images/firebird.png delete mode 100644 e107_plugins/log/images/firefox.png delete mode 100644 e107_plugins/log/images/freebsd.png delete mode 100644 e107_plugins/log/images/galeon.png delete mode 100644 e107_plugins/log/images/html.png delete mode 100644 e107_plugins/log/images/ibrowse.png delete mode 100644 e107_plugins/log/images/icab.png delete mode 100644 e107_plugins/log/images/ice.png delete mode 100644 e107_plugins/log/images/isilox.png delete mode 100644 e107_plugins/log/images/k-meleon.png delete mode 100644 e107_plugins/log/images/konqueror.png delete mode 100644 e107_plugins/log/images/links.png delete mode 100644 e107_plugins/log/images/linux.png delete mode 100644 e107_plugins/log/images/logo.png delete mode 100644 e107_plugins/log/images/lotus.png delete mode 100644 e107_plugins/log/images/lunascape.png delete mode 100644 e107_plugins/log/images/lynx.png delete mode 100644 e107_plugins/log/images/mac.png delete mode 100644 e107_plugins/log/images/maxthon.png delete mode 100644 e107_plugins/log/images/mbrowser.png delete mode 100644 e107_plugins/log/images/mosaic.png delete mode 100644 e107_plugins/log/images/mozilla.png delete mode 100644 e107_plugins/log/images/mozilla2.png delete mode 100644 e107_plugins/log/images/multibrowser.png delete mode 100644 e107_plugins/log/images/nautilus.png delete mode 100644 e107_plugins/log/images/netbsd.png delete mode 100644 e107_plugins/log/images/netcaptor.png delete mode 100644 e107_plugins/log/images/netfront.png delete mode 100644 e107_plugins/log/images/netpositive.png delete mode 100644 e107_plugins/log/images/netscape.png delete mode 100644 e107_plugins/log/images/netscape2.png delete mode 100644 e107_plugins/log/images/nokia.png delete mode 100644 e107_plugins/log/images/omniweb.png delete mode 100644 e107_plugins/log/images/openbsd.png delete mode 100644 e107_plugins/log/images/opera.png delete mode 100644 e107_plugins/log/images/oregano.png delete mode 100644 e107_plugins/log/images/phaseout.png delete mode 100644 e107_plugins/log/images/phoenix.png delete mode 100644 e107_plugins/log/images/proxomitron.png delete mode 100644 e107_plugins/log/images/remove.png delete mode 100644 e107_plugins/log/images/robot.png delete mode 100644 e107_plugins/log/images/safari.png delete mode 100644 e107_plugins/log/images/screen.png delete mode 100644 e107_plugins/log/images/shiira.png delete mode 100644 e107_plugins/log/images/sleipnir.png delete mode 100644 e107_plugins/log/images/slimbrowser.png delete mode 100644 e107_plugins/log/images/spiders.png delete mode 100644 e107_plugins/log/images/staroffice.png delete mode 100644 e107_plugins/log/images/stats_16.png delete mode 100644 e107_plugins/log/images/stats_32.png delete mode 100644 e107_plugins/log/images/sunos.png delete mode 100644 e107_plugins/log/images/sunrise.png delete mode 100644 e107_plugins/log/images/unix.png delete mode 100644 e107_plugins/log/images/unknown.png delete mode 100644 e107_plugins/log/images/unspecified.png delete mode 100644 e107_plugins/log/images/voyager.png delete mode 100644 e107_plugins/log/images/w3m.png delete mode 100644 e107_plugins/log/images/web%20indexing%20robot.png delete mode 100644 e107_plugins/log/images/webtv.png delete mode 100644 e107_plugins/log/images/windows.png delete mode 100644 e107_plugins/log/images/xiino.png delete mode 100644 e107_plugins/log/js/awesomechart.js delete mode 100644 e107_plugins/log/languages/English.php delete mode 100644 e107_plugins/log/languages/English_admin.php delete mode 100644 e107_plugins/log/languages/English_admin_log.php delete mode 100644 e107_plugins/log/languages/English_global.php delete mode 100644 e107_plugins/log/languages/English_log.php delete mode 100644 e107_plugins/log/languages/English_log_help.php delete mode 100644 e107_plugins/log/log.php delete mode 100644 e107_plugins/log/log_sql.php delete mode 100644 e107_plugins/log/loginfo.php delete mode 100644 e107_plugins/log/logs/null.txt delete mode 100644 e107_plugins/log/plugin.xml delete mode 100644 e107_plugins/log/stats.php delete mode 100644 e107_plugins/log/stats_csv.php delete mode 100644 e107_plugins/log/templates/log_template.php diff --git a/e107_handlers/admin_ui.php b/e107_handlers/admin_ui.php index 76ed78e28..4d5dddd40 100755 --- a/e107_handlers/admin_ui.php +++ b/e107_handlers/admin_ui.php @@ -7518,11 +7518,11 @@ class e_admin_form_ui extends e_form ".implode("\n", $filter_preserve_var). ' ' .$this->admin_button('etrigger_filter', 'etrigger_filter', 'filter e-hide-if-js', ADMIN_FILTER_ICON, array('id' => false, 'title' =>LAN_FILTER)). ' - ' .$this->renderPagination()." - + ' .$this->renderPagination()." ".$gridToggle." +
"; diff --git a/e107_handlers/plugin_class.php b/e107_handlers/plugin_class.php index 41772b49c..3e1d0989d 100644 --- a/e107_handlers/plugin_class.php +++ b/e107_handlers/plugin_class.php @@ -84,7 +84,7 @@ class e_plugin "_blank","admin_menu","banner","blogcalendar_menu", "chatbox_menu", "clock_menu","comment_menu", "contact", "download", "featurebox", "forum","gallery", - "gsitemap", "hero", "import", "linkwords", "list_new", "log", "login_menu", + "gsitemap", "hero", "import", "linkwords", "list_new", "login_menu", "newforumposts_main", "news", "newsfeed", "newsletter","online", "page", "pm","poll", "rss_menu","search_menu","siteinfo", "social", "tagcloud", "tinymce4", diff --git a/e107_plugins/banner/plugin.xml b/e107_plugins/banner/plugin.xml index 980ba75b8..6ab626544 100644 --- a/e107_plugins/banner/plugin.xml +++ b/e107_plugins/banner/plugin.xml @@ -1,6 +1,6 @@ - + Add advertising banners to your e107 website Add advertising banners to your e107 website diff --git a/e107_plugins/chatbox_menu/plugin.xml b/e107_plugins/chatbox_menu/plugin.xml index c042cffee..f83e778b1 100644 --- a/e107_plugins/chatbox_menu/plugin.xml +++ b/e107_plugins/chatbox_menu/plugin.xml @@ -1,6 +1,6 @@ - + Chatbox Menu content Copyright e107 Inc e107.org, Licensed under GPL (http://www.gnu.org/licenses/gpl.txt) diff --git a/e107_plugins/log/admin_config.php b/e107_plugins/log/admin_config.php deleted file mode 100644 index f423670b5..000000000 --- a/e107_plugins/log/admin_config.php +++ /dev/null @@ -1,1314 +0,0 @@ -addDebug(print_r($logVals, true)); - - - if($_SESSION['stats_log_files'][$count]['complete'] != 1) - { - $_SESSION['stats_log_files'][$count]['complete'] = 1; - // $lg->addSuccess($count."/".$totalFiles."\t".$file." processing", false); - // if($process) - if($lgc->processRawBackupLog($file, true)) - { - - // sleep(3); - $lg->addSuccess($count."/".$totalFiles."\t".$file." processed.", false); - $_SESSION['stats_log_files'][$count]['complete'] = 1; - $_SESSION['stats_log_files_count']++; - } - else - { - $lg->addError($count."/".$totalFiles."\t".$file." failed.", false); - } - } - else - { - $lg->addWarning($count."/".$totalFiles."\t".$file." skipped", false); - $_SESSION['stats_log_files_count']++; - } - - - $totalOutput = round(( $count/ $totalFiles) * 100, 1); - - if($totalOutput > 99.9) - { - echo 100; - if($lgc->collatePageTotalDB()) - { - $lg->addSuccess("Processed All-Time PageTotal", false); - } - else - { - $lg->addError("Failed to Process All-Time PageTotal", false); - } - - $lg->addSuccess("Processing Complete.", false); - - } - else - { - echo $totalOutput; - } - - $lg->toFile('SiteStatsUpgrade','Statistics Update Log', true); - - exit; - -} - -define('LogFlagFile', 'LogFlag.php'); - -e107::includeLan(e_PLUGIN.'log/languages/'.e_LANGUAGE.'.php'); -e107::includeLan(e_PLUGIN.'log/languages/'.e_LANGUAGE.'_admin.php'); - -if(!is_writable(e_LOG)) -{ - //$message = "".ADSTAT_LAN_38.""; - e107::getMessage()->addError(ADSTAT_LAN_28); -} - -e107::css('inline', 'td.last.options { padding-right:20px } '); - - // Needed on Windoze platforms - not an ideal solution! - if (!function_exists('nl_langinfo')) - { - define('MON_1',86400); - define('MON_2',2764800); - define('MON_3',5443200); - define('MON_4',8035200); - define('MON_5',10800000); - define('MON_6',13392000); - define('MON_7',15811200); - define('MON_8',19008000); - define('MON_9',21168000); - define('MON_10',23760000); - define('MON_11',26352000); - define('MON_12',28944000); - - function nl_langinfo($mon) - { - return date('F',$mon); - } - } - - - - - class log_adminArea extends e_admin_dispatcher - { - - protected $modes = array( - - 'main' => array( - 'controller' => 'logstats_ui', - 'path' => null, - 'ui' => 'logstats_form_ui', - 'uipath' => null - ), - - - ); - - - protected $adminMenu = array( - - 'main/prefs' => array('caption'=> LAN_SETTINGS, 'perm' => 'P'), - 'main/list' => array('caption'=> ADSTAT_LAN_48, 'perm' => 'P'), - 'main/export' => array('caption'=> ADSTAT_LAN_36, 'perm' => 'P'), - 'main/datasets' => array('caption'=> ADSTAT_LAN_63, 'perm' => 'P'), - 'main/rempage' => array('caption'=> ADSTAT_LAN_26, 'perm' => 'P'), - 'main/history' => array('caption'=> ADSTAT_LAN_69, 'perm' => 'P'), - 'main/rebuild' => array('caption'=> ADSTAT_LAN_87, 'perm'=> 'P'), - ); - - - - - - protected $adminMenuAliases = array( - 'main/edit' => 'main/list' - ); - - protected $menuTitle = ADSTAT_L3; - } - - - // List of the non-page-based info which is gathered - historically only 'all-time' stats, now we support monthly as well - $stats_list = array('statBrowser'=>ADSTAT_LAN_6,'statOs'=>ADSTAT_LAN_7,'statScreen'=>ADSTAT_LAN_8,'statDomain'=>ADSTAT_LAN_9,'statReferer'=>ADSTAT_LAN_10,'statQuery'=>ADSTAT_LAN_11); - - $separator_list = array(1 => ADSTAT_LAN_57, 2 => ADSTAT_LAN_58); - $separator_char = array(1 => ',', 2 => '|'); - $quote_list = array(1 => ADSTAT_LAN_50, 2 => ADSTAT_LAN_55, 3 => ADSTAT_LAN_56); - $quote_char = array(1 => '', 2 => "'", 3 => '"'); - - - //--------------------------------------------- - // Export data file - //--------------------------------------------- - $export_filter = ''; // can be 'LIKE', 'REGEX', or simple equality - $export_type = $tp->toDB(varset($_POST['export_type'],'page')); // Page data or one of the other bits of info - $export_date = intval(varset($_POST['export_date'],1)); - $export2_date = intval(varset($_POST['export2_date'],3)); - $export_year = intval(varset($_POST['export_year'],date('Y'))); - $export_month = intval(varset($_POST['export_month'],date('m'))); - $export_day = intval(varset($_POST['export_day'],date('j'))); - $export_char = varset($_POST['export_char'], 1); - $export_quote = varset($_POST['export_quote'], 1); - $export_stripurl = varset($_POST['export_stripurl'], 0); - - - - - - - - - class logstats_ui extends e_admin_ui - { - - protected $pluginTitle = ADSTAT_L3; - protected $pluginName = 'log'; - // protected $eventName = 'log-logstats'; // remove comment to enable event triggers in admin. - protected $table = 'logstats'; - protected $pid = 'log_uniqueid'; - protected $perPage = 10; - protected $batchDelete = true; - // protected $batchCopy = true; - // protected $sortField = 'somefield_order'; - // protected $orderStep = 10; - // protected $tabs = array('Tabl 1','Tab 2'); // Use 'tab'=>0 OR 'tab'=>1 in the $fields below to enable. - protected $listQry = "SELECT * FROM `#logstats` WHERE `log_id` = 'pageTotal' OR (`log_id` REGEXP '^[0-9]' AND LENGTH(log_id) > 7 AND LENGTH(log_id) < 11) "; - - // protected $listQry = "SELECT * FROM `#tableName` WHERE field != '' "; // Example Custom Query. LEFT JOINS allowed. Should be without any Order or Limit. - - protected $listOrder = 'CASE log_id WHEN "pageTotal" THEN 9999 ELSE DATE(log_id) END DESC '; - - - protected $fields = array ( 'checkboxes' => array ( 'title' => '', 'type' => null, 'data' => null, 'width' => '5%', 'thclass' => 'center', 'forced' => '1', 'class' => 'center', 'toggle' => 'e-multiselect', ), - 'log_uniqueid' => array ( 'title' => LAN_ID, 'data' => 'int', 'width' => '5%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ), - 'log_id' => array ( 'title' => LAN_DATE, 'type' => 'method', 'data' => 'str', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ), - 'log_data' => array ( 'title' => ADSTAT_L21, 'type' => 'method', 'data' => 'str', 'width' => '20%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'right', 'thclass' => 'right', ), - 'log_data2' => array ( 'title' => ADSTAT_L22, 'type' => 'method', 'data' => false, 'width' => '20%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'right', 'thclass' => 'right', ), - - 'options' => array ( 'title' => LAN_OPTIONS, 'type' => 'method', 'data' => null, 'width' => '15%', 'thclass' => 'right last', 'class' => 'right last', 'forced' => '1', ), - ); - - protected $fieldpref = array(); - - - // protected $preftabs = array('General', 'Other' ); - protected $prefs = array( - ); - - - public function init() - { - if(!empty($_POST['rebuild'])) - { - require_once(e_PLUGIN.'log/consolidate.php'); - $lgc = new logConsolidate(); - $file = $_POST['rebuild']."_SiteStats.log"; - $lgc->processRawBackupLog($file, true); - } - - if(!empty($_POST['rebuildTotal'])) - { - require_once(e_PLUGIN.'log/consolidate.php'); - $lgc = new logConsolidate(); - - if($lgc->collatePageTotalDB()) - { - e107::getMessage()->addSuccess(LAN_UPDATED); - } - else - { - e107::getMessage()->addError(LAN_UPDATED_FAILED); - } - - } - - // Set drop-down values (if any). - if (isset($_POST['updatesettings'])) - { - $this->prefsPageSubmit(); - } - - if(isset($_POST['remSelP'])) - { - $this->rempagePageSubmit(); // Do the deletions - then redisplay the list of pages - } - - - if(isset($_POST['wipeSubmit'])) - { - $this->wipe(); - } - } - - - /** - * Wipe accumulated stats - */ - private function wipe() - { - $sql = e107::getDb(); - - $logStr = ''; - foreach($_POST['wipe'] as $key => $wipe) - { - switch($key) - { - case "statWipePage": - $sql->update("logstats", "log_data='' WHERE log_id='pageTotal' "); - $sql->update("logstats", "log_data='' WHERE log_id='statTotal' "); - $sql->update("logstats", "log_data='' WHERE log_id='statUnique' "); - break; - - case "statWipeBrowser": - $sql->update("logstats", "log_data='' WHERE log_id='statBrowser' "); - break; - - case "statWipeOs": - $sql->update("logstats", "log_data='' WHERE log_id='statOs' "); - break; - - case "statWipeScreen": - $sql->update("logstats", "log_data='' WHERE log_id='statScreen' "); - break; - - case "statWipeDomain": - $sql->update("logstats", "log_data='' WHERE log_id='statDomain' "); - break; - - case "statWipeRefer": - $sql->update("logstats", "log_data='' WHERE log_id='statReferer' "); - break; - - case "statWipeQuery": - $sql->update("logstats", "log_data='' WHERE log_id='statQuery' "); - break; - - } - - $logStr .= '[!br!]'.$key; - } - - e107::getLog()->add('STAT_01',ADSTAT_LAN_81.$logStr,''); - - e107::getMessage()->addSuccess(LAN_UPDATED); - - } - - private function get_for_delete($keep_year,$keep_month = 1, $filter='*') - { - - $sql = e107::getDb(); - - global $stats_list; - $ret = array(); - // Its tedious, but the filter criteria are sufficiently tricky that its probably best to read all records and decide what can go - if ($sql->select('logstats','log_id')) - { - while ($row = $sql->fetch()) - { - $can_go = FALSE; - $check = FALSE; - $data_type = 'unknown'; - $date_info = $row['log_id']; - if (($temp = strpos($date_info,':')) !== FALSE) - { // its monthly browser stats and similar -// echo "Checking {$date_info}, posn = {$temp} "; - $data_type = substr($date_info,0,$temp); - $date_info = substr($date_info,$temp+1); - $check = TRUE; -// echo "Date string: {$date_info}, data type: {$data_type}
"; - if (isset($stats_list[$data_type])) $data_type = $stats_list[$data_type]; - } - list($poss_year,$poss_month,$poss_day) = explode('-',$date_info.'--',3); - if (!$check) - { - if (is_numeric($poss_year)) - { - $check = TRUE; - if ($poss_day > 0) $data_type = 'daily'; else $data_type = 'monthly'; - } - } - if ($check) - { - if ($keep_year == $poss_year) - { - if (($poss_month > 0) && ($poss_month < $keep_month)) $can_go = TRUE; - } - elseif ($keep_year > $poss_year) $can_go = TRUE; - } - if ($can_go) - { - $ret[$row['log_id']] = $row['log_id']." - ".$data_type; - } - } - } - - return $ret; - - } - - private function data_type_select($name,$value) - { - global $stats_list; - - $ret = "\n"; - return $ret; - } - - - - private function gen_select($prompt,$name,$value) - { - $ret = "
- ".$prompt."
"; - return $ret; - } - - - function datasetsPage() - { - return $this->export('datasets'); - } - - function exportPage() - { - return $this->export('export'); - } - - - function runExport() - { - - if (isset($_POST['create_export']) ) - { - $export_type = $_POST['export_type']; - $export_month = $_POST['export_month']; - $export_year = $_POST['export_year']; - $export_day = $_POST['export_day']; - $export_date = $_POST['export_date']; - $export2_date = $_POST['export2_date']; - - $first_date = 0; - $last_date = 0; - $date_error = FALSE; - if ($export_type == 'page') - { - switch ($export_date) - { - case '1' : // Single day - $first_date = gmmktime(0,0,0,$export_month,$export_day,$export_year); - $last_date = $first_date+86399; - $export_filter = " `log_id`='".date("Y-m-j",$first_date)."'"; - break; - case '2' : // Daily for a month - $first_date = gmmktime(0,0,0,$export_month,1,$export_year); - $last_date = gmmktime(0,0,0,$export_month+1,1,$export_year) - 1; - $export_filter = " LEFT(`log_id`,8)='".gmstrftime("%Y-%m-",$first_date)."'"; - break; - case '3' : // Monthly for a Year - $first_date = gmmktime(0,0,0,1,1,$export_year); - $last_date = gmmktime(0,0,0,1,1,$export_year+1) - 1; - $export_filter = " LENGTH(`log_id`)=7 AND LEFT(`log_id`,5)='".gmstrftime("%Y-",$first_date)."'"; - break; - case '4' : // Accumulated - case '5' : - $export_filter = "`log_id`='pageTotal'"; - $date_error = 'ignore'; - break; - } - } - else - { // Calculate strings for non-page sources - $prefix_len = 0; - $export_date = $export2_date; - if (isset($stats_list[$export_type])) - { - $prefix_len = strlen($export_type) + 1; - switch ($export2_date) - { - case '3' : // Monthly for a Year - if ($prefix_len > 0) - { - $first_date = gmmktime(0,0,0,1,1,$export_year); - $last_date = gmmktime(0,0,0,1,1,$export_year+1) - 1; - $export_filter = " LENGTH(`log_id`)='".($prefix_len + 7)."' AND LEFT(`log_id`,".($prefix_len + 5).")='".$export_type.":".gmstrftime("%Y-",$first_date)."'"; - } - break; - case '4' : // Accumulated - $export_filter = " `log_id`='".$export_type."'"; - $date_error = 'ignore'; - break; - } - } - else - { - $message = ADSTAT_LAN_54; - } - } - if (($date_error != 'ignore') && (($first_date == 0) || ($last_date == 0) || $date_error)) - { - $message = ADSTAT_LAN_47; - } - } - - - - - } - - private function export($action) - { - $this->runExport(); - - global $export_type, $export_date, $export2_date, $export_day, $export_month, $export_year, $separator_list, - $export_char, $quote_list, $export_quote, $export_filter; - - $frm = e107::getForm(); - $sql = e107::getDb(); - - $text = "
"; - - if ($action == 'export') - { - $text .= "
"; - } - else - { - $text .= ""; - } - - $text .= " - - - - - "; - - if ($action == 'export') - { - $text .= ""; - } - else - { - $text .= ""; - } - - // Type of output data - page data, browser stats.... - $text .= "'; - // Period selection type for page data - $text .= ""; - - - - $text .= ""; - - - if ($action == 'export') - { - // Separators, quotes - $text .= ""; - - $text .= " - - - "; - } - - - if ($export_filter) - { - if (getperms('0')) $text .= ""; - $sql ->select("logstats", "log_id", "{$export_filter} "); - $text .= ""; - } - - $text .= " -
".ADSTAT_LAN_67."
".ADSTAT_LAN_68."
".ADSTAT_LAN_51."\n".$this->data_type_select('export_type',$export_type).'
".ADSTAT_LAN_41."\n - "; - - // Period selection type for non-page data - $text .= " - "; - - $text .= "
".ADSTAT_LAN_46."\n"; - - - // Now put the various dropdowns - their visibility is controlled by the export_type dropdown - - $text .= "\n   "; - - - $text .= "\n   "; - - $this_year = date("Y"); - $text .= "\n   "; - - $text .= "\n"; - - $text .= "
".ADSTAT_LAN_59."\n - \n    \n
".ADSTAT_LAN_60."".$frm->checkbox('export_stripurl', 1)."".ADSTAT_LAN_61."
".ADSTAT_LAN_65."".$export_filter."
".ADSTAT_LAN_64.""; - while($row = $sql ->fetch()) - { - $text .= $row['log_id']."
"; - } - $text .= "
-
- ".$frm->admin_button('create_export', ($action == 'export' ? LAN_CREATE : ADSTAT_LAN_66), 'update')." -
-
-
"; - - // Set up the date display boxes - $text .= ""; - - return $text; - //$ns->tablerender(ADSTAT_LAN_40, $text); - } - - - - private function rempagePageSubmit() - { - - $ipAddresses = null; - $siteTotal = null; - $siteUnique = null; - - $sql = e107::getDb(); - - $pageInfo = array(); - - $sql->select("logstats", "*", "log_id='pageTotal' "); - $row = $sql ->fetch(); - $pageTotal = unserialize($row['log_data']); - $logfile = e_LOG."logp_".date("z.Y", time()).".php"; - - if(is_readable($logfile)) - { - require($logfile); - } - - foreach($_POST['remcb'] as $page) - { - unset($pageInfo[$page]); - unset($pageTotal[$page]); - } - - $pagetotal = serialize($pageTotal); - - if(!$sql->update("logstats", "log_data='{$pagetotal}' WHERE log_id='pageTotal' ")) - { - $sql->insert("logstats", "0, 'pageTotal', '{$pagetotal}' "); - } - - e107::getLog()->add('STAT_03',ADSTAT_LAN_80."[!br!]".implode("[!br!]",$_POST['remcb']),''); - - $varStart = chr(36); - $quote = chr(34); - - $data = chr(60)."?php\n". chr(47)."* e107 website system: Log file: ".date("z:Y", time())." *". chr(47)."\n\n". - $varStart."ipAddresses = ".$quote.$ipAddresses.$quote.";\n". - $varStart."siteTotal = ".$quote.$siteTotal.$quote.";\n". - $varStart."siteUnique = ".$quote.$siteUnique.$quote.";\n"; - - $loop = FALSE; - $data .= $varStart."pageInfo = array(\n"; - foreach($pageInfo as $info) - { - $page = preg_replace("/(\?.*)|(\_.*)|(\.php)|(\s)|(\')|(\")|(eself)|( )/", "", basename ($info['url'])); - $page = str_replace("\\", "", $page); - $info['url'] = preg_replace("/(\s)|(\')|(\")|(eself)|( )/", "", $info['url']); - $info['url'] = str_replace("\\", "", $info['url']); - $page = trim($page); - if($page && strpos($page, "cache") === false && strpos($page, "file:") === false) - { - if($loop){ $data .= ",\n"; } - $data .= $quote.$page.$quote." => array('url' => '".$info['url']."', 'ttl' => ".$info['ttl'].", 'unq' => ".$info['unq'].")"; - $loop = 1; - } - } - - $data .= "\n);\n\n?". chr(62); - - if ($handle = fopen($logfile, 'w')) - { - fwrite($handle, $data); - } - fclose($handle); - } - - - - function rempagePage() - { - $sql = e107::getDb(); - $frm = e107::getForm(); - $pageInfo = array(); - $tp = e107::getParser(); - - $logfile = e_LOG."logp_".date("z.Y", time()).".php"; - // $logfile = e_PLUGIN."log/logs/logp_".date("z.Y", time()).".php"; - if(is_readable($logfile)) - { - require($logfile); - } - - $sql ->select("logstats", "*", "log_id='pageTotal' "); - $row = $sql ->fetch(); - $pageTotal = unserialize($row['log_data']); - - - - foreach($pageInfo as $url => $tmpcon) - { - $pageTotal[$url]['url'] = $tmpcon['url']; - $pageTotal[$url]['ttlv'] += $tmpcon['ttl']; - $pageTotal[$url]['unqv'] += $tmpcon['unq']; - } - - - - $text = " -
- - - - - - - - - "; - - foreach($pageTotal as $key => $page) - { - - list($name,$lang) = explode("|",$key); - - $text .= " - - - - - - - - "; - } - - $text .= " -
".ADSTAT_LAN_30." ...".ADSTAT_LAN_86."".ADSTAT_LAN_29."URL
".number_format($page['ttlv'])."{$name}".$tp->text_truncate($page['url'],100)."
-
- ".$frm->admin_button('remSelP', ADSTAT_LAN_31, 'delete')." - - - "; - - return $text; - - // $ns -> tablerender(ADSTAT_LAN_32, $text); - } - - - function rebuildPage() - { - $frm = e107::getForm(); - $mes = e107::getMessage(); - $tp = e107::getParser(); - - $mes->addWarning(ADSTAT_LAN_84); - $text = $frm->open('rebuild'); - - $files = e107::getFile()->get_files(e_LOG."log",'_SiteStats\.log$'); - - // print_a($_SESSION['stats_log_files']); - - $_SESSION['stats_log_files'] = array(); - $_SESSION['stats_log_files_count'] = 0; - - foreach($files as $f) - { - $_SESSION['stats_log_files'][] = array('path'=> $f['fname'], 'complete'=>0); - } - - $_SESSION['stats_log_files_total'] = count($_SESSION['stats_log_files']); - - // $text .= // . " log files have been found. Click the button below to process these files.

"; - $mes->addWarning($tp->lanVars(ADSTAT_LAN_85, $_SESSION['stats_log_files_total'], true)); - - if(!empty($_SESSION['stats_log_files_total'])) - { - $text .= $frm->progressBar('rebuild-progress',0,array("btn-label"=> ADSTAT_LAN_88, 'url'=>e_REQUEST_URI)); - } - - $text .= $frm->close(); - return $text; - - - } - - - - function historyPage() - { - $mes = e107::getMessage(); - $frm = e107::getForm(); - $sql = e107::getDb(); - - $mes->addWarning(ADSTAT_LAN_76); - $text = " - -
- - - - - "; - - $keep_month = varset($_POST['delete_month'],0); - $keep_year = varset($_POST['delete_year'],0); - - if (isset($_POST['delete_history'])) - { - $text .= " - "; - $text .= ""; - } - else - { - if (isset($_POST['actually_delete'])) - { - $delete_list = $this->get_for_delete($keep_year,$keep_month); - $logStr = ''; - // $text .= ""; - $text .= ""; - e107::getLog()->add('STAT_04',ADSTAT_LAN_83.$logStr,''); - } - - $text .= ""; - $text .= ""; - } - - $text .= "
".ADSTAT_LAN_72."".nl_langinfo(constant('MON_'.$keep_month))." ".$keep_year."
- - - ".$frm->admin_button('actually_delete', LAN_CONFDELETE, 'delete')."
".ADSTAT_LAN_74." -
".ADSTAT_LAN_75."".implode("
",$this->get_for_delete($keep_year,$keep_month))."
Data notionally deleted {$keep_month}-{$keep_year}
".ADSTAT_LAN_77.""; - - foreach ($delete_list as $k => $v) - { - $sql->delete('logstats',"log_id='{$k}'"); - $text .= $v."
"; - $logStr .= "[!br!]{$k} => ".$v; - } - - $text .= "
".ADSTAT_LAN_70."\n   "; - $this_year = date("Y"); - - $text .= "\n
- -
- ".$frm->admin_button('delete_history',LAN_DELETE,'delete')." -
- -
"; - - return $text; - // $ns->tablerender(ADSTAT_LAN_69, $mes->render().$text); - } - - - - private function prefsPageSubmit() - { - - $statList = array( // Type = 0 for direct text, 1 for integer - 'statActivate' => 0, - 'statCountAdmin' => 0, - 'statUserclass' => 0, - 'statBrowser' => 1, - 'statOs' => 1, - 'statScreen' => 1, - 'statDomain' => 1, - 'statRefer' => 1, - 'statQuery' => 1, - 'statRecent' => 1, - 'statDisplayNumber' => 0, - 'statPrevMonth' => 1 - ); - $logStr = ''; - - $pref = array(); - - foreach ($statList as $k => $type) - { - switch ($type) - { - case 0 : $pref[$k] = $_POST[$k]; break; - case 1 : $pref[$k] = intval($_POST[$k]); break; - } - $logStr .= "[!br!]{$k} => ".$pref[$k]; - } - - e107::getConfig()->setPref($pref)->save(false,true,true); - - file_put_contents(e_LOG.LogFlagFile, "\n"); // Logging task uses to see if logging enabled - e107::getLog()->add('STAT_02',ADSTAT_LAN_82.$logStr,''); - - - } - - - public function prefsPage() - { - - $pref = e107::getPref(); - - $frm = e107::getForm(); - - $text = " -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
".ADSTAT_LAN_4."".$frm->radio_switch('statActivate', varset($pref['statActivate']))."
".ADSTAT_LAN_18."".r_userclass("statUserclass", varset($pref['statUserclass']),'off','public, member, admin, classes')."
".ADSTAT_LAN_20."".$frm->radio_switch('statCountAdmin', varset($pref['statCountAdmin']))."
".ADSTAT_LAN_21."
".ADSTAT_LAN_5." - ".$this->gen_select(ADSTAT_LAN_6, 'statBrowser', varset($pref['statBrowser'])) - .$this->gen_select(ADSTAT_LAN_7, 'statOs', varset($pref['statOs'])) - .$this->gen_select(ADSTAT_LAN_8, 'statScreen',varset($pref['statScreen'])) - .$this->gen_select(ADSTAT_LAN_9, 'statDomain',varset($pref['statDomain'])) - .$this->gen_select(ADSTAT_LAN_10, 'statRefer',varset($pref['statRefer'])) - .$this->gen_select(ADSTAT_LAN_11, 'statQuery',varset($pref['statQuery'])) - ."
".ADSTAT_LAN_19." - ".$frm->radio_switch('statRecent', varset($pref['statRecent']))."
-
".ADSTAT_LAN_78."".$frm->checkbox('statPrevMonth', 1, varset($pref['statPrevMonth'],0))."".ADSTAT_LAN_79."
".ADSTAT_LAN_12." - ".$frm->checkbox('wipe[statWipePage]', 1, false, array('label'=> ADSTAT_LAN_14 ))." - ".$frm->checkbox('wipe[statWipeBrowser]', 1, false, array('label'=>ADSTAT_LAN_6))." - ".$frm->checkbox('wipe[statWipeOs]', 1, false, array('label'=> ADSTAT_LAN_7 ))." - ".$frm->checkbox('wipe[statWipeScreen]', 1, false, array('label'=> ADSTAT_LAN_8 ))." - ".$frm->checkbox('wipe[statWipeDomain]', 1, false, array('label'=> ADSTAT_LAN_9 ))." - ".$frm->checkbox('wipe[statWipeRefer]', 1, false, array('label'=> ADSTAT_LAN_10 ))." - ".$frm->checkbox('wipe[statWipeQuery]', 1, false, array('label'=> ADSTAT_LAN_11 ))." -
- ".$frm->admin_button('wipeSubmit', LAN_RESET, 'delete')."".ADSTAT_LAN_13." -
".ADSTAT_LAN_26."".$frm->admin_button('openRemPageD', ADSTAT_LAN_28, 'other')."".ADSTAT_LAN_27."
-
- ".$frm->admin_button('updatesettings', LAN_UPDATE, 'update')." -
-
"; - - return $text; - // $ns->tablerender(ADSTAT_LAN_16, $text); - } - - - - - /* - // optional - a custom page. - public function customPage() - { - $text = 'Hello World!'; - return $text; - - } - */ - - } - - - - class logstats_form_ui extends e_admin_form_ui - { - - function log_id($curVal,$mode) - { - switch($mode) - { - case 'read': // List Page - - if($curVal == 'pageTotal') - { - return ADSTAT_LAN_45; // All Time. - } - - return $curVal; - break; - - case 'write': // Edit Page - return ''; - break; - - case 'filter': - case 'batch': - return array(); - break; - } - - } - - - function parseLogData($type) - { - $row = $this->getController()->getListModel()->getData(); - $curVal = $row['log_data']; - - if($row['log_id'] == 'pageTotal') - { - $tmp = unserialize($curVal); - - $ttl = 0; - $unq = 0; - - foreach($tmp as $k=>$v) - { - $ttl += $v['ttlv']; - $unq += $v['unqv']; - } - - if($type == 'total') - { - return number_format($ttl); - } - elseif($type == 'unique') - { - return number_format($unq); - } - - return "
".ADSTAT_L21.": ".number_format($ttl)."
".ADSTAT_L22.": ".number_format($unq)."
Total Pages: ".number_format(count($tmp))."
"; - - - // return print_a($tmp,true); - } - - if(!empty($curVal)) - { - $tmp = explode(chr(1), $curVal, 3); - - if($type == 'total') - { - return number_format($tmp[0]); - } - elseif($type == 'unique') - { - return number_format($tmp[1]); - } - - // return "
".ADSTAT_L21.": ".number_format($tmp[0])."
".ADSTAT_L22.": ".number_format($tmp[1])."
"; - } - - } - - // Total Hits - function log_data($curVal,$mode) - { - - switch($mode) - { - case 'read': // List Page - - return $this->parseLogData('total'); - break; - - case 'write': // Edit Page - // return $this->text('log_data',$curVal, 255, 'size=large'); - break; - - case 'filter': - case 'batch': - return array(); - break; - } - - return null; - } - - - // unique hits - function log_data2($curVal,$mode) - { - - switch($mode) - { - case 'read': // List Page - - return $this->parseLogData('unique'); - break; - - case 'write': // Edit Page - // return $this->text('log_data',$curVal, 255, 'size=large'); - break; - - case 'filter': - case 'batch': - return array(); - break; - } - - return null; - } - - - - function options($curVal,$mode) - { - $row = $this->getController()->getListModel()->getData(); - $date = $row['log_id']; - - if($date == 'pageTotal') - { - return $this->button('rebuildTotal', 1, 'delete', ADSTAT_LAN_89); - } - - - $unix = strtotime($date); - - if(empty($unix)) - { - return null; - } - - $datestamp = date("Y-m-d", $unix); - - $file = e_LOG."log/".$datestamp."_SiteStats.log"; - - if(is_readable($file)) - { - return $this->button('rebuild', $datestamp, 'delete', ADSTAT_LAN_89); - } - else - { - return null; - } - - } - - } - - - new log_adminArea(); - - require_once(e_ADMIN."auth.php"); - e107::getAdminUI()->runPage(); - - require_once(e_ADMIN."footer.php"); - - - -/* -function headerjs() -{ - $script_js = "\n"; - return $script_js; -} - -*/ - - diff --git a/e107_plugins/log/consolidate.php b/e107_plugins/log/consolidate.php deleted file mode 100644 index d71ef6007..000000000 --- a/e107_plugins/log/consolidate.php +++ /dev/null @@ -1,857 +0,0 @@ -pathtologs = e_LOG; - $this->date = date("z.Y", time()); - $this->yesterday = date("z.Y",(time() - 86400)); // This makes sure year wraps round OK - $this->date2 = date("Y-m-j", (time() -86400)); // Yesterday's date for the database summary - $this->date3 = date("Y-m", (time() -86400)); // Current month's date for monthly summary (we're working with yesterday's data) - - $this->pfileprev = "logp_".$this->yesterday.".php"; // Yesterday's log file - $this->pfile = "logp_".$this->date.".php"; // Today's log file - $this->ifileprev = "logi_".$this->yesterday.".php"; - $this->ifile = "logi_".$this->date.".php"; - } - - - function run() - { - - $sql = e107::getDb(); - $pref = e107::pref('core'); - - $pageInfo = array(); - $domainInfo = array(); - $screenInfo = array(); - $browserInfo = array(); - $osInfo = array(); - $refInfo = array(); - $searchInfo = array(); - - $monthlyInfo = array(); - $mon_statBrowser = array(); - $mon_statOs = array(); - $mon_statScreen = array(); - $mon_statDomain = array(); - $mon_statQuery = array(); - $statBrowser = array(); - $statOs = array(); - $statScreen = array(); - $statDomain = array(); - $statQuery = array(); - $statReferer = array(); - - $statTotal = 0; - $statUnique = 0; - $siteTotal = 0; - $siteUnique = 0; - - $MonthlyExistsFlag = false; - - if(file_exists($this->pathtologs.$this->pfile)) /* log file is up to date, no consolidation required */ - { - return false; - } - else if(!file_exists($this->pathtologs.$this->pfileprev)) // See if any older log files - { - if (($retvalue = $this->check_for_old_files($this->pathtologs)) === false) /* no logfile found at all - create - this will only ever happen once ... */ - { - $this->createLog(); - return false; - } - - list($this->pfileprev,$this->ifileprev,$this->date2,$tstamp) = explode('|',$retvalue); // ... if we've got files - } - - unset($tstamp); - - // List of the non-page-based info which is gathered - historically only 'all-time' stats, now we support monthly as well - $stats_list = array('statBrowser','statOs','statScreen','statDomain','statReferer','statQuery'); - - $qry = "`log_id` IN ('statTotal','statUnique'"; - foreach ($stats_list as $s) - { - $qry .= ",'{$s}'"; // Always read the all-time stats - if ($pref[$s] == 2) $qry .= ",'{$s}:{$this->date3}'"; // Look for monthlys as well as cumulative - } - $qry .= ")"; - - /* log file is out of date - consolidation required */ - - /* get existing stats ... */ - //if($sql->select("logstats", "*", "log_id='statBrowser' OR log_id='statOs' OR log_id='statScreen' OR log_id='statDomain' OR log_id='statTotal' OR log_id='statUnique' OR log_id='statReferer' OR log_id='statQuery'")) - if($sql->select("logstats", "*", $qry)) - { // That's read in all the stats we need to modify - while($row = $sql->fetch()) - { - if($row['log_id'] == "statUnique") - { - $statUnique = $row['log_data']; - } - elseif ($row['log_id'] == "statTotal") - { - $statTotal = $row['log_data']; - } - elseif (($pos = strpos($row['log_id'],':')) === false) - { // Its all-time stats - $$row['log_id'] = unserialize($row['log_data']); // $row['log_id'] is the stats type - save in a variable - } - else - { // Its monthly stats - $row['log_id'] = 'mon_'.substr($row['log_id'],0,$pos); // Create a generic variable for each monthly stats - $$row['log_id'] = unserialize($row['log_data']); // $row['log_id'] is the stats type - save in a variable - } - } - } - else - { - // this must be the first time a consolidation has happened - this will only ever happen once ... - $sql->insert("logstats", "0, 'statBrowser', ''"); - $sql->insert("logstats", "0, 'statOs', ''"); - $sql->insert("logstats", "0, 'statScreen', ''"); - $sql->insert("logstats", "0, 'statDomain', ''"); - $sql->insert("logstats", "0, 'statReferer', ''"); - $sql->insert("logstats", "0, 'statQuery', ''"); - $sql->insert("logstats", "0, 'statTotal', '0'"); - $sql->insert("logstats", "0, 'statUnique', '0'"); - - $statBrowser =array(); - $statOs =array(); - $statScreen =array(); - $statDomain =array(); - $statReferer =array(); - $statQuery =array(); - } - - - foreach ($stats_list as $s) - { - $varname = 'mon_'.$s; - if (!isset($$varname)) $$varname = array(); // Create monthly arrays if they don't exist - } - - if(file_exists($this->pathtologs.$this->pfileprev)) - { - require($this->pathtologs.$this->pfileprev); // Yesterday's page accesses - $pageInfo array - } - - if(file_exists($this->pathtologs.$this->ifileprev)) - { - require($this->pathtologs.$this->ifileprev); // Yesterdays browser accesses etc - } - - foreach($browserInfo as $name => $amount) - { - $statBrowser[$name] += $amount; - $mon_statBrowser[$name] += $amount; - } - - foreach($osInfo as $name => $amount) - { - $statOs[$name] += $amount; - $mon_statOs[$name] += $amount; - } - - foreach($screenInfo as $name => $amount) - { - $statScreen[$name] += $amount; - $mon_statScreen[$name] += $amount; - } - - - foreach($domainInfo as $name => $amount) - { - if(!is_numeric($name)) - { - $statDomain[$name] += $amount; - $mon_statDomain[$name] += $amount; - } - } - - foreach($refInfo as $name => $info) - { - $statReferer[$name]['url'] = $info['url']; - $statReferer[$name]['ttl'] += $info['ttl']; - $mon_statReferer[$name]['url'] = $info['url']; - $mon_statReferer[$name]['ttl'] += $info['ttl']; - } - - - foreach($searchInfo as $name => $amount) - { - $statQuery[$name] += $amount; - $mon_statQuery[$name] += $amount; - } - - $browser = serialize($statBrowser); - $os = serialize($statOs); - $screen = serialize($statScreen); - $domain = serialize($statDomain); - $refer = serialize($statReferer); - $squery = serialize($statQuery); - - $statTotal += $siteTotal; - $statUnique += $siteUnique; - - // Save cumulative results - always keep track of these, even if the $pref doesn't display them - $sql->update("logstats", "log_data='{$browser}' WHERE log_id='statBrowser'"); - $sql->update("logstats", "log_data='{$os}' WHERE log_id='statOs'"); - $sql->update("logstats", "log_data='{$screen}' WHERE log_id='statScreen'"); - $sql->update("logstats", "log_data='{$domain}' WHERE log_id='statDomain'"); - $sql->update("logstats", "log_data='{$refer}' WHERE log_id='statReferer'"); - $sql->update("logstats", "log_data='{$squery}' WHERE log_id='statQuery'"); - $sql->update("logstats", "log_data='".intval($statTotal)."' WHERE log_id='statTotal'"); - $sql->update("logstats", "log_data='".intval($statUnique)."' WHERE log_id='statUnique'"); - - - // Now save the relevant monthly results - only where enabled - foreach ($stats_list as $s) - { - if (isset($pref[$s]) && ($pref[$s] > 1)) - { // Value 2 requires saving of monthly stats - $srcvar = 'mon_'.$s; - $destvar = 'smon_'.$s; - $$destvar = serialize($$srcvar); - - if (!$sql->update("logstats", "log_data='".$$destvar."' WHERE log_id='".$s.":".$this->date3."'")) - { - $sql->insert("logstats", "0, '".$s.":".$this->date3."', '".$$destvar."'"); - } - } - } - - - /* get page access monthly info from db */ - if($sql->select("logstats", "*", "log_id='{$this->date3}' ")) - { - $tmp = $sql->fetch(); - $monthlyInfo = unserialize($tmp['log_data']); - unset($tmp); - $MonthlyExistsFlag = TRUE; - } - - foreach($pageInfo as $key => $info) - { - $monthlyInfo['TOTAL']['ttlv'] += $info['ttl']; - $monthlyInfo['TOTAL']['unqv'] += $info['unq']; - $monthlyInfo[$key]['ttlv'] += $info['ttl']; - $monthlyInfo[$key]['unqv'] += $info['unq']; - } - - $monthlyinfo = serialize($monthlyInfo); - - if($MonthlyExistsFlag) - { - $sql->update("logstats", "log_data='{$monthlyinfo}' WHERE log_id='{$this->date3}'"); - } - else - { - $sql->insert("logstats", "0, '{$this->date3}', '{$monthlyinfo}'"); - } - - - $this->collatePageTotal($pageInfo); - $this->collatePageInfo($pageInfo, $this->date2); - $this->resetLogFiles(); - - /* and finally, we need to create new logfiles for today ... */ - $this->createLog(); - - return true; - } - - - - - function createLog() - { - - if(!is_writable($this->pathtologs)) - { - echo "
Log directory is not writable - please CHMOD ".e_LOG." to 777"; - echo '
Path to logs: '.$this->pathtologs; - echo "
"; - - return false; - } - - $varStart = chr(36); - $quote = chr(34); - - $data = chr(60)."?php\n". chr(47)."* e107 website system: Log file: ".date("z:Y", time())." *". chr(47)."\n\n". - $varStart."refererData = ".$quote.$quote.";\n". - $varStart."ipAddresses = ".$quote.$quote.";\n". - $varStart."hosts = ".$quote.$quote.";\n". - $varStart."siteTotal = ".$quote."0".$quote.";\n". - $varStart."siteUnique = ".$quote."0".$quote.";\n". - $varStart."screenInfo = array();\n". - $varStart."browserInfo = array();\n". - $varStart."osInfo = array();\n". - $varStart."pageInfo = array(\n"; - - $data .= "\n);\n\n?". chr(62); - - if(!touch($this->pathtologs.$this->pfile)) - { - return false; - } - - if(!touch($this->pathtologs.$this->ifile)) - { - return false; - } - - if(!is_writable($this->pathtologs.$this->pfile)) - { - $old = umask(0); - chmod($this->pathtologs.$this->pfile, 0777); - umask($old); - // return false; - } - - if(!is_writable($this->pathtologs.$this->ifile)) - { - $old = umask(0); - chmod($this->pathtologs.$this->ifile, 0777); - umask($old); - // return false; - } - - if ($handle = fopen($this->pathtologs.$this->pfile, 'w')) - { - fwrite($handle, $data); - } - - fclose($handle); - - - $data = ""; - - if ($handle = fopen($this->pathtologs.$this->ifile, 'w')) - { - fwrite($handle, $data); - } - fclose($handle); - - return true; - } - - - - - /** - * Called if both today's and yesterday's log files missing, to see - * if there are any older files we could process. Return false if nothing - * Otherwise return a string of relevant information - * @param $pathtologs - * @return bool|string - */ - function check_for_old_files($pathtologs) - { - // $no_files = TRUE; - if ($dir_handle = opendir($pathtologs)) - { - while (false !== ($file = readdir($dir_handle))) - { - // Do match on #^logp_(\d{1,3})\.php$#i - if (preg_match('#^logp_(\d{1,3}\.\d{4})\.php$#i',$file,$match) == 1) - { // got a matching file - $yesterday = $match[1]; // Day of year - zero is 1st Jan - $pfileprev = "logp_".$yesterday.".php"; // Yesterday's log file - $ifileprev = "logi_".$yesterday.".php"; - list($day,$year) = explode('.',$yesterday); - $tstamp = mktime(0,0,0,1,1,$year) + ($day*86400); - $date2 = date("Y-m-j", $tstamp); // Yesterday's date for the database summary - $temp = array($pfileprev,$ifileprev,$date2,$tstamp); - return implode('|',$temp); - } - } - } - return false; - } - - - - - - // for future use. - private function collate($pfile) - { - if(is_readable(e_LOG.$pfile)) - { - require(e_LOG.$pfile); // contains $pageInfo; - } - else - { - return false; - } - - return null; - } - - - - - /** - * @param $url - * @param bool $logQry - * @param string $err_code - * @return bool|mixed|string - */ - function getPageKey($url,$logQry=false,$err_code='', $lan=null) - { - $pageDisallow = "cache|file|eself|admin"; - $tagRemove = "(\\\)|(\s)|(\')|(\")|(eself)|( )|(\.php)|(\.html)"; - - // preg_match("#/(.*?)(\?|$)(.*)#si", $url, $match); - // $match[1] = isset($match[1]) ? $match[1] : ''; - // $pageName = substr($match[1], (strrpos($match[1], "/")+1)); - - if(deftrue('e_DOMAIN')) - { - list($discard,$pageName) = explode(e_DOMAIN.'/',$url); // everything after the domain. - } - else // eg. local setup. - { - $pageName = str_replace(SITEURL,'',$url); - } - - $pageName = urldecode($pageName); - - $pageName = preg_replace("/".$tagRemove."/si", "", $pageName); - - if($logQry == false) - { - $tmp = explode("?",$pageName); - $pageName = $tmp[0]; - } - - if(empty($pageName)) - { - $pageName = "index"; - } - - if(preg_match("/".$pageDisallow."/i", $pageName)) - { - return false; - } - - // if ($logQry) - // { - // $pageName .= '+'.$match[3]; // All queries match - // } - - $pageName = $err_code.$pageName; // Add the error code at the beginning, so its treated uniquely - - // filter out any non-utf8 characters which could halt processing. - - $pageName = iconv('UTF-8', 'ASCII//IGNORE', $pageName); - - $pageName = trim($pageName,' /'); - - - if(!empty($lan)) - { - $pageName .= "|".$lan; - } - - return $pageName; - } - - - /** - * Process Raw Backup Log File. e. e_LOG."log/2015-09-24_SiteStats.log - * This method can be used in the case of a database corruption to restore stats to the database. - * @param string $file - * @param bool $savetoDB - * @return bool - * @example processRawBackupLog('2015-09-24_SiteStats.log', false); - */ - function processRawBackupLog($file, $savetoDB=false) - { - $path = e_LOG."log/".$file; - - $mes = e107::getMessage(); - - if(!is_readable($path)) - { - $mes->addError( "File Not Found: ".$path); - return false; - } - - $handle = fopen($path, "r"); - - $pageTotal = array(); - $line = 0; - - - if ($handle) - { - while (($buffer = fgets($handle, 4096)) !== false) - { - if($vars = $this->splitRawBackupLine($buffer)) - { - - if(strpos($vars['eself'],'file://') === 0) - { - continue; - } - - $lan = varset($vars['lan'],null); - $key = $this->getPageKey($vars['eself'],false,'',$lan); - - if(empty($key)) - { - continue; - } - - if(!isset($pageTotal[$key])) - { - $pageTotal[$key] = array('url'=>'', 'ttl'=>0, 'unq'=>0, 'lan'=>''); - } - - $pageTotal[$key]['url'] = $vars['eself']; - $pageTotal[$key]['ttl'] += 1; - - // echo "\n
line: ".$line." ------- ".$key; - - if(isset($vars['unique'])) - { - if($vars['unique'] == 1) - { - $pageTotal[$key]['unq'] += 1; - } - } - else - { - $pageTotal[$key]['unq'] += 1; - } - - $lan = varset($vars['lan'],''); - $pageTotal[$key]['lan'] = $lan; - } - - $line++; - } - - if (!feof($handle)) - { - $mes->addError( "Error: unexpected fgets() fail."); - } - - fclose($handle); - - - if(e_DEBUG) - { - $mes->addDebug("

".$file."

"); - $mes->addDebug(print_a($pageTotal,true)); - } - } - - if($savetoDB === false) - { - $mes->addInfo( "Saving mode is off"); - return true; - } - - - if(!empty($pageTotal)) - { - list($date,$name) = explode("_", $file, 2); - - unset($name); - - $unix = strtotime($date); - - $datestamp = date("Y-m-j", $unix); - - if(!empty($datestamp)) - { - $sql = e107::getDb(); - - if($sql->select('logstats','log_id',"log_id='".$datestamp."' ") && !$sql->select('logstats','log_id',"log_id='bak-".$datestamp."' ")) - { - $sql->update('logstats', "log_id='bak-".$datestamp."' WHERE log_id='".$datestamp."' "); - } - - if($this->collatePageInfo($pageTotal, $datestamp)) - { - $message = e107::getParser()->lanVars(ADSTAT_LAN_90, array('x'=>$datestamp)); - $mes->addSuccess($message); - } - else - { - $message = e107::getParser()->lanVars(ADSTAT_LAN_91, array('x'=>$datestamp)); - $mes->addError($message); - } - } - - } - - return true; - } - - - - - private function splitRawBackupLine($line) - { - list($datestamp,$bla,$data) = explode("\t",$line, 3); - - if(!empty($data)) - { - parse_str($data,$vars); - return $vars; - } - - unset($datestamp, $bla); // remove editor warnings. - - return false; - } - - /** - * Fix corrupted page data. - * Re-calculate all page totals from all existing database information and save to DB as 'pageTotal'. . - */ - function collatePageTotalDB() - { - $sql = e107::getDb(); - - $qry = "SELECT * FROM `#logstats` WHERE `log_id` REGEXP '^[0-9]' AND LENGTH(log_id) > 7 AND `log_data` LIKE '%http%'"; - $data = $sql->retrieve($qry,true); - - $pageTotal = array(); - - foreach($data as $values) - { - $tmp = explode(chr(1),$values['log_data']); - unset($tmp[0],$tmp[1]); - $thisTotal = array(); - - foreach($tmp as $val) - { - if(!empty($val)) - { - list($url,$ttl,$unq,$lan) = explode("|",$val); - $lan = vartrue($lan,e_LAN); - $key = $this->getPageKey($url,'','', $lan); - - $thisTotal[$key]['url'] = $url; - $thisTotal[$key]['lan'] = $lan; - $thisTotal[$key]['ttlv'] += $ttl; - $thisTotal[$key]['unqv'] += $unq; - - $pageTotal[$key]['url'] = $url; - $pageTotal[$key]['lan'] = $lan; - $pageTotal[$key]['ttlv'] += $ttl; - $pageTotal[$key]['unqv'] += $unq; - } - - } - - // echo "

".$values['log_id']."

"; - // print_a($thisTotal); - - } - - if(empty($pageTotal)) - { - return false; - } - - $id = $sql->retrieve('logstats','log_uniqueid', "log_id='pageTotal'"); - - $insertData = array( - 'log_uniqueid' => intval($id), - 'log_id'=> 'pageTotal', - 'log_data'=> serialize($pageTotal) - ); - - // echo "

Total

"; - // print_a($pageTotal); - - return $sql->replace('logstats', $insertData); - - } - - - /** - * collate page total information using today's data and totals stored in DB. - * @param $pageInfo - from today's file. - * @return bool - */ - function collatePageTotal($pageInfo=array()) - { - $sql = e107::getDb(); - - if($sql->select("logstats", "*", "log_id='pageTotal' ")) - { - $tmp = $sql->fetch(); - $pageTotal = unserialize($tmp['log_data']); - $uniqueID = $tmp['log_uniqueid']; - unset($tmp); - - } - else - { - $pageTotal = array(); - $uniqueID = 0; - } - - // echo "

DB Totals

"; - // print_a($pageTotal); - - // echo "

From File

"; - // print_a($pageInfo); - - foreach($pageInfo as $key => $info) - { - $pageTotal[$key]['url'] = $info['url']; - $pageTotal[$key]['ttlv'] += $info['ttl']; - $pageTotal[$key]['unqv'] += $info['unq']; - } - - // echo "

Consilidated

"; - // print_a($pageTotal); - - if(empty($pageTotal)) - { - return false; - } - - $insertData = array( - 'log_uniqueid' => intval($uniqueID), - 'log_id' => 'pageTotal', - 'log_data' => serialize($pageTotal) - ); - - return $sql->replace('logstats', $insertData); - - } - - - /** - * Collate individual page information into an array and save to database. - * @param array $pageInfo - * @param string $date - the value saved to log_id ie. Y-m-j , 2015-02-1, 2015-02-30 - * @return bool - */ - function collatePageInfo($pageInfo, $date) - { - - $sql = e107::getDb(); - $tp = e107::getParser(); - - $data = ""; - $dailytotal = 0; - $uniquetotal = 0; - - foreach($pageInfo as $key => $value) - { - $data .= $value['url']."|".$value['ttl']."|".$value['unq'].'|'.varset($value['lan'],e_LAN).chr(1); - $dailytotal += $value['ttl']; - $uniquetotal += $value['unq']; - } - - $data = $dailytotal.chr(1).$uniquetotal.chr(1) . $data; - return $sql->insert("logstats", "0, '$date', '".$tp -> toDB($data, true)."'"); - } - - - /** - * Reset (empty) yesterday's log files. - * @return bool - */ - function resetLogFiles() - { - - if(empty($this->pfileprev) || empty($this->ifileprev)) - { - return false; - } - - /* ok, we're finished with the log file now, we can empty it ... */ - if(!unlink($this->pathtologs.$this->pfileprev)) - { - $data = chr(60)."?php\n". chr(47)."* e107 website system: Log file: ".date("z:Y", time())." *". chr(47)."\n\n\n\n".chr(47)."* THE INFORMATION IN THIS LOG FILE HAS BEEN CONSOLIDATED INTO THE DATABASE - YOU CAN SAFELY DELETE IT. *". chr(47)."\n\n\n?". chr(62); - - if($handle = fopen($this->pathtologs.$this->pfileprev, 'w')) - { - fwrite($handle, $data); - } - - fclose($handle); - } - - - if(!unlink($this->pathtologs.$this->ifileprev)) - { - $data = chr(60)."?php\n". chr(47)."* e107 website system: Log file: ".date("z:Y", time())." *". chr(47)."\n\n\n\n".chr(47)."* THE INFORMATION IN THIS LOG INFO FILE HAS BEEN CONSOLIDATED INTO THE DATABASE - YOU CAN SAFELY DELETE IT. *". chr(47)."\n\n\n?". chr(62); - - if($handle = fopen($this->pathtologs.$this->ifileprev, 'w')) - { - fwrite($handle, $data); - } - - fclose($handle); - } - - - return true; - } -} - - - - - - - - - diff --git a/e107_plugins/log/e_help.php b/e107_plugins/log/e_help.php deleted file mode 100644 index d8f197d2e..000000000 --- a/e107_plugins/log/e_help.php +++ /dev/null @@ -1,45 +0,0 @@ - tablerender(LAN_STAT_HELP_01, $text); -unset($text); diff --git a/e107_plugins/log/e_meta.php b/e107_plugins/log/e_meta.php deleted file mode 100644 index b8ad8625f..000000000 --- a/e107_plugins/log/e_meta.php +++ /dev/null @@ -1,105 +0,0 @@ -run(); - - $err_flag = ''; - if (defined('ERR_PAGE_ACTIVE')) - { // We've got an error - set a flag to log it - $err_flag = "&err_direct=".ERR_PAGE_ACTIVE; - if (is_numeric(e_QUERY)) $err_flag .= '/'.substr(e_QUERY,0,10); // This should pick up the error code - and limit numeric length to upset the malicious - $err_flag .= "&err_referer=".$_SERVER['HTTP_REFERER']; - } - - } - - if(USER_AREA) - { - $logJS = " - - $(function() { - - function rstr2b64(input) - { - var b64pad = \"=\"; /* base-64 pad character. \"=\" for strict RFC compliance */ - var tab = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"; - var output = \"\"; - var len = input.length; - for(var i = 0; i < len; i += 3) - { - var triplet = (input.charCodeAt(i) << 16) - | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0) - | (i + 2 < len ? input.charCodeAt(i+2) : 0); - for(var j = 0; j < 4; j++) - { - if(i * 8 + j * 6 > input.length * 8) output += b64pad; - else output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F); - } - } - return output; - } - - - - - - var ref =\"\"+escape(top.document.referrer); - var eeself = escape(window.location.href); - - var colord = window.screen.colorDepth; - var res = window.screen.width + \"x\" + window.screen.height; - var logString = 'referer=' + ref + '&colour=' + colord + '&eself=' + eeself + '&res=' + res + '".$err_flag."'; - logString = rstr2b64(logString); - - var url = '".SITEURLBASE.e_PLUGIN_ABS."log/log.php'; - var dataText = 'lv='+logString; - - $.ajax({ - type: 'get', - url: url, - data: {'lv' :logString}, - success: function(e) { - if(e) - { - // alert(e); - } - } - }); - }); - "; - - - - - e107::js('footer-inline', $logJS, 'jquery'); - } -} - - diff --git a/e107_plugins/log/e_shortcode.php b/e107_plugins/log/e_shortcode.php deleted file mode 100644 index c9df94041..000000000 --- a/e107_plugins/log/e_shortcode.php +++ /dev/null @@ -1,106 +0,0 @@ -lgc = new logConsolidate; - - $sql = e107::getDB(); - $logfile = e_LOG.'logp_'.date('z.Y', time()).'.php'; /* get today's logfile ... */ - - $pageInfo = array(); - - if(is_readable($logfile)) // populate $pageInfo - { - require($logfile); - } - - $logfile = e_LOG.'logi_'.date('z.Y', time()).'.php'; // $logfile = e_PLUGIN.'log/logs/logi_'.date('z.Y', time()).'.php'; - - if(is_readable($logfile)) - { - require($logfile); - // e107::getMessage()->addDebug("Loading Log File: ".$logfile); - } - - - if($sql->select('logstats', 'log_data', "log_id='pageTotal'")) /* get main stat info from database */ - { - $row = $sql->fetch(); - $this->dbPageInfo = unserialize($row['log_data']); - // e107::getMessage()->addDebug("Loading Logstats from DB: ".print_a($this->dbPageInfo,true)); - } - else - { - $this->dbPageInfo = array(); - } - - /* temp consolidate today's info (if it exists)... */ - if(is_array($pageInfo)) - { - foreach($pageInfo as $key => $info) - { - $key = preg_replace("/\?.*/", "", $key); - if(array_key_exists($key, $this -> dbPageInfo)) - { - $this -> dbPageInfo[$key]['ttlv'] += $info['ttl']; - $this -> dbPageInfo[$key]['unqv'] += $info['unq']; - } - else - { - $this -> dbPageInfo[$key]['url'] = $info['url']; - $this -> dbPageInfo[$key]['ttlv'] = $info['ttl']; - $this -> dbPageInfo[$key]['unqv'] = $info['unq']; - } - } - } - - - } - - - private function getKey($self) - { - return $this->lgc->getPageKey($self, false, '', e_LAN); - //$base = basename($self); - // list($url,$qry) = explode(".",$base, 2); - // return $url; - } - - - function sc_log_pagecounter($parm=null) - { - - //print_a($this->dbPageInfo); - - $url = str_replace("www.", "", e_REQUEST_URL); - $id = $this->getKey(e_REQUEST_URL); - // print_a("Checking for: ".$id); - - // print_a($this->dbPageInfo); - - if(isset($this->dbPageInfo[$id]['url']) && ($this->dbPageInfo[$id]['url'] == e_REQUEST_URL || $this->dbPageInfo[$id]['url'] == $url)) - { - return ($parm == 'unique') ? number_format($this->dbPageInfo[$id]['unqv']) : number_format($this->dbPageInfo[$id]['ttlv']); - } - - } - -} - - - diff --git a/e107_plugins/log/e_url.php b/e107_plugins/log/e_url.php deleted file mode 100644 index 0bedd6607..000000000 --- a/e107_plugins/log/e_url.php +++ /dev/null @@ -1,49 +0,0 @@ - 'stats', - 'regex' => '^{alias}/?$', // matched against url, and if true, redirected to 'redirect' below. - 'sef' => '{alias}', // used by e107::url(); to create a url from the db table. - 'redirect' => '{e_PLUGIN}log/stats.php?1', // file-path of what to load when the regex returns true. - - ); - - $config['others'] = array( - 'alias' => 'stats', - 'regex' => '^{alias}/\?(.*)$', // matched against url, and if true, redirected to 'redirect' below. - 'sef' => '{alias}', // used by e107::url(); to create a url from the db table. - 'redirect' => '{e_PLUGIN}log/stats.php?$1', // file-path of what to load when the regex returns true. - - ); - - return $config; - } - - - -} \ No newline at end of file diff --git a/e107_plugins/log/images/abrowse.png b/e107_plugins/log/images/abrowse.png deleted file mode 100644 index 0bfd1f4d37d0e87f9372224b4d18ee8b5a4e3bea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 786 zcmV+t1MU2YP)>cOyMIGCC&%LwN&7e*#U06iaG4LNftUi$q8iDoag7Nf<^;830?K z09>6kPGJOLq61{624tcQVw?bGssLxJ31g^7TSZG=LJ?}CTU{RjZ@LU^t^#npSYS2* zbI3VobQx}_Vqzo>a>5LByijCv0DRJ5YBgZUJz#A}Rd!}*a8omW zuSa;CVsvqZav=|n-ClQwZFOm7c7I`gY9No;k9#0PjjfD=Gj@V~9-QJnpR;3>mVb+j zUzEEpsN8&+WS5gcnUg&@r`uhb#buefijtHvvF3@EmYAD+hoiHAro^43pQNg#rLC^1 zucpDZRim-J$+<|Nx5U7@U8cOo)V@ivyT7Nu%bmpFs>RrE-uth{*5t}V#mdLL&DO!t z+Pc%;x!3K))!xw4&ywr>$l2o5*VN3};m+CM(cg(s~>FMh1@bK#d87=kr`uF(x`1ttw`T6Uy%R+00(qQO+^RP3JHZ6%14>BG;ZBP^qBK;DA{?MX=$s-Br`CSxg|*m zDvFB;32}Q*U|>j%U`UhYoXE<^;tO(8wR<;1zDIC>LIv2llXFvwn&9350F&-2v4SSJ QjQ{`u07*qoM6N<$g3CK!rvLx| diff --git a/e107_plugins/log/images/amaya.png b/e107_plugins/log/images/amaya.png deleted file mode 100644 index 4ff2d23c817605d709c8a62745caf7bbcad7c889..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 743 zcmV?P)Depn$WDeS@WfgQk9gr+UV93rG$X0fPt!kfvkay zrip{BgNLh!jH-x+u7irPiI=L4lC6%9u!oDYizse=Ay;NtA!Ypt{Qdm@|NjYX1Qq}Q00DGTPE!Ct=GbNc z000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2h;=u3=aq*7mzLh0013yMObu0Z*6U5 zZgc=ca%Ew3Wn>_CX>@2HRA^-&M@dak?_?!z00028NklUH-;#l&3TBW;t`oX%q^?=eZ;}nKP8NW-|o&akDbY8|exzN8M zR0$jCGcahe#V{}=<)|_+RHryFFsLzyF)(Dp-6q8pz);{WSqtGcus88BB<6F}p}4=8 Z0RS@@BNi{}x#0i+002ovPDHLkV1l@ZbWi{Q diff --git a/e107_plugins/log/images/android.png b/e107_plugins/log/images/android.png deleted file mode 100644 index b8e2e0bf629413fff72f44367d3c9fd2c3a3b0c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 424 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ za0`Jjee z@`g`3Ej%7fkN$V}NBxU0Ir7N9qxV7cO~D9W1}_ulk6a3QtdBlB)bMfJ@lU9LZkTHJ{;QQO2L# zBAB11JO5O3NmX0mg+DdSF@vv&6!4=bAsAZT!I~z`b}iD}#RiB6C^2)eC{4 O%HZkh=d#Wzp$PzTYN56O diff --git a/e107_plugins/log/images/ant.png b/e107_plugins/log/images/ant.png deleted file mode 100644 index 6b6a2b5a1c831bfd53b5018e8f8ef7fee90d47cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 580 zcmV-K0=xZ*P)Fa3_Y0*J(&$X znhiah4M3h7MwZ41E7uDy7E-|34=^xSo;g{T^$R!~UDiZegE(BEqD3npXXi&_mpNs( zPh*HlWtW#pTOw@mL};u+X|hIXsv~gsBXIapaI08zr#O7_OnJ;xdAnhKv0j0_y<~X4 zaZ`GSp>K=3>RWJejJpE47@;+CNh$t3<#hmW`V?0@b(Kv;+lpbaTowO7!hW? S=ij#g0000ZPkE~|guOq2w>X5nN`SLWf3rD5 zQeu7$-{9%m-Qs0056k zL_t&t*JEI?wGUuG0+L21n#l+*zm%A%aTJ`(&J&2Nm@C}Lz~9R+Nh1`@jq_A=jZXD& zkJj}~1o0&lEL?oN)#K&t+!BCXRsl6bOG~AAK^5&-28I+JMh;OKakEHHp$MR)au8cO z6EknHh%?wI)sQfAYe%?6e0us;S}|}gx2(Ld4Z;~L(hg~G4gfnw72w5lb{zl!002ov JPDHLkV1neVN&Nr- diff --git a/e107_plugins/log/images/aol2.png b/e107_plugins/log/images/aol2.png deleted file mode 100644 index c1db9c70950347862c819026019fd6816d7f2b1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623 zcmV-#0+9WQP)ZPkE~|guOq2w>X5nN`SLWf3rD5 zQeu7$-{9%m-Qs0056k zL_t&t*JEI?wGUuG0+L21n#l+*zm%A%aTJ`(&J&2Nm@C}Lz~9R+Nh1`@jq_A=jZXD& zkJj}~1o0&lEL?oN)#K&t+!BCXRsl6bOG~AAK^5&-28I+JMh;OKakEHHp$MR)au8cO z6EknHh%?wI)sQfAYe%?6e0us;S}|}gx2(Ld4Z;~L(hg~G4gfnw72w5lb{zl!002ov JPDHLkV1neVN&Nr- diff --git a/e107_plugins/log/images/avantbrowser.png b/e107_plugins/log/images/avantbrowser.png deleted file mode 100644 index 4227d6bc203a16706d7e90657c234d7f3c9c56ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 941 zcmV;e15*5nP)!Dgh8G01zz!5Gw)^ECCcU1{5g+6)*)CH3Ats78NWF8ZH(VD-s?r85=Gd8!j9h zF9#z)1u8rrAvFjtKMpQOBPcx%G(9XDkSQ%Q95OvG9+EE}l`k_mG9sBXBbqcMn>8ex zFDafgI72ulmp3J#Hz=AkDW5edoj56$I4PJgE2lgwn>;I>GA^n)ETT9qp*bz0HZG+! zFQ_~|Lp&{@JuRO+E}lLwp)@kBKPbJ)cWGpgcaxO+TPMLBdKLGxBY^FK}ZK~UpC zPx)Iz_gqt}LR0xlQSwDp{7+Z(R8{v{T+dNk{aRQ2Ra*N;WBN>B|7u^ePhbCNVYzH! zv|wttZ)LSeap-YowNGmOaA&wmZvS#=xl3^Wb85RyasPB`yl8U1c5S_PZ@zkRzfpej zQhoh=cezT6@K%QZi-yWmp7@ZA#hsp^p`Fv9qR^$I)~KYd6Q=+4aJ(b3V|+U?@t z@aE?6=;!hB@%Z-k`S$ku`1tz(4kpMfj^F?Q00DGTPE!Ct=GbNc0004EOGiWihy@); z00009a7bBm000XU000XU0RWnu7ytkO2XskIMF-Rb3<)1IhjzK<0000TbVXQnLvL+u zWo~o;Lvm$dbY)~9cWHEJAXI2&AV*0}Q14_VZU6uP+et)0RCwBBV3;q>Cmb%Fxbtn@Sj_!-zd zj13)UtXN+sC#&GZ%fM`>skOA%Xwt?IDJ6Ga1}0~d$_N6du!q}D+hlKTpqp)}9?HtVo#D1>U6f~Vte=BT5+{RjX+mLiWL$1Rd`v_> z7eiQISx$OpUPVz>T57E-!%FXo{XMOX&Gp44-Qo)w7$(a|iiv=M*K7s=7UV)OD5GJ+ P00000NkvXXu0mjf3h0kS diff --git a/e107_plugins/log/images/avantgo.png b/e107_plugins/log/images/avantgo.png deleted file mode 100644 index d3d1fd7062d3fede10d6ad58addb82826dc289cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmV;00($+4P)70at(nR)7OmfdW^61XzLwS%eB( zgAZVc5MhTCV~Q1HiWOvv7i5VUW{V+fk|}VLEOC`Ba+fc4moIggGj*9Wc9%7Hm^FBr zI((Zte4Rjkph<jv1&)T}s z+r`)4$lBw`+v3XGDT1z*X8Tp>Fwj}@Z;?9h($0d!JMQvg8b*k%9# z00Cl4M??UK1szBL000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2h;=%2^KZK*Qc5Q z0013yMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HRA^-&M@dak?_?!z00022NklNJv_qoRtQe#?m0}qj zIRwoZ7)(TC7=+lkof!1_Y=Jt$0vQ-M*|-cCe0iII_!iHV7wot>MT zn}>%-MMXtbRaHw%%f!UQ-rnBL&CScp%g4v(KLf)*Mn+#>-+xR@|5#Xla&i5VmrqJc zN=r-2&d$!w%`Gl2E-5Mb;^tOeU0qvS+t}FnGc2sPxA#MG@`MQ!CQX_&b?VelMMbk_ z&3a#6K7aoF<;$0E*|KHNo;{zIEjxDX*pCATu3fwK<^1{Ew{PFOcklDHYxnQpfAr|l z_s5Uly?giT<;xErKKy?7?$f7FpFe;8^5qNA2S0xN`2G9$pFe;8{{8z8i2nWi|Nnn$ z)y$nhImVJ8zhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?7=#%aX3dcR3bL1Y`ns}T z;gA(%WVqaZLIx-#TjCl~;+&tGo0?a`;9QiNSdyBeP@Y+mp%9Xhs^ISF8}L3wH4mt; z%G1R$q~ca`LIb01rnbfGgHCZ1{AG__6i5(w_*mGit!QUNPRWl}k+TXm&S}=VY@y6E zqAVk=3tJ3%lGJ?OaLn7L#>~FhZjN^1X@%6~ERSavdwG1iQFwSq)-E2NYdUMD1+3HP vc)%LP%Jz#(A&50?YL8}zNm61kTM)z5Rh%s*&ze^PUBTe#>gTe~DWM4f%sJI( diff --git a/e107_plugins/log/images/bar.png b/e107_plugins/log/images/bar.png deleted file mode 100644 index 82b53c3daabcadef476cc6605e6576c565fd7b5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8!2~3AUOE6t29|V3Uq=Rpjs4tz5?O(K_7YED zSN5w+EPPyo4_(+QfkK=G9+AZi4BSE>%y{W;-5;Q!c8P05iE~kEVo7FxoGn}5EsA zOi~t0TmYBGa)*<3fr?E{O<7r4^78Tn6&nTy1|lLN09JC8l#~Fe-E(tuo}i&oU}qH- z6&WTgfPsOGjEn|)p&=(MAt515s6$ z07qN^hqMC&1orm!0KoeLB`}b)#2h$40CAL5V{WajuOdZJH8nM_udk-Z)xYEUkF>>S ze1jn;D^_M~05whkaFYOUlmM{i06bX!{{8@0a&mHW04Ov7l))Aj7O}Ch0IA*(SeT;# z0004WQchCmXeghV)z@6Y z-dYdFWs9p&@=1mA7{pmKDiX>J9kmsqvLcarVhTk8nKmGmo1A zlgn%B>J<}j0OV>}W>>Ihad7%cn^}Q%vsAEqtA}dHB)dVme5#%%PNl&D5UwD9NrbGC xK1T|eYs|=~T&$wzY^Moz3KtU-lMc6kApp^C9&3edHYWf8002ovPDHLkV1h$)4Uqr< diff --git a/e107_plugins/log/images/beos.png b/e107_plugins/log/images/beos.png deleted file mode 100644 index bab61ff4abd6c479670d2c273fecda3147fea721..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^d?3ui3?$#C89V|~>?NMQuIv}M`1m!orz`*H1`2T& zctjR6FmMZjFyp1Wb$@_@Ea{HEjtmSN`?>!lvI6_CX>@2HRA^-&M@dak?_?!z0001WNklfKDG9P#BJ>&x+X$$_ zdCnph3~JnPu9l{~y$L&Cwt)Bpeg diff --git a/e107_plugins/log/images/camino.png b/e107_plugins/log/images/camino.png deleted file mode 100644 index d48b9df1c952b57bbf18e5384e7aba424f141fdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmV++0^a?JP)ONvF-5jCs(8V{QUa*`j)1@lE2%3oW;o6 z<@EIQ?(XjG@9@mn;Gw6;=IHC5xYc=wx!T;|K3=7rsLSl_?>APV8AqJz>gsHKw2Gw0 zyTscmv+v;Jck%;^N^WRilEAy6*7v?Ck9R z{{Hp#^zH5KaD}&Ygt+zf_1@p-yuj9yrOMgb;mOS1af`jt+u-%}_86Ywv$xMrbhAES zq~zq}e~h`};^Hz_q0-dg($w3-)Zwzg)GT|z{r&w7Xt(n5@u;}Z7=Xw^W~-*J#Pag; zA%VyvV5|4{_l}}|ONvF-5jCs(8V{QUa*`j)1@lE2%3oW;o6 z<@EIQ?(XjG@9@mn;Gw6;=IHC5xYc=wx!T;|K3=7rsLSl_?>APV8AqJz>gsHKw2Gw0 zyTscmv+v;Jck%;^N^WRilEAy6*7v?Ck9R z{{Hp#^zH5KaD}&Ygt+zf_1@p-yuj9yrOMgb;mOS1af`jt+u-%}_86Ywv$xMrbhAES zq~zq}e~h`};^Hz_q0-dg($w3-)Zwzg)GT|z{r&w7Xt(n5@u;}Z7=Xw^W~-*J#Pag; zA%VyvV5|4{_l}}|$;Sj zG~TX~PhDQAm~4MtHP&iScQ&n7TmJ(PA$0kfM^2<@_&O{Wx0p}QoW=CaTY_6WPy6ge zv@MLn6%u_;WEy5o1328fPCCz);@ObH?O8$GNHx%6O5v2*z)edAw}Rv76~T1P4&%)H zsL!4NWF5>h+1oa=zpn~cZ3SM78B>}OMfQG_S??mHZ^WBp!}n|q!$QWuya-O2RI45X zEXS-~>7)j`X9ErHYTmHg336UyQ_C;xzBoc?&3CA*+bGvdIK$#OGB=vj+ISBjguP%( zqP`*H_oPM%OPi5~t{M_nuVX<;AC7ZBao9V8;=}KWwY|gDZU@(|DS3aN2D>J5?DM)f zg|L>{98#Sj@ao}Yv}ZI__f+zlUSf{@D3P_dQ63uPxdIO{E7S~K-36lyc{IG3-qUfD zN6Qilg{63XzEqtWSXQe<*_cdTXEufP4kF@SX6~ANo?g3;XO<|~@s^Fh#_a?K7w}u( zQu;3}pZv61RU%Be7P+P}eJrY6&WeL-lA4k!`eqMBA3M>?m87Uu?0s)L_eRQj=$CQt zRye-SNV-qNk5@PhDglU9rD<29iqA-!2;b1AEIgqr0HcIUx;Ef0Qvg-KsHf#DGD4#@CzzQB!Ei7!9NXqi4` zf!JDScj+tFl3Se0#852!8qA+R$hdR;CHy^!-0VoFquJan#QLXZJk#3;@-j?in=adn z*4**9^$$kBO&c5b8vXt4mWy8;Uzhg3Z~RBgwro}fnK$nIpgu=avO8<(Ou4@S=Fo3k TFJ?lw00000NkvXXu0mjfVidhz diff --git a/e107_plugins/log/images/columbus.png b/e107_plugins/log/images/columbus.png deleted file mode 100644 index 5663b16ef534e7b5a4a791a11bb5b4cb5c04191b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^d?3ui3?$#C89V|~LIFM@uF1KH3=BVh0J(pD{P+W+ zFLuoi1yYP9L4Lsu4$p3+fjCLt?k)@+tg;?J4rhT!WHAE+w-5+3Ub!d4qk>J2df4~FLr|sZ49i=&W(RAFoaF8 onIO!yB$Bn4)tR+d@&W_H{AnDIGUo@K1{%iT>FVdQ&MBb@017lm(A8=#n&$X+f3?DOr%B<4L8U(19|CEYAmJE+~wk%%du_T)6^NdQjzw_XKvJ0?%>d~}NMDbsE>fD4k!}Eu1v1T$X#uSjbY{plV~!cJ%6Xas$Z_&D z8z8$pQL6`i5$KCS?-J>9L0`^USBUwWIeB(4>}2Iv@C+uxxQ}Yy#xzw5HFAjpMlj3S(xI<)52;JQrcMXIJ3nyxSop1}j3QJcpTnlC}im#pS7 zO2;s^Uxv18*m@mWXQ&*UTm82J%c5ZY@6v{1IIxI=3plt)8oGxg-{J5tIPx=&&0+L69Gl0{d8TkvifFqt3CV9)Kly3c|Sy zN%4>tcDik}@5#vmRtA6e*q`x88n$`EmS7;@uMLAG?8=9=6 zIvY-17$^Yk#MnERKG>q)P!l$ zVcGu5kz7dZdv*1;(p5!nTl2-EYLJ~TBWK`1tw%|Lp?L;#2d9Y_EG010qNS#tmY3h)2`3h)6!tTdPa000McNliru)C>g`DLYv8 z{{8>}03CEiSad^gZEa<4bO1wgWnpw>WFU8GbZ8({Xk{QrNlj4iWF>9@004hUL_t&t z*G-Mt7J@JgM8|~|wX!JGidaBX5Jdm~^IY00^Drm(WHJGqZkUQVvc!&UahV{ANTL1V zZuK@3;%L!qH)qh3EmM1YJ!qiJW#w9%PoMvBnzN)M-a9N}M6%&`zg?_TLw{uZxTf&o p!vaFmEC}QmJ3Z9ZSSqClyZ{k&27(F>N*2bk3gm(vTE(gK{|1D)Olo!|tX z-UglE2A$ysp4|qX-UgoFCYHnjqvism=^dNTC7a6~pw|Ga?f|Rr46EuLrr-dv_5iW> z0JZu6xBLgS_5iy50lNGhu10l@kN!1MsZ_y)lA1;O<+ zuiXa1_6WfI9=P)c#P z`v%Ya9>w}8!}%V{{2k5u9M1YS!u1}_{2k8xHpBKC(EB&T_c_D$H^lZL&-xwG{VL4+ zBGdaP()TXZ`ANw4Hq`u0%knH5R!`M~k}&g=Hh@A=U0 z`O@$D((nAy@cYs5{L%6J-}Lx$144p)gBcoBbQ$c`>%ybc(o>RB85%Uq89cOV<6<+jvUBqo8g;A~ybP+# zqx`&m0z(-pwH+AzjmlsyO0b1Y$qaB*{Wb$54hadD2!NAmy! Y0LH2%GZ0(-1ONa407*qoM6N<$f|+-B^#A|> diff --git a/e107_plugins/log/images/dillo.png b/e107_plugins/log/images/dillo.png deleted file mode 100644 index f53db608f957babb3167d8fb5feec5a8d0535368..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 721 zcmV;?0xtcDP)e|Q5 z=I`J3@A0kWqU+${?&Rh3>-RD=H~jtk{{H<$JVe{b)CV3k=H%ez;pM{Pxa8*N`SA7R z;OMEXyH;<9xv{(K`0DQG==Ayc4=YB~p|%P%Sk>gnKt)g>I8pZZ^UJKZc6NXwL0$d* z{rdR%_wnxd_4yk%PTJPm8boRP^z{!MEGREO`}X$l%#Bw@9p;T z)YI6-?7TE3B-qW?T2fEj&(7M=+@Y+t}aj>Fcbw#=+k5L1~ZX!r9&N*%K~F#=yZvP+s!s z>*x3P(COwYBqET<*!}+g`uX`54-fzU|B=z*=j-G3>+SI9>5hnq_VV)J0M6$C0004W zQchC9q&U|;|M|7RracvQkn00000NkvXXu0mjf Dx5k4> diff --git a/e107_plugins/log/images/doris.png b/e107_plugins/log/images/doris.png deleted file mode 100644 index ace3c9b9c480686299c485575817d75d5d0b6bc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 724 zcmV;_0xSKAP) zQK>N~5m2K+P4s4rkznF4@u>0Q#b`Wu^&loj;}$Q1AqH(}B-AJs+R_DErrT`qJ--j% zet18-k=AP(!C>mBcwFX1{vV;*t0ztQ~saG%fPmYTpH_@Bl!K%O^X4F|oLg8)hpi345 zJz^{xBom{^M>?WIQn;UtU27Lls{#@w;^fhyk2)HaS4m& zkz-znL;xC=O&PV-h!hzl`z0*7+1hFWr835YXUXSFtXd^Ra0p0%Hr~y*8k!Dmr$F2s z@Be6Of68sLXP7(1eQl|CetNE>*#Y17jg1s<)m@ZfIjnZzuq6{AJ+>O$V&YewX z|9CpL_UOraK^}m!bA(GGKQ{~d0xj>CW>cuuDxF>zIU#Tk%eCCo7ys7Oi}dUuko}~% zmkWo2w5Qw0v_L38g!=YY)-+)U2^q{+a!m%+@!$bB;QT+CoDrZzgCtY{0000dkcKe|7Eox5StVYS89!p_@zpvTnQ(%a;d-IHaHx`W7rOSDV#_xpgIy6f}%smbjA{{C+q^WlD_D@W_Jl80>gCLv0u`>^Zo=+|mH2WS>&KC<|4Hw0^8+ ns*<;)EKE6Lys4aL5{Lx=gYFyU#yk6D00000NkvXXu0mjfLhNO> diff --git a/e107_plugins/log/images/explorer.png b/e107_plugins/log/images/explorer.png deleted file mode 100644 index f289a21b229a27a805ea85b2a7515db3eee8162b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmV-U0ZYu^X&8Mhq5Woj*Q4Op_fcK1Qx|>C zUHVRLr z{#XReU$}Bv@8Uy-DUVm}fA#F^zxf+qXRZD+<>HV0E#H^#{|r?M^n_DH|BNMT4N{+I zCOplX`l4aci>Ad-BD&vK9Qg?}xO4qGsL}@yZ@b3KvP`|B7jqM+R4?JNRqEr&rl*1R zZ^Am>Mo)O3zYG=v9n&^z_-$1WKcg173#fGE&R56Ie?4^OOXs}Dor^$d%aP|$rBOMP zG-7Tk+O(;7t<;Nqkly$7;Dt9e(=KX9Ui2(~>0I_=^MN~1r9nB%brSBl$4pXoU#u3i zPb2PuM*Jh7@eq{QdGGs=KTxIZvyUZqKDht%ZFJsz6^AZW|E+4l2h_t)8>T(U>VEO$ z%RfZK-g)@SI_2=Di=Sq$e~{n2fAYKoQx>0_vHI@CJD^B{M<+B2-hcYO_xSY-H=Y2a c4Oh|u0Grjjj_#Uoo&W#<07*qoM6N<$g2KQeLI3~& diff --git a/e107_plugins/log/images/firebird.png b/e107_plugins/log/images/firebird.png deleted file mode 100644 index 4e03f451bf7fb61b30fd710ce73a96878dee61cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~i!3-n?Kj!QJQY`6?zK#qG8~eHcB(ehe>?NMQ zuIyJB1qHOF3wo>6fI^D`d_r9RGyGpYXU-Zom$lrSdw95dO-)|&^Xw7gisxbbEx_9o z7`WSy@6@SN^_=W$47qRKytzhFe6bg0V*i;gv`2}1*REZ?i3w{o)z_$V#~B));pLuVYBE%y{W;-5;Q!PKj$oiE~kEVo7Fxoo`R8qfr)~l znU#r=m8qG6t^p9(|9C46)VILX#W6%elJy{`(;)*9hKr3Y{lQ%;yCPO@eALA8?)2aF z&#D<1_Sb_#@yD-!j0_qV>H_TeTbT-Mf_4?=#J`q)U;QBS_~ys|mR@7ttvlgyUbgY> z^;_#dY;-W&WO(OV)Mmp?l09n*FJGS}Yqn-`xaO76df8>BOFzH)<5XI@GIn8X)h>_7 z-V3SRy`No!LUS3?4DAE2&R{%{GONhT(pUX}{V!kch+h)}ZGjG8@O1TaS?83{1OShX By9odQ diff --git a/e107_plugins/log/images/firefox.png b/e107_plugins/log/images/firefox.png deleted file mode 100644 index 264c08d6051c7d0af1285cbade132412302710b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 804 zcmV+<1Ka$GP)00Hb!OjJex|Nrgn?SX-TJv}|F83)880Ln4} z(Le!9IxtgHQ^v-|{{H^d)YMrwH?sf$w+R5b5)HW%4ZbA|$3hCyXb9bn2Hso&kdTo4 z{QUCr@_02hwFCgpLlfbAA<#+$*Io(Wc^l9^0osBG=Bowv;{o1X0k*cb{r&yG90A~W z7v6FY-*N)qas~k!W&tFA-)I8fV*&pC4*&j)@QDZL=;*o<2;XuF-f|U`6a%L$2>=Nm z00J8T11|w2eCBTh{_Lam&;Xd2nA6C>FMBl z9Oa2N-f|G)eH-eOGa65bA6}mxTb%|lV+AN$0~}4cbO-zU``>gE;B^l4(5MwSQZ09^ z2uXeiL3I#Ee-}@d$$ba)q!rO^7vFIP-)sWHI|nuWt8L|lBr9itMyALNYpF)2$~=>}1uj)=Lj?c-Z^Wm1nQ}%8W12+D&g5D;(=f4dKVyhyUrEu6>?fV>TGv9GVs ze}A&lK7c6z0004WQchCJt+xxG;bV+ypMb0vb9JTN4)`Y+=VF%%MHGSeY0p3Gb<@PF|}@ z)hEcV(r^U8J{<^vcYXY<%p(AAoTnCmdGvw+{M~GQ_qYbYv$@e_17LD(0D!08B?6!k i0DP$j0GL$(`0ozLq!fGixDYk~0000tS_3^NA}NdyX92oPTa3|j>gTLTDa0R~415jGASPyz{2Oi#4H&Ze59a{~s~(9&=K z0{;H~cWZLy=jUTlSHaBIISm!*=1Y} zhlz~GsjLbWBQ6OM#iFFr%gswRJK^EuA_xuj@bU2V_mgjTuFKl5b$N+%esES>*Pot! z0R%roN~)@|WdH+26e&Rn5?eb%7*UQi1`Ooo=G@-j&&SFV9zXy8|LN-L`uX}n4;_O* zM(Ew&jDU`Ea)ffIz~0;4c!QGk^!0jvjKG|2-gM!i0ts_yZL(fsh*MkI)z=dpOSR9{Wu3j< z&CXjmLB+ts>gnq5!)5UR0004WQchC)>4;{Qvfra1f`S2M7UkU{W8*p8MGM#l%&km9Mf#P48j-~ koK<)eqH^r)MHN9x0mv#BYc2|5Y5)KL07*qoM6N<$f=~YjtpET3 diff --git a/e107_plugins/log/images/galeon.png b/e107_plugins/log/images/galeon.png deleted file mode 100644 index b2d464455cb7799b48f0d4b35aabb15854c65e97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 695 zcmV;o0!aOdP)q}(dDhzB zSZ{^>_y4uDuz7lGwYU+sM(` zhmMwEXl1Fhy@-g7<>le>@A2;O^FUEx`T6;Tl%@RWqnD(z$CP$oRpr_W{^o%|uC7=n zPe7W3L9AA-4v=drRTM5=BP5_|Dx3%8a)!7Yi`a?t7MA5oGB9{)RB%@tMVhEZ=ldu! zlxE8{xW=m|xka$EBrq`4Ggum0Y3c>%BwK^539BrK@lz6X@=#HRxiP~$@yKWOv7=*ubye8`lA&HH_Ar?XgfeR~=3jzg{t|@p5-o_20vv>dsUI5WRLF5!% zq@=L0AVen45)sRL$=UP&6jp?Un11GyX2uMM!%45#YpE*#ld4iE6qrt@elQrk3_6`o zv)k=j5y7B{DtRuTf-#VL0ia&5+fu1?KTuWmUO+v+6USlX$h{)oQ>(y6)#BBVdylHB z6%njaew=2!ImjrL%QPERij@j`N0txcgupBVy!QmEO6okXc4w5=*NI)m-j@ld3&+Rt zG2f5RdH!q%YZO%_5D^xcGWtB>>#u#jJ?b&uKjGcm_n6Wun_DdoXE9qF%K`#br2KmgV~m;4 e=Q0|NUjG5(`~ZBEAs52{0000VbQi zrPGc-cz@(1Q1JEF--c;Z7>d{G?0S(3RLocslsbmQu$yjabzej}C0`lJwZjX|N_LYEKZ4%la2lng^If v%=2S4CoqLx^8s?U_g_H2-_|IKK;rf+43{K;gxoL`T>>yEwajlAj7v1w0b zbA77Ntg4oRiGqc*-F&9WcY$|%jgsrZa^1RfhO*j>zUqUr+VsR@=)7Wsq`tx`w zdybg4&W*k2vAwl}vDuWo-HVEJc$TY>!0&>v)%(h5fw9<;!SJ5C&h^A(fUnckv1N3K zk&(ji_3Y0I00009a7bBm000XU000XU0RWnu7ytkO2XskIMF-Ra6$vE*Y%rss0001M zNklWU|??L#MQLXa8s7l7IhcUW8h=e7j$Oe;bvek z=9Cg)(B)OK*J0r>kymh)khWk@R8hAUGIBDrGGI5A;RouK)lze@bC6TDG_-X@w+PJ{ acmV+PEDCb<;iM=40000g1`oXzy^cB2!p^0guoAn!V!qV5{SbdjKU<6$R?7h${S_4xpR zzxew5`uzR;{QUd<{{8;`{{H^||Nl6h-jDzQ00DGTPE!Ct=GbNc0004EOGiWihy@); z00009a7bBm000XU000XU0RWnu7ytkO2XskIMF-Ub4HX?A0w2PDB|WpAyo ztOw*8GJ^P=;`~5T0mzqfbK_N2;|2+`*#r6JCPq4@W-LH1vn@!wCX*Yph76D^4C1+h z6mmFgiOJc3xOS`{eU5N9NdS4G2p2oa3dlP^m;gzS7ZjCZzz_fc002ovPDHLkV1mP8 B{Fnd$ diff --git a/e107_plugins/log/images/isilox.png b/e107_plugins/log/images/isilox.png deleted file mode 100644 index 144b36a1d67e1ef49b623e1b63577e6f42e9988f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 776 zcmV+j1NZ!iP)O({7UqPuSQ{-Sm zsWMX1Mn>u{R^U)hw@OLsFXUb#JF;5}yE zSYWz7Xx~3;;6ZEPL2TeQci%p8u@y1Vtr!s5%p3* z_u=CE-{kk=;``s__~GUG;pX_^=lSdB^y}#K?dkRF>-_5N`t0oe>+bvQ?fmTU{O|Vs zDFBT9{r>&^|Nj2}|Ns96Snh5B0004WQchC3Zc_^~-as6Nb0000p;!fZ02W!8F?0(`}9>;oIAuw`9)7lZ2RHR!=2}lO}VgF5>Aub9OWC<>h*WB583R zn!Pb_i#58mw4|t&adaS$<~@UwCUL4Rkmfz}@bKi};XyeQ)6LGbwMlx>I9!e?pKfr5 z4qqmX-$O0%c~-Ok-d$w)!z?9+1OW z666=m;PC7QP>g}Iz$3Dlfq`2Hgc&d0t@{HMR4j3gC~-+GPAqF95cj+*$z1_HcYeV@;hT`XP2YPh4w&;r22t~-MW&OF4 Q4>Xg()78&qol`;+0L>U%BLDyZ diff --git a/e107_plugins/log/images/links.png b/e107_plugins/log/images/links.png deleted file mode 100644 index 7dbafef2b29bcee9fee9333836a477e9aba7779a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zCn2Vh}LpV4%Za?&Y0OUFa_=LCu zX}3xt5oOlGBeG_3e2otjctn|F7fXn#vvqw?uDz+?SSToCz|P9SXqzoie^)`yn7#d# zl5eX>?^hK*36}Ena*BSx3V^0?7I;J!Gca&{0AWU_H6}BFf(j+B5hcO-X(i=}MX3zF ziOEIzxv43ci3)C+MXBZaMcKs)z7e}8YN-I#+IhM-hE&W+PB_4#q_oGwhSAY6PeqSk zTU(wrMoeU#hPATtVgc!%(>kY)9zA-JaclUDZtl+0rw_8Qo$x!%#qeo4Q{W4qC2xQx OF?hQAxvXO>_%)r1c1j3A$?$-SQ z3bLd-`Z_W&Z0zU$lgJ9>8wB`-xE}j|?A)=v@Apb9Ef(nMsouJF%A7e;M1%-@kvZsVT8{?^ahw+wYt8(tvsyOM?7@862M70C5sLT^vIyZY3uqB+Q(B zfPra_v3f)1KmE@NTYiNaoDKZN>|?#|WDUa-iTd|(m5eHX(!Nj2beL8C{pH%vjbFMi z@9t;H)LT05?s0uX0|U*eZ^Xi*7?y+@sWE1 z$mcVM_zhCV3`(*BB&I+?c6MrSkcfVkjfd>s$&8TALxt>Dlj>ue^mDBHYN6^=jOI0g z)LJIdOZ%c(wk6z5Z&r{${5BWt!$#G#{2!5};WZb1n*P6A@Y#1x1bh zR+;_~DV3&gF#WYj_^dUfN*m@dEYAS}OOpRci`F(QZO)N7%ziMd4-x%FMUW2+MN_ki z#s7X_OI=1N12?B=U1*ca|IaWnZAwavYDe3qXMi&*W-l)>OR_0i$w+t5OdCg<)BYbq zlmTr1SFZkID?1-zxM?j!GjO<3FLZ4*W1_U}7&)SGO^Az9X}?KR`A#$ZH5vbU5|XV? zP*0$WQ<|(~g41ep{AgDG2bi;Dh+cKvW}S9OCkR`2ento@QTH*k;s z+cMeJQ9)Yc=AEbeaxeYSM9;od)vrWkhBN{!}QC7K+9+gXj;fs^KMa49|3takm;2!Wyxp67?C z?UYtDWw|pd!!Bu14kOcx033=ZL?T#Bj29(} zDxyvRv0w$3u`C>V4_&lmku(6|p8&U90RHK2Q?gD5IM}6(QwBZb{_c+%g$$&bZqeOk zK2vnST>$>_uBD%W$7ciJsdWDJ!gg|~soej3!vFsG*tO&TcXF}F?Eh|Sy5RQz04vnw zw~B<3+Yd|U&#D%;)%Of9&(m`Od6?oH9i=T8b3<3a5-h^NV-U`GCHLvv^yuImCZ;Je zt2#TZJ6pvXF0x!)x#HY)U;qFB0d!JMQvg8b*k%9#010qNS#tmY9>D+r9>D>_X;f1H z00q)XL_t(o!|j)QSW{&j#|Ls5g0Y+6&K8D)fuZg~;9$z!rs6VcfIE#0E_VZX>PE$qp9&ErGd@^etVdn@`C`7y{N%42}apH$7)KaAJ8+4+Mbe z5uiKhqXBjzKq!QdXu6>RjL}r35Sj@4_S|08R$`F>v+O1<)%H{Nz&xgOdSIKY#!^!N8)AH}Nb? z0AI&(h8C!RRfi95uV-jsH8h|Bo`41(xOwo8z|mtLG&k4NTR8Ed$L?n|@Oxsi>hO^r zy8(bpHK^HNIoaj!c$aSA^SK&49xyz1kLT#I_uAT8nzz<3rvMJM+m^P!-{EEi_*^bK zitF%^wta28TYv$15k;!$4u{j(TKNt$01#m8yAJN#*9HJBTgiY!?Mv%Gz0+xEuN*}M zG=X|ILip`(Z`;mbAllzr2kH^Q*{T{&0z3`?ZZ{Zim(S(jwax2orW#BF(*r;qEVn_4 zw{j^4s2;`z0p2YwyJHRZyivCT08l*u07UDX86*Ru+O2WBH$#BeyM0Ft;B~D7*5fTe zfL5nUqyRK%fNXvZ0lZscTDVnfuti${2(3=1N?_IAj8*c2ypbGCP@Q_)?bTeVGTK79zEC_bK49i-Qx%F_E|ca-_!y|~ z1L*bn)$`)70S=IZ$WWx9KBfhIzIg5c2HaSHRH{Jr(H7Ks;u^DMPCUS@DkB2O06{8K zB7vAioGqR)oOeqcz*J0X?B75y#l$l-H{LXb3aGp}vIb)Wdbu$MfD|Hta_L0DxbYPg znhBNDNdVOi$&vqw!^Awb932BW5+JppEXJxQU0VS%Sv92(P+2xDAv=05P0cI^gg%3q z7No_PDD65;1Au1}7=n`d*&)iUxLK!RQ=n}}gzTp%g|rdN$E8cn(~jY#7O z%a!CcP^*=)0xqbBD-ekWNa$2!ON&Z!a!FUFF>H=dD9MM5AVX^)1t|vQn3#P{Noi?m z39*%qRh5+$6_t$6qTH^JU}y4#LY^cqAC^iB@(V}u`50f2Hu&nIQREbX9iy`nXiqh% z0KpUTcswqT%SXXPV)m6e!>^(zD>0Yh`DaKf`-)5s7a;gNP@XABV-L;B0H!J6zMb;w z=kX~qDV5DmLt(QArza(5{P*Xxgv3Gc(v&nPIU$90IhU4y0b4AQmnR@{TmS$707*qo IM6N<$f&!aaEC2ui diff --git a/e107_plugins/log/images/lotus.png b/e107_plugins/log/images/lotus.png deleted file mode 100644 index b6ead033b3c94339557c16f9469e93aeb039e316..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^d?3ui3?$#C89V|~1_3@HuDO}+Gx8H=O_A8tm9BOjAWCMQyg=9-y zBTAg}b8}PkN*J7rQWHy3QxwWGOEMHfGEx=XJ$(b-r>N!u6=rz4IEGZ*N=``d_@jS} zfkk-j{oH9O2@g!(N0u(CU}ApEr@P$sA`{Qa?NwoOBC?Nt*lwa#lKG>yEnZK`&pYIr z@t^9254UK%vppN%* zBBDm3V#Z=(Mq=V7;y@%}CMjtyDQO`oWhEtTB`IwyEn_JoV*ulrlS|GqZgsA7o(#eqo*IKs~@9d zkf?7EWndUElWbIIF?O1B#SZ3o?Zs%NT=Uis%TxI7{X6sUE=TdI(R_*9s?dVbK z1VmnqPF_vUUJb6kEv~+;u70g8g zVGIyuEsD)v6qmg?A#X`y{?fG4RT-r#Gs;$FmaojK-&jz;v9xJZW&75uj%^J++v|IG zwM^X8Kl{++`A4QKI68Cbi4~hJY}fZUQPcL47cKPP>D>t9ty8rt2 zgV%Q+zIpic-Q(x)AHVqU)^mS#w!Xhm!#1nCFu^3QD zw!}4}#5q4VH#M(>!MP|ku_QG`p**uBLm?z1Rl(iUH{gAWY93JGT~8OskcwN3ml$;a zGqCW8Yn#|OSR1Q}a2Nb)jB82Tm^H@8)nW=FYLN;4=rC$vtQ zJ$F`LQ%RzyE`yqXUjO_hOBc=QX~+sRWstMWpT2zky2bM**A~V)G1x{{&Rns6{n~|7 z>x)u-7=khzr>$JGe$~R>s)9rhhS1EK?itHgFPPF&QxNCKU=f~E(>`%RS7%3gdVm3g zfSz-7Zbe2~SzU6Ny(9xWpNN*bpPN^3h_}547Xud?r;wD4ijldMzOpbg0~0I1tfsoE fl7gI=AO{1lh||M07neQMlg7~`njxgN@xNA Dc#cvB diff --git a/e107_plugins/log/images/mac.png b/e107_plugins/log/images/mac.png deleted file mode 100644 index 03f56f402b358da99276239b173783c6ceda025d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^d?3ui3?$#C89V|~>?NMQuIv}M`1m!orz`*H1`2T& zctjR6FmMZjFyp1Wb$@_@Ea{HEjtmSN`?>!lvI6;90X`wF2M!!KcI~;MVUSnxl;oDZ zhF&dBUO`*Wy^qQ+){L4XA)z^E>$&Wny-U|_Wxc>92h_z_666=m;PC858jzFb>Eakt zaVt3?A>n}sgU~rWy|C7&PkGeN*-33Wep)gnCU#o52~(#3^)I*HI^24G;bYN+J>8dG z1>Qb-wDejWhmd{F6plykvt(Z9-8z@>$g=d(qP)Tdd%A;_BldP@TLs7p7-$(7Ffc@a WR^0mY%$F#jjSQZyelF{r5}E*eT4rDX diff --git a/e107_plugins/log/images/maxthon.png b/e107_plugins/log/images/maxthon.png deleted file mode 100644 index 9b0c6e7b8983c76432bd254adc86c31b93a5b9e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 834 zcmV-I1HJr-P)>DM8&Zt}S+xUOxC33eEmeC2U%Uih zz#dqoK2mT6V8K38aRgz)1YyGkVZjAq!UST(MN(--Q)nMsr~+ii24ltrWXJ?%$pmG} zKv-@BX30QTdIo071ZT_wXwU>`&je`D258P1WwAD2heTR^4rN@|Q3 zcGop0woh)5A$!885PoV(_oyyv*Nytui&wYtZvyxgn6-Mz!hsLk`U(eT32 z>bTYM!P4ry)$hC3^1#~l#M|=&G;i41+SS_Q$KLhR+vV2W=E~sq+TP&K;`Y+y_~7B< z-skh)==A32>FDX|@$&Qb_V)Dm`}Ozv_xJbq_xktu`1bhw`1twz`}_U>|NsC0+rAs? z00001bW%=J06^y0W&i*H0b)x>L;#2d9Y_EG010qNS#tmY3ljhU3ljkVnw%H_000Mc zNliru)CmX(G&OEj*lPd)03CEiSad^gZEa<4bO1wgWnpw>WFU8GbZ8({Xk{QrNlj4i zWF>9@006#8L_t(|+GAhA9SK7QhN{fCimuM~mWEng4fYa-!o=|UncW>76Q*#h^7%4EM+VmQtJv!0PvlY- zQey}S@~G~!o|KvcR|3_!s9GpX2&YYSj50!VW2Ll zAT6aRDatGZvRF=BOG{H*OP+-Z;w&RJUO`@tMp>An%l-64+=@Xg04(S$y2T3m;{X5v M07*qoM6N<$g7H0`9{>OV diff --git a/e107_plugins/log/images/mbrowser.png b/e107_plugins/log/images/mbrowser.png deleted file mode 100644 index 0d600ee3c0ccd86eeb96183c889fe6b9d1a9e4dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 722 zcmV;@0xkWCP)z#OME>&;OXt`7&y@n6%Mmp3p#ez70O1==cAu-2ZTjxd1bqGikZ=_4+_( zwGBX|-1Pr7XSjo@+MCY#tK0vg)BjL;!Zl&F(@=ZFHDt8_H=G|V0002RNklF05Bz;ud6NXk_MhQ1K{J zPxazu6<}mwWan2aws6$uOXgv91Ih}UMP{jH`1;6mNn`@KEPf??%I20j@k|^tK%<8LQ;# z?uwnuUvH3xoY2YBNnU4}{r&y)`TEh*@LXe$#KdBxtk|Ws-nY!>hMD4zo6bpN&85ts zmz}E1&)ABSvWAkWUV*OW$8x~L-`48yxW~Y+xy5IN#Bhtx(cI{KlD?1d$LYj>t+g{j!%^kN6Yo&W#<0d!JM zQvg8b*k%9#010qNS#tmY3ljhU3ljkVnw%H_000McNliru)B_a>CKR*DMKS;Y0J2F$ zK~#9!V_;xlV6!R%0R!n`djH;-_Lrau_A;hdyk%`HI rN!ZvSfSG|oCrG`J5eTwv*nlbkPp00004XF*Lt006O% z3;baP00007bV*G`2h#=!4+1fIK0NCH000SaNLh0L01FZT01FZU(%pXi0000hbVXQn zLvm$dbZKvHAXI5>WdKukZXh@yN_B1^GB7YRATc&NFflqXG9WE5FfcI8mW9p$00N6i zL_t(2&uz-vOH*+i0Pye5exCE&@oa7Can9p5&B`q?X_6vARD@XhQeY54bbacfXMGcT zsPrEYEl^32%80_~CR#?aBE78S($-ofDA&!Ut z$-y|!ERRq6(D28R*4q~czO8HqBaD)N8wCKSK_U^{4t}_M^D<&8*+{BtBmtS-EK48K z#dd>>g(7xM_rx_}Yft@JaSHf@S1&Yl^$#J0c&Y)_DA|oW&HTIe2Mq`u5*(1YSyk^L z`t5}`FS1W3%xz;YySN-ZVgUP$*n?8S=SO0R&0Xu1Es&tJLQL{*?u;NwPGAR~gEu5kWEyQsE@P70QGSr`* zivEgC`|j9yyVW{@(wiuGZw4AAY&U?zAx^EN{VF-;a(Jpd`pWuqP0eR1l9C1cN6Qb_ zw%%W|)x|agc8ydSGIS3X_K=SdY?ii{mNy3yC{(8ORto@t zup~M2`Adz*UyscXKk4Yao;^{BeY5maB&AqorN(_t=56c#*xYhbW4aq{y(AvqiA1JG x2Ftl%wN0cHKx4odPyhxjO*0hY8dy#?`~@t@HFIC|f>Qth002ovPDHLkV1m5xU`+r3 diff --git a/e107_plugins/log/images/mozilla2.png b/e107_plugins/log/images/mozilla2.png deleted file mode 100644 index 0e7909096849f97229eeb44b55c3ad7a83892e38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 819 zcmV-31I+x1P)p00004XF*Lt006O% z3;baP00007bV*G`2h#=!4+1fIK0NCH000SaNLh0L01FZT01FZU(%pXi0000hbVXQn zLvm$dbZKvHAXI5>WdKukZXh@yN_B1^GB7YRATc&NFflqXG9WE5FfcI8mW9p$00N6i zL_t(2&uz-vOH*+i0Pye5exCE&@oa7Can9p5&B`q?X_6vARD@XhQeY54bbacfXMGcT zsPrEYEl^32%80_~CR#?aBE78S($-ofDA&!Ut z$-y|!ERRq6(D28R*4q~czO8HqBaD)N8wCKSK_U^{4t}_M^D<&8*+{BtBmtS-EK48K z#dd>>g(7xM_rx_}Yft@JaSHf@S1&Yl^$#J0c&Y)_DA|oW&HTIe2Mq`u5*(1YSyk^L z`t5}`FS1W3%xz;YySN-ZVgUP$*n?8S=SO0R&0Xu1Es&tJLQL{*?u;NwPGAR~gEu5kWEyQsE@P70QGSr`* zivEgC`|j9yyVW{@(wiuGZw4AAY&U?zAx^EN{VF-;a(Jpd`pWuqP0eR1l9C1cN6Qb_ zw%%W|)x|agc8ydSGIS3X_K=SdY?ii{mNy3yC{(8ORto@t zup~M2`Adz*UyscXKk4Yao;^{BeY5maB&AqorN(_t=56c#*xYhbW4aq{y(AvqiA1JG x2Ftl%wN0cHKx4odPyhxjO*0hY8dy#?`~@t@HFIC|f>Qth002ovPDHLkV1m5xU`+r3 diff --git a/e107_plugins/log/images/multibrowser.png b/e107_plugins/log/images/multibrowser.png deleted file mode 100644 index eb4d71b86f7aa669759cb97163775583b610ef09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 844 zcmV-S1GD^zP)y?KRkCiNlQLUKtn)pLqlRZMR7wwcSApYM?q{xKy^b$TtrBEPeyn| zQddk*WlBknQczM-Qe9C}VNO?KPfw0hRB239ep6OzQ&NCZS7=vLbyZwaU1DEeWLjZj zUS(otVPAq@UzA;BnrdlmXlRRQYLjYhmuPZ{X>Fu%c4}>Hqj7JNa&~HIaHMH)rE77a zczlv}evx~7pLl@9$kFSo8tdo?Bm6w>Amb93cwVIi^n3~0! zowc2uxt^b?pPja%pSho)zND+Et*fo8th24GzOApXuCT1MwX?Rh%DTC?y1UH7!qCRZ z-^k11%gox!%;3$<*vrk~&duA-&)m+>;m*+E)YaeD+2q*R>Dk)f+uY&Y-s0Tf;o#ul z-{0=!*M9@<>u|>=J4g`?&;_6=jrh2>gVd|@bB;L_4WDo_VxDm_WS$%{r&y_ z|NjC2P!DP4O8@`>0d!JMQvg8b*k%9#00Cl4M??UK1szBL000SaNLh0L01FcU01FcV z0GgZ_00007bV*G`2h<7z4JkS=Q1Q6{0013yMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2H zRA^-&M@dak?_?!z0002LNklZM+fg#D|yebSlMeUs(UHMwvk|IKuwhRn9X7-NOrkcufQu0RV9smG| Wp*6oa{T#^v0000{|Lvb0SPLuw7hCz-Q=wBem`XwN_51Pk`}z9*`uqJ|F;?vI`_o@7<)UMQP*~lS zRmDjben?n=Nn0QfLvu@8&ucOC_VC7NF{e;LwYt*o^ZkiIKkdhs^YP*2sc`e@)sTds z@a5Xhpp%d;HPW}OiY6+LdXsVxC7Ci6@8jX6b$zppf%f?P(``ZQ@b}X^0Pw6LpinnA zDPBemH00dd<>l?tUjVC3F?C#l_Vo3pMlFi~5S|YJyHyU$$JxMcSo!60-cSI{)#aEM z39LZ@-B1AMu6ma~M_Lar{Qdq15>s;=H2VAg|Nn&YtRU_3_>vVO+n8IByZl9#fz^D%5j6*x2KjaD;$ZSvd_dnKv|N6d>NFf5a&OS{FBRAt=_IcE^8Z?VdJ* z5+A~lbz?_ntd62w89wTa4#X4y^0PX;b4gJxSiPL6m1J-B`1zP&W2Yn^)~=`Z{r}?L z=~7yb+0xeBfepS!8?TY21{Yb)UngNGQT6hq^61#~@#v6OZ~6V4?w=gqv5ehe08k%1 zur(N=VN;`UYG4Z^-G4X!|Nln5iedl&00DGTPE!Ct=GbNc000SaNLh0L01FcU01FcV z0GgZ_00007bV*G`2h;-<2`2+70r9i|006v6L_t(|+GAi~U|_UqQEDw^WB>yn9nXvc zwg6}O%85W8cZEcwutTkJpi8>~kYAjjk!k1VZrPQe*CENkkdwlq6R_u~MH;H(vZSIFYrxzfOzhJ5~ZUv6p!Iy0Ty3;^WuUp050(8z{tC z;1OBOz`!j8!i<;h*8KqrvZOouIx;Y9?C1WI$O`1^2Ka=y{{R2~!s!cBGV>$!ZKHjY zmQI^@eC5XX@83HrX>ZfXIaQ%!7>RCV89yLNBu-X-kf=|GK)B|(0{3=Yq3qyagx zo-U3d6}OTT5;T&|6eln=JrLh5>QHiQ<`-^-S&r(Ld3=uNSg9~9()P>eVYzrFebNDw z<1d>ND*K)>2UIb4Xa$>v=_Diwga(@N%{>wDO6|&`uFPpAawY;0g;_}(D)XW46| RV?c`-JYD@<);T3K0RYt*b=m*` diff --git a/e107_plugins/log/images/netcaptor.png b/e107_plugins/log/images/netcaptor.png deleted file mode 100644 index d4c374420a52ef9e05b208d38a3835cb5c39c7f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 558 zcmV+}0@3}6P)h3;^(x50W|Jto)yzl@2|Nqgc|Mt%R>BIldr>1pu{>ZrK`26+x`2X&= z|F>lS{`ycxYWe*8|KQB{Oc?0#@c=@irNrF*t%R%q01bTD|Hqb?d4|g;4SlWJ|HzMD zlF0wklsBjB|I(Gj*XM$!$`_I5KzFw8@$$g5xA()aX0hlCgy3J3$oZjVAau$5@9X=6 zKm5Fl>a&;iZ7uKj_y5|%_rs&<@9sOO>;Le^b*I*atL z-^`@=fzs6S+u-@j9mklcZ2b+4)^d~TdGsE}3bRHoiqUVdnz(0UXs-=|jm*v(z29dD wX2Vx=hr^#op(I+j0d|{x)8k-20001he@So>l%(cLZvX%Q07*qoM6N<$g2T%=O8@`> diff --git a/e107_plugins/log/images/netfront.png b/e107_plugins/log/images/netfront.png deleted file mode 100644 index 36fecf681f5c8194025dd610ca4178fd4ee9d464..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 778 zcmV+l1NHogP)m zS!Q!^UTA_{OLSvgMRlBaWo>F}a-Lu^O?sMCaw2 zDUg$wgqp0Il#zg)x{#cqo|u#Hfjxzy#m$m#proXpr?Qu*#HppIo~*o=v&8V4WU;QQ znYGU9pK-Ubu&B7lwY9Xlw79jnxU#szt-H&qz0$h8ysp5}vcT25!O+0M!tl3{x5nMW z%g^e=sn5~T&ePP`(!FDa?>*?g_?&Ia}@9ggK?(^j7^YjQsee?74^!4@k_xSkt`1ttw z`}_O-{r&&{|0~}MaR2}S0d!JMQvg8b*k%9#00Cl4M??UK1szBL000SaNLh0L01FcU z01FcV0GgZ_00007bV*G`2h<7z4FEP`pdxty0013yMObu0Z*6U5Zgc=ca%Ew3Wn>_C zX>@2HRA^-&M@dak?_?!z00023Nkl*jGE?##?~B9V<14k52{3w};%hcJINAeWt0EHz)5S>DFYL=wp5;$^e0^y8Lu(KZVQazg|J z#iOfqW$bz4!Okc)XwxZ6P&L$oInqNoC{s!u;b?|H31=`306vli-g8%`q18{zDBFV1;UJ43< zLI6|_IyxN{rjn0c0DXHwbA^GAUk98|0su?^lurct`T1jORseng-?{)0lWQnpXe2^B z?aBZE000u6Y?gIbAj7AW6%_||H^n(KW^P`gtGP-_Db=C^FRiDxtq5C4HUGQ-7Jg=) zdP=XN043DG22~*dK`k7%u6=%ZIB+>|b8vcFI*e*Hqh=49mxkZp-?SwqwR`}bhZ_Sx z9j|%?kArX*gM%5GkHk1Q?zI4uNG&h-^8jsXU0quSeq-{%031&ueis!)G5~!qCPrvW z7E(AQdn;6Bxk5Tv$+{fMWt!O<74Nc6>_; zQ(Xe434n!zigzL;u(SnZ1tF=QG2byM-{>*S&n)!l6N+5<;|NkRM#3%p&00DGTPE!Ct z=GbNc000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2h;-<2`4Cpy$JLG007fTL_t(| z+GAi~U|_W^=TTkSG?4)e*i#%A>ZKaZwqOJE7DZ$%=~7RhF60U1v*dBiE8tD^b`G=7 z4q#5X~0BTraIyhH1$w zS2A@@nN-zUR_*V`5Uf~O%*5E{YHF|V-q69oFRx}bfl+~Zg`G@NpacWUG8@C3gc);u zTtbDHb1}$@s|1xgR7#1=Ht~Xx1Ag!W%awO1=Guy=^J(Mjom3rfWJOD9f VIgAh^T7Uom002ovPDHLkV1oQRMN0qx diff --git a/e107_plugins/log/images/netscape.png b/e107_plugins/log/images/netscape.png deleted file mode 100644 index 03e90d976643e5ea4a2e0947268921c2d5c62a69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zCSkfJR9T^xl_H+M9WCilsOFVsD z*)K6k@TtjLu+Q)Z3h@N^gt!9f`uh6+|Nk>EbpOxMCQK$!8;-MT+O zK_^ca#}J9|-mZEbpOxMCQK$!8;-MT+O zK_^ca#}J9|-mZHwb*S0K$`bDY8MB!le<1PKy> zae-_gayZH0bPA-#_Be3K+89_TA1SQm z=1c#U#89Vu=*O#nw;BFOz5BbE=PiRz`|HRJ?_U{h{A$clFu64uXuw2I7srr_xYB-i zzGepzXZtfMiWBZtzu$Y){=0pogvgPu?VIMkX;p1k=#KMQde5(D`O`|LcC)Oj5iW|F zT&u-$c7?8F;0XDh#oIoKE8)uDLtpM0d9>C`2+#Q=z2yV*Orgy`m5P#9esB$Y&0Dhj zHgnK2;i4smHgo5CNHxZAcu(d!KDFS)TRA(Ghd;HBr7X9z++V+FxyXj!W>Tm; K=d#Wzp$P!MkEeq-JTpLmK6NxhSH+H@39!bpxiHcW(JyHbR#yY%(G4Q&aFU~(xytfAayaty_iuvQ_4oBtU6QxizoD$6`T6=* zXM&BS%=Pv7#@F*@hGKw|;JM4_S#WoXlDJ56gfvu9SglB2cUgRo+I^7USALCEYR;RX zxTwjvQh|SVs&O@7F8KKQL07CbVJ`Of^--cjGeo6BfI2l=ICjotKYBKt+LWog>1u_> zw#wI7Y|nDfWOk};=VLba3)6S_Do zD$JM}^oxWimb078h>WreFm+`RbeQLt?BnmkR~8Z^ zkrtgMkh7Qy7!ws(_~)cDK^#44N+!2-a8(A72>|u6HHG5t>7@Vw002ovPDHLkV1m2= Bmlyy5 diff --git a/e107_plugins/log/images/openbsd.png b/e107_plugins/log/images/openbsd.png deleted file mode 100644 index 7d672e5d884c0294602a40adc2b6153c3d5308d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^d?3ui3?$#C89V|~nkB9gB`&GO$wiq3C7Jno4DOj} zPNkVSDXB#Y270CnNtFtbWvRsq0h#HgsU>zhJ5~ZUv6p!Iy0Ty3;^WuUp050(8z{tC z;1OBOz`!j8!i<;h*8KqrvZOouIx;Y9?C1WI$O_~e1o(uwGBEtVv~6>7adCENs68*Q z00To514A_j$6g_!DGUtD^%U;O%kRxhw)FD)arV&R^|^=7_p}1_GL{7S1v5B2yO9Ru zlzX~3hE&{2PDq&W>-#@OW@cvpVWpGrvVxStdM^*;-9^PSnp(nV!?csAX7J}9A7D{CvOQxXyuw=SQ)6wD$aVSVfJsaPO= s<5X}=bK^6koh@w|44G_-$qK9taf?;*f7(9C1UiAi)78&qol`;+0Iywmwg3PC diff --git a/e107_plugins/log/images/opera.png b/e107_plugins/log/images/opera.png deleted file mode 100644 index 9b709885e0beff5d836b0d2d14918d713d7a4c64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^d?3ui3?$#C89V|~>?NMQuI!hXnFM6ma(Dha4iw@n z@Q5sCVBi)4Va7{$>;3=*S<)SS9T^xl_H+M9WCijK0(?STr^(26yEt!EQaf#HTbi4@ zq@w&}1{{RZT zyZif}@t^hOR0$glsUr!;P{m~l_& zP|hxKjdvTHPaaY>=smd9`NTHYHC+pj9zIyt9?g5$SKR&U{6nuL{=F*@G-8|iyWISQ a9K(}Lv)L_Cw%$Oi89ZJ6T-G@yGywqEVS1_n diff --git a/e107_plugins/log/images/oregano.png b/e107_plugins/log/images/oregano.png deleted file mode 100644 index 13fd160c2bb2cedba64ae0f1b045af5de436ebf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmV-x1C;!UP)3Xq^FQoC9c@0BN29X`TRU zq5^qk6l|FRgjf}Bnip@F0gFEuahn=&oC1(N8+4%on=lxApd)vq0iP@km`o&ms49D* z3!pRsum&BEZ6S(&0kQ%tex(4k0RXfD8JSlGu@C^a0UVcMCyI^$yZ|GdO&h2?2f7kE zgsD4)swAFc0K))2hN?7}Y&?pmK#8tLho?b}vqFuuM2)dXjIBeUcTkk1N}h&Qk+4>i zu~(C^W0b8|n7Lw>vRRtETAjXPoUU7)zBbA?bDFJap1EqEyK14lYoWYcvWe zY@@$vr^a`rx@fVbW4M@lrn`Kozg5s!eW|~IsJ(%&#(uELkgK<0(_(?J$BwSNV%K7W zv&&xEV1%>Ejj_X#vcr+H#E-Pale5Bn!>o|B$A-DlowL4^x5d1ml)221ywQ)n z({|fS-HxWj(y7DHk=&N9#Llk7&$GMD-Q>&P=hEKe&f)6U;pWoh?bhY&)8_Bm(RCwBBU;u)tC1C+6 zlNlgje!iExjiw}%;~WrgZcajox1E6;Kd0CXAh)eHEyB-UO+}Q4TZw^TN<(Q9VF7klGltGt&3)CaSv48a#XiY03|;+`QvExc%IXUv!?UFr zdRp>AovdQwwIq1im`xd`H&$c@JDXVODG2d#R538L7sdG+>l$iHvoOm8?VXn!8|Z1R zuE@nGG7aRc1qB|imdfG_ZD&JWJ+m$`Dt#h|1pol9GW^0j`V;^F002ovPDHLkV1hKk BnA-pV diff --git a/e107_plugins/log/images/phaseout.png b/e107_plugins/log/images/phaseout.png deleted file mode 100644 index 80d1088642972e5f09565ec74cb6cf54772320b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 857 zcmV-f1E&0mP)QfQZrL4g*B^4&NOP`7bgn0V-a~i3Ie678e%&pA+&p^KFM!@Lh2AuT z-&K9NGmPgtkL6mA+Ixw~uKj(X)5lwn>V>^NGXs`lN5AzRj+< z)%m4!yw@sAH_@2t~m(KX=!Cbe)-muBh zpv&@{&Gwkk`QgKP^Sg7N&h?nl`Ruxs{I`1J#CxC6_p!8?=)343p_Q&M; z)8pR#)wuoEw8`Z7(%|*z;k3--_vzuY{nokC;q=wu^wj70*XjA)?fTyB`Qh&Q^6cd0 z@cQ%Z=H&AG_wM88^7`rW`|0!h>ht{l^XB^W?fv!b|Ml$u_U{&E(&oYUhyVZp0d!JM zQvg8b*k%9#00Cl4M??UK1szBL000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2h{`v z5gi<#o7V;a007ZRL_t&t*JEH{U|5l9V{Yw|y^;Y8rufv9l@wN0y7z*3owi{r$t}~= z{oL&P7#Nls2I%u^O_*xJBb}qWoFO4!f?2A;*Q-=vl~{ZhgN7O-n}DFUF&7^@le__g ztT2m_sYq~ysF@`zw-SRK2X9kG$E=x?(z=8=6&WBk*w@vlItyD41+#^G@L~|^>gv?b%=h>AuYZ2b#>e^j`I(D><`50H z4Ga7a48*syrjU^H^6`K-HmnQ^pBxFVCnK0F3a&6PtEsB&4h!ZE3+E0C>JAISKtHfU z4EALa;Sdh-@bKv53BswV z_4M?>O%3E;5VVesp^1sS3kvY>?vqn2WL#YE4hz%_3dY34x)TY{4hyKFpLJ4Gk}NK` zr=Ir@485tGp(!Z8v$KH-2lw~+lrb>O3<~iM3#<$cabHwFG&*ooPqnhN=jG+9my-Sb z{AUgYuL}scR2u&e45O~#Gynhq0d!JMQvg8b*k%9#010qNS#tmY3ljhU3ljkVnw%H_ z000McNliru)B_a>C>2^wSSkPj0JTX(K~#9!V_*P-h$;qTkX)jN#M7|MtW}3F(>xi> z%NTg0_(B!L85r_2B;stfjYHg}vjf$P82m+Y(j5z|>=+s21Dq=va-Dec>U@JGl^8Wy z%wiZ4V!3PT>U?B$7=u&_OBqzzWUKk>>auLO!s=Ls85|TvBeh)W>X?N%>io(Xl#7ep z_9L3LcZn>*=m$i+tnWmF4%&3=wgl%kHM>>X^4=W2P6kh}_BOi?NvQNg^ zhubA=W)Wr*WuSo%2Fn@|5yC2z%A80OrmiuFc44vZ9?t*pI}d*j$89oFl_I$aK&7Eg z*U5QRQTs}{dz4w<0(eqWyG75kEI|Z5bO9FuakE&dG^$RhjC)LUWgb-?@BQR zJOZYn2rB9)>MLGWG(K!3Uy=ig4vT zrGu+X*~UTnV4L+iKvWmS!$d^Jg~DM&hhF$aP%f6&B>t$|xhQDRX)Gh(uJ&Nebo`W{ zAu-)@kbc*7Gcd2sbPrtGJ$+=eyO*M)B|N^a`pR~e)Y$S=5y>qgKMm=`)w>{bx_M6V)~l?#hGc3#}ioK q`4=`Tdr5O?N!QRJQq>WdKxlWgs#!AWC&^ATls8H6SuEIy5jkFgGAAFfcGMXjHh`00007bV*G` z2h|1@6etsI_#Ak|&Q%N+OIF7)J zSICX03oZOw{sUN6Q-k8}ZhY_SLv192(vcB_hwoxbWd)`N2C;PT0D|@Put|ANC7Y{2 z&N(*6V)(*1((yRzsw=fDn0)*M(`UO-5jzRF$RMOA+8WTMK+;J@c{vucSxih&Sw%%y zuBrmxP)b5ENLMTBDQ+@e!$)AJTT#83!vrzA%s`#V;at0n18QSqwe$Pq6Z8|H$ruGAWbD$ zy%$k={v4v6?XWKN;72Bd*_M4UHr0YA;*~1=nkAX1tS63a%YH<5G(s+U{e)UOFtdFp z%*G}fK?uU}@;URHboI1_iHhC3$YLdMZ35bQFNkpS9!d;B`XKE=ljcyQq0|OAF}T_q z{G-*LG- UyfH=4djJ3c07*qoM6N<$g1;WdKuQbRaP^AX8;Px#07*qoM6N<$g0V=i Avj6}9 diff --git a/e107_plugins/log/images/safari.png b/e107_plugins/log/images/safari.png deleted file mode 100644 index 8cf3be981f47459ea7acdb22cf1c9a7f73f5b3e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 759 zcmVT+FJHIBlIyVpP@BBidzsk6sRX0WZHoLoget+BYny02G0JD;e= zjC+fOgqU@Xqj|H_%EP`QjLpx-xcT|_>E+vmnX~Wh=1gt5ddTXapt7c@yw=XX5$vmTe-k%4%1jJ5y&|M2eZVx7z@3JZOrz#D$wEwlE4j;xrg z!_>~qfS0w0gO&|!$^c5H&-M1!-qYUM*Yok;g>`ngt)K-fgId!w6-f{B^Ag{Ph006s5L_t(|+GAh<0w!-> z1|*>EsN)bX3ghWD$8@(w7)L^QCR#1gokoT}Q#C+5n^=w%kEYjJiIw}AF002ovPDHLkV1obdhaUg{ diff --git a/e107_plugins/log/images/screen.png b/e107_plugins/log/images/screen.png deleted file mode 100644 index 41ef1d05424fc516d1f7534391b50d5b4012ee3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmV++0^a?JP)?I(bidVVWO)t>04N}eDuALuy;_xSxBJ_*_FLQUey;6JR>g>= z@Zf{uJt%-eS!O(cn6lSw9=J5is8?#dJUyih5qBxfS1?~P)xfG;An?lE!3e3`MHtx2aj#ckll<2N*A8wX(H1^GcA363Z#aTPd>0;*6H zFrPs@3orx+kgh9?M>`me5K#a?07VcsId~HRAW4$=JMYcS?H>eXQOGu>?1b#b~|*=jsFJ~59Dk2r1}@SxdbIr&%I{v8glzkD5DUS56% zr~yx{wXZHNE@u6HUwgft_If={l0?tX&qr|_zXqNG_Z_eXzO~!!!C){LU0q#S?>zv< j7#WYp%RJ9N0&{@>ov_+8%)OvD00000NkvXXu0mjfZ%^Gl diff --git a/e107_plugins/log/images/shiira.png b/e107_plugins/log/images/shiira.png deleted file mode 100644 index fd08d30bf79233fda2a9dfd839fbd5b0252df23f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(SAP) z9(VyAj0G%P3qV&IR9q`J&N4xvFKSIwVJAmgxm9C&L3dtGS=>rxt5AR&acMnYU$m@qW@p@DaGWnjOmq?qmGa0jk^t)m$Ry@6PcT*n4G7Qlj)e6 z)ySy@pPkI1qq(7`u)((qo}cTbrn9W4uBWNBq^0Sps?w&@3Ad`csjBU&s_m+)>#D2n zu(7_buIR0<@UO7#w6(>rx6iP#@36A(v$OBQ*A%z8;n%@%Ja_7(8D)YR0^(e=^O_So3q*4Ode+}zmP@#N&=;o|t^<>lt+_~`2J=jr+A>H6*M?eOsM z@bK~R@bK~R@bU8X_4WAp`1tzz`~ez%{r&y_|NkQ{>1zN000DGTPE!Ct=GbNc0004E zOGiWihy@);00009a7bBm000XU000XU0RWnu7ytkO2XskIMF-Rc3<)VQ-2`9{0000T zbVXQnLvL+uWo~o;Lvm$dbY)~9cWHEJAXI2&AV*0}Q14_VZU6uPxJg7oRCwBBU;u)4 zNzqIO7|7G-VV=w+Hwns>Q59DcV`Wr;@cKBN5*<|ZWLaXt+-^lvcMI==AY+bx5O<=o zqm*B;lDegta0-xX5?JiwRpchbEx^w=fuUX`G9kdj$3~i$jf*{-Ax1tlJ}t`C-qzee zLeP^T-!LpWBRVb|2tuqQ7<#mlN^9#Xsw>M&a&%f57|JwL8(KO$+L{V=(?K>hTWQ$& o`a5eIHA0=)Ta%kr)dgY!0Kf7pgaWc_bN~PV07*qoM6N<$g4G$DZ~y=R diff --git a/e107_plugins/log/images/sleipnir.png b/e107_plugins/log/images/sleipnir.png deleted file mode 100644 index 425bfdd41eb6004d468e4ce4c30cac76695e951a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 906 zcmV;519kj~P)lo)T`OCuxcvXsRSg)L|~;MakCtDsxxV^ zI%C8kb*~_Ht~zj%I%~B)YqBwLz#x6HHgLWqeY87rwkvwKC4RFhfwL=svpjaYIC-}? zd%iY*uTyrBM0LhVcehG(#YB0&IDor4fxJz0(nov1K8CGCfWJz7#!7>xJBGqbe#k(H zz+raLS9;e%jI%zBzF2$HOohZygUC#S*G7lfLy6f|gvLmW#8-vFNRhWoiq>R^rdo*0 zQjW-XfwW7N$!U(Mc!alQiqCJ6#c-9bSf0mslFMY9(Q28|ZJoh;kLhld^MI1=dYRgG znd^L(^lPWihMUKGqt=X>>xi83kecj%snUt1-JGVcj;7a;rP+$8-i@i=g{|Y6snw3G z@R_dInyB}ZuJDYo_J+6SowC-Fv+|a-@SeBUthd9cx89_?<)FXlr^4>A!QQpL?6$_w zti|%O#_6rc`n1a9u*&wd%KyX5)3eO~uG8zg&f~+)*~8J=x775y)aG0C&@!9C@)9Uln>+aL)^w;U|)a&rq>hjj? z@Y?I`+3fGz>+js`?Aq@1+wSw+@A2I4_T2FF-SG6`?)2U8_TTaL0002pNkl%)2y|S2jlBbY%q;qj?v9AERqIiIYeUWcwa+Fh?s{oFIMVE+* zYGrPLi%emD0BBt}Url^xM_fW%KOi~)YeY^oRZDPLJ}g=&JW2pyD^DXwXK)d3Wr76o!?t--Iyeep8E_y6t;pik`sQhIsFcBIlDb zw4i_7ka+QxC8MUQ?Td5ojBw?iIIpRh&Zm9zo=NbcNZy~D-k+V`qMfR@$gH=>^{qtV zr<<<0%k`{L_P1EL!O*zE)VIRh@w#xg!{6<@dGNw%_r84d!gKJ*g7?dV(A47I+}GIM z;{MjC-`&{y+n?~-)%)J4@8HGr+tvEtvGm>3{@| z{pYs(=(+#tx9IEZ{p-E{>Bax+$?Wg#|Ln^D@5}q|*8TC<^!4)f_w)VtF~nt*M;KN0yGm&!lq3Z(xI|?;`Y)Q9W+&~I=x54c z=@S;N%Bko)c`~=RwI+kDji-~2jBfgjTtO=>eTGOibB>_AiYzk;V|9U0hGscgJ`r&q zZI3`be%?j~hD>%*6Ze?dU<)p$WRSB`*;rK!4HTGJQXr15^A%=XDCAWKWC8#ZL^+;) SW{C#?0000WdKuQbRaP^AX8;RvcYNW+d3oROd!P4xp67fBW2~ww z#7d>2C<-K}CoL^4p->1)P17Vvg4@$hMEZ)wB1r%Yk>fasE|<${wR*i?(k%!A#B#X| zQ))060|kL)GMR8VJUl$?cDresh7-HpK07-L4bUdbGHF9l00C0)Jg?K~R#sLDg~I0M zromvyX0y3muCK3eeSIC45IT`a1dWZ2nM|gQjSZG%;WU*>>Gk@(y}jw_X@pQT8r|L9 zr6`KfSzcc5>FHTmSU|9ht+vL@*eHys4>aU|_)Mbb34Lx!l{-he)rfC1+ zue7e~4liwJbj-#Bx-9-YG)-j018 z8F?r25>`P@spe!2B_?o1oq8SC6r4Kv-hj|mM2%lqy@akb08GUtuIP4oFxa7}Rhh48 z6GgFr1$b1q+V54dR4nXwT%=x|pPQ>YxqJCR*UkG}p6AQL$4S4!%9^4oSo-gzAXb5i z$K{hXfEU=z@5k4kw4p9zyGdeduLFdEA6UjECa>TsB8I}7!MXhW$fU->0G!3yBV|Xx r->?WjO5-ulseHg6%x4%N4BP$zJ?>qD-XIAT00000NkvXXu0mjfCtrb1 diff --git a/e107_plugins/log/images/staroffice.png b/e107_plugins/log/images/staroffice.png deleted file mode 100644 index 522d7392500591b96a5c4796574d02242e340efc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^d?3ui3?$#C89V|~asfUet_+q84ItR?pW%N4h;BG= z;J|+%2Z$LOG~6rS164AX1o;IsI6S+N2I3@nySp%Su*!M>Ih+L^k;M!QTpvJ~(P@pz z44@!;iKnkC`xPEmQEkRG=UvYMg=9-yBTAg}b8}PkN*J7rQWHy3QxwWGOEMHfGEx=X zJ$(b-r>N!u6()GPIEHXsPo5!ll7THaSl!_TU&nzh&$ciK*xH)tHk3YNX_H*Ia#7~O zi9B-`Elf(3T+0(|%(A?V>1tV<_q5KlGY$wyMP5|15MGggNF-35{jNGV;)SW^JBi^0>?&t;ucLK6Ve!(hMw diff --git a/e107_plugins/log/images/stats_16.png b/e107_plugins/log/images/stats_16.png deleted file mode 100644 index 82e15c17900e2a6b387b7f7a9731382651451dc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1166 zcmX9+eNdBi9RIRsdwAKiSTSY8qj75LVadi)x$|XA@r4rQ)O^VjHks2a56~qemARCG zU8R)y8f|%3W~pSJ*x`a_Zoqhvd0I>@gb6YS2oH?OvlpIUtN!?YKll0L^S$qVKA&T` zYgh5&lHve>m%Tb`eFXXcP7EH|VjogQfUQyFC;)043pt;9BV43iu|>O~aHqCJxmOK} zf~NTy>1yklsw#uQEw{;WTylqO zY$B=PqR`D#H1iX7fi z;ThWS2p#szBvPs6&}g;WF=HBDOQtuivP>stAJ-S;S|k(tFRZC6`!6QeFRmNCKPBbx z79o@VW9+3-ZXCWJKJrF&Q5+RuGMn{?STrx&E74t&NEYAX3Z8g0TkMRZ zi)werb(C^m$b*VdZFO-kVIX*eI{rF0%w_ zlUv}~YDA`PS$MLLqfNbwGGDVE-z+`3y1IaW>T7kr&R?#mICk3o)a#rAQJ{c�Crx z4v)tpsv`sZgE$Nea9Dr^;qlM_JRGG!z()|mq9B z&z$p|Te1)k`KDJ3iP>Owb2K;~T#h2^%CbOX=8GQO^?a zmASjpCDJg8?OVQq8%bl=R*P#%0l$&zGbUi?d)~)8eet4KlZ?{J*k2`Kx`|97o1I0T zr}4%bxuF=>issA`o;|A&IQT0gWl}2p^S|8mM3djsuc6I9cTgOm>jJ4mxE&b+Zm}%k zNc*h~gvyjAJIJ)y$!2Ri%&&0I&5g|jY4wuuknOsQJR04eVId#%VM%Q)?YwCxoK_o2 zJ!{!!Ecz~o$gWBhJ@z6sP5Gu_z8XZVD?ck*TY3E|E9O7{Flu0afByh0CpuBUV#Qz( zW&i>RVC;n-I_~rU?~a*KO|3=#5JG-#82vHmMGu2P7+>%b477M&1G0vSmZ&`DJSqOyo)k|>K%k^m|cMbK99lO==zRj~o8vKX?MGOQv} zMNpLJXVnT71Z?psBp5^#1hiF9*&=0;3WNtjz#;R}_v7C4-Jj=t=iGaqw^;oKB$~ysyVH^$DL!X5An(vv2H zOb(vvQ0)Q@fg5Sw)y}uRIh^gsY0#IyIXE<+wYmHZU+<0WPpv=t66ALh-qCTDY1C;F?H*_?>b)pf)UAmZ7aGwNW^d>79Q|^HO?sa~KDC z{eCO$uH$j0d+bA&*yLT(pc!6MBLYFjRYR2iLAs~!J-;=I`uP)xDpJDqQq5o^|4f1t z+?}gy5d`1@jlO`eOVtm)DRc&}qjs|(xV)YlhiTT(^4h@ZqMqowm~u@)QN=SIO2%vc zaib1N8`v-@yBZdoO~*KT-|nai#kMN4kGSFgL@#`*%xBdZqT}32Y=W(9z(P-c+1k`X zV1=1F+Acl*lF?(qj}fMzV;oI5^8~VwLW6G1)1dBR8dNN|iHeTlr+lG7TPYAUAuST7 z%okmh^L7_&ImAwXe)W8&5aa^a+yUWxPC>eq!-UZWyv6b!3t;WA3KVe`W4e>BWb=43 zIq%?kxg0+#cc`R6`H?Yv{fxC$t&|pOzz+^}cvgjAO078_!2L7QZ&a(>+L{1AaITL9Kf)6h*~+0)?Wcc{OEUbdHL5u-N{jz1GRuAdu$959f!`HZ|%EA!41Qh5V5XBNM_ z#ZO2COsU_jHT48;jM3qKG&Q>ySFy`TLlRq@xVTnx_rL_`{3@&TaT6(#gtspgg&IYA zD|b4tC3nXs2zEXXGZIJuzOe#)2POj((8e_Y>x!15$uDQnT2qrz%Nl#Ip-sLF2(oWO_w_OKJBswwG%A0 z?L`4!uUq#08xbKw;!1F{^dvmU%*igVv@tz+(d-q0%H8F--p<~!7njk1&(%h9b1{?M zsL9O7!AS5E-M~VlvG#ml6oo&6|+yI0R8pLGZycP;!zjsK&lgEHd zvK9($bTlkB-f7f3&~6fqo_Ph3{VicjmBF!1H*jH#=FemwuuQ6hOH<}9YsWV!&$q24 zY%W;|N{fSFF&h0somoUMF!5_7Lj?FGFnt3dzzf}K{p3go$k=m5kRtuKT(gJotoW5k zvaQ317OUTW!E*O_ftf*>EOE*@jZ*i)Ns<4KOb9BQ1b>in50;f^+c$b6TRmSxvt;A4 znQ!i}b+MRQUGaR8GP?v8dW-pdce2Ylp%7}2%svd5aN2WVc%?5g z$4SM)^<`=**fxT+Impd)POx6S9wJu7t}wNpkwPi!J)pD+0*eHvG9RJ;m1!4VzX#K9 zI&*iz*Z-PRuU!s>sT0z5GVRclT(C@DRHM9a#x-VY;IMLPA)?(OtS0)%XKxl%9fs?| ztK^C3mqjTeb(6pK8F153_>Jf9GmS~8Bq|EQjS6|bGrpB^5;+<-ahmMaRt;E978Dj{ z<7z@oOpGb<|0$mH!6k#?*`JDD(vGj(k8m)qbsvN92IJ6*gYd0M!wm4mHeBo@NC2)zYZO?*A&KeKoaSYu=9^Xp3{}6{DA>sw0>%y zt{IsuNXwyePyV~U*XTxw@HVMDFgRiRhQ}{jY#lqE=?)eBti5&BRKwu+;k0E~Cy2i< zkR8k#nZ^^EJxjq!Z+VW-hDR?Fl&jwI#YRr$V!X>CjwEAUM8a=NYDYWhSqg*6Cc_-@ z{t5E5nWy7ZTun*KJGG}t{v`?U~Bf?vD;3xuSE#1Cm`9W_70%Y6l zW~#_C?ydCfs^ZLRMk`Q5bi?8Avws`$dRw>2<2%`QcLz`VZszFWF;4B*k0~?lU6pib z_G((2`tzu>Z-7N-q)Ql>_h=WmUn>R~XZqQt5noDqvmO-K3S;&Vi|C)eS`C(7uQ>JE z0DCD)h{ikbzo9H$^1)|*S!_`NBfgeqHRKNcl*(Jb&a%o$P0HRsjB)$X82x|8JvH@i zT=Hg4oc^R?v+pf*Iil*CVD~&!n`b-N#^T;6_l`-Sd~a2&4wyY5MBl9YxEP1b zB}cH)2h#$P^3%d@*QAvO@#3?bk^$KnXa}D>#<(3dTc({8?LY=UwW&6Z4@<9>^Ixw2Jg& S{yXE31q5sl^1JK9Km9-3#BSCA diff --git a/e107_plugins/log/images/sunos.png b/e107_plugins/log/images/sunos.png deleted file mode 100644 index 07961dee9581db9d64e376d1118220912bbf6a6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^d?3ui3?$#C89V|~Ea{HEjtmSN`?>!lvI6<+C7!;n z>=(HB_%(Gn-E%d7LYx6UA+G=b|6h9UdsNikce@*Ofr5-BL4Lsu4$p3+fm9TDL>4nJ za0`JjbP0l+XkK!Dt>r5{s@MOlGz zJ)SH@nl^`ZP(PtMG^s9FkXJdXDQSjyH?1{0kjF};H&%|9L#j1GtTSqlXkm|yW|U@G zpHF6yg+#PEW|NRwp>%MSiEW-^WSxX^mWFViWMiRxVX9Yonu>FzXm6!+ajIr*t#^2* zd~~g8V!2z1p@)Z`oPedFjiiZzu6tv}S7^drZ^B}9z-*4JmTt*ml&z(au%MK$o_oT5 zoUNL1&1QMXbDFT8m9>(ktDT9!eR$1keaU--$bp%+qkPYIg3N-3$dHQ4fPK)2h|GhD z%!rl5l$^qshthzhyRD?Xu9MAdDXP(%a|S&+*UE^3T)s(Af9ZhbF9@$2gJ>FM?8==SLC^z82V?e6>R@BHlY{P6Yq^z{Am2POqr*UfGK z0004WQchCR0!8&U|?WaHFtVlR$<8k1~8bjZ1u|J6QVN2nn1j% zv**v7F?nL9zXwYf1H+Q!NmF{J&6?Th8o@JWIv;*Lp3?vT002ovPDHLkV1lD{rLh12 diff --git a/e107_plugins/log/images/unix.png b/e107_plugins/log/images/unix.png deleted file mode 100644 index e8cd22a4d9a8bfc7745acf5057779b97150cb821..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 478 zcmV<40U`d0P)WdKxYbs#q&L3L*!GB7YRATT#NGB`RlIUp@CFfcHHD1)>B00A~h zL_t(2kxf#emV+=5TyX-4s6ZkrA|p;9PnQ%mmT%S(ha~9(uiMQN`U}Yk#lzS~)C!78P4xqr~@5oxXwQIu0wE z(9#h%oZ`={z7-`(q}aCRVHnG)5mf?n@_|pb$t5^l(xs zSQ$gSjM$iT$tFMpj@vDvBMm_JG^0hL(j{mDWn#=S8Dr3SriUaWv#ykz49LX_A-?U< zGK+Zs6961&QiNG_*P9^%YA@>{YQ@m5r%;mt=@wbaMAm3%7821&v6J{o(PoRelDsIH zD@Io?=MRavA>&3100_vpg;`Cz`Nam;wnRelxF*^1$qG`m*w?EU(e}XK=Px#07*qoM6N<$f`Xd5HUIzs diff --git a/e107_plugins/log/images/unknown.png b/e107_plugins/log/images/unknown.png deleted file mode 100644 index 58188b93ee1070d982e7ad11bd17919d19e14af6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1013 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zCSkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wP9dj{1o65;_4JX!O*A1KB^}$X~Oc& zC#@qoETbkiwJtFa>9Pv%`19xI+_lFVTb2ap&hyKd6V99vDGOe|`LJ`( znf9gUC(quJRI$J=swb{`)6JWY7Hl}F=Ux_-I?*z;W#Pgd9ScwS<}ZEt=;h%{&-Fda zO#+&&!a6KNTgy6DTZXnpH*RwXXt9o;);Mi<-J~s>_g$>&S+DO_5t=#MGOYXV!{>9B z?ODC=mXTlm=4~hJQ|8Xwd^N0SK}OZm-X*6G9J@S!*`5XKkN^JtGcJ3|i&yU#uQ|{+ zcehDk^T}JU&R)K|@!+kZzP&f@J==Hq;@!JXE8182WzY7_nlpFJ(LKknfBE_?vU=_P zhcEmR`f}Sh$K=jvp0TgGdv#^s=70bGly|JEnY7(6zHi6D%g4^%TE6Av_Jf!7J<6M= zZmVoxasBSoA3wg=_pJ@epTGX#ozjlgtJfb&&YK>TJ-4WJWqif5ZO0#2$4vYG|9^@z z|4d*KSymF{7YyVMe!$?Cy;cM0;_IF+jv*Ddk|K7MWP09ObL2$TcQb{_i7zijxmqqS zdHQD0ol1qge_Oh=rg^fZ#x`0Rc}u$dx+3oXF4a?Ddguzjb;%m0TpRV)lo;gBe6-`l z>3Iup=k_(Y%_%#7rgIOsRJY`_PuiJTlIBarJU>+y85!&Jl<~cKA-=A2J5P9TR{9LR z_3O8*q_Z^#RJQ4^mUV6n4bzEk=69Z9@;F4Tj7@xVm|1b29w)b3{C|o3wx#QmcFCBX zmGfLE*v6>fo>q2F%vUfaHE1%^?#j#!Cu^Q@*4bz|s5vw+GQ6#J$#@fV_$bhe44$rj JF6*2UngC!=Ozr>x diff --git a/e107_plugins/log/images/unspecified.png b/e107_plugins/log/images/unspecified.png deleted file mode 100644 index 58188b93ee1070d982e7ad11bd17919d19e14af6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1013 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zCSkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wP9dj{1o65;_4JX!O*A1KB^}$X~Oc& zC#@qoETbkiwJtFa>9Pv%`19xI+_lFVTb2ap&hyKd6V99vDGOe|`LJ`( znf9gUC(quJRI$J=swb{`)6JWY7Hl}F=Ux_-I?*z;W#Pgd9ScwS<}ZEt=;h%{&-Fda zO#+&&!a6KNTgy6DTZXnpH*RwXXt9o;);Mi<-J~s>_g$>&S+DO_5t=#MGOYXV!{>9B z?ODC=mXTlm=4~hJQ|8Xwd^N0SK}OZm-X*6G9J@S!*`5XKkN^JtGcJ3|i&yU#uQ|{+ zcehDk^T}JU&R)K|@!+kZzP&f@J==Hq;@!JXE8182WzY7_nlpFJ(LKknfBE_?vU=_P zhcEmR`f}Sh$K=jvp0TgGdv#^s=70bGly|JEnY7(6zHi6D%g4^%TE6Av_Jf!7J<6M= zZmVoxasBSoA3wg=_pJ@epTGX#ozjlgtJfb&&YK>TJ-4WJWqif5ZO0#2$4vYG|9^@z z|4d*KSymF{7YyVMe!$?Cy;cM0;_IF+jv*Ddk|K7MWP09ObL2$TcQb{_i7zijxmqqS zdHQD0ol1qge_Oh=rg^fZ#x`0Rc}u$dx+3oXF4a?Ddguzjb;%m0TpRV)lo;gBe6-`l z>3Iup=k_(Y%_%#7rgIOsRJY`_PuiJTlIBarJU>+y85!&Jl<~cKA-=A2J5P9TR{9LR z_3O8*q_Z^#RJQ4^mUV6n4bzEk=69Z9@;F4Tj7@xVm|1b29w)b3{C|o3wx#QmcFCBX zmGfLE*v6>fo>q2F%vUfaHE1%^?#j#!Cu^Q@*4bz|s5vw+GQ6#J$#@fV_$bhe44$rj JF6*2UngC!=Ozr>x diff --git a/e107_plugins/log/images/voyager.png b/e107_plugins/log/images/voyager.png deleted file mode 100644 index 724c1acc987c45bd39d4cc1bde306fd1b9ffe213..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 717 zcmV;;0y6!HP)XI^J-RZMw*c57#RYg`bbWpZ$95tyS4q=yQmjfZeu0He(g zrkZ(pb_KL_45+jWsk#cK-U_PO0ITl?tlMLWpO1ZM0JYbKf_w|OtO>Hz0JQ52uj>o3 z<_NF)0JHrG$9*HL%1Nh+47<*XiiVwtd@Hcym5_s)j)+09&!&=Posov3k%ps@jG394 zQ^c9Co`9yHms`KWx1*7Oyxp&_ufe^oz`(%5z`V=5z`?=7$il#%+3C#8%!cs))6>(n z*VC^>)r3_>+$gM_weHQ^XB&Q^7!!j_4W1i{Qv*|{~8k%>c_;Y00001 zbW%=J06^y0W&i*H0b)x>L;#2d9Y_EG010qNS#tmY3h)2`3h)6!tTdPa000McNliru z)C>g`EDm!q&X@oI03CEiSad^gZEa<4bO1wgWnpw>WFU8GbZ8({Xk{QrNlj4iWF>9@ z006Z~L_t&t*JEH{V2Bdn63QuJfP!$l(y}69Y<7?4kew0xC&F zK~#90eUVE@6mSs6e{P=AT{pKfCDBat{aV}9v`CD=y3{cU!b=qNf;UqA1L-y&M^YTyONXwovARMb`T?BNrp$3D<{whd8& z<<8)B-ykuqNQwUXX*;gp#9GTP zPbS6~B9REzTCR28V(k40*?Iff=}Kd2bb>&SpR0Fo;}9j(H#M@fu!y(8M}A=e%S%Cy zpK3vrVsd1h$M+sEH9EoE_(#$+oQP65L@5q8908!l=cUS53qYB-3em#JbEipny9o67 z34K|kvF!w+g_M=`RU3bQ!V3Mzihp5AJXMrJlwxsyo}rg-aJpSYBT?#Gnpg>bW^MT^ zS-IJiH+m7J;>)yn`F%gRED-kV7k};+f z+GqgUJFXx~=)Q4><}WdKuQbRaP^AX8;Px#07*qoM6N<$g0V=i Avj6}9 diff --git a/e107_plugins/log/images/webtv.png b/e107_plugins/log/images/webtv.png deleted file mode 100644 index c581a2b0cc25be4a31d767602b4c3c582f096339..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^d?3ui3?$#C89V|~1_3@Hu1rj5?uH-k2p!%i zo|)#arKvJ|*2MDil7Ig=&YiomeEHIU|NdB8X~jl`%SbE!-f?LYP_I~tYeY$Kep*R+ zVo@qXdS;qYL0-Cok)Da3(c(CFkX2w6&iT2ysd*&~zKJQR3gww484B*6z5#WqvQvR7 z@;qG}Ln`JZConK=+sh+R(9pQB(9!i_Q}a?DX+DuTwq+f&6YqB|VCG@JA(>S2Prk$U z;MoJ`P6+H>nIz22tQ~Ux=`MA)Gpsy3Iy^bT77aDiSlGDD*w|Rb*x1f8u(f^Bmlv90 jzl8Csy1|LR=?o0pbY<=ep4-O?w3)%v)z4*}Q$iB}Z)0Mz diff --git a/e107_plugins/log/images/windows.png b/e107_plugins/log/images/windows.png deleted file mode 100644 index 763396217db34610e504fbc2fd2e6469715025ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 752 zcmVaD zgg$(EkM{Zg>FVw$ZS9|;xNUA2;Ns|be3rkv5r~z#_~qelag4^w)DsOn#K+Ph3?qlG z^`4m(o}45O9$!vTbjD#f6&gKv(Rl0Q<{90d!JMQvg8b*k%9# z010qNS#tmY3ljhU3ljkVnw%H_000McNliru)B_a>HaN@EJAeQH0I^9#K~#9!V_?7v zETl!IN+!yH*%4E6xT9QCO`7-_3M*rzLKz#p<%D&8Rhbzw%N6|s^?PMa)3Vu=f{-wv6|W5Y3=EnK3=}w=5=%S;SuGSiofSNtLPA0fQ-1tZ0PgPY z@bK{Q@$vHX`uO+v{rvp?{r&#_{{R2~hviLz00001bW%=J06^y0W&i*H0b)x>L;#2d z9Y_EG010qNS#tmY3ljhU3ljkVnw%H_000McNliru)CvL%7d85)i{}6U03CEiSad^g zZEa<4bO1wgWnpw>WFU8GbZ8({Xk{QrNlj4iWF>9@007NNL_t(|+GAj7uWQJWl@Q?$ zXk`F`c2h+q&7_Lr2u`6!Ah%9YS*sHy&S1e0 max){ - max = this[i]; - } - } - return max; -} - -Array.prototype.min = function() { - var min = this[0]; - var len = this.length; - for (var i = 1; i < len; i++){ - if (this[i] < min){ - min = this[i]; - } - } - return min; -} - -function AwesomeChart(canvasElementId){ - var canvas = (typeof canvasElementId === 'string') ? document.getElementById(canvasElementId) : canvasElementId; - this.ctx = canvas.getContext('2d'); - this.width = this.ctx.canvas.width; - this.height = this.ctx.canvas.height; - - this.numberOfDecimals = 0; - - this.proportionalSizes = true; - this.widthSizeFactor = this.width/400; - this.heightSizeFactor = this.height/400; - - this.chartType = 'bar'; - this.randomColors = false; - - this.animate = false; - this.animationFrames = 60; - - this.marginTop = 10; - this.marginBottom = 10; - this.marginLeft = 10; - this.marginRight = 10; - - this.labelMargin = 10; - this.dataValueMargin = 20; - this.titleMargin = 10; - this.yAxisLabelMargin = 5; - - this.data = new Array(); - this.labels = new Array(); - this.colors = new Array(); - this.title = null; - - this.backgroundFillStyle = 'rgba(255,255,255,0)'; - this.borderStrokeStyle = 'rgba(255,255,255,0)'; - this.borderWidth = 1.0; - - this.labelFillStyle = 'rgb(220, 36, 0)'; - this.labelFont = 'sans-serif'; - this.labelFontHeight = 12; - this.labelFontStyle = ''; - - this.dataValueFillStyle = '#333'; - this.dataValueFont = 'sans-serif'; - this.dataValueFontHeight = 15; - this.dataValueFontStyle = ''; - - this.titleFillStyle = '#333'; - this.titleFont = 'sans-serif'; - this.titleFontHeight = 16; - this.titleFontStyle = 'bold'; - - this.yAxisLabelFillStyle = '#333'; - this.yAxisLabelFont = 'sans-serif'; - this.yAxisLabelFontHeight = 10; - this.yAxisLabelFontStyle = ''; - - var lingrad = this.ctx.createLinearGradient(0,0,0,this.height); - lingrad.addColorStop(0.2, '#fdfdfd'); - lingrad.addColorStop(0.8, '#ededed'); - - this.chartBackgroundFillStyle = lingrad; - this.chartBorderStrokeStyle = '#999'; - this.chartBorderLineWidth = 1; - this.chartHorizontalLineStrokeStyle = '#999'; - this.chartHorizontalLineWidth = 1; - this.chartVerticalLineStrokeStyle = '#999'; - this.chartVerticalLineWidth = 1; - - this.chartMarkerSize = 5; - - this.chartPointRadius = 4; - this.chartPointFillStyle = 'rgb(150, 36, 0)'; - - this.chartLineStrokeStyle = 'rgba(150, 36, 0, 0.5)'; - this.chartLineWidth = 2; - - this.barFillStyle = 'rgb(220, 36, 0)'; - this.barStrokeStyle = '#fff'; - this.barBorderWidth = 2.0; - this.barShadowColor = 'rgba(0, 0, 0, 0.5)'; - this.barShadowBlur = 5; - this.barShadowOffsetX = 3.0; - this.barShadowOffsetY = 0.0; - - this.barHGap = 20; - this.barVGap = 20; - - this.explosionOffset = 20; - - this.pieFillStyle = 'rgb(220, 36, 0)'; - this.pieStrokeStyle = '#fff'; - this.pieBorderWidth = 2.0; - this.pieShadowColor = 'rgba(0, 0, 0, 0.5)'; - this.pieShadowBlur = 5; - this.pieShadowOffsetX = 3.0; - this.pieShadowOffsetY = 0.0; - - this.pieStart = 0; - this.pieTotal = null; - - this.generateRandomColor = function(){ - var rgb = new Array(); - for(var i=0; i<3; i++){ - rgb.push(Math.ceil(Math.random()*150 + 50)); - } - return 'rgb('+rgb.join(",")+')'; - } - - /*Set the chart's data in the format: - * - * { - * "label-1": data-value-1, - * "label-2": data-value-2, - * "label-3": data-value-3, - * .... - * "label-N": data-value-N, - * } - * - */ - this.setChartDataFromJSON = function(jsonObj){ - for(var p in jsonObj){ - this.labels.push(p); - this.data.push(jsonObj[p]); - } - } - - - this.draw = function(){ - var context = this.ctx; - context.lineCap = 'round'; - var minFactor = Math.min(this.widthSizeFactor, this.heightSizeFactor); - - if(this.proportionalSizes){ - this.labelMargin = this.labelMargin * this.heightSizeFactor; - this.dataValueMargin = this.dataValueMargin * this.heightSizeFactor; - this.titleMargin = this.titleMargin * this.heightSizeFactor; - this.yAxisLabelMargin = this.yAxisLabelMargin * this.heightSizeFactor; - - this.labelFontHeight = this.labelFontHeight * minFactor; - this.dataValueFontHeight = this.dataValueFontHeight * minFactor; - this.titleFontHeight = this.titleFontHeight * minFactor; - this.yAxisLabelFontHeight = this.yAxisLabelFontHeight * minFactor; - - this.barHGap = this.barHGap * this.widthSizeFactor; - this.barVGap = this.barHGap * this.heightSizeFactor; - this.explosionOffset = this.explosionOffset * minFactor; - } - - if(this.randomColors){ - for(var i=0; i=0){ - context.textBaseline = 'bottom'; - context.fillText(this.labels[i], x + barWidth/2, barBottomY - barHeight - this.labelMargin, barWidth); - }else{ - context.textBaseline = 'top'; - context.fillText(this.labels[i], x + barWidth/2, barBottomY - barHeight + this.labelMargin, barWidth); - } - } - - //Draw the data value: - - context.font = this.dataValueFontStyle + ' ' + this.dataValueFontHeight + 'px '+ this.dataValueFont; - context.fillStyle = this.dataValueFillStyle; - context.textAlign = 'center'; - if(di>=0){ - context.textBaseline = 'bottom'; - context.fillText(di, x + barWidth/2, barBottomY - barHeight - this.labelMargin - this.dataValueMargin, barWidth); - }else{ - context.textBaseline = 'top'; - context.fillText(di, x + barWidth/2, barBottomY - barHeight + this.labelMargin + this.dataValueMargin, barWidth); - } - - - //Update x: - - x = x + barWidth + this.barHGap; - } - } - - - - this.animateBarChart = function() { - var aw = this, - numFrames = this.animationFrames, - currentFrame = 0, - - maxData = this.data.max(), - minData = this.data.min(), - - barMaxTopY = this.marginTop + this.labelMargin + this.labelFontHeight + this.dataValueMargin + this.dataValueFontHeight, - barMinTopY = barBottomY = this.height - this.marginBottom; - - if(this.title!=null){ - barMaxTopY += this.titleFontHeight + this.titleMargin; - } - - if(minData<0){ - barMinTopY = this.height - this.marginBottom - this.labelMargin - this.labelFontHeight - this.dataValueMargin - this.dataValueFontHeight; - - barBottomY = barMinTopY + ((this.height - this.marginBottom - barMaxTopY - this.labelMargin - this.labelFontHeight - this.dataValueMargin - this.dataValueFontHeight) * minData) / (Math.abs(minData)+maxData); - } - - var chartAreaHeight = barMinTopY - barMaxTopY, - changeOfMarginBottom = 0, - changeOfMarginTop = 0; - - var belowZeroMaxBarHeight = 0; - if(minData<0){ - var maxBarHeight = Math.max(Math.abs(barBottomY - barMaxTopY), Math.abs(barBottomY - barMinTopY)), - maxBarAbsData = Math.max(Math.abs(minData), Math.abs(maxData)); - belowZeroMaxBarHeight = Math.abs(minData * maxBarHeight / maxBarAbsData + this.labelMargin + this.labelFontHeight); - } - - this.marginBottom += belowZeroMaxBarHeight; - if(this.title!=null){ - this.titleMargin += chartAreaHeight - belowZeroMaxBarHeight; - }else{ - this.marginTop += chartAreaHeight - belowZeroMaxBarHeight; - } - changeOfMarginBottom = belowZeroMaxBarHeight / numFrames; - changeOfMarginTop = (chartAreaHeight - belowZeroMaxBarHeight) / numFrames; - - var updateBarChart = function() { - if(currentFrame++ < numFrames) { - - aw.marginBottom -= changeOfMarginBottom; - - if(aw.title!=null){ - aw.titleMargin -= changeOfMarginTop; - }else{ - aw.marginTop -= changeOfMarginTop; - } - - aw.ctx.clearRect(0, 0, aw.width, aw.height); - aw.drawBarChart(); - aw.drawTitleAndBorders(); - - // Standard - if (typeof(window.requestAnimationFrame) == 'function') { - window.requestAnimationFrame(updateBarChart); - - // IE 10+ - } else if (typeof(window.msRequestAnimationFrame) == 'function') { - window.msRequestAnimationFrame(updateBarChart); - - // Chrome - } else if (typeof(window.webkitRequestAnimationFrame) == 'function') { - window.webkitRequestAnimationFrame(updateBarChart); - - // Firefox - } else if (window.mozRequestAnimationFrame) { // Seems rather slow in FF6 - so disabled - window.mozRequestAnimationFrame(updateBarChart); - - // Default fallback to setTimeout - } else { - setTimeout(updateBarChart, 16.6666666); - } - } - } - - updateBarChart(); - - } - - - - this.drawVerticalBarChart = function(){ - var context = this.ctx; - - context.save(); - context.translate(this.width/2, this.height/2); - context.rotate(Math.PI/2); - context.translate(-this.width/2, -this.height/2); - - - - //Calculate bar size: - - var n = this.data.length; - var maxData = this.data.max(); - var minData = this.data.min(); - - var marginLeft = this.marginLeft; - if(this.title!=null){ - marginLeft += this.titleFontHeight + this.titleMargin; - } - - var barWidth = (this.width - marginLeft - this.marginRight - (n-1) * this.barHGap) / n; - - context.font = this.labelFontStyle + ' ' + this.labelFontHeight + 'px '+ this.labelFont; - var maxLabelWidth = 0; - var labelWidth = 0; - for(var i=0; imaxLabelWidth){ - maxLabelWidth = labelWidth; - } - } - - context.font = this.dataValueFontStyle + ' ' + this.dataValueFontHeight + 'px '+ this.dataValueFont; - var maxDataValueWidth = 0; - var dataValueWidth = 0; - for(var i=0; imaxDataValueWidth){ - maxDataValueWidth = dataValueWidth; - } - } - - var barMaxTopY = this.marginTop + Math.max( (this.labelMargin + maxLabelWidth), (this.dataValueMargin + maxDataValueWidth) ); - - var barMinTopY = this.height - this.marginBottom; - - var barBottomY = this.height - this.marginBottom; - - if(minData<0){ - - barMinTopY = this.height - this.marginBottom - this.labelMargin - this.labelFontHeight - this.dataValueMargin - this.dataValueFontHeight; - - barBottomY = barMinTopY + ((this.height - this.marginBottom - barMaxTopY - this.labelMargin - this.labelFontHeight - this.dataValueMargin - this.dataValueFontHeight) * minData) / (Math.abs(minData)+maxData); - - } - - - var maxBarHeight = Math.max(Math.abs(barBottomY - barMaxTopY), Math.abs(barBottomY - barMinTopY)); - var maxBarAbsData = Math.max(Math.abs(minData), Math.abs(maxData)); - - var x = marginLeft; - var y = barBottomY; - var barHeight = 0; - - var di = 0; - - for(var i=0; i=0){ - context.textAlign = 'left'; - context.fillText(this.labels[i], this.labelMargin, 0); - }else{ - context.textAlign = 'right'; - context.fillText(this.labels[i], -this.labelMargin, 0); - } - } - - //Draw the data value: - - context.font = this.dataValueFontStyle + ' ' + this.dataValueFontHeight + 'px '+ this.dataValueFont; - context.fillStyle = this.dataValueFillStyle; - context.textBaseline = 'bottom'; - if(di>=0){ - context.textAlign = 'left'; - context.fillText(di, this.labelMargin, 0); - }else{ - context.textAlign = 'right'; - context.fillText(di, -this.labelMargin, 0); - } - - context.restore(); - - //Update x: - - x = x + barWidth + this.barHGap; - } - - - - context.restore(); - - } - - - - this.animateVerticalBarChart = function() { - var aw = this, - numFrames = this.animationFrames, - currentFrame = 0, - - maxData = this.data.max(), - minData = this.data.min(), - dataLen = this.data.length, - - context = this.ctx, - - marginLeft = this.marginLeft - marginTop = this.marginTop - marginTopCurrent = 0; - - - if(this.title!=null){ - marginLeft += this.titleFontHeight + this.titleMargin; - } - - var barWidth = (this.width - marginLeft - this.marginRight - (dataLen-1) * this.barHGap) / dataLen; - - context.font = this.labelFontStyle + ' ' + this.labelFontHeight + 'px '+ this.labelFont; - var maxLabelWidth = 0; - var labelWidth = 0; - for(var i=0; imaxLabelWidth){ - maxLabelWidth = labelWidth; - } - } - - context.font = this.dataValueFontStyle + ' ' + this.dataValueFontHeight + 'px '+ this.dataValueFont; - var maxDataValueWidth = 0; - var dataValueWidth = 0; - for(var i=0; imaxDataValueWidth){ - maxDataValueWidth = dataValueWidth; - } - } - - var barMaxTopY = this.marginTop + Math.max( (this.labelMargin + maxLabelWidth), (this.dataValueMargin + maxDataValueWidth) ); - - var barMinTopY = this.height - this.marginBottom; - - var barBottomY = this.height - this.marginBottom; - - if(minData<0){ - - barMinTopY = this.height - this.marginBottom - this.labelMargin - this.labelFontHeight - this.dataValueMargin - this.dataValueFontHeight; - - barBottomY = barMinTopY + ((this.height - this.marginBottom - barMaxTopY - this.labelMargin - this.labelFontHeight - this.dataValueMargin - this.dataValueFontHeight) * minData) / (Math.abs(minData)+maxData); - - } - - - var maxBarHeight = Math.max(Math.abs(barBottomY - barMaxTopY), Math.abs(barBottomY - barMinTopY)); - var maxBarAbsData = Math.max(Math.abs(minData), Math.abs(maxData)); - - - var belowZeroMaxBarHeight = 0; - if(minData<0){ - belowZeroMaxBarHeight = Math.abs(minData * maxBarHeight / maxBarAbsData); - } - - var chartAreaHeight = maxData * maxBarHeight / maxBarAbsData + belowZeroMaxBarHeight, - changeOfMarginBottom = 0, - changeOfMarginTop = 0; - - this.marginBottom += belowZeroMaxBarHeight; - this.marginTop += chartAreaHeight - belowZeroMaxBarHeight; - changeOfMarginBottom = belowZeroMaxBarHeight / numFrames; - changeOfMarginTop = (chartAreaHeight - belowZeroMaxBarHeight) / numFrames; - - - - - var updateVerticalBarChart = function() { - if(currentFrame++ < numFrames) { - - aw.marginBottom -= changeOfMarginBottom; - aw.marginTop -= changeOfMarginTop; - - aw.ctx.clearRect(0, 0, aw.width, aw.height); - aw.drawVerticalBarChart(); - - marginTopCurrent = aw.marginTop; - aw.marginTop = marginTop; - aw.drawTitleAndBorders(); - aw.marginTop = marginTopCurrent; - - // Standard - if (typeof(window.requestAnimationFrame) == 'function') { - window.requestAnimationFrame(updateVerticalBarChart); - - // IE 10+ - } else if (typeof(window.msRequestAnimationFrame) == 'function') { - window.msRequestAnimationFrame(updateVerticalBarChart); - - // Chrome - } else if (typeof(window.webkitRequestAnimationFrame) == 'function') { - window.webkitRequestAnimationFrame(updateVerticalBarChart); - - // Firefox - } else if (window.mozRequestAnimationFrame) { // Seems rather slow in FF6 - so disabled - window.mozRequestAnimationFrame(updateVerticalBarChart); - - // Default fallback to setTimeout - } else { - setTimeout(updateVerticalBarChart, 16.6666666); - } - } - } - - - - - updateVerticalBarChart(); - - } - - - - this.drawPieChart = function(ring){ - var context = this.ctx; - context.lineWidth = this.pieBorderWidth; - - var dataSum = 0, - dataSumForStartAngle = 0, - dataLen = this.data.length; - - for (var i=0; imaxLabelWidth){ - maxLabelWidth = labelWidth; - } - } - - radius = radius - maxLabelWidth - this.labelMargin; - - var startAngle = this.pieStart* doublePI / dataSumForStartAngle; - var currentAngle = startAngle; - var endAngle = 0; - var incAngleBy = 0; - - for(var i=0; iMath.PI/2) && (mAngle<=3*(Math.PI/2)) ){ - var translateXBy = radius + this.labelMargin + context.measureText(this.labels[i]).width / 2; - context.translate(translateXBy, 0); - context.rotate(Math.PI); - context.translate(-translateXBy, 0); - } - context.textBaseline = 'middle'; - context.fillText(this.labels[i], radius+this.labelMargin, 0); - } - - context.restore(); - currentAngle = endAngle; - } - } - - - - this.drawExplodedPieChart = function(){ - var context = this.ctx; - context.lineWidth = this.pieBorderWidth; - - var dataSum = 0, - dataSumForStartAngle = 0, - dataLen = this.data.length; - - for (var i=0; imaxLabelWidth){ - maxLabelWidth = labelWidth; - } - } - - radius = radius - maxLabelWidth - this.labelMargin; - - var currentAngle = this.pieStart* doublePI / dataSumForStartAngle; - var endAngle = 0; - var incAngleBy = 0; - var halfAngle = 0; - var mAngle = 0; - for(var i=0; iMath.PI/2) && (mAngle<=3*(Math.PI/2)) ){ - var translateXBy = radius + this.labelMargin + context.measureText(this.labels[i]).width / 2; - context.translate(translateXBy, 0); - context.rotate(Math.PI); - context.translate(-translateXBy, 0); - } - context.textBaseline = 'middle'; - context.fillText(this.labels[i], radius+this.labelMargin, 0); - } - - - // Restore the context: - - context.restore(); - currentAngle = endAngle; - - } - - } - - - - this.animatePieChart = function(pieType){ - var dataSum = 0, - pieTotalReal = this.pieTotal, - aw = this, - numFrames = this.animationFrames, - currentFrame = 0, - pieAreaWidth = this.width - this.marginLeft - this.marginRight, - pieAreaHeight = this.height - this.marginTop - this.marginBottom, - marginTop = this.marginTop, - marginLeft = this.marginLeft; - - if(this.title){ - pieAreaHeight = pieAreaHeight - this.titleFontHeight - this.titleMargin; - marginTop += this.titleFontHeight + this.titleMargin; - } - - for(var i=0; imaxYAxisLabelWidth){ - maxYAxisLabelWidth = yAxisLabelWidth; - } - } - - var perCentMaxWidth = context.measureText("100%").width; - - // Calculate the chart size and position: - - var chartWidth = this.width - this.marginLeft - this.marginRight - 2*this.chartMarkerSize - maxYAxisLabelWidth - perCentMaxWidth - 2*this.yAxisLabelMargin; - var chartHeight = this.height - this.marginTop - this.marginBottom; - - var chartTopLeftX = this.marginLeft + this.chartMarkerSize + maxYAxisLabelWidth + this.yAxisLabelMargin; - var chartTopLeftY = this.marginTop; - - - if(this.title){ - chartHeight -= this.titleFontHeight + this.titleMargin; - chartTopLeftY += this.titleFontHeight + this.titleMargin; - } - - - // Draw the chart's background: - - context.save(); - - context.translate(chartTopLeftX, chartTopLeftY); - - context.fillStyle = this.chartBackgroundFillStyle; - context.fillRect(0,0,chartWidth,chartHeight); - - - // Draw the markers, horizontal lines, and axis' labels: - - var yStep = chartHeight / 10; - var lineY = 0; - - context.lineWidth = this.chartHorizontalLineWidth; - context.font = this.yAxisLabelFontStyle + ' ' + this.yAxisLabelFontHeight + 'px '+ this.yAxisLabelFont; - - for(var i=0; i<=10; i++){ - lineY = i*yStep; - - if( i>0 && i<10){ - - context.strokeStyle = this.chartHorizontalLineStrokeStyle; - context.beginPath(); - context.moveTo(0,lineY); - context.lineTo(chartWidth,lineY); - context.stroke(); - - } - - context.strokeStyle = this.chartBorderStrokeStyle; - context.beginPath(); - context.moveTo(-this.chartMarkerSize,lineY); - context.lineTo(0,lineY); - context.stroke(); - - context.beginPath(); - context.moveTo(chartWidth,lineY); - context.lineTo(chartWidth+this.chartMarkerSize,lineY); - context.stroke(); - - context.fillStyle = this.yAxisLabelFillStyle; - context.textAlign = 'right'; - context.textBaseline = 'middle'; - context.fillText(yAxisValues[10-i], -this.chartMarkerSize-this.yAxisLabelMargin, lineY); - - context.textAlign = 'left'; - context.fillText( ((10-i)*10)+'%', chartWidth+this.chartMarkerSize+this.yAxisLabelMargin, lineY); - } - - // Draw the bars: - - context.save(); - - context.translate(0, chartHeight); - - var barWidth = (chartWidth-2*this.barHGap) / n; - var barHeight = 0; - - var halfBarWidth = barWidth/2; - - var y = 0; - var x = this.barHGap; - var x1 = x; - var y1 = 0; - var x2 = 0; - var y2 = 0; - - for(var i=0; i=0){ - context.textBaseline = 'bottom'; - context.fillText(this.labels[indices[i]], x + halfBarWidth, - barHeight - this.labelMargin, barWidth); - }else{ - context.textBaseline = 'top'; - context.fillText(this.labels[indices[i]], x + halfBarWidth, - barHeight + this.labelMargin, barWidth); - } - } - - // Draw the data value: - - context.font = this.dataValueFontStyle + ' ' + this.dataValueFontHeight + 'px '+ this.dataValueFont; - context.fillStyle = this.dataValueFillStyle; - context.textAlign = 'center'; - if(this.data[indices[i]]>=0){ - context.textBaseline = 'bottom'; - context.fillText(this.data[indices[i]], x + halfBarWidth, - barHeight - this.labelMargin - this.dataValueMargin, barWidth); - }else{ - context.textBaseline = 'top'; - context.fillText(this.data[indices[i]], x + halfBarWidth, - barHeight + this.labelMargin + this.dataValueMargin, barWidth); - } - - - // Update x: - - x = x + barWidth; - - } - - // Draw the points: - - x = this.barHGap; - x1 = x; - y1 = 0; - x2 = 0; - y2 = 0; - - context.fillStyle = this.chartPointFillStyle; - context.beginPath(); - context.arc(x1, y1, this.chartPointRadius, 0, 2*Math.PI, false); - context.fill(); - - for(var i=0; iclick here to run update routine."); -define("ADSTAT_L3", "Statistic Logging"); -define("ADSTAT_L4", "You do not have permission to view this page."); -define("ADSTAT_L5", "The features on this page have been disabled."); -define("ADSTAT_L6", "Site Statistics"); -define("ADSTAT_L7", "Statistics for this type are not being gathered."); -define("ADSTAT_L8", "Today's Stats"); -define("ADSTAT_L9", "All-time Stats"); -define("ADSTAT_L10", "Daily Stats"); -define("ADSTAT_L11", "Monthly Stats"); -define("ADSTAT_L12", "Browser Stats"); -define("ADSTAT_L13", "Operating System Stats"); -define("ADSTAT_L14", "Domain Stats"); -define("ADSTAT_L15", "Screen Resolution / Color Depth Stats"); -define("ADSTAT_L16", "Referral Stats"); -define("ADSTAT_L17", "Search String Stats"); -define("ADSTAT_L18", "Recent Visitors"); -define("ADSTAT_L19", "Page"); -define("ADSTAT_L20", "Visits Today"); -define("ADSTAT_L21", "Total"); -define("ADSTAT_L22", "Unique"); -define("ADSTAT_L23", "Total Visits"); -define("ADSTAT_L24", "Total Unique Visits"); -define("ADSTAT_L25", "No statistics available."); -define("ADSTAT_L26", "Browser"); -define("ADSTAT_L27", "Operating System"); -define("ADSTAT_L28", "Countries / Domains"); -define("ADSTAT_L29", "Screen Resolution"); -define("ADSTAT_L30", "Site Referrals"); -define("ADSTAT_L31", "Search Engine Query Strings"); -define("ADSTAT_L32", "Referred from"); -define("ADSTAT_L33", "Visits in last"); -define("ADSTAT_L34", "Visits"); // Used for page display -define("ADSTAT_L35", "Unique visits in last"); -define("ADSTAT_L36", "days by page"); -define("ADSTAT_L37", "Visits by month"); -define("ADSTAT_L38", "Unique visits by month"); -define("ADSTAT_L39", "remove this entry"); -define("ADSTAT_L40", "days"); -//define("ADSTAT_L41", "Error"); // FIXME GENERIC -define("ADSTAT_L42", "No monthly stats yet."); - -define("ADSTAT_L43", "Today's page errors"); -define("ADSTAT_L44", "All-time page errors"); -define("ADSTAT_L45", "Stats deleted for: "); -define("ADSTAT_L46", "Note: any stats for today will not be deleted"); -define("ADSTAT_L47", "No stats found for: "); -define("ADSTAT_L48", "sort by total"); -define("ADSTAT_L49", "sort alphabetically"); -define("ADSTAT_L50", "All-time stats"); -define("ADSTAT_L51", "Current month stats"); -define("ADSTAT_L52", "Previous month stats"); -define("ADSTAT_L53", "Information"); -// define("ADSTAT_L54", ""); -// define("ADSTAT_L55", ""); -// define("ADSTAT_L56", ""); -// define("ADSTAT_L57", ""); -// define("ADSTAT_L58", ""); -// define("ADSTAT_L59", ""); -// define("ADSTAT_L60", ""); - - diff --git a/e107_plugins/log/languages/English_admin.php b/e107_plugins/log/languages/English_admin.php deleted file mode 100644 index 90c7c020c..000000000 --- a/e107_plugins/log/languages/English_admin.php +++ /dev/null @@ -1,105 +0,0 @@ -You must set the permissions of the e107_plugins/log/logs folder to 777 (chmod 777)"); -define("ADSTAT_LAN_3", "Statistic Logging"); -define("ADSTAT_LAN_4", "Activate statistic logging"); -define("ADSTAT_LAN_5", "Statistic types"); -define("ADSTAT_LAN_6", "Browsers"); -define("ADSTAT_LAN_7", "Operating Systems"); -define("ADSTAT_LAN_8", "Screen resolutions / depths"); -define("ADSTAT_LAN_9", "Countries/domains visited from"); -define("ADSTAT_LAN_10", "Referrers"); -define("ADSTAT_LAN_11", "Search queries"); -define("ADSTAT_LAN_12", "Reset stats"); -define("ADSTAT_LAN_13", "This will erase the all-time stats - careful! Deletes stats to the end of yesterday. There is a separate menu option to delete selected historical data"); // TODO: Condense this help field (minimize) -define("ADSTAT_LAN_14", "Page counts"); -//define("ADSTAT_LAN_15", "Update Statistic Settings"); -define("ADSTAT_LAN_16", "Site Statistic Settings"); -//define("ADSTAT_LAN_17", "Statistic settings updated"); -define("ADSTAT_LAN_18", "Allow access to main statistics page to ..."); -define("ADSTAT_LAN_19", "Recent visitors"); -define("ADSTAT_LAN_20", "Count admin visits"); -define("ADSTAT_LAN_21", "Maximum records to display on stats page"); -define("ADSTAT_LAN_22", "Run update routine"); -define("ADSTAT_LAN_23", "logs from a previous version of e107 have been detected, update them here"); -define("ADSTAT_LAN_24", "Go to update script"); -//define("ADSTAT_LAN_25", "Selected stats reset"); -define("ADSTAT_LAN_26", "Remove page entries"); -define("ADSTAT_LAN_27", "If your stats have incorrect pages, you can remove them here"); -define("ADSTAT_LAN_28", "Open page"); -define("ADSTAT_LAN_29", "Page Name"); -define("ADSTAT_LAN_30", "Check to remove"); -define("ADSTAT_LAN_31", "Remove selected pages"); -define("ADSTAT_LAN_32", "Page Tidy"); -// define("ADSTAT_LAN_33", "Configure Statistics Logging"); see English_global.php -// define("ADSTAT_LAN_34", "Site Stats"); -define ('ADSTAT_LAN_35', 'Options'); -define ('ADSTAT_LAN_36', 'Data Export'); -//define ('ADSTAT_LAN_37', 'Create export file'); -define ('ADSTAT_LAN_38', "You must set the e107_plugins/log/logs folder to be writable"); -define ('ADSTAT_LAN_39', 'Stats Logging Functions'); -define ('ADSTAT_LAN_40', 'Export log data'); -define ('ADSTAT_LAN_41', 'Date selection'); -define ('ADSTAT_LAN_42', 'Single Day'); -define ('ADSTAT_LAN_43', 'Daily for a month'); -define ('ADSTAT_LAN_44', 'Monthly for a year'); -define ('ADSTAT_LAN_45', 'All-time'); -define ('ADSTAT_LAN_46', 'Date:'); -define ('ADSTAT_LAN_47', 'Invalid date chosen'); -define ('ADSTAT_LAN_48', 'Monthly and All-time'); -define ('ADSTAT_LAN_49', 'All-time Only'); -define ('ADSTAT_LAN_50', 'None'); -define ('ADSTAT_LAN_51', 'Output Data'); -define ('ADSTAT_LAN_52', 'Page Data'); -define ('ADSTAT_LAN_53', 'No selection possible'); -define ('ADSTAT_LAN_54', 'Invalid type selection'); -define ('ADSTAT_LAN_55', 'Single quote'); -define ('ADSTAT_LAN_56', 'Double quote'); -define ('ADSTAT_LAN_57', 'Comma'); -define ('ADSTAT_LAN_58', 'Pipe (|)'); -define ('ADSTAT_LAN_59', 'CSV separator, quotes'); -define ('ADSTAT_LAN_60', 'Strip site address from URLs'); -define ('ADSTAT_LAN_61', '(if checked, just gives page reference)'); -define ('ADSTAT_LAN_62', 'All-time (detailed)'); -define ('ADSTAT_LAN_63', 'Available Datasets'); -define ('ADSTAT_LAN_64', 'Database records found:'); -define ('ADSTAT_LAN_65', 'DB filter string:'); -define ('ADSTAT_LAN_66', 'Show Datasets'); -define ('ADSTAT_LAN_67', 'Generate a CSV (Comma Separated Variable) file of historical statistics which meets the specified criteria'); -define ('ADSTAT_LAN_68', 'Show the statistics database entries which actually exist and meet the selection criteria'); -define ('ADSTAT_LAN_69', 'Delete historical data'); -define ('ADSTAT_LAN_70', 'Delete data older than:'); -define ('ADSTAT_LAN_71', 'Delete Data'); -define ('ADSTAT_LAN_72', 'Confirm deletion of data older than first day of:'); -//define ('ADSTAT_LAN_73', 'Confirm'); -define ('ADSTAT_LAN_74', '(List of data entries which will be deleted below)'); -define ('ADSTAT_LAN_75', 'Records for deletion'); -define ('ADSTAT_LAN_76', 'Caution! Once deleted, the data cannot be recovered. Backup or export your database first'); -define ('ADSTAT_LAN_77', 'Records deleted:'); -define ('ADSTAT_LAN_78', 'Show previous month as well as current month for non-page access stats'); -define ('ADSTAT_LAN_79', 'Only used if monthly stats collected'); -define ('ADSTAT_LAN_80', 'The following pages were deleted:'); -define ('ADSTAT_LAN_81', 'Statistics cleared:'); -define ('ADSTAT_LAN_82', 'Following values now set:'); -define ('ADSTAT_LAN_83', 'Following log ID entries removed:'); -define ('ADSTAT_LAN_84', 'This proceedure will overwrite the log statistic summaries in your database. (raw log files are left unchanged) Once replaced, the data cannot be recovered. Please backup or export your database first'); -define ('ADSTAT_LAN_85', '[x] log files have been found. Click the button below to process these files.'); -define ('ADSTAT_LAN_86', 'Total Hits'); -define ('ADSTAT_LAN_87', 'Rebuild Statistic Summaries'); -define ('ADSTAT_LAN_88', 'Rebuild Stats'); -define ('ADSTAT_LAN_89', 'Rebuild'); -define ('ADSTAT_LAN_90', "Data saved to database with id: [x]"); -define ('ADSTAT_LAN_91', "Couldn't save data to database with id: [x]"); - - diff --git a/e107_plugins/log/languages/English_admin_log.php b/e107_plugins/log/languages/English_admin_log.php deleted file mode 100644 index 2e5ff840d..000000000 --- a/e107_plugins/log/languages/English_admin_log.php +++ /dev/null @@ -1,100 +0,0 @@ -You must set the permissions of the e107_plugins/log/logs folder to 777 (chmod 777)"); -define("ADSTAT_L3", "Statistic Logging"); -define("ADSTAT_L4", "Activate statistic logging"); -define("ADSTAT_L5", "Statistic types"); -define("ADSTAT_L6", "Browsers"); -define("ADSTAT_L7", "Operating Systems"); -define("ADSTAT_L8", "Screen resolutions / depths"); -define("ADSTAT_L9", "Countries/domains visited from"); -define("ADSTAT_L10", "Referrers"); -define("ADSTAT_L11", "Search queries"); -define("ADSTAT_L12", "Reset stats"); -define("ADSTAT_L13", "This will erase the all-time stats - careful! Deletes stats to the end of yesterday. There is a separate menu option to delete selected historical data"); // TODO: Condense this help field (minimize) -define("ADSTAT_L14", "Page counts"); -//define("ADSTAT_L15", "Update Statistic Settings"); -define("ADSTAT_L16", "Site Statistic Settings"); -//define("ADSTAT_L17", "Statistic settings updated"); -define("ADSTAT_L18", "Allow access to main statistics page to ..."); -define("ADSTAT_L19", "Recent visitors"); -define("ADSTAT_L20", "Count admin visits"); -define("ADSTAT_L21", "Maximum records to display on stats page"); -define("ADSTAT_L22", "Run update routine"); -define("ADSTAT_L23", "logs from a previous version of e107 have been detected, update them here"); -define("ADSTAT_L24", "Go to update script"); -//define("ADSTAT_L25", "Selected stats reset"); -define("ADSTAT_L26", "Remove page entries"); -define("ADSTAT_L27", "If your stats have incorrect pages, you can remove them here"); -define("ADSTAT_L28", "Open page"); -define("ADSTAT_L29", "Page Name"); -define("ADSTAT_L30", "Check to remove"); -define("ADSTAT_L31", "Remove selected pages"); -define("ADSTAT_L32", "Page Tidy"); -// define("ADSTAT_L33", "Configure Statistics Logging"); see English_global.php -// define("ADSTAT_L34", "Site Stats"); -define ('ADSTAT_L35', 'Options'); -define ('ADSTAT_L36', 'Data Export'); -//define ('ADSTAT_L37', 'Create export file'); -define ('ADSTAT_L38', "You must set the e107_plugins/log/logs folder to be writable"); -define ('ADSTAT_L39', 'Stats Logging Functions'); -define ('ADSTAT_L40', 'Export log data'); -define ('ADSTAT_L41', 'Date selection'); -define ('ADSTAT_L42', 'Single Day'); -define ('ADSTAT_L43', 'Daily for a month'); -define ('ADSTAT_L44', 'Monthly for a year'); -define ('ADSTAT_L45', 'All-time'); -define ('ADSTAT_L46', 'Date:'); -define ('ADSTAT_L47', 'Invalid date chosen'); -define ('ADSTAT_L48', 'Monthly and All-time'); -define ('ADSTAT_L49', 'All-time Only'); -define ('ADSTAT_L50', 'None'); -define ('ADSTAT_L51', 'Output Data'); -define ('ADSTAT_L52', 'Page Data'); -define ('ADSTAT_L53', 'No selection possible'); -define ('ADSTAT_L54', 'Invalid type selection'); -define ('ADSTAT_L55', 'Single quote'); -define ('ADSTAT_L56', 'Double quote'); -define ('ADSTAT_L57', 'Comma'); -define ('ADSTAT_L58', 'Pipe (|)'); -define ('ADSTAT_L59', 'CSV separator, quotes'); -define ('ADSTAT_L60', 'Strip site address from URLs'); -define ('ADSTAT_L61', '(if checked, just gives page reference)'); -define ('ADSTAT_L62', 'All-time (detailed)'); -define ('ADSTAT_L63', 'Available Datasets'); -define ('ADSTAT_L64', 'Database records found:'); -define ('ADSTAT_L65', 'DB filter string:'); -define ('ADSTAT_L66', 'Show Datasets'); -define ('ADSTAT_L67', 'Generate a CSV (Comma Separated Variable) file of historical statistics which meets the specified criteria'); -define ('ADSTAT_L68', 'Show the statistics database entries which actually exist and meet the selection criteria'); -define ('ADSTAT_L69', 'Delete historical data'); -define ('ADSTAT_L70', 'Delete data older than:'); -define ('ADSTAT_L71', 'Delete Data'); -define ('ADSTAT_L72', 'Confirm deletion of data older than first day of:'); -//define ('ADSTAT_L73', 'Confirm'); -define ('ADSTAT_L74', '(List of data entries which will be deleted below)'); -define ('ADSTAT_L75', 'Records for deletion'); -define ('ADSTAT_L76', 'Caution! Once deleted, the data cannot be recovered. Backup or export your database first'); -define ('ADSTAT_L77', 'Records deleted:'); -define ('ADSTAT_L78', 'Show previous month as well as current month for non-page access stats'); -define ('ADSTAT_L79', 'Only used if monthly stats collected'); -define ('ADSTAT_L80', 'The following pages were deleted:'); -define ('ADSTAT_L81', 'Statistics cleared:'); -define ('ADSTAT_L82', 'Following values now set:'); -define ('ADSTAT_L83', 'Following log ID entries removed:'); -define ('ADSTAT_L84', ''); -define ('ADSTAT_L85', ''); - - - diff --git a/e107_plugins/log/languages/English_global.php b/e107_plugins/log/languages/English_global.php deleted file mode 100644 index 7c1ce3b3d..000000000 --- a/e107_plugins/log/languages/English_global.php +++ /dev/null @@ -1,9 +0,0 @@ -
-Caution! Once deleted, this data cannot be recovered. Back up and/or export the data you may require first."); -define("LAN_STAT_HELP_03","This option allows you to delete the data relating to a specific site page."); -define("LAN_STAT_HELP_04","This option allows export of statistics data in CSV format. This can be imported into many other applications for -detailed analysis. Refer to the wiki page on the stats logging plugin for more detail on file formats etc"); -define("LAN_STAT_HELP_05","Enable Stats Logging
No logging takes place if disabled

-Stats Page Access
-Determines who can see the site statistics

-Count Admin Visits
-Frequent visits by the admins can distort site statistics, so you can exclude them

-Maximum records to display...
-Sets the number of \"recent visitors\" retained

-Statistic Types
-Determines which information is logged. Recording monthly data will take up more database space, and gives better visibility. -If monthly statistics are being collected, you can set whether just the current month, or current month and previous month, are displayed

-Reset Stats
-Clears the selected all-time data (up to the end of yesterday) to zero. To delete today\"s data as well, delete the log*.php files in the log/logs plugin directory

-"); -define("LAN_STAT_HELP_06",""); - diff --git a/e107_plugins/log/log.php b/e107_plugins/log/log.php deleted file mode 100644 index 0df20f66a..000000000 --- a/e107_plugins/log/log.php +++ /dev/null @@ -1,310 +0,0 @@ -' );)"; - referer= ref - color= colord - eself= eself - res= res - err_direct - optional error flag - err_referer - referrer if came via error page - qry = 1 to log query part as well - -// Normally the file is 'silent' - if any errors occur, any error message appears in the page header. -*/ -//error_reporting(0); -// error_reporting(E_ALL); -define('e_MINIMAL',true); -require_once(__DIR__.'/../../class2.php'); // More secure to include it. -header('Cache-Control: no-cache, must-revalidate'); // See if this discourages browser caching -header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past - -define('LOGSTATS_DEBUG', false); - -// @example url: e107_plugins/log/log.php?lv=cmVmZXJlcj1odHRwJTNBLy9sb2NhbGhvc3QlM0E4MDgwL2UxMDdfMi4wL3N0YXRzJmNvbG91cj0yNCZlc2VsZj1odHRwJTNBLy9sb2NhbGhvc3QlM0E4MDgwL2UxMDdfMi4wL2UxMDdfcGx1Z2lucy9sb2cvc3RhdHMucGhwJTNGMiZyZXM9MTkyMHgxMjAw - -if(LOGSTATS_DEBUG === true) -{ - echo "Debug is Active"; -} - -if (!vartrue($pref['statActivate'])) -{ - if(LOGSTATS_DEBUG === true) - { - echo "Stats log is inactive"; - } - - exit(); -} - - - -//print_r(base64_decode($_GET['lv'])); -define('LOGSTATS_INIT', true); - -// Array of page names which should have individual query values recorded. -// The top level array index is the page name. -// If the top level value is an array, it must be an array of query string beginnings to match. -$pageUnique = array('page' => 1, 'content' => array('content')); - -//$logVals = urldecode(base64_decode($_SERVER['QUERY_STRING'])); -//$logVals = urldecode(base64_decode($_GET['lv'])); - - -// --------------- Reworked for v2.x ------------------------ - - -$logVals = base64_decode($_GET['lv']); -$logVals = filter_var($logVals, FILTER_SANITIZE_URL); - -$logVals .= "&ip=".USERIP; -$logVals .= "&iphost=". @gethostbyaddr(USERIP); -$logVals .= "&lan=".e_LAN; -$logVals .= "&agent=".filter_var($_SERVER['HTTP_USER_AGENT'],FILTER_SANITIZE_STRING); - -parse_str($logVals, $vals); - -$vals['referer'] = urldecode($vals['referer']); -$vals['eself'] = urldecode($vals['eself']); - -if(empty($_SESSION['log_userLoggedPages']) || !in_array($vals['eself'],$_SESSION['log_userLoggedPages'])) -{ - $_SESSION['log_userLoggedPages'][] = $vals['eself']; - $logVals .= "&unique=1"; -} -else -{ - $logVals .= "&unique=0"; -} - - -$logVals = str_replace('%3A',':',$logVals); // make the URLs a bit cleaner, while keeping any urlqueries encoded. - -$lg = e107::getLog(); -$lg->addDebug(print_r($logVals, true)); -$lg->toFile('SiteStats','Statistics Log', true); - -e107::getEvent()->trigger('user_log_stats',$vals); - - -// ------------------------------------ --------------------- - -// We MUST have a timezone set in PHP >= 5.3. This should work for PHP >= 5.1: -// @todo may be able to remove this check once minimum PHP version finalised -if (function_exists('date_default_timezone_get')) -{ - date_default_timezone_set(@date_default_timezone_get()); // Just set a default - it should default to UTC if no timezone set -} - - -//$logfp = fopen(e_LOG.'rcvstring.txt', 'a+'); fwrite($logfp, $logVals."\n"); fclose($logfp); -//$logfp = fopen(e_LOG.'rcvstring.txt', 'a+'); fwrite($logfp, print_r($vals, TRUE)."\n"); fclose($logfp); - -$colour = strip_tags((isset($vals['colour']) ? $vals['colour'] : '')); -$res = strip_tags((isset($vals['res']) ? $vals['res'] : '')); -$self = strip_tags((isset($vals['eself']) ? $vals['eself'] : '')); -$ref = addslashes(strip_tags((isset($vals['referer']) ? $vals['referer'] : ''))); -$logQry = isset($vals['qry']) && $vals['qry']; -$date = date('z.Y', time()); -$logPfile = e_LOG.'logp_'.$date.'.php'; - -//$logString = "Colour: {$colour} Res: {$res} Self: {$self} Referrer: {$ref} ErrCode: {$vals['err_direct']}\n"; -//$logfp = fopen(e_LOG.'rcvstring.txt', 'a+'); fwrite($logfp, $logString); fclose($logfp); - - -// vet resolution and colour depth some more - avoid dud values -if ($res && preg_match("#.*?((\d+)\w+?(\d+))#", $res, $match)) -{ - $res = $match[2].'x'.$match[3]; -} -else -{ - $res = '??'; // Can't decode resolution -} - -if ($colour && preg_match("#.*?(\d+)#",$colour,$match)) -{ - $colour = intval($match[1]); -} -else -{ - $colour='??'; -} - - -if ($err_code = strip_tags((isset($vals['err_direct']) ? $vals['err_direct'] : ''))) -{ - $ref = addslashes(strip_tags(isset($vals['err_referer']) ? $vals['err_referer'] : '')); -// Uncomment the next two lines to create a separate CSV format log of invalid accesses - error code, entered URL, referrer -// $log_string = $err_code.",".$self.",".$ref; -// $logfp = fopen(e_LOG."errpages.csv", 'a+'); fwrite($logfp, $log_string."\n\r"); fclose($logfp); - $err_code .= ':'; -} - -if(strpos($ref, 'admin') !== false) -{ - $ref = FALSE; -} - -$screenstats = $res.'@'.$colour; -$agent = $_SERVER['HTTP_USER_AGENT']; -$ip = e107::getIPHandler()->ipDecode(USERIP); - -$oldref = $ref; // backup for search string being stripped off for referer -if($ref && strpos($ref, $_SERVER['HTTP_HOST']) === false) -{ - if(preg_match("#http://(.*?)($|/)#is", $ref, $match)) - { - $ref = $match[0]; - } -} - - -$pageDisallow = "cache|file|eself|admin"; -$tagRemove = "(\\\)|(\s)|(\')|(\")|(eself)|( )|(\.php)|(\.html)"; -$tagRemove2 = "(\\\)|(\s)|(\')|(\")|(eself)|( )"; - -/* -function logGetPageKey($url,$logQry=false,$err_code='') -{ - global $pageDisallow, $tagRemove; - - preg_match("#/(.*?)(\?|$)(.*)#si", $url, $match); - $match[1] = isset($match[1]) ? $match[1] : ''; - $pageName = substr($match[1], (strrpos($match[1], "/")+1)); - - $pageName = preg_replace("/".$tagRemove."/si", "", $pageName); - if($pageName == "") - { - return "index"; - } - - if(preg_match("/".$pageDisallow."/i", $pageName)) - { - return false; - } - - if ($logQry) - { - $pageName .= '+'.$match[3]; // All queries match - } - - $pageName = $err_code.$pageName; // Add the error code at the beginning, so its treated uniquely - - - return $pageName; -}*/ - -require_once(e_PLUGIN."log/consolidate.php"); -$lgc = new logConsolidate; - - -if(!$pageName = $lgc->getPageKey($self,false,$err_code,e_LAN)) -{ - if(LOGSTATS_DEBUG == true) - { - echo 'pageName was empty'; - } - return; -} - -if(LOGSTATS_DEBUG == true) -{ - echo "
File: ".$logPfile; -} - -//$logfp = fopen(e_LOG.'rcvstring.txt', 'a+'); fwrite($logfp, $pageName."\n"); fclose($logfp); - -$p_handle = fopen($logPfile, 'r+'); -if($p_handle && flock( $p_handle, LOCK_EX ) ) -{ - $log_file_contents = ''; - while (!feof($p_handle)) // Assemble a string of data - { - $log_file_contents.= fgets($p_handle,1000); - } - $log_file_contents = str_replace(array('<'.'?php','?'.'>'),'',$log_file_contents); - if (eval($log_file_contents) === FALSE && getperms('0')) - { - echo "Error in log file contents: ".$logPfile; - } -} -elseif(getperms('0')) -{ - echo "Couldn't log data to: ".$logPfile; // returned to js popup. - exit; -} - - -$flag = FALSE; -if(array_key_exists($pageName, $pageInfo)) -{ // Existing page - just increment stats - $pageInfo[$pageName]['ttl'] ++; -} -else -{ // First access of page - $url = preg_replace("/".$tagRemove2."/si", "", $self); - if(preg_match("/".$pageDisallow."/i", $url)) return; - $pageInfo[$pageName] = array('url' => $url, 'ttl' => 1, 'unq' => 1); - $flag = TRUE; -} - - - -if(strpos($ipAddresses, $ip) === false) -{ /* unique visit */ - if(!$flag) - { - $pageInfo[$pageName]['unq'] ++; - } - $siteUnique ++; - $ipAddresses .= $ip."."; // IP address is stored as hex string - require_once('loginfo.php'); -} - - - - - - -$siteTotal ++; -$info_data = var_export($pageInfo, true); -//$date_stamp = date("z:Y", time()); // Same as '$date' variable - -$data = ""; - -if ($p_handle) -{ - ftruncate($p_handle, 0 ); - fseek( $p_handle, 0 ); - fwrite($p_handle, $data); - fclose($p_handle); -} - -if(LOGSTATS_DEBUG == true) -{ - echo '
Script Completed'; -} - - diff --git a/e107_plugins/log/log_sql.php b/e107_plugins/log/log_sql.php deleted file mode 100644 index a067bb225..000000000 --- a/e107_plugins/log/log_sql.php +++ /dev/null @@ -1,7 +0,0 @@ -CREATE TABLE logstats ( - log_uniqueid int(11) NOT NULL auto_increment, - log_id varchar(50) NOT NULL default '', - log_data longtext NOT NULL, - PRIMARY KEY (log_uniqueid), - UNIQUE KEY log_id (log_id) -) ENGINE=MyISAM; \ No newline at end of file diff --git a/e107_plugins/log/loginfo.php b/e107_plugins/log/loginfo.php deleted file mode 100644 index e8bc866db..000000000 --- a/e107_plugins/log/loginfo.php +++ /dev/null @@ -1,317 +0,0 @@ -'),'',$log_file_contents); - if (eval($log_file_contents) === FALSE) echo "error in log file contents



"; -} -else -{ - echo "Couldn't log data



"; - exit; -} - -$browser = getBrowser($agent); -$os = getOs($agent); - -if($screenstats && $screenstats != "@") -{ - if(array_key_exists($screenstats, $screenInfo)) - { - $screenInfo[$screenstats] ++; - } - else - { - $screenInfo[$screenstats] = 1; - } -} - -if(array_key_exists($browser, $browserInfo)) -{ - $browserInfo[$browser] ++; -} -else -{ - $browserInfo[$browser] = 1; -} - -if(array_key_exists($os, $osInfo)) -{ - $osInfo[$os] ++; -} -else -{ - $osInfo[$os] =1; -} - -/* referer data ... */ -if($ref && strpos($ref, $_SERVER['HTTP_HOST']) === false) -{ - if(preg_match("#http://(.*?)($|/)#is", $ref, $match)) - { - $refdom = $match[0]; - if(array_key_exists($refdom, $refInfo)) - { - $refInfo[$refdom]['ttl'] ++; - } - else - { - $refInfo[$refdom] = array('url' => $ref, 'ttl' => 1); - } - } -} - -/* is the referal from Google? If so get search string ... */ -if(preg_match("#q=(.*?)($|&)#is", $oldref, $match)) -{ - $schstr = trim($match[1]); - $schstr = htmlentities(urldecode($schstr)); - if(array_key_exists($schstr, $searchInfo) && $schstr) - { - $searchInfo[$schstr] ++; - } - else - { - $searchInfo[$schstr] = 1; - } -} - -if ($tmp = gethostbyaddr(getenv('REMOTE_ADDR'))) -{ - $host = trim(strtolower(substr($tmp, strrpos($tmp, ".")+1))); - if(!is_numeric($host) && strpos($host, "calhost") === false) - { - if(array_key_exists($host, $domainInfo)) - { - $domainInfo[$host] ++; - } - else - { - $domainInfo[$host] =1; - } - } -} - -/* last 20 visitors */ -if(count($visitInfo) >= 20) -{ - $length = 20; - $offset = count($visitInfo)-$length; - $visitInfo = array_slice($visitInfo, $offset, $length); -} - -$visitInfo[$tmp] = array( - 'host' => trim($tmp), - 'date' => time(), - 'os' => trim($os), - 'browser' => trim($browser), - 'screen' => trim($screenstats), - 'referer' => substr(trim($ref), 0, 255), -); - -$data = "'; - - -if ($i_handle) -{ - ftruncate($i_handle, 0); - fseek( $i_handle, 0 ); - fwrite($i_handle, $data); - fclose($i_handle); -} - - -function getBrowser($agent) -{ - // - // All "root" browsers must come at the end of the list, unfortunately. - // Otherwise, browsers based on them will never be seen. - //(But #1997) - // http://www.zytrax.com/tech/web/browser_ids.htm - $browsers = array( - "netcaptor" => array('name' => 'Netcaptor', 'rule' => 'netcaptor[ /]([0-9.]{1,10})'), - "opera" => array('name' => 'Opera Mini', 'rule' => 'Opera[ /]([0-9.]{1,10})(.*)Opera Mini'), - "opera1" => array('name' => 'Opera Mobile', 'rule' => 'Opera[ /]([0-9.]{1,10})(.*)Opera Mobi'), - "opera2" => array('name' => 'Opera', 'rule' => 'opera[ /]([0-9.]{1,10})'), - "chrome" => array('name' => 'Chrome', 'rule' => 'Chrome[ /]([0-9.+]{1,10})'), - "nokia" => array('name' => 'Nokia Browser', 'rule' => 'Nokia([^/]+)/([^ SP]+)'), - "nokia1" => array('name' => 'Nokia Browser', 'rule' => 'Series60|S60/([0-9.]{1,10})'), - "nokia2" => array('name' => 'Nokia Browser', 'rule' => 'Mozilla(.*)SymbianOS(.*)AppleWebKit'), // catch it or it'll become a safari hit! - "aol" => array('name' => 'AOL', 'rule' => 'aol[ /\-]([0-9.]{1,10})'), - "aol2" => array('name' => 'AOL', 'rule' => 'aol[ /\-]?browser'), - "mosaic" => array('name' => 'Mosaic', 'rule' => 'mosaic[ /]([0-9.]{1,10})'), - "k-meleon" => array('name' => 'K-Meleon', 'rule' => 'K-Meleon[ /]([0-9.]{1,10})'), - "konqueror" => array('name' => 'Konqueror', 'rule' => 'konqueror/([0-9.]{1,10})'), - "avantbrowser" => array('name' => 'Avant Browser', 'rule' => 'Avant[ ]?Browser'), - "avantgo" => array('name' => 'AvantGo', 'rule' => 'AvantGo[ /]([0-9.]{1,10})'), - // "proxomitron" => array('name' => 'Proxomitron', 'rule' => 'Space[ ]?Bison/[0-9.]{1,10}'), - "lynx" => array('name' => 'Lynx', 'rule' => 'lynx/([0-9a-z.]{1,10})'), - "links" => array('name' => 'Links', 'rule' => 'Links[ /]\(([0-9.]{1,10})'), - "galeon" => array('name' => 'Galeon', 'rule' => 'galeon/([0-9.]{1,10})'), - "abrowse" => array('name' => 'ABrowse', 'rule' => 'abrowse/([0-9.]{1,10})'), - "amaya" => array('name' => 'Amaya', 'rule' => 'amaya/([0-9.]{1,10})'), - "ant" => array('name' => 'ANTFresco', 'rule' => 'ANTFresco[ /]([0-9.]{1,10})'), - "aweb" => array('name' => 'Aweb', 'rule' => 'Aweb[/ ]([0-9.]{1,10})'), - "beonex" => array('name' => 'Beonex', 'rule' => 'beonex/([0-9.]{1,10})'), - "blazer" => array('name' => 'Blazer', 'rule' => 'Blazer[/ ]([0-9.]{1,10})'), - "camino" => array('name' => 'Camino', 'rule' => 'camino/([0-9.+]{1,10})'), - "chimera" => array('name' => 'Chimera', 'rule' => 'chimera/([0-9.+]{1,10})'), - "columbus" => array('name' => 'Columbus', 'rule' => 'columbus[ /]([0-9.]{1,10})'), - "crazybrowser" => array('name' => 'Crazy Browser', 'rule' => 'Crazy Browser[ /]([0-9.]{1,10})'), - "curl" => array('name' => 'Curl', 'rule' => 'curl[ /]([0-9.]{1,10})'), - "deepnet" => array('name' => 'Deepnet Explorer', 'rule' => 'Deepnet Explorer[/ ]([0-9.]{1,10})'), - "dillo" => array('name' => 'Dillo', 'rule' => 'dillo/([0-9.]{1,10})'), - "doris" => array('name' => 'Doris', 'rule' => 'Doris/([0-9.]{1,10})'), - "elinks" => array('name' => 'ELinks', 'rule' => 'ELinks[ /][(]*([0-9.]{1,10})'), - "epiphany" => array('name' => 'Epiphany', 'rule' => 'Epiphany/([0-9.]{1,10})'), - "ibrowse" => array('name' => 'IBrowse', 'rule' => 'ibrowse[ /]([0-9.]{1,10})'), - "icab" => array('name' => 'iCab', 'rule' => 'icab[/ ]([0-9.]{1,10})'), - "ice" => array('name' => 'ICEbrowser', 'rule' => 'ICEbrowser/v?([0-9._]{1,10})'), - "isilox" => array('name' => 'iSiloX', 'rule' => 'iSilox/([0-9.]{1,10})'), - "lotus" => array('name' => 'Lotus Notes', 'rule' => 'Lotus[ -]?Notes[ /]([0-9.]{1,10})'), - "lunascape" => array('name' => 'Lunascape', 'rule' => 'Lunascape[ /]([0-9.]{1,10})'), - "maxthon" => array('name' => 'Maxthon', 'rule' => ' Maxthon[);]'), - "mbrowser" => array('name' => 'mBrowser', 'rule' => 'mBrowser[ /]([0-9.]{1,10})'), - "multibrowser" => array('name' => 'Multi-Browser', 'rule' => 'Multi-Browser[ /]([0-9.]{1,10})'), - "nautilus" => array('name' => 'Nautilus', 'rule' => '(gnome[ -]?vfs|nautilus)/([0-9.]{1,10})'), - "netfront" => array('name' => 'NetFront', 'rule' => 'NetFront[ /]([0-9.]{1,10})$'), - "netpositive" => array('name' => 'NetPositive', 'rule' => 'netpositive[ /]([0-9.]{1,10})'), - "omniweb" => array('name' => 'OmniWeb', 'rule' => 'omniweb/[ a-z]?([0-9.]{1,10})$'), - "oregano" => array('name' => 'Oregano', 'rule' => 'Oregano[0-9]?[ /]([0-9.]{1,10})$'), - "phaseout" => array('name' => 'PhaseOut', 'rule' => 'www.phaseout.net'), - "plink" => array('name' => 'PLink', 'rule' => 'PLink[ /]([0-9a-z.]{1,10})'), - "phoenix" => array('name' => 'Phoenix', 'rule' => 'Phoenix/([0-9.+]{1,10})'), - "proxomitron" => array('name' => 'Proxomitron', 'rule' => 'Space[ ]?Bison/[0-9.]{1,10}'), - "shiira" => array('name' => 'Shiira', 'rule' => 'Shiira/([0-9.]{1,10})'), - "sleipnir" => array('name' => 'Sleipnir', 'rule' => 'Sleipnir( Version)?[ /]([0-9.]{1,10})'), - "slimbrowser" => array('name' => 'SlimBrowser', 'rule' => 'Slimbrowser'), - "staroffice" => array('name' => 'StarOffice', 'rule' => 'staroffice[ /]([0-9.]{1,10})'), - "sunrise" => array('name' => 'Sunrise', 'rule' => 'SunriseBrowser[ /]([0-9.]{1,10})'), - "voyager" => array('name' => 'Voyager', 'rule' => 'voyager[ /]([0-9.]{1,10})'), - "w3m" => array('name' => 'w3m', 'rule' => 'w3m/([0-9.]{1,10})'), - "webtv" => array('name' => 'Webtv', 'rule' => 'webtv[ /]([0-9.]{1,10})'), - "xiino" => array('name' => 'Xiino', 'rule' => '^Xiino[ /]([0-9a-z.]{1,10})'), - "explorer" => array('name' => 'Internet Explorer', 'rule' => '\(compatible; MSIE[ /]([0-9.]{1,10})'), - "safari" => array('name' => 'Safari', 'rule' => 'safari/([0-9.]{1,10})'), - "firefox" => array('name' => 'Firefox', 'rule' => 'Firefox/([0-9.+]{1,10})'), - "netscape" => array('name' => 'Netscape', 'rule' => 'netscape[0-9]?/([0-9.]{1,10})'), - "netscape2" => array('name' => 'Netscape', 'rule' => '^mozilla/([0-4]\.[0-9.]{1,10})'), - "mozilla" => array('name' => 'Mozilla', 'rule' => '^mozilla/[5-9]\.[0-9.]{1,10}.+rv:([0-9a-z.+]{1,10})'), - "mozilla2" => array('name' => 'Mozilla', 'rule' => '^mozilla/([5-9]\.[0-9a-z.]{1,10})'), - "firebird" => array('name' => 'Firebird', 'rule' => 'Firebird/([0-9.+]{1,10})'), - ); - $browser = ""; - foreach($browsers as $key => $info) - { - if (preg_match("#".$info['rule']."#i", $agent, $results)) - { - switch ($key) - { - case 'nokia': - case 'nokia1': - case 'nokia2': - if(strpos(strtolower($agent), 'series60') !== false || strpos($agent, 'S60') !== false ) - { - $info['name'] = 'Nokia S60 OSS Browser'; - } - return ($info['name'].(isset($results[2]) && $results[2] ? ' v'.$results[2] : '')); - break; - - default: - return ($info['name'].(isset($results[1]) && $results[1] ? ' v'.$results[1] : '')); - break; - } - } - } - return ('Unknown'); -} - -function getOs($agent) -{ - // http://www.zytrax.com/tech/web/browser_ids.htm - $os = array( - // mobile come first - latest rules could break the check - "android" => array('name' => 'Android', 'rule' => 'Android\s([0-9.]{1,10})'), - "symbian" => array('name' => 'Symbian', 'rule' => 'symbianOS[ /]?([0-9.]{1,10})'), - "symbian1" => array('name' => 'Symbian', 'rule' => 'series60[ /]'), - "symbian2" => array('name' => 'Symbian', 'rule' => 'Symbian OS Series'), - "windows7" => array('name' => 'Windows 7', 'rule' => 'wi(n|ndows)[ \-]?nt[ /]?6\.1'), - "windowsvista" => array('name' => 'Windows Vista', 'rule' => 'wi(n|ndows)[ \-]?nt[ /]?6\.0'), - "windows2003" => array('name' => 'Windows 2003', 'rule' => 'wi(n|ndows)[ \-]?(2003|nt[ /]?5\.2)'), - "windowsxp" => array('name' => 'Windows XP', 'rule' => 'Windows XP'), - "windowsxp2" => array('name' => 'Windows XP', 'rule' => 'wi(n|ndows)[ \-]?nt[ /]?5\.1'), - "windows2k" => array('name' => 'Windows 2000', 'rule' => 'wi(n|ndows)[ \-]?(2000|nt[ /]?5\.0)'), - "windows95" => array('name' => 'Windows 95', 'rule' => 'wi(n|ndows)[ \-]?95'), - "windowsce" => array('name' => 'Windows CE', 'rule' => 'wi(n|ndows)[ \-]?ce'), - "windowsme" => array('name' => 'Windows ME', 'rule' => 'win 9x 4\.90'), - "windowsme2" => array('name' => 'Windows ME', 'rule' => 'wi(n|ndows)[ \-]?me'), - "windowsnt" => array('name' => 'Windows NT', 'rule' => 'wi(n|ndows)[ \-]?nt[ /]?([0-4][0-9.]{1,10})'), - "windowsnt2" => array('name' => 'Windows NT', 'rule' => 'wi(n|ndows)[ \-]?nt'), - "windows98" => array('name' => 'Windows 98', 'rule' => 'wi(n|ndows)[ \-]?98'), - "windows" => array('name' => 'Windows', 'rule' => 'wi(n|n32|ndows)'), - "linux" => array('name' => 'Linux', 'rule' => 'mdk for ([0-9.]{1,10})'), - "linux2" => array('name' => 'Linux', 'rule' => 'linux[ /\-]([a-z0-9.]{1,10})'), - "linux3" => array('name' => 'Linux', 'rule' => 'linux'), - "macosx" => array('name' => 'MacOS X', 'rule' => 'Mac[ ]?OS[ ]?X'), - "macppc" => array('name' => 'MacOS PPC', 'rule' => 'Mac(_Power|intosh.+P)PC'), - "mac" => array('name' => 'MacOS', 'rule' => 'mac[^hk]'), - "amiga" => array('name' => 'Amiga', 'rule' => 'Amiga[ ]?OS[ /]([0-9.]{1,10})'), - "beos" => array('name' => 'BeOS', 'rule' => 'beos[ a-z]*([0-9.]{1,10})'), - "freebsd" => array('name' => 'FreeBSD', 'rule' => 'free[ \-]?bsd[ /]([a-z0-9.]{1,10})'), - "freebsd2" => array('name' => 'FreeBSD', 'rule' => 'free[ \-]?bsd'), - "irix" => array('name' => 'Irix', 'rule' => 'irix[0-9]*[ /]([0-9.]{1,10})'), - "netbsd" => array('name' => 'NetBSD', 'rule' => 'net[ \-]?bsd[ /]([a-z0-9.]{1,10})'), - "netbsd2" => array('name' => 'NetBSD', 'rule' => 'net[ \-]?bsd'), - "os2" => array('name' => 'OS/2 Warp', 'rule' => 'warp[ /]?([0-9.]{1,10})'), - "os22" => array('name' => 'OS/2 Warp', 'rule' => 'os[ /]?2'), - "openbsd" => array('name' => 'OpenBSD', 'rule' => 'open[ \-]?bsd[ /]([a-z0-9.]{1,10})'), - "openbsd2" => array('name' => 'OpenBSD', 'rule' => 'open[ \-]?bsd'), - "palm" => array('name' => 'PalmOS', 'rule' => 'Palm[ \-]?(Source|OS)[ /]?([0-9.]{1,10})'), - "palm2" => array('name' => 'PalmOS', 'rule' => 'Palm[ \-]?(Source|OS)') - ); - foreach($os as $key => $info) - { - if (preg_match("#".$info['rule']."#i", $agent, $results)) - { - if(strpos($key, "win") !== false) - { - return ($info['name']); - } - else - { - return ($info['name']." ".$results[1]); - } - } - } - return ('Unspecified'); -} diff --git a/e107_plugins/log/logs/null.txt b/e107_plugins/log/logs/null.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/e107_plugins/log/plugin.xml b/e107_plugins/log/plugin.xml deleted file mode 100644 index f394cc3c3..000000000 --- a/e107_plugins/log/plugin.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - This plugin will log all visits to your site, and build detailed statistic screens based on the information gathered. - - LAN_PLUGIN_LOG_CONFIGURE - - - LAN_PLUGIN_LOG_LINK - - - 0 - - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - - \ No newline at end of file diff --git a/e107_plugins/log/stats.php b/e107_plugins/log/stats.php deleted file mode 100644 index ab4a530c8..000000000 --- a/e107_plugins/log/stats.php +++ /dev/null @@ -1,2074 +0,0 @@ -addError(ADSTAT_L4); - $ns->tablerender(ADSTAT_L6, $mes->render()); - require_once(FOOTERF); - exit; -} - - -if (!e107::getPref('statActivate')) -{ - $text = (ADMIN ? "
".ADSTAT_L41."
" : "
".ADSTAT_L5."
"); - $ns->tablerender(ADSTAT_L6, $text); - require_once(FOOTERF); - exit; -} - - -$qs = explode('.', e_QUERY, 3); -$action = varset($qs[0],1); -$sec_action = varset($qs[1],FALSE); -$order = varset($qs[1],0); // Sort order - -$toremove = varset($qs[2],''); -$order = intval($order); - -$stat = new siteStats($order); - -if($stat->error) -{ - $ns->tablerender(ADSTAT_L6, $stat->error); - require_once(FOOTERF); - exit; -} - -/* stats displayed will depend on the query string. For example, ?1.2.4 will render today's stats, all time stats and browser stats */ -/* -1: today's stats -2: all time total and unique -3: browsers -4: operating systems -5: domains -6: screen resolution/colour depth -7: referers -8: search engine strings -9: Recent visitors -10: Daily visitors -11: Monthly visitors -12: Error pages today -13: Error pages all-time -14: Browsers consolidated -15: OSs consolidated -*/ - -function display_pars($rec_pars, $disp_pars = '*') -{ - switch ($rec_pars) - { - case 1 : return array(1); - case 2 : if (e107::getPref('statPrevMonth')) return array(2,3,1); else return array(2,1); - case 3 : return array(2,3,1); - default : return array(); - } -} - - -$text = ''; -if ((ADMIN == TRUE) && ($sec_action == 'rem')) -{ - $toremove = rawurldecode($toremove); - if ($stat -> remove_entry($toremove)) - { - $text .= "
".ADSTAT_L45.$toremove."
".ADSTAT_L46."
"; - } - else - { - $text .= "
".ADSTAT_L47.$toremove."
"; - } -} - - -$action = intval($action); - -switch($action) -{ - case 1: - $text .= $stat -> renderTodaysVisits(FALSE); - break; - case 2: - $text .= $stat -> renderAlltimeVisits($action, FALSE); - break; - case 12: - if (ADMIN == TRUE) - { - $text .= $stat -> renderTodaysVisits(TRUE); - } - break; - case 13: - if (ADMIN == TRUE) - { - $text .= $stat -> renderAlltimeVisits($action, TRUE); - } - break; - case 3 : // 'Normal' render - case 14 : // 'Consolidated' render - if(e107::getPref('statBrowser')) - { - $text .= $stat -> renderBrowsers(display_pars(e107::getPref('statBrowser')), $action==3); - } - else - { - $text .= ADSTAT_L7; - } - break; - case 4: // 'Normal' render - case 15 : // 'Consolidated' render - if(e107::getPref('statOs')) - { - $text .= $stat -> renderOses(display_pars(e107::getPref('statOs')), $action==4); - } - else - { - $text .= ADSTAT_L7; - } - break; - case 5: - if(e107::getPref('statDomain')) - { - $text .= $stat -> renderDomains(display_pars(e107::getPref('statDomain'))); - } - else - { - $text .= ADSTAT_L7; - } - break; - case 6: - if(e107::getPref('statScreen')) - { - $text .= $stat -> renderScreens(display_pars(e107::getPref('statScreen'))); - } - else - { - $text .= ADSTAT_L7; - } - break; - case 7: - if (e107::getPref('statRefer')) - { - $text .= $stat -> renderRefers(display_pars(e107::getPref('statRefer'))); - } - else - { - $text .= ADSTAT_L7; - } - break; - case 8: - if (e107::getPref('statQuery')) - { - $text .= $stat -> renderQueries(display_pars(e107::getPref('statQuery'))); - } - else - { - $text .= ADSTAT_L7; - } - break; - case 9: - if (e107::getPref('statRecent')) - { - $text .= $stat -> recentVisitors(); - } - else - { - $text .= ADSTAT_L7; - } - break; - case 10: - $text .= $stat -> renderDaily(); - break; - case 11: - $text .= $stat -> renderMonthly(); - break; - default : - $text .= $stat -> renderTodaysVisits(FALSE); -} - - - -/* render links - 1 - Todays visits - 2 - All-time - 3 - Browser stats - 4 - OS Stats - 5 - Domain Stats - 6 - Screen resolution - 7 - Referral stats - 8 - Search strings - 9 - Recent visitors -10 - Daily Stats -11 - Monthly stats -12 - Today's error page visits -13 - All-time error page visits -14 - Consolidated browser view (not listed as a menu option) -15 - Consolidated OS view (not listed as a menu option) -*/ - -$path = e_PLUGIN_ABS.'log/stats.php'; - - - - - - - -$links = " -
". -($action != 1 ? "".ADSTAT_L8."" : "".ADSTAT_L8."")." | ". -($action != 2 ? "".ADSTAT_L9."" : "".ADSTAT_L9."")." | ". -($action != 10 ? "".ADSTAT_L10."" : "".ADSTAT_L10."")." | ". -($action != 11 ? "".ADSTAT_L11."" : "".ADSTAT_L11."")." | ". -($action != 3 && e107::getPref('statBrowser') ? "".ADSTAT_L12." | " : (e107::getPref('statBrowser') ? "".ADSTAT_L12." | " : "")). -($action != 4 && e107::getPref('statOs') ? "".ADSTAT_L13." | " : (e107::getPref('statOs') ? "".ADSTAT_L13." | " : "")). -($action != 5 && e107::getPref('statDomain') ? "".ADSTAT_L14." | " : (e107::getPref('statDomain') ? "".ADSTAT_L14." | " : "")). -($action != 6 && e107::getPref('statScreen') ? "".ADSTAT_L15." | " : (e107::getPref('statScreen') ? "".ADSTAT_L15." | " : "")). -($action != 7 && e107::getPref('statRefer') ? "".ADSTAT_L16." | " : (e107::getPref('statRefer') ? "".ADSTAT_L16." | " : "")). -($action != 8 && e107::getPref('statQuery') ? "".ADSTAT_L17." | " : (e107::getPref('statQuery') ? "".ADSTAT_L17." | " : "")). -($action != 9 && e107::getPref('statRecent') ? "".ADSTAT_L18." | " : (e107::getPref('statRecent') ? "".ADSTAT_L18." | " : "")); -if (ADMIN == TRUE) -{ - $links .= - ($action != 12 ? "".ADSTAT_L43."" : "".ADSTAT_L43."")." | ". - ($action != 13 ? "".ADSTAT_L44."" : "".ADSTAT_L44.""); -} -$links .= "


"; - - - - - -// $links = statNav($action)."

"; - -$nav = $stat->renderNav($action)."

"; - -$ns->tablerender(ADSTAT_L6, $nav.$text); -require_once(FOOTERF); - - -function make_bits($prefix, $act) -{ - $ret = array(); - $now = getdate(); - $ret['hdg_extra'] = ''; - switch ($act) - { - case 1 : - $ret['query'] = "log_id='{$prefix}'"; - break; - case 2 : - $ret['query'] = "log_id='{$prefix}:".date("Y-m")."'"; - $ret['hdg_extra'] = " (".$now['mon']."-".$now['year'].")"; - break; - case 3 : - $now['mon']--; - if ($now['mon']==0) - { - $now['mon'] = 12; - $now['year']--; - } - $ret['query'] = "log_id='{$prefix}:".sprintf("%04d-%02d",$now['year'],$now['mon'])."'"; - $ret['hdg_extra'] = " (".$now['mon']."-".$now['year'].")"; - break; - default: $ret = "Invalid selection: {$act}
"; - } - return $ret; -} - - - - -class siteStats -{ - protected $browser_headings = array(1 => ADSTAT_L50, 2 => ADSTAT_L51, 3 => ADSTAT_L52); - - protected $dbPageInfo; - protected $fileInfo; - protected $fileBrowserInfo; - protected $fileOsInfo; - protected $fileScreenInfo; - protected $fileDomainInfo; - protected $fileReferInfo; - protected $fileQueryInfo; - protected $fileRecent; - - protected $order; - protected $bar; - protected $plugFolder; - - protected $filesiteTotal; - protected $filesiteUnique; - - public $error; // Set if error - - - - protected $oses_map = array ( - "Windows" => "windows", - "Mac" => "mac", - "Linux" => "linux", - "BeOS" => "beos", - "FreeBSD" => "freebsd", - "NetBSD" => "netbsd", - "Unspecified"=> "unspecified", - "OpenBSD" => "openbsd", - "Unix" => "unix", - "Spiders" => "spiders", - "Android" => "android", - "Symbian" => "symbian", - ); - - protected $browser_map = array ( - 'Netcaptor' => "netcaptor", - 'Internet Explorer' => "explorer", - 'Firefox' => "firefox", - 'Opera' => "opera", - 'AOL' => "aol", - 'Netscape' => "netscape", - 'Mozilla' => "mozilla", - 'Mosaic' => "mosaic", - 'K-Meleon' => "k-meleon", - 'Konqueror' => "konqueror", - 'Avant Browser' => "avantbrowser", - 'AvantGo' => "avantgo", - // 'Proxomitron' => "proxomitron", - 'Safari' => "safari", - 'Lynx' => "lynx", - 'Links' => "links", - 'Galeon' => "galeon", - 'ABrowse' => "abrowse", - 'Amaya' => "amaya", - 'ANTFresco' => "ant", - 'Aweb' => "aweb", - 'Beonex' => "beonex", - 'Blazer' => "blazer", - 'Camino' => "camino", - 'Chimera' => "chimera", - 'Columbus' => "columbus", - 'Crazy Browser' => "crazybrowser", - 'Curl' => "curl", - 'Deepnet Explorer' => "deepnet", - 'Dillo' => "dillo", - 'Doris' => "doris", - 'ELinks' => "elinks", - 'Epiphany' => "epiphany", - 'Firebird' => "firebird", - 'IBrowse' => "ibrowse", - 'iCab' => "icab", - 'ICEbrowser' => "ice", - 'iSiloX' => "isilox", - 'Lotus Notes' => "lotus", - 'Lunascape' => "lunascape", - 'Maxthon' => "maxthon", - 'mBrowser' => "mbrowser", - 'Multi-Browser' => "multibrowser", - 'Nautilus' => "nautilus", - 'NetFront' => "netfront", - 'NetPositive' => "netpositive", - 'OmniWeb' => "omniweb", - 'Oregano' => "oregano", - 'PhaseOut' => "phaseout", - 'PLink' => "plink", - 'Phoenix' => "phoenix", - 'Proxomitron' => "proxomitron", - 'Shiira' => "shiira", - 'Sleipnir' => "sleipnir", - 'SlimBrowser' => "slimbrowser", - 'StarOffice' => "staroffice", - 'Sunrise' => "sunrise", - 'Voyager' => "voyager", - 'w3m' => "w3m", - 'Webtv' => "webtv", - 'Xiino' => "xiino", - 'Nokia S60 OSS Browser' => "nokia", - 'Nokia Browser' => "nokia", - ); - - - protected $country = array( - 'arpa' => 'ARPANet', - 'com' => 'Commercial Users', - 'edu' => 'Education', - 'gov' => 'Government', - 'int' => 'Organisation established by an International Treaty', - 'mil' => 'Military', - 'net' => 'Network', - 'org' => 'Organisation', - 'ad' => 'Andorra', - 'ae' => 'United Arab Emirates', - 'af' => 'Afghanistan', - 'ag' => 'Antigua & Barbuda', - 'ai' => 'Anguilla', - 'al' => 'Albania', - 'am' => 'Armenia', - 'an' => 'Netherland Antilles', - 'ao' => 'Angola', - 'aq' => 'Antarctica', - 'ar' => 'Argentina', - 'as' => 'American Samoa', - 'at' => 'Austria', - 'au' => 'Australia', - 'aw' => 'Aruba', - 'az' => 'Azerbaijan', - 'ba' => 'Bosnia-Herzegovina', - 'bb' => 'Barbados', - 'bd' => 'Bangladesh', - 'be' => 'Belgium', - 'bf' => 'Burkina Faso', - 'bg' => 'Bulgaria', - 'bh' => 'Bahrain', - 'bi' => 'Burundi', - 'bj' => 'Benin', - 'bm' => 'Bermuda', - 'bn' => 'Brunei Darussalam', - 'bo' => 'Bolivia', - 'br' => 'Brasil', - 'bs' => 'Bahamas', - 'bt' => 'Bhutan', - 'bv' => 'Bouvet Island', - 'bw' => 'Botswana', - 'by' => 'Belarus', - 'bz' => 'Belize', - 'ca' => 'Canada', - 'cc' => 'Cocos (Keeling) Islands', - 'cf' => 'Central African Republic', - 'cg' => 'Congo', - 'ch' => 'Switzerland', - 'ci' => 'Ivory Coast', - 'ck' => 'Cook Islands', - 'cl' => 'Chile', - 'cm' => 'Cameroon', - 'cn' => 'China', - 'co' => 'Colombia', - 'cr' => 'Costa Rica', - 'cs' => 'Czechoslovakia', - 'cu' => 'Cuba', - 'cv' => 'Cape Verde', - 'cx' => 'Christmas Island', - 'cy' => 'Cyprus', - 'cz' => 'Czech Republic', - 'de' => 'Germany', - 'dj' => 'Djibouti', - 'dk' => 'Denmark', - 'dm' => 'Dominica', - 'do' => 'Dominican Republic', - 'dz' => 'Algeria', - 'ec' => 'Ecuador', - 'ee' => 'Estonia', - 'eg' => 'Egypt', - 'eh' => 'Western Sahara', - 'er' => 'Eritrea', - 'es' => 'Spain', - 'et' => 'Ethiopia', - 'fi' => 'Finland', - 'fj' => 'Fiji', - 'fk' => 'Falkland Islands (Malvibas)', - 'fm' => 'Micronesia', - 'fo' => 'Faroe Islands', - 'fr' => 'France', - 'fx' => 'France (European Territory)', - 'ga' => 'Gabon', - 'gb' => 'Great Britain', - 'gd' => 'Grenada', - 'ge' => 'Georgia', - 'gf' => 'Guyana (French)', - 'gh' => 'Ghana', - 'gi' => 'Gibralta', - 'gl' => 'Greenland', - 'gm' => 'Gambia', - 'gn' => 'Guinea', - 'gp' => 'Guadeloupe (French)', - 'gq' => 'Equatorial Guinea', - 'gr' => 'Greece', - 'gs' => 'South Georgia & South Sandwich Islands', - 'gt' => 'Guatemala', - 'gu' => 'Guam (US)', - 'gw' => 'Guinea Bissau', - 'gy' => 'Guyana', - 'hk' => 'Hong Kong', - 'hm' => 'Heard & McDonald Islands', - 'hn' => 'Honduras', - 'hr' => 'Croatia', - 'ht' => 'Haiti', - 'hu' => 'Hungary', - 'id' => 'Indonesia', - 'ie' => 'Ireland', - 'il' => 'Israel', - 'in' => 'India', - 'io' => 'British Indian Ocean Territories', - 'iq' => 'Iraq', - 'ir' => 'Iran', - 'is' => 'Iceland', - 'it' => 'Italy', - 'jm' => 'Jamaica', - 'jo' => 'Jordan', - 'jp' => 'Japan', - 'ke' => 'Kenya', - 'kg' => 'Kyrgyz Republic', - 'kh' => 'Cambodia', - 'ki' => 'Kiribati', - 'km' => 'Comoros', - 'kn' => 'Saint Kitts Nevis Anguilla', - 'kp' => 'Korea (North)', - 'kr' => 'Korea (South)', - 'kw' => 'Kuwait', - 'ky' => 'Cayman Islands', - 'kz' => 'Kazachstan', - 'la' => 'Laos', - 'lb' => 'Lebanon', - 'lc' => 'Saint Lucia', - 'li' => 'Liechtenstein', - 'lk' => 'Sri Lanka', - 'lr' => 'Liberia', - 'ls' => 'Lesotho', - 'lt' => 'Lithuania', - 'lu' => 'Luxembourg', - 'lv' => 'Latvia', - 'ly' => 'Libya', - 'ma' => 'Morocco', - 'mc' => 'Monaco', - 'md' => 'Moldova', - 'mg' => 'Madagascar', - 'mh' => 'Marshall Islands', - 'mk' => 'Macedonia', - 'ml' => 'Mali', - 'mm' => 'Myanmar', - 'mn' => 'Mongolia', - 'mo' => 'Macau', - 'mp' => 'Northern Mariana Islands', - 'mq' => 'Martinique (French)', - 'mr' => 'Mauretania', - 'ms' => 'Montserrat', - 'mt' => 'Malta', - 'mu' => 'Mauritius', - 'mv' => 'Maldives', - 'mw' => 'Malawi', - 'mx' => 'Mexico', - 'my' => 'Malaysia', - 'mz' => 'Mozambique', - 'na' => 'Namibia', - 'nc' => 'New Caledonia (French)', - 'ne' => 'Niger', - 'nf' => 'Norfolk Island', - 'ng' => 'Nigeria', - 'ni' => 'Nicaragua', - 'nl' => 'Netherlands', - 'no' => 'Norway', - 'np' => 'Nepal', - 'nr' => 'Nauru', - 'nt' => 'Saudiarab. Irak)', - 'nu' => 'Niue', - 'nz' => 'New Zealand', - 'om' => 'Oman', - 'pa' => 'Panama', - 'pe' => 'Peru', - 'pf' => 'Polynesia (French)', - 'pg' => 'Papua New Guinea', - 'ph' => 'Philippines', - 'pk' => 'Pakistan', - 'pl' => 'Poland', - 'pm' => 'Saint Pierre & Miquelon', - 'pn' => 'Pitcairn', - 'pr' => 'Puerto Rico (US)', - 'pt' => 'Portugal', - 'pw' => 'Palau', - 'py' => 'Paraguay', - 'qa' => 'Qatar', - 're' => 'Reunion (French)', - 'ro' => 'Romania', - 'ru' => 'Russian Federation', - 'rw' => 'Rwanda', - 'sa' => 'Saudi Arabia', - 'sb' => 'Salomon Islands', - 'sc' => 'Seychelles', - 'sd' => 'Sudan', - 'se' => 'Sweden', - 'sg' => 'Singapore', - 'sh' => 'Saint Helena', - 'si' => 'Slovenia', - 'sj' => 'Svalbard & Jan Mayen', - 'sk' => 'Slovakia', - 'sl' => 'Sierra Leone', - 'sm' => 'San Marino', - 'sn' => 'Senegal', - 'so' => 'Somalia', - 'sr' => 'Suriname', - 'st' => 'Sao Tome & Principe', - 'su' => 'Soviet Union', - 'sv' => 'El Salvador', - 'sy' => 'Syria', - 'sz' => 'Swaziland', - 'tc' => 'Turks & Caicos Islands', - 'td' => 'Chad', - 'tf' => 'French Southern Territories', - 'tg' => 'Togo', - 'th' => 'Thailand', - 'tj' => 'Tadjikistan', - 'tk' => 'Tokelau', - 'tm' => 'Turkmenistan', - 'tn' => 'Tunisia', - 'to' => 'Tonga', - 'tp' => 'East Timor', - 'tr' => 'Turkey', - 'tt' => 'Trinidad & Tobago', - 'tv' => 'Tuvalu', - 'tw' => 'Taiwan', - 'tz' => 'Tanzania', - 'ua' => 'Ukraine', - 'ug' => 'Uganda', - 'uk' => 'United Kingdom', - 'um' => 'US Minor outlying Islands', - 'us' => 'United States', - 'uy' => 'Uruguay', - 'uz' => 'Uzbekistan', - 'va' => 'Vatican City State', - 'vc' => 'St Vincent & Grenadines', - 've' => 'Venezuela', - 'vg' => 'Virgin Islands (British)', - 'vi' => 'Virgin Islands (US)', - 'vn' => 'Vietnam', - 'vu' => 'Vanuatu', - 'wf' => 'Wallis & Futuna Islands', - 'ws' => 'Samoa', - 'ye' => 'Yemen', - 'yt' => 'Mayotte', - 'yu' => 'Yugoslavia', - 'za' => 'South Africa', - 'zm' => 'Zambia', - 'zr' => 'Zaire', - 'zw' => 'Zimbabwe' - ); - - - function __construct($order) - { - /* constructor */ - $sql = e107::getDB(); - - /* get today's logfile ... */ - $logfile = e_LOG.'logp_'.date('z.Y', time()).'.php'; - // $logfile = e_PLUGIN.'log/logs/logp_'.date('z.Y', time()).'.php'; - if(is_readable($logfile)) - { - require($logfile); - } - // $logfile = e_PLUGIN.'log/logs/logi_'.date('z.Y', time()).'.php'; - $logfile = e_LOG.'logi_'.date('z.Y', time()).'.php'; - if(is_readable($logfile)) - { - require($logfile); - } - - $this -> filesiteTotal = vartrue($siteTotal); - $this -> filesiteUnique = vartrue($siteUnique); - - /* set order var */ - $this -> order = $order; - - $this -> fileInfo = vartrue($pageInfo); - $this -> fileBrowserInfo = vartrue($browserInfo); - $this -> fileOsInfo = vartrue($osInfo); - $this -> fileScreenInfo = vartrue($screenInfo); - $this -> fileDomainInfo = vartrue($domainInfo); - $this -> fileReferInfo = vartrue($refInfo); - $this -> fileQueryInfo = vartrue($searchInfo); - $this -> fileRecent = vartrue($visitInfo); - - /* get main stat info from database */ - if($sql->select('logstats', 'log_data', "log_id='pageTotal'")) - { - $row = $sql ->fetch(); - $this -> dbPageInfo = unserialize($row['log_data']); - } - else - { - $this -> dbPageInfo = array(); - } - - /* temp consolidate today's info (if it exists)... */ - if(is_array($pageInfo)) - { - foreach($pageInfo as $key => $info) - { - $key = preg_replace("/\?.*/", "", $key); - if(array_key_exists($key, $this -> dbPageInfo)) - { - $this -> dbPageInfo[$key]['ttlv'] += $info['ttl']; - $this -> dbPageInfo[$key]['unqv'] += $info['unq']; - } - else - { - $this -> dbPageInfo[$key]['url'] = $info['url']; - $this -> dbPageInfo[$key]['ttlv'] = $info['ttl']; - $this -> dbPageInfo[$key]['unqv'] = $info['unq']; - } - } - } - - $this -> bar = (file_exists(THEME.'images/bar.png') ? THEME.'images/bar.png' : e_IMAGE.'generic/bar.png'); - - - $this->plugFolder = e107::getFolder('plugins'); - - /* end constructor */ - } - - function renderNav($action) - { - // $path = e_PLUGIN_ABS.'log/stats.php'; - $path = e_REQUEST_SELF; - - $links = array( - 1 => array('label' => ADSTAT_L8, 'pref' => null), - 2 => array('label' => ADSTAT_L9, 'pref' => null), - 10 => array('label' => ADSTAT_L10, 'pref' => null), - 11 => array('label' => ADSTAT_L11, 'pref' => null), - 3 => array('label' => ADSTAT_L12, 'pref' => 'statBrowser'), - 4 => array('label' => ADSTAT_L13, 'pref' => 'statOs'), - 5 => array('label' => ADSTAT_L14, 'pref' => 'statDomain'), - 6 => array('label' => ADSTAT_L15, 'pref' => 'statScreen'), - 7 => array('label' => ADSTAT_L16, 'pref' => 'statRefer'), - 8 => array('label' => ADSTAT_L17, 'pref' => 'statQuery'), - 9 => array('label' => ADSTAT_L18, 'pref' => 'statRecent'), - ); - - if(ADMIN == true) - { - $links[12] = array('label' => ADSTAT_L43, 'pref' => null); - $links[13] = array('label' => ADSTAT_L44, 'pref' => null); - } - - $lk = array(); - - foreach($links as $id => $val) - { - if($val['pref'] == null || e107::getPref($val['pref'])) - { - $selected = ($id === $action) ? "class='active'" : ""; - $lk[] = "".$val['label'].""; - } - } - - if(deftrue('BOOTSTRAP')) - { - return "
".e107::getForm()->button('statNav',$lk,'dropdown',$links[$action]['label'], array('align'=>'right','class'=>'btn-primary'))."
"; - } - - return "
".implode(" | ", $lk)."
"; - } - - /** - * sorts multi-dimentional array based on which field is passed - * - * @param array $array - the array to sort - * @param string $column - name of column to sort by - * @param string $order SORT_DESC|SORT_ASC - sort order - */ - function arraySort($array, $column, $order = SORT_DESC) - { - $i=0; - $sortarr = array(); - foreach($array as $info) - { - $sortarr[]=$info[$column]; - $i++; - } - array_multisort($sortarr, $order, $array, $order); - return($array); - /* end method */ - } - - - function getLabel($key,$truncate=false) - { - list($url,$language) = explode("|",$key); - - $url = str_replace($this->plugFolder,'',$url); - - - - if($truncate) - { - $result = e107::getParser()->text_truncate($url,50); - - return $result; - } - - return trim($url); - } - - - - - /** - * renders information for today only - * - * @param boolean $do_errors - FALSE to show 'normal' accesses, TRUE to show error accesses (i.e. invalid pages) - * - * @return string text for display - */ - function renderTodaysVisits($do_errors = FALSE) - { - $tp = e107::getParser(); - $template = e107::getTemplate('log', 'log', 'todaysvisits', true, true); - - $do_errors = $do_errors && ADMIN && getperms('P'); // Only admins can see page errors - - // Now run through and keep either the non-error pages, or the error pages, according to $do_errors - $totalArray = array(); - $totalv = 0; - $totalu = 0; - $total = 0; - foreach ($this -> fileInfo as $k => $v) - { - $found = (strpos($k,'error/') === 0); - if ($do_errors XOR !$found) - { - $totalArray[$k] = $v; - $total += (int) vartrue($v['ttlv']); - } - } - $totalArray = $this -> arraySort($totalArray, "ttl"); - - foreach($totalArray as $key => $info) - { - $totalv += $info['ttl']; - $totalu += $info['unq']; - } - - $text = $template['start']; - - foreach($totalArray as $key => $info) - { - if($info['ttl']) - { - $percentage = round(($info['ttl']/$totalv) * 100, 2); - - $var = array('ITEM_URL' => $info['url'], - 'ITEM_IMAGE' => ($image ? " " : ""), - 'ITEM_KEY' => $this->getLabel($key), - 'ITEM_BAR' => $this -> bar($percentage, $info['ttl']." [".$info['unq']."]"), - 'ITEM_PERC'=> $percentage, - ); - - $text .= $tp->simpleParse($template['item'], $var); - - } - } - $var = array('TOTALV' => $totalv, - 'TOTALU' => $totalu, - ); - $text .= $tp->simpleParse($template['end'], $var); - - return $text; - } - - - - - /** - * Renders information for alltime, total and unique - * - * @param string $action - value to incorporate in query part of clickable links - * @param boolean $do_errors - FALSE to show 'normal' accesses, TRUE to show error accesses (i.e. invalid pages) - * - * @return string text for display - */ - function renderAlltimeVisits($action, $do_errors = FALSE) - { - $sql = e107::getDB(); - $tp = e107::getParser(); - $template = e107::getTemplate('log', 'log', 'alltimevisits_total', true, true); - - $text = ''; - $sql->select("logstats", "*", "log_id='pageTotal' "); - $row = $sql->fetch(); - $pageTotal = unserialize($row['log_data']); - $total = 0; - - $can_delete = ADMIN && getperms("P"); - $do_errors = $do_errors && $can_delete; - - foreach($this -> fileInfo as $url => $tmpcon) - { - $pageTotal[$url]['url'] = $tmpcon['url']; - $pageTotal[$url]['ttlv'] += $tmpcon['ttl']; - $pageTotal[$url]['unqv'] += $tmpcon['unq']; - } - - // Now run through and keep either the non-error pages, or the error pages, according to $do_errors - $totalArray = array(); - foreach ($pageTotal as $k => $v) - { - $found = (strpos($k,'error/') === 0); - if ($do_errors XOR !$found) - { - $totalArray[$k] = $v; - $total += $v['ttlv']; - } - } - - $totalArray = $this -> arraySort($totalArray, "ttlv"); - - $text .= $template['start']; - - - foreach($totalArray as $key => $info) - { - if($info['ttlv']) - { - if (!$info['url'] && (($key == 'index') || (strpos($key,':index') !== FALSE))) $info['url'] = e_HTTP.'index.php'; // Avoids empty link - $percentage = round(($info['ttlv']/$total) * 100, 2); - - $var = array('ITEM_URL' => $info['url'], - 'ITEM_IMAGE' => ($image ? " " : ""), - 'ITEM_KEY' => $this->getLabel($key,true), - 'ITEM_TITLE' => $this->getLabel($key), - 'ITEM_BAR' => $this->bar($percentage, $info['ttlv']), - 'ITEM_PERC'=> $percentage, - 'ITEM_DELETE'=> ($can_delete ? " - ".ADSTAT_L39." " : ""), - ); - $text .= $tp->simpleParse($template['item'], $var); - } - } - - $var = array('TOTAL' => number_format($total), - ); - $text .= $tp->simpleParse($template['end'], $var); - - $template = e107::getTemplate('log', 'log', 'alltimevisits_unique', true, true); - - $uniqueArray = array(); - $totalv = 0; - foreach ($this -> dbPageInfo as $k => $v) - { - $found = (strpos($k,'error/') === 0); - if ($do_errors XOR !$found) - { - $uniqueArray[$k] = $v; - $totalv += $v['unqv']; - } - } - $uniqueArray = $this -> arraySort($uniqueArray, "unqv"); - - $text .= $template['start']; - - foreach($uniqueArray as $key => $info) - { - if ($info['ttlv']) - { - if (!$info['url'] && (($key == 'index') || (strpos($key,':index') !== FALSE))) $info['url'] = e_HTTP.'index.php'; // Avoids empty link - $percentage = round(($info['unqv']/$totalv) * 100, 2); - - $var = array('ITEM_URL' => $info['url'], - 'ITEM_KEY' => $tp->text_truncate($key, 50), - 'ITEM_BAR' => $this -> bar($percentage, $info['unqv']), - 'ITEM_PERC'=> $percentage, - ); - $text .= $tp->simpleParse($template['item'], $var); - } - } - $var = array('TOTAL' => number_format($totalv), - ); - $text .= $tp->simpleParse($template['end'], $var); - return $text; - } - - - - /** - * List browsers. - * @param integer $selection is an array of the info required - '2' = current month's stats, '1' = all-time stats (default) - * @param boolean $show_version - if FALSE, browsers are consolidated across versions - e.g. 1 line for Firefox using info from $browser_map - * - * @return string text for display - */ - function renderBrowsers($selection = FALSE, $show_version=TRUE) - { - $sql = e107::getDB(); - $tp = e107::getParser(); - $template = e107::getTemplate('log', 'log', 'browsers', true, true); - - - if (!$selection) $selection = array(1); - if (!is_array($selection)) $selection = array(1); - $text = ''; - - - - foreach ($selection as $act) - { - unset($statBrowser); - $statBrowser = array(); - - $pars = make_bits('statBrowser',$act); // Get the query, plus maybe date for heading - if (!is_array($pars)) return $pars; // Return error if necessary - - if ($entries = $sql->select('logstats', 'log_data', $pars['query'])) - { - $row = $sql->fetch(); - $statBrowser = unserialize($row['log_data']); - } - else - { - continue; // No data - terminate this loop - } - - /* temp consolidate today's data ... */ - if (($act == 1) || ($act == 2)) - { - foreach($this->fileBrowserInfo as $name => $count) - { - $statBrowser[$name] += $count; - } - } - - if ($show_version == FALSE) - { - $temp_array = array(); - foreach ($statBrowser as $b_full=>$v) - { - $b_type = ''; - foreach ($this->browser_map as $name => $file) - { - if(stripos($b_full, $name) === 0) - { // Match here - $b_type = $name; - break; - } - } - if (!$b_type) $b_type = $b_full; // Default is an unsupported browser - use the whole name - - if (array_key_exists($b_type,$temp_array)) - { - $temp_array[$b_type] += $v; - } - else - { - $temp_array[$b_type] = $v; // New browser found - } - } - $statBrowser = $temp_array; - unset($temp_array); - } - - - if ($this -> order) - { - ksort($statBrowser); - reset ($statBrowser); - $browserArray = $statBrowser; - } - else - { - $browserArray = $this -> arraySort($statBrowser, 0); - } - - $total = array_sum($browserArray); - - $var = array('START_CAPTION' => $this->browser_headings[$act].$pars['hdg_extra'], - 'START_TITLE' => ($this -> order ? ADSTAT_L48 : ADSTAT_L49), - 'START_URL' => e_SELF."?".($show_version ? "3" : "14").($this -> order ? "" : ".1" ), - ); - $text .= $tp->simpleParse($template['start'], $var); - - if (count($browserArray)) - { - foreach($browserArray as $key => $info) - { - $image = ""; - foreach ($this->browser_map as $name => $file) - { - if(strpos($key, $name) !== false) - { - $image = "{$file}.png"; - break; - } - } - if(empty($image)) - { - $image = "unknown.png"; - } - $percentage = round(($info/$total) * 100, 2); - $var = array( - 'ITEM_IMAGE' => ($image ? " " : ""), - 'ITEM_KEY' => $key, - 'ITEM_BAR' => $this -> bar($percentage, $info), - 'ITEM_PERC'=> $percentage, - ); - $text .= $tp->simpleParse($template['item'], $var); - - $text .= ""; - } - - $var = array('TOTAL' => number_format($total), - ); - $text .= $tp->simpleParse($template['end'], $var); - } - else - { - $text .= $tp->simpleParse($template['nostatistic'], null); - } - } - return $text; - } - - - - - /** - * Show operating systems. - * - * @param integer $selection is an array of the info required - '2' = current month's stats, '1' = all-time stats (default) - * @param $show_version boolean - show different versions of the operating system if TRUE - * - * @return string text for display - */ - function renderOses($selection = FALSE, $show_version=TRUE) - { - $sql = e107::getDB(); - $tp = e107::getParser(); - $template = e107::getTemplate('log', 'log', 'oses', true, true); - if (!$selection) $selection = array(1); - if (!is_array($selection)) $selection = array(1); - $text = ''; - - - $statOs = array(); - foreach ($selection as $act) - { - $pars = make_bits('statOs',$act); // Get the query, plus maybe date for heading - if (!is_array($pars)) return $pars; // Return error if necessary - - if ($entries = $sql->select("logstats", "*", $pars['query'])) - { - $row = $sql -> fetch(); - $statOs = unserialize($row['log_data']); - } - else - { - continue; // No data - terminate this loop - } - - /* temp consolidate today's data ... */ - if (($act == 1) || ($act == 2)) - { - foreach($this -> fileOsInfo as $name => $count) - { - $statOs[$name] += $count; - } - } - - - if ($show_version == FALSE) - { - $temp_array = array(); - foreach ($statOs as $b_full=>$v) - { - $b_type = ''; - foreach ($this->oses_map as $name => $file) - { - if(stripos($b_full, $name) === 0) - { // Match here - $b_type = $name; - break; - } - } - if (!$b_type) $b_type = $b_full; // Default is an unsupported browser - use the whole name - - if (array_key_exists($b_type,$temp_array)) - { - $temp_array[$b_type] += $v; - } - else - { - $temp_array[$b_type] = $v; // New browser found - } - } - $statOs = $temp_array; - unset($temp_array); - } - - - - if($this -> order) - { - ksort($statOs); - reset ($statOs); - $osArray = $statOs; - } - else - { - $osArray = $this->arraySort($statOs, 0); - } - - $total = array_sum($osArray); - $var = array('START_CAPTION' => $this->browser_headings[$act].$pars['hdg_extra'], - 'START_TITLE' => ($this -> order ? "sort by total" : "sort alphabetically"), - 'START_URL' => e_SELF."?".($show_version ? "4" : "15").($this -> order ? "" : ".1" ), - ); - $text .= $tp->simpleParse($template['start'], $var); - - - if (count($osArray)) - { - foreach($osArray as $key => $info) - { - $image = ""; - if(strpos($key, "Windows") !== false) { $image = "windows.png"; } - elseif(strpos($key, "Mac") !== false) { $image = "mac.png"; } - elseif(strpos($key, "Linux") !== false) { $image = "linux.png"; } - elseif(strpos($key, "BeOS") !== false) { $image = "beos.png"; } - elseif(strpos($key, "FreeBSD") !== false) { $image = "freebsd.png"; } - elseif(strpos($key, "NetBSD") !== false) { $image = "netbsd.png"; } - elseif(strpos($key, "Unspecified") !== false) { $image = "unspecified.png"; } - elseif(strpos($key, "OpenBSD") !== false) { $image = "openbsd.png"; } - elseif(strpos($key, "Unix") !== false) { $image = "unix.png"; } - elseif(strpos($key, "Spiders") !== false) { $image = "spiders.png"; } - elseif(stripos($key, "Android") !== false) { $image = "android.png"; } - - $percentage = round(($info/$total) * 100, 2); - $var = array( - 'ITEM_IMAGE' => ($image ? " " : ""), - 'ITEM_KEY' => $key, - 'ITEM_BAR' => $this -> bar($percentage, $info), - 'ITEM_PERC'=> $percentage, - ); - $text .= $tp->simpleParse($template['item'], $var); - } - $var = array('TOTAL' => number_format($total)); - - $text .= $tp->simpleParse($template['end'], $var); - } - else - { - $text .= $tp->simpleParse($template['nostatistic'], null); - } - } - return $text; - } - - - - /** - * Show domains of users - * - * @param integer $selection is an array of the info required - '2' = current month's stats, '1' = all-time stats (default) - * - * @return string text for display - */ - function renderDomains($selection = FALSE) - { - $sql = e107::getDB(); - $tp = e107::getParser(); - $template = e107::getTemplate('log', 'log', 'domains', true, true); - - if (!$selection) $selection = array(1); - if (!is_array($selection)) $selection = array(1); - $text = ''; - - $statDom = array(); - foreach ($selection as $act) - { - $pars = make_bits('statDomain',$act); // Get the query, plus maybe date for heading - if (!is_array($pars)) return $pars; // Return error if necessary - - if ($entries = $sql->select('logstats', 'log_data', $pars['query'])) - { - $row = $sql -> fetch(); - $statDom = unserialize($row['log_data']); - } - else - { - continue; // No data - terminate this loop - } - - /* temp consolidate today's data ... */ - if (($act == 1) || ($act == 2)) - { - foreach($this -> fileDomainInfo as $name => $count) - { - $statDom[$name] += $count; - } - } - - if($this -> order) - { - ksort($statDom); - reset ($statDom); - $domArray = $statDom; - } - else - { - $domArray = $this -> arraySort($statDom, 0); - } - - $total = array_sum($domArray); - $var = array('START_CAPTION' => $this->browser_headings[$act].$pars['hdg_extra'], - 'START_TITLE' => ($this -> order ? "sort by total" : "sort alphabetically"), - 'START_URL' => e_SELF."?5".($this -> order ? "" : ".1" ), - ); - $text .= $tp->simpleParse($template['start'], $var); - - if (count($domArray)) - { - foreach($domArray as $key => $info) - { - if($key = $this -> getcountry($key)) - { - $percentage = round(($info/$total) * 100, 2); - $var = array( - 'ITEM_KEY' => $key, - 'ITEM_BAR' => $this -> bar($percentage, $info), - 'ITEM_PERC'=> $percentage, - ); - $text .= $tp->simpleParse($template['item'], $var); - } - } - //before: $var = array('TOTAL' => $total, - $var = array('TOTAL' => number_format($total)); - $text .= $tp->simpleParse($template['end'], $var); - } - else - { - $text .= $tp->simpleParse($template['nostatistic'], null); - } - } - return $text; - } - - - - - /** - * Show screen resolutions - * - * @param integer $selection is an array of the info required - '2' = current month's stats, '1' = all-time stats (default) - * - * @return string text for display - */ - function renderScreens($selection = FALSE) - { - $sql = e107::getDB(); - $tp = e107::getParser(); - $template = e107::getTemplate('log', 'log', 'screens', true, true); - - if (!$selection) $selection = array(1); - if (!is_array($selection)) $selection = array(1); - $text = ''; - - $statScreen = array(); - foreach ($selection as $act) - { - $pars = make_bits('statScreen',$act); // Get the query, plus maybe date for heading - if (!is_array($pars)) return $pars; // Return error if necessary - - if ($entries = $sql->select('logstats', 'log_data', $pars['query'])) - { - $row = $sql -> fetch(); - $statScreen = unserialize($row['log_data']); - } - else - { - continue; // No data - terminate this loop - } - - /* temp consolidate today's data ... */ - if (($act == 1) || ($act == 2)) - { - foreach($this -> fileScreenInfo as $name => $count) - { - $statScreen[$name] += $count; - } - } - - - if($this -> order) - { - $nsarray = array(); - foreach($statScreen as $key => $info) - { - if(preg_match("/(\d+)x/", $key, $match)) - { - $nsarray[$key] = array('width' => $match[1], 'info' => $info); - } - } - $nsarray = $this -> arraySort($nsarray, 'width', SORT_ASC); - reset($nsarray); - $screenArray = array(); - foreach($nsarray as $key => $info) - { - $screenArray[$key] = $info['info']; - } - } - else - { - $screenArray = $this -> arraySort($statScreen, 0); - } - - $total = array_sum($screenArray); - $var = array('START_CAPTION' => $this->browser_headings[$act].$pars['hdg_extra'], - 'START_TITLE' => ($this -> order ? "sort by total" : "sort alphabetically"), - 'START_URL' => e_SELF."?6".($this -> order ? "" : ".1" ), - ); - $text .= $tp->simpleParse($template['start'], $var); - - if (count($screenArray)) - { - foreach($screenArray as $key => $info) - { - if(strpos($key, "@") !== false && strpos($key, "undefined") === false && preg_match("/(\d+)x(\d+)@(\d+)/", $key)) - { - $percentage = round(($info/$total) * 100, 2); - $var = array( - 'ITEM_IMAGE' => ($image ? " " : ""), - 'ITEM_KEY' => $key, - 'ITEM_BAR' => $this -> bar($percentage, $info), - 'ITEM_PERC'=> $percentage, - ); - $text .= $tp->simpleParse($template['item'], $var); - } - } - //before: $var = array('TOTAL' => $total, - $var = array('TOTAL' => number_format($total)); - $text .= $tp->simpleParse($template['end'], $var); - } - else - { - $text .= $tp->simpleParse($template['nostatistic'], null); - } - - } - return $text; - } - - - - /** - * Show referrers - * - * @param integer $selection is an array of the info required - '2' = current month's stats, '1' = all-time stats (default) - * - * @return string text for display - */ - function renderRefers($selection = FALSE) - { - $sql = e107::getDB(); - $tp = e107::getParser(); - $template = e107::getTemplate('log', 'log', 'refers', true, true); - - if (!$selection) $selection = array(1); - if (!is_array($selection)) $selection = array(1); - $text = ''; - - $statRefer = array(); - foreach ($selection as $act) - { - $pars = make_bits('statReferer',$act); // Get the query, plus maybe date for heading - if (!is_array($pars)) return $pars; // Return error if necessary - - if ($entries = $sql->select('logstats', 'log_data', $pars['query'])) - { - $row = $sql -> fetch(); - $statRefer = unserialize($row['log_data']); - } - else - { - continue; // No data - terminate this loop - } - - /* temp consolidate today's data ... */ - if (($act == 1) || ($act == 2)) - { - foreach($this -> fileReferInfo as $name => $count) - { - $statRefer[$name]['url'] = $count['url']; - $statRefer[$name]['ttl'] += $count['ttl']; - } - } - - $statArray = $this -> arraySort($statRefer, 'ttl'); - $total = 0; - foreach ($statArray as $key => $info) - { - $total += $info['ttl']; - } - $var = array('START_CAPTION' => $this->browser_headings[$act].$pars['hdg_extra'], - 'START_TITLE' => $this -> order ? "show cropped url" : "show full url", - 'START_URL' => e_SELF."?7".($this -> order ? "" : ".1" ), - ); - $text .= $tp->simpleParse($template['start'], $var); - - - $count = 0; - if (count($statArray)) - { - foreach($statArray as $key => $info) - { - $percentage = round(($info['ttl']/$total) * 100, 2); - if (!$this -> order && strlen($key) > 50) - { - $key = substr($key, 0, 50)." ..."; - } - - $var = array( - 'ITEM_IMAGE' => ($image ? " " : ""), - 'ITEM_URL' => $info['url'], - 'ITEM_KEY' => $key, - 'ITEM_BAR' => $this -> bar($percentage, $info['ttl']), - 'ITEM_PERC'=> $percentage, - ); - $text .= $tp->simpleParse($template['item'], $var); - - $count++; - if($count == e107::getPref('statDisplayNumber')) - { - break; - } - } - //before: $var = array('TOTAL' => $total, - $var = array('TOTAL' => number_format($total)); - $text .= $tp->simpleParse($template['end'], $var); - } - else - { - $text .= $tp->simpleParse($template['nostatistic'], null); - } - } - return $text; - } - - - - - /** - * Show search queries - * - * @param integer $selection is an array of the info required - '2' = current month's stats, '1' = all-time stats (default) - * - * @return string - text for display - */ - function renderQueries($selection = FALSE) - { - $sql = e107::getDB(); - $tp = e107::getParser(); - $template = e107::getTemplate('log', 'log', 'queries', true, true); - - if (!$selection) $selection = array(1); - if (!is_array($selection)) $selection = array(1); - $text = ''; - - $statQuery = array(); - foreach ($selection as $act) - { - $pars = make_bits('statQuery',$act); // Get the query, plus maybe date for heading - if (!is_array($pars)) return $pars; // Return error if necessary - - if ($entries = $sql->select("logstats", "*", $pars['query'])) - { - $row = $sql -> fetch(); - $statQuery = unserialize($row['log_data']); - } - else - { - continue; // No data - terminate this loop - } - - /* temp consolidate today's data ... */ - if (($act == 1) || ($act == 2)) - { - foreach ($this -> fileQueryInfo as $name => $count) - { - $statQuery[$name] += $count; - } - } - - - $queryArray = $this -> arraySort($statQuery, 0); - $total = array_sum($queryArray); - $text .= " - \n - - - - - - - - \n"; - - $count = 1; - if (count($queryArray)) - { - foreach ($queryArray as $key => $info) - { - $percentage = round(($info/$total) * 100, 2); - $key = str_replace("%20", " ", $key); - $text .= " - - - - \n"; - $count ++; - if($count == e107::getPref('statDisplayNumber')) - { - break; - } - } - $text .= "\n"; - } - else - { - $text .= "\n"; - } - $text .= "
".$this->browser_headings[$act].$pars['hdg_extra']."
".ADSTAT_L31."".ADSTAT_L21."%
".$key."".$this -> bar($percentage, $info)."".$percentage."%
".ADSTAT_L21."{$total}
".ADSTAT_L25."

"; - } - return $text; - } - - - - /** - * Display list of recent visitors to site - essentially up to (currently 20) of the entries from today's stats - * - * @return string - text for display - */ - function recentVisitors() - { - - $tp = e107::getParser(); - $template = e107::getTemplate('log', 'log', 'visitors', true, true); - - if(!is_array($this -> fileRecent) || !count($this -> fileRecent)) - { - return "
".ADSTAT_L25.".
"; - } - - $gen = new convert; - $recentArray = array_reverse($this -> fileRecent, TRUE); - $text = " - - - - - \n"; - - foreach($recentArray as $key => $info) - { - if(is_array($info)) - { - $host = $info['host']; - $datestamp = $info['date']; - $os = $info['os']; - $browser = $info['browser']; - $screen = $info['screen']; - $referer = $info['referer']; - } - else - { - list($host, $datestamp, $os, $browser, $screen, $referer) = explode(chr(1), $info); - } - $datestamp = $gen -> convert_date($datestamp, "long"); - - $text .= " - - - \n"; - } - - $text .= "
".ADSTAT_L18."".ADSTAT_L53."
{$datestamp}Host: {$host}
".ADSTAT_L26.": {$browser}
".ADSTAT_L27.": {$os}
".ADSTAT_L29.": {$screen}".($referer ? "
".ADSTAT_L32.": {$referer}" : "")."
"; - return $text; - } - - - - /** - * Show the daily stats - total visits and unique visits - * - * @return string - text for display - */ - function renderDaily() - { - $sql = e107::getDB(); - $tp = e107::getParser(); - $template = e107::getTemplate('log', 'log', 'daily', true, true); - - $td = date("Y-m-j", time()); - $dayarray[$td] = array(); - $pagearray = array(); - - $qry = " - SELECT * from #logstats WHERE log_id REGEXP('[[:digit:]]+\-[[:digit:]]+\-[[:digit:]]+') - ORDER BY CONCAT(LEFT(log_id,4), SUBSTRING(log_id, 6, 2), LPAD(SUBSTRING(log_id, 9), 2, '0')) - DESC LIMIT 0,14 - "; - - if($amount = $sql->gen($qry)) - { - $array = $sql -> db_getList(); - - $ttotal = 0; - $utotal = 0; - - foreach($array as $key => $value) - { - extract($value); - if(is_array($log_data)) { - $entries[0] = $log_data['host']; - $entries[1] = $log_data['date']; - $entries[2] = $log_data['os']; - $entries[3] = $log_data['browser']; - $entries[4] = $log_data['screen']; - $entries[5] = $log_data['referer']; - } - else - { - $entries = explode(chr(1), $log_data); - } - - $dayarray[$log_id]['daytotal'] = $entries[0]; - $dayarray[$log_id]['dayunique'] = $entries[1]; - - unset($entries[0]); - unset($entries[1]); - - foreach($entries as $entry) - { - if($entry) - { - list($url, $total, $unique) = explode("|", $entry); - if(strpos($url, "/") !== false) - { - $urlname = preg_replace("/\.php|\?.*/", "", substr($url, (strrpos($url, "/")+1))); - } - else - { - $urlname = preg_replace("/\.php|\?.*/", "", $url); - } - $dayarray[$log_id][$urlname] = array('url' => $url, 'total' => $total, 'unique' => $unique); - if (!isset($pagearray[$urlname]['total'])) $pagearray[$urlname]['total'] = 0; - if (!isset($pagearray[$urlname]['unique'])) $pagearray[$urlname]['unique'] = 0; - $pagearray[$urlname]['total'] += $total; - $pagearray[$urlname]['unique'] += $unique; - $ttotal += $total; - $utotal += $unique; - } - } - } - } - - foreach($this -> fileInfo as $fkey => $fvalue) - { - $dayarray[$td][$fkey]['total'] += $fvalue['ttl']; - $dayarray[$td][$fkey]['unique'] += $fvalue['unq']; - $dayarray[$td]['daytotal'] += $fvalue['ttl']; - $dayarray[$td]['dayunique'] += $fvalue['unq']; - $pagearray[$fkey]['total'] += $fvalue['ttl']; - $pagearray[$fkey]['unique'] += $fvalue['unq']; - $ttotal += $fvalue['ttl']; - $utotal += $fvalue['unq']; - } - - // print_a($dayarray);; - - $text = " - - - - - \n"; - - foreach($dayarray as $date => $total) - { - if (!isset($total['daytotal'])) $total['daytotal'] = 0; - list($year, $month, $day) = explode("-", $date); - $date = strftime ("%A, %B %d", mktime (0,0,0,$month,$day,$year)); - $barWidth = round(($total['daytotal']/$ttotal) * 100, 2); - $text .= " - - - \n"; - } - - $text .= "
".ADSTAT_L33." ".($amount+1)." ".ADSTAT_L40."".ADSTAT_L34."
$date".$this -> bar($barWidth, $total['daytotal'])."
"; - $text .= "
- - - - - \n"; - - - if (!isset($total['dayunique'])) $total['dayunique'] = 0; - if (!isset($total['total'])) $total['total']= 0; - - foreach($dayarray as $date => $total) - { - if (!isset($total['dayunique'])) $total['dayunique'] = 0; - list($year, $month, $day) = explode("-", $date); - $date = strftime ("%A, %B %d", mktime (0,0,0,$month,$day,$year)); - $barWidth = round(($total['dayunique']/$utotal) * 100, 2); - $text .= " - - - \n"; - } - $text .= "
".ADSTAT_L35." ".($amount+1)." ".ADSTAT_L40."".ADSTAT_L34."
{$date}".$this -> bar($barWidth, $total['dayunique'])."
"; - - $text .= "
- - - - - \n"; - - $newArray = $this -> arraySort($pagearray, "total"); - foreach($newArray as $key => $total) - { - $barWidth = round(($total['total']/$ttotal) * 100, 2); - $text .= " - - - \n"; - - } - $text .= "
".ADSTAT_L33." ".($amount+1)." ".ADSTAT_L36."".ADSTAT_L34."
{$key}".$this -> bar($barWidth, $total['total'])."
"; - $text .= "
- - - - - - \n"; - - $newArray = $this -> arraySort($pagearray, "unique"); - - foreach($newArray as $key => $total) { - $barWidth = round(($total['unique']/$utotal) * 100, 2); - $text .= " - - - \n"; - } - $text .= "
".ADSTAT_L35." ".($amount+1)." ".ADSTAT_L36."".ADSTAT_L34."
{$key}".$this -> bar($barWidth, $total['unique'])."
"; - return $text; - } - - - - - /** - * Show monthly stats - * - * @return string text for display - */ - function renderMonthly() - { - $sql = e107::getDB(); - $tp = e107::getParser(); - $template = e107::getTemplate('log', 'log', 'monthly', true, true); - - // Month format entries have log_id = yyyy-mm - if(!$entries = $sql->select("logstats", "*", "log_id REGEXP('^[[:digit:]]+\-[[:digit:]]+$') ORDER BY CONCAT(LEFT(log_id,4), RIGHT(log_id,2)) DESC")) - { - return ADSTAT_L42; - } - - $text = ''; - $array = $sql -> db_getList(); - - $monthTotal = array(); // Array of totals, one per month, with 'totalv', 'uniquev' sub-indices - $mtotal = 0; - $utotal = 0; - - foreach($array as $info) - { - $date = $info['log_id']; - $stats = unserialize($info['log_data']); - - /* - Used to have to calculate monthly stats by adding the individual page access fields - foreach($stats as $key => $total) - { - if (!isset($monthTotal[$date]['totalv'])) $monthTotal[$date]['totalv'] = 0; - if (!isset($monthTotal[$date]['uniquev'])) $monthTotal[$date]['uniquev'] = 0; - $monthTotal[$date]['totalv'] += $total['ttlv']; - $monthTotal[$date]['uniquev'] += $total['unqv']; - $mtotal += $total['ttlv']; - $utotal += $total['unqv']; - } - */ - // Now we store a total, so just use that - $monthTotal[$date]['totalv'] = varset($stats['TOTAL']['ttlv'], 0); - $monthTotal[$date]['uniquev'] = varset($stats['TOTAL']['unqv'], 0); - $mtotal += $monthTotal[$date]['totalv']; - $utotal += $monthTotal[$date]['uniquev']; - } - - $tmpArray = $this -> arraySort($monthTotal, "totalv"); - - $text .= " - - - - - \n"; - - foreach($monthTotal as $date => $total) - { - list($year, $month) = explode("-", $date); - $date = strftime ("%B %Y", mktime (0,0,0,$month,1,$year)); - $barWidth = round(($total['totalv']/$mtotal) * 100, 2); - $text .= " - ". - ($entries == 1 ? "" : "")." - \n"; - } - $text .= "
".ADSTAT_L37."".ADSTAT_L34."
$date".$this -> bar($barWidth, $total['totalv'])."".$this -> bar($barWidth, $total['totalv'])."
"; - - $text .= "
- - - - - \n"; - - foreach($monthTotal as $date => $total) - { - $barWidth = round(($total['uniquev']/$utotal) * 100, 2); - list($year, $month) = explode("-", $date); - $date = strftime ("%B %Y", mktime (0,0,0,$month,1,$year)); - $text .= " - ". - ($entries == 1 ? "" : "")." - \n"; - } - $text .= "
".ADSTAT_L38."".ADSTAT_L34."
$date".$this -> bar($barWidth, $total['uniquev'])."".$this -> bar($barWidth, $total['uniquev'])."
"; - - - return $text; - } - - - - - function getWidthRatio ($array, $column) - { - $tmpArray = $this -> arraySort($array, $column); - // $data = each($tmpArray); - $data = key($tmpArray); - $maxValue = $data[1]['totalv']; - echo "maxValue ".$maxValue."
"; - $ratio = 0; - while($maxValue > 100) - { - $maxValue = ($maxValue / 2); - $ratio ++; - } - if(!$ratio) - { - return 1; - } - echo "ratio ".$ratio."
"; - return $ratio; - } - - - - function getcountry($dom) - { - return $this->country[$dom]; - } - - - - /** - * Generate value including a bar of width (horizontal 'length') as specified - * - * @param float $percen - percentage of full width for the bar - * @param float $val - value to be displayed - * - * @return string text to be displayed - */ - function bar($percen, $val,$name='') - { - if(deftrue('BOOTSTRAP')) - { - $text = e107::getForm()->progressBar($name,$percen); - } - else - { - $text = "
"; - } - - - - $text .= " - - ".number_format((float) $val); - - return $text; - } - - - - /** - * Clear page access from DB entry (doesn't modify today's stats) - * - * @param string $toremove - the page name to remove - * - * @return boolean TRUE for success, FALSE if no entry found - */ - function remove_entry($toremove) - { // Note - only removes info from the database - not from the current page file - $sql = e107::getDB(); - if ($sql->select("logstats", "*", "log_id='pageTotal'")) - { - $row = $sql -> fetch(); - $dbPageInfo = unserialize($row[2]); - unset($dbPageInfo[$toremove]); - $dbPageDone = serialize($dbPageInfo); - $sql ->update("logstats", "log_data='{$dbPageDone}' WHERE log_id='pageTotal' "); - return TRUE; - } - return FALSE; - } -} - - - - diff --git a/e107_plugins/log/stats_csv.php b/e107_plugins/log/stats_csv.php deleted file mode 100644 index bb8d1d83c..000000000 --- a/e107_plugins/log/stats_csv.php +++ /dev/null @@ -1,336 +0,0 @@ -ADSTAT_L6,'statOs'=>ADSTAT_L7,'statScreen'=>ADSTAT_L8,'statDomain'=>ADSTAT_L9,'statReferer'=>ADSTAT_L10,'statQuery'=>ADSTAT_L11); - -$separator_char = array(1 => ',', 2 => '|'); -$quote_char = array(1 => '', 2 => "'", 3 => '"'); - - -//--------------------------------------------- -// Export data file -//--------------------------------------------- -$export_filter = ''; // can be 'LIKE', 'REGEX', or simple equality -$export_type = $tp->toDB(varset($_POST['export_type'],'page')); // Page data or one of the other bits of info -$export_date = intval(varset($_POST['export_date'],1)); -$export2_date = intval(varset($_POST['export2_date'],3)); -$export_year = intval(varset($_POST['export_year'],date('Y'))); -$export_month = intval(varset($_POST['export_month'],date('m'))); -$export_day = intval(varset($_POST['export_day'],date('j'))); -$export_char = varset($_POST['export_char'], 1); -$export_quote = varset($_POST['export_quote'], 1); -$export_stripurl = varset($_POST['export_stripurl'], 0); - -if (isset($_POST['create_export']) && $action == 'export') -{ - $first_date = 0; - $last_date = 0; - $date_error = FALSE; - if ($export_type == 'page') - { - switch ($export_date) - { - case '1' : // Single day - $first_date = gmmktime(0,0,0,$export_month,$export_day,$export_year); - $last_date = $first_date+86399; - $export_filter = " `log_id`='".date("Y-m-j",$first_date)."'"; - break; - case '2' : // Daily for a month - $first_date = gmmktime(0,0,0,$export_month,1,$export_year); - $last_date = gmmktime(0,0,0,$export_month+1,1,$export_year) - 1; - $export_filter = " LEFT(`log_id`,8)='".gmstrftime("%Y-%m-",$first_date)."'"; - break; - case '3' : // Monthly for a Year - $first_date = gmmktime(0,0,0,1,1,$export_year); - $last_date = gmmktime(0,0,0,1,1,$export_year+1) - 1; - $export_filter = " LENGTH(`log_id`)=7 AND LEFT(`log_id`,5)='".gmstrftime("%Y-",$first_date)."'"; - break; - case '4' : // Accumulated - case '5' : - $export_filter = "`log_id`='pageTotal'"; - $date_error = 'ignore'; - break; - } - } - else - { // Calculate strings for non-page sources - $prefix_len = 0; - $export_date = $export2_date; - if (isset($stats_list[$export_type])) - { - $prefix_len = strlen($export_type) + 1; - switch ($export2_date) - { - case '3' : // Monthly for a Year - if ($prefix_len > 0) - { - $first_date = gmmktime(0,0,0,1,1,$export_year); - $last_date = gmmktime(0,0,0,1,1,$export_year+1) - 1; - $export_filter = " LENGTH(`log_id`)='".($prefix_len + 7)."' AND LEFT(`log_id`,".($prefix_len + 5).")='".$export_type.":".gmstrftime("%Y-",$first_date)."'"; - } - break; - case '4' : // Accumulated - $export_filter = " `log_id`='".$export_type."'"; - $date_error = 'ignore'; - break; - } - } - else - { - $message = ADSTAT_L54; - } - } - if (($date_error != 'ignore') && (($first_date == 0) || ($last_date == 0) || $date_error)) - { - $message = ADSTAT_L47; - } - else - { // Actually do export - $message = export_stats($export_type, $export_date, $export_filter, $first_date, $last_date, $separator_char[$export_char], $quote_char[$export_quote], $export_stripurl); - } -} - - -if (isset($message) && $message) -{ - require_once(e_ADMIN."auth.php"); - $ns->tablerender("", "
".$message."
"); - require_once(e_ADMIN."footer.php"); -} - -//--------------------------------------------- -// Generate export statistics -//--------------------------------------------- -// All but page data returns a single level array -// $export_type - base type of stats - 'page' for page data, or one of the 'generic' types -// $export_date - date range/interval type - 1 = single day, 2 = daily for a month, 3 = monthly for a year, 4 = 'all-time' -// $export_filter - DB filter to return the required records -// $first_date, $last_date - date range -// $separator = ',', - character placed between entries -// $quote_char = character placed around entries -// $strip_url - if true, just outputs page names -// $target='' -function export_stats($export_type, $export_date, $export_filter, $first_date, $last_date, $separator = ',', $quote_char = '', $strip_url = 0, $target='') -{ - $stat_types = array( 1 => 'day', 2 => 'month', 3 => 'year', 4 => 'alltime', 5 => 'all_detail'); - global $sql, $e107; - $sql ->select("logstats", "*", "{$export_filter} "); - - $export_text = ''; // Accumulate output string - $export_array = array(); - $process_mode = 0; - $values_per_entry = 1; - $values_per_row = 1; - $empty_data = 0; - - $replace_url = $e107->http_path; - if (strpos($e107->http_path,'www.')) - { - $replace_url = array($e107->http_path,str_replace('www.','',$e107->http_path)); - } - - if ($export_type == 'page') - { - $values_per_entry = 2; - $empty_data = array('ttlv' => 0, 'unqv' => 0); - } - else - { - $strip_url = 0; // Only get URLs in page data! - } - $filename = $stat_types[$export_date]."_"; - switch ($export_date) - { - case 1 : - $filename .= $export_type.'_day_'.date('Ymd',$first_date); - break; - case 2 : - $filename .= $export_type.'_mon_'.date('Ymd',$first_date).'_'.date('Ymd',$last_date); - $values_per_row = 31; - break; - case 3 : $filename .= $export_type.'_year_'.date('Ym',$first_date).'_'.date('Ym',$last_date); - $values_per_row = 12; - break; - case 5: - case 4 : -// $filename .= $export_type.'_alltime'; - $filename .= $export_type; - break; - } - $filename .= '.csv'; - if (defined('CSV_DEBUG')) $export_text .= "export stats to {$filename}
"; - - while($row = $sql ->fetch()) - { // Process one DB entry - $date_id = substr($row['log_id'],strrpos($row['log_id'],'-')+1); // Numeric value of date being processed (not always valid) - if (!is_numeric($date_id)) $date_id = 0; - if (defined('CSV_DEBUG')) $export_text .= "Reading: ".$row['log_id']." Date value: {$date_id}
"; - if (($export_type == 'page') && (($export_date == 1) || ($export_date == 2))) - { // The daily page data files have a different format to the rest - list($daily, $unique, $db_data) = explode(chr(1),$row['log_data']); - $db_data = explode(chr(1),$db_data); // Individual entries - $process_mode = 1; - } - else - { - $db_data = unserialize($row['log_data']); - } - - foreach ($db_data as $k => $db_v) - { - if ($process_mode == 1) - { - list($url, $total, $unique) = explode('|', $db_v); - } - elseif ($export_type == 'page') - { - if ($export_date == 4) - { - $url = $k; // - the key here is the page URL without any query part - } - else - { - $url = $db_v['url']; - } - $total = $db_v['ttlv']; - $unique = $db_v['unqv']; - } - else - { - $url = $k; // Will actually be browser type or similar - $total = $db_v; - $unique = 0; - } - - if ($strip_url) - { - $url = str_replace($replace_url,"",$url); // We really just want a relative path. Strip out the root bit - } - // At this point we've identified a URL (or browser type, etc) and one or two values (two values for page data, one for other?). Add to an array - // Monthly stats: - // For the page data, each array entry has a key of the url and a value which is an array with two keys - ['ttlv'] (total accesses) and ['unqv'] (unique accesses) - // the first entry has the url 'TOTAL' - // All-time stats: - // Page data has array entries with three keys: 'url', 'ttlv', 'unqv' - -// Work with an array where each entry is an array with up to 31 values. The key of each entry is page name, browser type etc. Within the value we have numeric keys corresponding -// to months 1..12, or days 1..31, or zero for all-time stats and single day stats. For most stats the value will be within these keys; for page data we have a further level -// of arrays with keys ['ttlv'] and ['unqv'] -// echo $total.", ".$unique.", ".$url."
"; - if (!isset($export_array[$url][$date_id])) - { // Need to create an array - if ($values_per_row == 1) - { - $export_array[$url][$date_id] = $empty_data; - } - else - { - for ($i = 1; $i <= $values_per_row; $i++) - { - $export_array[$url][$i] = $empty_data; - } - } - } - - if ($values_per_entry == 1) - { - $export_array[$url][$date_id] = $total; - } - else - { - $export_array[$url][$date_id]['ttlv'] = $total; - $export_array[$url][$date_id]['unqv'] = $unique; - } - } - } - - foreach ($export_array as $url => $data) - { - $export_text .= $quote_char.$url.$quote_char; - foreach ($data as $day => $values) - { - if (is_array($values)) - { - foreach ($values as $info => $val) - { - if (!($val)) $val = 0; - $export_text .= $separator.$quote_char.$val.$quote_char; - } - } - else - { - if (!($val)) $val = 0; - $export_text .= $separator.$quote_char.$values.$quote_char; - } - } - $export_text .= "\n"; - } - - if (defined('CSV_DEBUG')) - { - $export_text .= "Summary data:
"; - echo str_replace("\n","
",$export_text); - } - else - { - if(headers_sent()) - { - return "Cannot output file - some data sent

"; - } - - //Secure https check - if (isset($_SERVER['HTTP_USER_AGENT']) && $_SERVER['HTTP_USER_AGENT']=='contype') header('Pragma: public'); - if (isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'],'MSIE')) - header('Content-Type: application/force-download'); - else - header('Content-Type: application/octet-stream'); - header('Content-Length: '.strlen($export_text)); - header('Content-disposition: attachment; filename="'.$filename.'"'); - echo $export_text; - } - - return; -} - - - diff --git a/e107_plugins/log/templates/log_template.php b/e107_plugins/log/templates/log_template.php deleted file mode 100644 index c49a1b2de..000000000 --- a/e107_plugins/log/templates/log_template.php +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - -"; - -$LOG_TEMPLATE['todaysvisits']['item'] = -" - - - -"; - -$LOG_TEMPLATE['todaysvisits']['end'] = -" - - - - -
".ADSTAT_L19."".ADSTAT_L20."%
{ITEM_KEY}{ITEM_BAR}{ITEM_PERC}%
".ADSTAT_L21." [".ADSTAT_L22."]{TOTALV} [{TOTALU}]
-
"; - - -$LOG_TEMPLATE['alltimevisits_total']['start'] = " -
-\n - - - - - - - - \n - - - \n"; -$LOG_TEMPLATE['alltimevisits_total']['item'] = " - - - - - -"; -$LOG_TEMPLATE['alltimevisits_total']['end'] = " - - - - -
".ADSTAT_L19."".ADSTAT_L23."%
{ITEM_DELETE}{ITEM_IMAGE} - {ITEM_KEY}{ITEM_BAR}{ITEM_PERC}%
".ADSTAT_L21."{TOTAL}
-
"; - -$LOG_TEMPLATE['alltimevisits_unique']['start'] = "
-
- - - - - - \n"; -$LOG_TEMPLATE['alltimevisits_unique']['item'] = " - - - - \n"; -$LOG_TEMPLATE['alltimevisits_unique']['end'] = " - - -\n
".ADSTAT_L19."".ADSTAT_L24."%
- {ITEM_KEY}{ITEM_BAR}{ITEM_PERC}%
".ADSTAT_L21."{TOTAL}
"; - - -$LOG_TEMPLATE['browsers']['start'] = " -
-\n - - - \n - - - \n - - \n"; -$LOG_TEMPLATE['browsers']['item'] = " - - - - -\n"; -$LOG_TEMPLATE['browsers']['end'] = " - - -
{START_CAPTION}
- ".ADSTAT_L26." - ".ADSTAT_L21."%
{ITEM_IMAGE}{ITEM_KEY}{ITEM_BAR}{ITEM_PERC}%
".ADSTAT_L21."{TOTAL}

"; - -$LOG_TEMPLATE['browsers']['nostatistic'] = -"".ADSTAT_L25."
"; - -$LOG_TEMPLATE['oses']['start'] = " -
-\n - - - \n - - \n - - -"; -$LOG_TEMPLATE['oses']['item'] = $LOG_TEMPLATE['browsers']['item']; -$LOG_TEMPLATE['oses']['end'] = " - - - - - -
{START_CAPTION}
- ".ADSTAT_L27."".ADSTAT_L21."%
".ADSTAT_L21."{TOTAL} 

"; -$LOG_TEMPLATE['oses']['nostatistic'] = $LOG_TEMPLATE['browsers']['nostatistic']; - - -$LOG_TEMPLATE['domains']['start'] = " -
- - - \n - - \n"; - -$LOG_TEMPLATE['domains']['item'] = " - - - - -"; -$LOG_TEMPLATE['domains']['end'] = " - - - - - -
{START_CAPTION}
- ".ADSTAT_L28."".ADSTAT_L21."%
{ITEM_KEY}{ITEM_BAR}{ITEM_PERC}%
".ADSTAT_L21."{TOTAL} 

"; -$LOG_TEMPLATE['domains']['nostatistic'] = $LOG_TEMPLATE['browsers']['nostatistic']; - - -$LOG_TEMPLATE['screens']['start'] = -"
-\n - - - \n - - - \n - - \n"; - -$LOG_TEMPLATE['screens']['item'] = $LOG_TEMPLATE['browsers']['item']; -$LOG_TEMPLATE['screens']['end'] = $LOG_TEMPLATE['browsers']['end']; -$LOG_TEMPLATE['screens']['nostatistic'] = $LOG_TEMPLATE['browsers']['nostatistic']; - -$LOG_TEMPLATE['refers']['start'] = $LOG_TEMPLATE['browsers']['start']; -$LOG_TEMPLATE['refers']['item'] = " - - - - -"; -$LOG_TEMPLATE['refers']['end'] = " - - - - - -
{START_CAPTION}
- ".ADSTAT_L26." - ".ADSTAT_L21."%
- {ITEM_KEY}{ITEM_BAR}{ITEM_PERC}%
".ADSTAT_L21."{TOTAL} 

"; -$LOG_TEMPLATE['refers']['nostatistic'] = $LOG_TEMPLATE['browsers']['nostatistic']; - - -$LOG_TEMPLATE['queries']['start'] = ""; -$LOG_TEMPLATE['queries']['item'] = ""; -$LOG_TEMPLATE['queries']['end'] = ""; - -$LOG_TEMPLATE['visitors']['start'] = ""; -$LOG_TEMPLATE['visitors']['item'] = ""; -$LOG_TEMPLATE['visitors']['end'] = ""; - -$LOG_TEMPLATE['daily']['start'] = ""; -$LOG_TEMPLATE['daily']['item'] = ""; -$LOG_TEMPLATE['daily']['end'] = ""; - -$LOG_TEMPLATE['monthly']['start'] = ""; -$LOG_TEMPLATE['monthly']['item'] = ""; -$LOG_TEMPLATE['monthly']['end'] = ""; \ No newline at end of file