diff --git a/README b/README
index d7f5620..eeef855 100644
--- a/README
+++ b/README
@@ -24,8 +24,8 @@ Unfortunately, you need to compile stats.mod within your eggdrop source,
so if you removed your original compile directory, you'll have to
compile the whole bot again... sorry.
-Put stats.mod.1.10.tar.gz in ~/eggdrop-1.9.5/src/mod/,
-and unpack it (tar xfz stats.mod-1.10.tar.gz). Change directory
+Put stats.mod.1.11.tar.gz in ~/eggdrop-1.9.5/src/mod/,
+and unpack it (tar xfz stats.mod-1.11.tar.gz). Change directory
back to ~/eggdrop-1.9.5/. Type 'make config'. Type 'make', wait until compiling
is done and use 'make install' to install the bot and stats.mod.
@@ -189,7 +189,7 @@ There are two flags for users: +/-list and +/-addhosts:
- If a user has the flag -list, he/she/it won't be listed in the top10. (you
probably want to set all your bot -list)
- If a user is -addhosts, no new hostmasks will be added to him/her. You'll
- have to add all hosts manually with .+shost. (useful if someone if trying
+ have to add all hosts manually with .+shost. (useful if someone is trying
to fake you)
Channel settings:
diff --git a/UPDATES b/UPDATES
index 507dc30..0a309ca 100644
--- a/UPDATES
+++ b/UPDATES
@@ -1,5 +1,12 @@
Changes in Stats.mod: (since v1.0.1)
--------------------
+1.11
+- Fix heap-use-after-free
+- Enhance FIXME comment for heap-use-after-free
+- Fix typo
+- Update templates/stats/classic/credits.tpl
+- More dos2unix
+
1.10
- Fix buffer sizes
diff --git a/addons/stats.php b/addons/stats.php
index 6301c14..a2432d3 100644
--- a/addons/stats.php
+++ b/addons/stats.php
@@ -1,214 +1,214 @@
-
-#### stats.php
-#
-## a little script to relay stats to your normal homepage
-#
-
-
-# Configuration
-
-# the server where stats.mod is running (you can use "localhost" if
-# the stats.php is located on the same server)
-$STATSERVER = "broken.eggheads.org";
-
-# the port
-$STATPORT = 8033;
-
-# time to wait before the script gives up
-$STATTIMEOUT = 10;
-
-
-
-
-
-
-
-
-
-
-
-
-###################################################################
-###################################################################
-#
-## Don't touch anything below unless you know what you are doing!
-#
-#
-#
-
-
-
-
-
-$MAXLEN = 4096;
-$statpath = $HTTP_GET_VARS["statpath"];
-$password = $HTTP_POST_VARS["password"];
-$languages = $HTTP_SERVER_VARS["HTTP_ACCEPT_LANGUAGE"];
-$useragent = $HTTP_SERVER_VARS["HTTP_USER_AGENT"];
-$xforwardedfor = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
-$remoteaddr = $HTTP_SERVER_VARS["REMOTE_ADDR"];
-$cookies = $HTTP_SERVER_VARS["HTTP_COOKIE"];
-$scriptname = $HTTP_SERVER_VARS["SCRIPT_NAME"];
-$postparams = "";
-
-if ($statpath == "") {
- $statpath = $HTTP_SERVER_VARS["PATH_INFO"];
- if ($statpath == "") {
- $statpath = "/";
- }
-}
-
-function my_array_keys ($arr, $term="") {
- $t = array();
- while (list($k,$v) = each($arr)) {
- if ($term && $v != $term)
- continue;
- $t[] = $k;
- }
- return $t;
-}
-
-
-if ($password != "") {
- $keys = my_array_keys($HTTP_POST_VARS);
- for ($i = 0; $i < count($keys); $i++) {
- $param = urlencode($HTTP_POST_VARS[$keys[$i]]);
- $postparams .= "&$keys[$i]=$param";
- }
- $postparams = substr($postparams, 1);
-}
-
-function transform_url($url) {
- global $scriptname;
- global $statpath;
-
- if (!strcasecmp(substr($url, 0, 7), "http://") ||
- !strcasecmp(substr($url, 0, 7), "mailto:") ||
- !strcasecmp(substr($url, 0, 6), "ftp://")) {
- // global URL, don't touch it
- $retstr = $url;
- } else if ($url[0] == "/") {
- // absolute URL, simply remap it
- $retstr = "$scriptname$url";
- } else {
- // relative URL, process any '../'s
- $parts = explode("/", $url);
- $backs = 0;
- $newurl = "";
- for ($i = 0; $i < count($parts); $i++) {
- if (!strcasecmp($parts[$i], "..")) {
- $backs++;
- } else {
- $tmp = "$newurl/$parts[$i]";
- $newurl = $tmp;
- }
- }
- $newurl = substr($newurl, 1);
- $parts = explode("/", $statpath);
- $newpath = "";
- for ($i = 0; $i < (count($parts) - $backs - 1); $i++) {
- $tmp = "${newpath}/$parts[$i]";
- $newpath = $tmp;
- }
- $newpath = substr($newpath, 1);
- $retstr = "$scriptname$newpath/$newurl";
- }
- return $retstr;
-}
-
-function do_transform($line) {
- $words = explode(" ", $line);
- for ($i = 0; $i < count($words); $i++) {
- if (!strcasecmp(substr($words[$i], 0, 5), "href=")) {
- $urlq = strstr($words[$i], "\"");
- $urlq = substr($urlq, 1);
- $urlparts = explode("\"", $urlq);
- $rest = $urlparts[1];
- $newurl = transform_url($urlparts[0]);
- echo "href=\"$newurl\"$rest ";
- } else if (!strcasecmp(substr($words[$i], 0, 7), "action=")) {
- $urlq = strstr($words[$i], "\"");
- $urlq = substr($urlq, 1);
- $urlparts = explode("\"", $urlq);
- $rest = $urlparts[1];
- $newurl = transform_url($urlparts[0]);
- echo "action=\"$newurl\"$rest ";
- } else {
- echo "$words[$i] ";
- }
- }
-}
-
-$httpbody = false;
-
-$idx = fsockopen($STATSERVER, $STATPORT, $errno, $errstr, $STATTIMEOUT);
-if (!$idx) {
- echo "
$errno: $errstr";
- echo "Connection to statistics server FAILED!
";
- echo "$errno: $errstr";
-} else {
- if ($postparams == "") {
- fputs ($idx, "GET $statpath HTTP/1.0\r\n");
- } else {
- $len = strlen($postparams);
- fputs ($idx, "POST $statpath HTTP/1.0\r\n");
- fputs ($idx, "Content-Length: $len\r\n");
- }
- if ($languages != "") {
- fputs ($idx, "Accept-Language: $languages\r\n");
- }
- if ($useragent != "") {
- fputs ($idx, "User-Agent: $useragent\r\n");
- }
- if ($remoteaddr != "") {
- fputs ($idx, "X-Relayed-For: $remoteaddr\r\n");
- }
- if ($xforwardedfor != "") {
- fputs ($idx, "X-Forwarded-For: $xforwardedfor\r\n");
- }
- if ($cookies != "") {
- fputs ($idx, "Cookie: $cookies\r\n");
- }
-
- fputs ($idx, "\r\n");
-
- if ($postparams != "") {
- fputs ($idx, $postparams);
- }
-
- while (!feof($idx)) {
- $buf = fgets($idx, $MAXLEN);
- if ($httpbody) {
- do_transform($buf);
- } else if ($buf == "" || $buf == "\n") {
- $httpbody = true;
- } else {
- $buf = eregi_replace("Location: ", "Location: $scriptname?statpath=", $buf);
- header($buf);
- }
- }
- fclose($idx);
-}
-
-
-########### old regex experiments
-// echo eregi_replace("href=\"(\/.*\/)*\"/", "relay.php?statpath=", $buf);
-// echo eregi_replace("href=\"(http\:\/\/{0,0})", "relay.php?statpath=", $buf);
-// $buf = eregi_replace("href=\"", "href=\"relay.php?statpath=", $buf);
-// $buf = eregi_replace("(href=\")([^\"]*)(\")", "href=\"$scriptname.php?path=$statpath{transform_remote_url(\\2)}\"", $buf);
-// $buf = eregi_replace("(href=\"){1,}", "href=\"$scriptname?statpath=$statpath", $buf);
-// $buf = eregi_replace("(href=\")[[:alpha:]]*[^\ ]*http\:\/\/", "href=\"http://", $buf);
-// echo $buf;
-// echo pregi_replace("href=\"(^http)", "href=\"relay.php?statpath=", $buf);
-// for ($i = 0; $i < strlen($buf); $i++) {
-// if (!strncasecmp($buf[$i], "href=\"", 6) && !(!strncasecmp($buf[$i], "href=\"http://", 13)) {
-// echo "href=\"$scriptname?statpath=$statpath/";
-// $i = $i + 5;
-// } else {
-// echo $buf[i];
-// }
-// }
-// echo eregi_replace("(href\=\")(http\:\/\/){,0}", "href=\"$scriptname?statpath=", $buf);
-// echo $buf;
-
+
+#### stats.php
+#
+## a little script to relay stats to your normal homepage
+#
+
+
+# Configuration
+
+# the server where stats.mod is running (you can use "localhost" if
+# the stats.php is located on the same server)
+$STATSERVER = "broken.eggheads.org";
+
+# the port
+$STATPORT = 8033;
+
+# time to wait before the script gives up
+$STATTIMEOUT = 10;
+
+
+
+
+
+
+
+
+
+
+
+
+###################################################################
+###################################################################
+#
+## Don't touch anything below unless you know what you are doing!
+#
+#
+#
+
+
+
+
+
+$MAXLEN = 4096;
+$statpath = $HTTP_GET_VARS["statpath"];
+$password = $HTTP_POST_VARS["password"];
+$languages = $HTTP_SERVER_VARS["HTTP_ACCEPT_LANGUAGE"];
+$useragent = $HTTP_SERVER_VARS["HTTP_USER_AGENT"];
+$xforwardedfor = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
+$remoteaddr = $HTTP_SERVER_VARS["REMOTE_ADDR"];
+$cookies = $HTTP_SERVER_VARS["HTTP_COOKIE"];
+$scriptname = $HTTP_SERVER_VARS["SCRIPT_NAME"];
+$postparams = "";
+
+if ($statpath == "") {
+ $statpath = $HTTP_SERVER_VARS["PATH_INFO"];
+ if ($statpath == "") {
+ $statpath = "/";
+ }
+}
+
+function my_array_keys ($arr, $term="") {
+ $t = array();
+ while (list($k,$v) = each($arr)) {
+ if ($term && $v != $term)
+ continue;
+ $t[] = $k;
+ }
+ return $t;
+}
+
+
+if ($password != "") {
+ $keys = my_array_keys($HTTP_POST_VARS);
+ for ($i = 0; $i < count($keys); $i++) {
+ $param = urlencode($HTTP_POST_VARS[$keys[$i]]);
+ $postparams .= "&$keys[$i]=$param";
+ }
+ $postparams = substr($postparams, 1);
+}
+
+function transform_url($url) {
+ global $scriptname;
+ global $statpath;
+
+ if (!strcasecmp(substr($url, 0, 7), "http://") ||
+ !strcasecmp(substr($url, 0, 7), "mailto:") ||
+ !strcasecmp(substr($url, 0, 6), "ftp://")) {
+ // global URL, don't touch it
+ $retstr = $url;
+ } else if ($url[0] == "/") {
+ // absolute URL, simply remap it
+ $retstr = "$scriptname$url";
+ } else {
+ // relative URL, process any '../'s
+ $parts = explode("/", $url);
+ $backs = 0;
+ $newurl = "";
+ for ($i = 0; $i < count($parts); $i++) {
+ if (!strcasecmp($parts[$i], "..")) {
+ $backs++;
+ } else {
+ $tmp = "$newurl/$parts[$i]";
+ $newurl = $tmp;
+ }
+ }
+ $newurl = substr($newurl, 1);
+ $parts = explode("/", $statpath);
+ $newpath = "";
+ for ($i = 0; $i < (count($parts) - $backs - 1); $i++) {
+ $tmp = "${newpath}/$parts[$i]";
+ $newpath = $tmp;
+ }
+ $newpath = substr($newpath, 1);
+ $retstr = "$scriptname$newpath/$newurl";
+ }
+ return $retstr;
+}
+
+function do_transform($line) {
+ $words = explode(" ", $line);
+ for ($i = 0; $i < count($words); $i++) {
+ if (!strcasecmp(substr($words[$i], 0, 5), "href=")) {
+ $urlq = strstr($words[$i], "\"");
+ $urlq = substr($urlq, 1);
+ $urlparts = explode("\"", $urlq);
+ $rest = $urlparts[1];
+ $newurl = transform_url($urlparts[0]);
+ echo "href=\"$newurl\"$rest ";
+ } else if (!strcasecmp(substr($words[$i], 0, 7), "action=")) {
+ $urlq = strstr($words[$i], "\"");
+ $urlq = substr($urlq, 1);
+ $urlparts = explode("\"", $urlq);
+ $rest = $urlparts[1];
+ $newurl = transform_url($urlparts[0]);
+ echo "action=\"$newurl\"$rest ";
+ } else {
+ echo "$words[$i] ";
+ }
+ }
+}
+
+$httpbody = false;
+
+$idx = fsockopen($STATSERVER, $STATPORT, $errno, $errstr, $STATTIMEOUT);
+if (!$idx) {
+ echo "$errno: $errstr";
+ echo "Connection to statistics server FAILED!
";
+ echo "$errno: $errstr";
+} else {
+ if ($postparams == "") {
+ fputs ($idx, "GET $statpath HTTP/1.0\r\n");
+ } else {
+ $len = strlen($postparams);
+ fputs ($idx, "POST $statpath HTTP/1.0\r\n");
+ fputs ($idx, "Content-Length: $len\r\n");
+ }
+ if ($languages != "") {
+ fputs ($idx, "Accept-Language: $languages\r\n");
+ }
+ if ($useragent != "") {
+ fputs ($idx, "User-Agent: $useragent\r\n");
+ }
+ if ($remoteaddr != "") {
+ fputs ($idx, "X-Relayed-For: $remoteaddr\r\n");
+ }
+ if ($xforwardedfor != "") {
+ fputs ($idx, "X-Forwarded-For: $xforwardedfor\r\n");
+ }
+ if ($cookies != "") {
+ fputs ($idx, "Cookie: $cookies\r\n");
+ }
+
+ fputs ($idx, "\r\n");
+
+ if ($postparams != "") {
+ fputs ($idx, $postparams);
+ }
+
+ while (!feof($idx)) {
+ $buf = fgets($idx, $MAXLEN);
+ if ($httpbody) {
+ do_transform($buf);
+ } else if ($buf == "" || $buf == "\n") {
+ $httpbody = true;
+ } else {
+ $buf = eregi_replace("Location: ", "Location: $scriptname?statpath=", $buf);
+ header($buf);
+ }
+ }
+ fclose($idx);
+}
+
+
+########### old regex experiments
+// echo eregi_replace("href=\"(\/.*\/)*\"/", "relay.php?statpath=", $buf);
+// echo eregi_replace("href=\"(http\:\/\/{0,0})", "relay.php?statpath=", $buf);
+// $buf = eregi_replace("href=\"", "href=\"relay.php?statpath=", $buf);
+// $buf = eregi_replace("(href=\")([^\"]*)(\")", "href=\"$scriptname.php?path=$statpath{transform_remote_url(\\2)}\"", $buf);
+// $buf = eregi_replace("(href=\"){1,}", "href=\"$scriptname?statpath=$statpath", $buf);
+// $buf = eregi_replace("(href=\")[[:alpha:]]*[^\ ]*http\:\/\/", "href=\"http://", $buf);
+// echo $buf;
+// echo pregi_replace("href=\"(^http)", "href=\"relay.php?statpath=", $buf);
+// for ($i = 0; $i < strlen($buf); $i++) {
+// if (!strncasecmp($buf[$i], "href=\"", 6) && !(!strncasecmp($buf[$i], "href=\"http://", 13)) {
+// echo "href=\"$scriptname?statpath=$statpath/";
+// $i = $i + 5;
+// } else {
+// echo $buf[i];
+// }
+// }
+// echo eregi_replace("(href\=\")(http\:\/\/){,0}", "href=\"$scriptname?statpath=", $buf);
+// echo $buf;
+
?>
\ No newline at end of file
diff --git a/core/generic_linked_list.c b/core/generic_linked_list.c
index f28e1cc..e256a9f 100644
--- a/core/generic_linked_list.c
+++ b/core/generic_linked_list.c
@@ -94,6 +94,7 @@ static void llist_delete(struct llist_header *head, void *key)
else
p = head->root;
head->size--;
+ break;
} else {
last = p;
p = p->next;
diff --git a/core/templates_stats_commands.c b/core/templates_stats_commands.c
index 22c9316..d1dbb99 100644
--- a/core/templates_stats_commands.c
+++ b/core/templates_stats_commands.c
@@ -982,9 +982,9 @@ static void template_send_onchanlist(int idx, struct template_content *h_tpc)
if (!chan)
return;
for (m = schan_members_getfirst(&chan->members); m ; m = schan_members_getnext(&chan->members)) {
- glob_statsmember = m; /*FIXME: heap-use-after-free */
+ glob_statsmember = m;
- glob_user = m->user;
+ glob_user = m->user; /* FIXME: heap-use-after-free - free() in tclchan.c:init_channel() - see https://github.com/eggheads/eggdrop/pull/1550 */
if (m->stats)
glob_locstats = m->stats;
else
@@ -997,7 +997,7 @@ static void template_send_usermode(int idx, struct template_content *h_tpc)
{
if (glob_statsmember && glob_statsmember->eggmember) {
#ifndef NO_EGG
- if (chan_hasop(glob_statsmember->eggmember))
+ if (chan_hasop(glob_statsmember->eggmember)) /* FIXME: heap-use-after-free - free() in tclchan.c:init_channel() - see https://github.com/eggheads/eggdrop/pull/1550 */
dprintf(idx, "@");
if (chan_hasvoice(glob_statsmember->eggmember))
dprintf(idx, "+");
diff --git a/stats.c b/stats.c
index fd078cf..5421ebd 100644
--- a/stats.c
+++ b/stats.c
@@ -31,7 +31,7 @@
#define MAKING_STATS
#define MODULE_NAME "stats"
-#define MODULE_VERSION "1.10"
+#define MODULE_VERSION "1.11"
#ifndef NO_EGG
#include "../module.h"
#include "../irc.mod/irc.h"
@@ -446,7 +446,7 @@ char *stats_start(Function * global_funcs)
chanlangs = NULL;
slang_glob_init();
- module_register(MODULE_NAME, stats_table, 1, 10);
+ module_register(MODULE_NAME, stats_table, 1, 11);
if (!(irc_funcs = module_depend(MODULE_NAME, "irc", 1, 0)))
return "You need the irc module to use the stats module.";
if (!(server_funcs = module_depend(MODULE_NAME, "server", 1, 0)))
diff --git a/templates/stats/classic/404.tpl b/templates/stats/classic/404.tpl
index e64e66b..699512e 100644
--- a/templates/stats/classic/404.tpl
+++ b/templates/stats/classic/404.tpl
@@ -1,9 +1,9 @@
-
-404 Not Found
-
-Not Found
The requested URL was not found on this server.
-
-
-
-Stats.Mod/HTTPd Server at Port
-
+
+404 Not Found
+
+Not Found
The requested URL was not found on this server.
+
+
+
+Stats.Mod/HTTPd Server at Port
+
diff --git a/templates/stats/classic/chan.tpl b/templates/stats/classic/chan.tpl
index f1667f6..e54acd7 100644
--- a/templates/stats/classic/chan.tpl
+++ b/templates/stats/classic/chan.tpl
@@ -1,28 +1,28 @@
-
-
- -- CSS --?>
-
-
-
-
--- body tag --?>
-
-
-
-
-
-
-
+
+
+ -- CSS --?>
+
+
+
+
+-- body tag --?>
+
+
+
+
+
+
+
diff --git a/templates/stats/classic/channel_load.tpl b/templates/stats/classic/channel_load.tpl
index 8faa039..baf7ce1 100644
--- a/templates/stats/classic/channel_load.tpl
+++ b/templates/stats/classic/channel_load.tpl
@@ -1,44 +1,44 @@
--- "average users" --?>
-
-
-
-
- |
- 0:00 - 6:00 |
- 6:00 - 12:00 |
- 12:00 - 17:00 |
- 18:00 - 24:00 |
-
-
- |
-
-
-
- " width="10" alt="blue">
- " width="10" alt="green">
- /if_cl_logged?>
- |
- /channel_load?>
-
-
- |
-
-
-
-
- /if_cl_logged?>
- |
- /channel_load?>
-
-
- |
-
-
-
-
- /if_cl_logged?>
- |
- /channel_load?>
-
-
+-- "average users" --?>
+
+
+
+
+ |
+ 0:00 - 6:00 |
+ 6:00 - 12:00 |
+ 12:00 - 17:00 |
+ 18:00 - 24:00 |
+
+
+ |
+
+
+
+ " width="10" alt="blue">
+ " width="10" alt="green">
+ /if_cl_logged?>
+ |
+ /channel_load?>
+
+
+ |
+
+
+
+
+ /if_cl_logged?>
+ |
+ /channel_load?>
+
+
+ |
+
+
+
+
+ /if_cl_logged?>
+ |
+ /channel_load?>
+
+
/if_binary?>
\ No newline at end of file
diff --git a/templates/stats/classic/classic.de.lang b/templates/stats/classic/classic.de.lang
index eaea820..f9b476e 100644
--- a/templates/stats/classic/classic.de.lang
+++ b/templates/stats/classic/classic.de.lang
@@ -1,202 +1,202 @@
-# time string (singular and plural)
-D 0 Jahr
-D 1 Jahre
-D 2 Woche
-D 3 Wochen
-D 4 Tag
-D 5 Tage
-D 6 Stunde
-D 7 Stunden
-D 8 Minute
-D 9 Minuten
-D 10 Sekunde
-D 11 Sekunden
-D 12 etwas Zeit
-
-1
-
-10
-
-100 's Livestats
-
-105 Top
-
-110 insgesamt
-111 heute
-112 diese Woche
-113 diesen Monat
-
-120 Benutzerliste
-121 Wer ist grade da?
-122 Verschiedenes
-
-130 Andere Kanäle
-
-200 Inhaltsverzeichnis
-
-# s of toptalker pages
-300 Die aktivsten Labertaschen von
-301 Die heute aktivsten Labertaschen von
-302 Die aktivsten Labertaschen von in dieser Woche
-303 Die aktivsten Labertaschen von in diesem Monat
-
-# heads of toptalker pages
-310 Die aktivsten Labertaschen von
-311 Die heute aktivsten Labertaschen von
-312 Die aktivsten Labertaschen von in dieser Woche
-313 Die aktivsten Labertaschen von in diesem Monat
-
-320 Sortiert nach ""
-330 größte Benutzeransammlung:
-340 Nr
-341 Benutzer
-342 Info
-343 zufälliges Zitat
-350 Benutzer insgesamt:
-360 (Statistiken gelogt seit )
-370 beliebige Sortierung
-380 graphische Darstellung
-
-# s of graph pages
-400 Total top graphs on channel
-401 Daily top graphs on channel
-402 Weekly top graphs on channel
-403 Monthly top graphs on channel
-
-# heads of graph pages
-410 Total top graphs on channel
-411 Daily top graphs on channel
-412 Weekly top graphs on channel
-413 Monthly top graphs on channel
-
-# self-explaining
-420 Sortiert nach ""
-430 [ insgesant]
-440 [andere]
-450 Tabelle
-
-
-# /chan/users/
-500 's Stammgäste
-
-# /chan/onchan
-600 's aktuelle Besatzung
-610 Jetzt im Channel:
-620 inaktiv seit
-630 verschollen
-640 <-- meinereiner ^_^
-
-# userpage title
-700 Statistiken für in
-# userpage head
-710 Statistiken für in
-720 ICQ#
-721 eMail
-722 Homepage
-723 Alter
-730 Platz
-# self-explaining...
-740 Zitat:
-750 gab heite verschiedene Wörter von sich. Dies sind die häufigsten:
-760 insgesamt
-761 heute
-762 diese Woche
-763 diesen Monat
-780 Einstellungen ändern
-
-## Misc Stats
-# title
-800 Verschiedene Statistiken in
-# head
-810 Verschiedene Statistiken von heute in
-# self-explaining...
-820 Channel Auslastung:
-825 Benutzer
-826 Zeilen
-830 Heutige Topics:
-835 gesetzt von um
-840 zufällige URLs
-845 zuletzt erwähnt von um
-850 meist genutzte
-855 Provider
-856 TLDs
-860 zufällige Kicks
-870 Registrierte Benutzer gaben verschiedene Worte von sich.
-875 Dies sind die häufigsten:
-
-# The last part of the misc stats, misc facts. That's how you use it:
-# F
-F nicks 1 konnte sich für keinen nick entscheiden und wechselte selbigen mal.
-F nicks 1 hatte die größte Auswahl an nicks ().
-F nicks 2 hat auch Versuche gebraucht um sich zu entscheiden.
-
-F kicks 1 tat was nötig war und beseitigte Störenfriede.
-F kicks 1 war heute leicht reizbar und beförderte Opfer aus dem Channel.
-F kicks 1 Mit war heute nicht zu scherzen... Opfer erfuhren dies auf die harte Art.
-F kicks 2 Der zweit-aktivste Bestrafer war mit kicks.
-F kicks 2 Auch verlor in Fällen die Geduld.
-F kicks 2 Auch 's Toleranz war in Fällen erschöpft.
-
-F smileys 1 war heute gut gelaunt und grinste mal.
-F smileys 1 hatte einen guten Tag und grinste mal.
-F smileys 1 hatte mal einen recht strahlenden Gesichtsausdruck.
-F smileys 2 genoss den Besuch in mit smileys offensichtlich auch.
-
-F questions 1 weiß das Wissen Macht bedeutet und stellte fragen.
-F questions 2 Auch war mal auf der Suche nach Input.
-
-F joins 1 wusste nicht so recht, ob er/sie bleiben sollte oder nicht und betrat mal.
-F joins 2 gab sich fast genauso viel Mühe für mass-joining gekickt zu werden.
-
-F vocables 1 hat mit verschiedenen Wörtern das größte Vokabular.
-F vocables 1 drückte sich mit Hilfe von verschiedenen Wörtern recht vielseitig aus.
-F vocables 2 Auch 's Wortschatz ist nicht zu verachten. ( Wörter)
-
-
-1000 Einstellungen für
-1010 Benutzername
-1020 Passwort
-1030 Alter
-1035 erlaubte Abwesenheit
-1036 danach wird das Konto gelöscht
-1040 Neues Passwort
-1045 Neues Passwort (Bestätigung)
-1050 ICQ#
-1060 eMail
-1070 Homepage
-1080 List me in the top?
-1081 Soll ich automatisch neue Hosts zu deinem Account hinzufügen?
-1082 Soll ich deine Stats überhaupt zugänglich machen?
-1083 (falls Du wegen dem Datenschutz besorgt bist...)
-1085 jepp
-1086 nö
-
-1100 User Login
-1110 If you don't have a password set yet, you can do it now on IRC:
-1120 WARNING: This password will be transferred and stored in plaintext, so better don't use your mail password or any other important password.
-1130 I forgot my password
-
-1200 Login Error!
-1210 Your attempt to login resulted in the following error:
-
-1300 No Error !?!
-1301 User not found!
-1302 You don't have a password set! (see instructions on the login page)
-1303 Wrong Password!
-
-1400 Try again!
-
-1500 Password emailed
-1510 Your password has been emailed to you.
-
-1600 your stats password
-1610 Hello,
-1610
-1610 seems that you've forgotten your password. I'm not a sadistic robot,
-1610 so I decided to do you a favour and send your password to you:
-1610
-1610 ""
-1610
-1610 Try not to forget it again. ^_^
-1610
-1610 Have a nice day...
+# time string (singular and plural)
+D 0 Jahr
+D 1 Jahre
+D 2 Woche
+D 3 Wochen
+D 4 Tag
+D 5 Tage
+D 6 Stunde
+D 7 Stunden
+D 8 Minute
+D 9 Minuten
+D 10 Sekunde
+D 11 Sekunden
+D 12 etwas Zeit
+
+1
+
+10
+
+100 's Livestats
+
+105 Top
+
+110 insgesamt
+111 heute
+112 diese Woche
+113 diesen Monat
+
+120 Benutzerliste
+121 Wer ist grade da?
+122 Verschiedenes
+
+130 Andere Kanäle
+
+200 Inhaltsverzeichnis
+
+# s of toptalker pages
+300 Die aktivsten Labertaschen von
+301 Die heute aktivsten Labertaschen von
+302 Die aktivsten Labertaschen von in dieser Woche
+303 Die aktivsten Labertaschen von in diesem Monat
+
+# heads of toptalker pages
+310 Die aktivsten Labertaschen von
+311 Die heute aktivsten Labertaschen von
+312 Die aktivsten Labertaschen von in dieser Woche
+313 Die aktivsten Labertaschen von in diesem Monat
+
+320 Sortiert nach ""
+330 größte Benutzeransammlung:
+340 Nr
+341 Benutzer
+342 Info
+343 zufälliges Zitat
+350 Benutzer insgesamt:
+360 (Statistiken gelogt seit )
+370 beliebige Sortierung
+380 graphische Darstellung
+
+# s of graph pages
+400 Total top graphs on channel
+401 Daily top graphs on channel
+402 Weekly top graphs on channel
+403 Monthly top graphs on channel
+
+# heads of graph pages
+410 Total top graphs on channel
+411 Daily top graphs on channel
+412 Weekly top graphs on channel
+413 Monthly top graphs on channel
+
+# self-explaining
+420 Sortiert nach ""
+430 [ insgesant]
+440 [andere]
+450 Tabelle
+
+
+# /chan/users/
+500 's Stammgäste
+
+# /chan/onchan
+600 's aktuelle Besatzung
+610 Jetzt im Channel:
+620 inaktiv seit
+630 verschollen
+640 <-- meinereiner ^_^
+
+# userpage title
+700 Statistiken für in
+# userpage head
+710 Statistiken für in
+720 ICQ#
+721 eMail
+722 Homepage
+723 Alter
+730 Platz
+# self-explaining...
+740 Zitat:
+750 gab heite verschiedene Wörter von sich. Dies sind die häufigsten:
+760 insgesamt
+761 heute
+762 diese Woche
+763 diesen Monat
+780 Einstellungen ändern
+
+## Misc Stats
+# title
+800 Verschiedene Statistiken in
+# head
+810 Verschiedene Statistiken von heute in
+# self-explaining...
+820 Channel Auslastung:
+825 Benutzer
+826 Zeilen
+830 Heutige Topics:
+835 gesetzt von um
+840 zufällige URLs
+845 zuletzt erwähnt von um
+850 meist genutzte
+855 Provider
+856 TLDs
+860 zufällige Kicks
+870 Registrierte Benutzer gaben verschiedene Worte von sich.
+875 Dies sind die häufigsten:
+
+# The last part of the misc stats, misc facts. That's how you use it:
+# F
+F nicks 1 konnte sich für keinen nick entscheiden und wechselte selbigen mal.
+F nicks 1 hatte die größte Auswahl an nicks ().
+F nicks 2 hat auch Versuche gebraucht um sich zu entscheiden.
+
+F kicks 1 tat was nötig war und beseitigte Störenfriede.
+F kicks 1 war heute leicht reizbar und beförderte Opfer aus dem Channel.
+F kicks 1 Mit war heute nicht zu scherzen... Opfer erfuhren dies auf die harte Art.
+F kicks 2 Der zweit-aktivste Bestrafer war mit kicks.
+F kicks 2 Auch verlor in Fällen die Geduld.
+F kicks 2 Auch 's Toleranz war in Fällen erschöpft.
+
+F smileys 1 war heute gut gelaunt und grinste mal.
+F smileys 1 hatte einen guten Tag und grinste mal.
+F smileys 1 hatte mal einen recht strahlenden Gesichtsausdruck.
+F smileys 2 genoss den Besuch in mit smileys offensichtlich auch.
+
+F questions 1 weiß das Wissen Macht bedeutet und stellte fragen.
+F questions 2 Auch war mal auf der Suche nach Input.
+
+F joins 1 wusste nicht so recht, ob er/sie bleiben sollte oder nicht und betrat mal.
+F joins 2 gab sich fast genauso viel Mühe für mass-joining gekickt zu werden.
+
+F vocables 1 hat mit verschiedenen Wörtern das größte Vokabular.
+F vocables 1 drückte sich mit Hilfe von verschiedenen Wörtern recht vielseitig aus.
+F vocables 2 Auch 's Wortschatz ist nicht zu verachten. ( Wörter)
+
+
+1000 Einstellungen für
+1010 Benutzername
+1020 Passwort
+1030 Alter
+1035 erlaubte Abwesenheit
+1036 danach wird das Konto gelöscht
+1040 Neues Passwort
+1045 Neues Passwort (Bestätigung)
+1050 ICQ#
+1060 eMail
+1070 Homepage
+1080 List me in the top?
+1081 Soll ich automatisch neue Hosts zu deinem Account hinzufügen?
+1082 Soll ich deine Stats überhaupt zugänglich machen?
+1083 (falls Du wegen dem Datenschutz besorgt bist...)
+1085 jepp
+1086 nö
+
+1100 User Login
+1110 If you don't have a password set yet, you can do it now on IRC:
+1120 WARNING: This password will be transferred and stored in plaintext, so better don't use your mail password or any other important password.
+1130 I forgot my password
+
+1200 Login Error!
+1210 Your attempt to login resulted in the following error:
+
+1300 No Error !?!
+1301 User not found!
+1302 You don't have a password set! (see instructions on the login page)
+1303 Wrong Password!
+
+1400 Try again!
+
+1500 Password emailed
+1510 Your password has been emailed to you.
+
+1600 your stats password
+1610 Hello,
+1610
+1610 seems that you've forgotten your password. I'm not a sadistic robot,
+1610 so I decided to do you a favour and send your password to you:
+1610
+1610 ""
+1610
+1610 Try not to forget it again. ^_^
+1610
+1610 Have a nice day...
diff --git a/templates/stats/classic/classic.skin b/templates/stats/classic/classic.skin
index b223d48..a44c477 100644
--- a/templates/stats/classic/classic.skin
+++ b/templates/stats/classic/classic.skin
@@ -1,29 +1,29 @@
-skin classic Classic Style
-
-template root root.tpl
-template navbar navbar.tpl
-template top top.tpl classic
-template toptable toptable.tpl
-template custom_top custom_top.tpl
-template chan chan.tpl
-template 404 404.tpl
-template misc misc.tpl
-template channel_load channel_load.tpl
-template topics topics.tpl
-template urls urls.tpl
-template hosts hosts.tpl
-template kicks kicks.tpl
-template wordstats wordstats.tpl
-template facts facts.tpl
-template userlist userlist.tpl
-template user user.tpl
-template onchan onchan.tpl
-template graphs graphs.tpl
-template credits credits.tpl
-template userlogin userlogin.tpl
-template usersettings usersettings.tpl
-template login_error loginerror.tpl
-template password_emailed password_emailed.tpl
-
-slang classic.en.lang en English
+skin classic Classic Style
+
+template root root.tpl
+template navbar navbar.tpl
+template top top.tpl classic
+template toptable toptable.tpl
+template custom_top custom_top.tpl
+template chan chan.tpl
+template 404 404.tpl
+template misc misc.tpl
+template channel_load channel_load.tpl
+template topics topics.tpl
+template urls urls.tpl
+template hosts hosts.tpl
+template kicks kicks.tpl
+template wordstats wordstats.tpl
+template facts facts.tpl
+template userlist userlist.tpl
+template user user.tpl
+template onchan onchan.tpl
+template graphs graphs.tpl
+template credits credits.tpl
+template userlogin userlogin.tpl
+template usersettings usersettings.tpl
+template login_error loginerror.tpl
+template password_emailed password_emailed.tpl
+
+slang classic.en.lang en English
slang classic.de.lang de Deutsch
\ No newline at end of file
diff --git a/templates/stats/classic/credits.tpl b/templates/stats/classic/credits.tpl
index 54c21be..9da24e4 100644
--- a/templates/stats/classic/credits.tpl
+++ b/templates/stats/classic/credits.tpl
@@ -1,12 +1,12 @@
---
-
-Please don't remove this link. You can change it size, color, or position,
-if you don't like it, but please don't remove it completely. The few
-visitors that I get from this link are everything that I get for coding
-this module, so please be fair.
-
---?>
-
---
--?>
-
-Created by Stats.mod v
\ No newline at end of file
+--
+
+Please don't remove this link. You can change it size, color, or position,
+if you don't like it, but please don't remove it completely. The few
+visitors that I get from this link are everything that I get for coding
+this module, so please be fair.
+
+--?>
+
+--
--?>
+
+Created by Stats.mod v (github)
diff --git a/templates/stats/classic/debug.skin b/templates/stats/classic/debug.skin
index f22fc93..bc1590b 100644
--- a/templates/stats/classic/debug.skin
+++ b/templates/stats/classic/debug.skin
@@ -1,5 +1,5 @@
-skin classic Classic Style
-
-template root root.tpl
-
+skin classic Classic Style
+
+template root root.tpl
+
#slang classic.eng.lang eng English
\ No newline at end of file
diff --git a/templates/stats/classic/facts.tpl b/templates/stats/classic/facts.tpl
index 1375888..2783659 100644
--- a/templates/stats/classic/facts.tpl
+++ b/templates/stats/classic/facts.tpl
@@ -1,12 +1,12 @@
-
-
-
-
-
-
-
- |
-
-
-/miscfacts?>
+
+
+
+
+
+
+
+ |
+
+
+/miscfacts?>
\ No newline at end of file
diff --git a/templates/stats/classic/graphs.tpl b/templates/stats/classic/graphs.tpl
index 0e80372..7284c74 100644
--- a/templates/stats/classic/graphs.tpl
+++ b/templates/stats/classic/graphs.tpl
@@ -1,83 +1,83 @@
-
-
-
-
-
- -- CSS --?>
- -- title --?>
- /if_total?>
- /if_daily?>
- /if_weekly?>
- /if_monthly?>
-
-
-
--- body tag --?>
-
-
-
--- title --/?>
-/if_total?>
-/if_daily?>
-/if_weekly?>
-/if_monthly?>
-
-
-
-
-
-
-
-
-
- -- Ordered by words --?>
- |
-
-
-
--- [2392920 words total] --?>
-
-
-
-
-
-
-
-
- %
- |
- /graphs?>
-
-
-
- " alt=""> |
- /graphs?>
-
-
-
- - /"> - |
- /graphs?>
-
-
-
-
-
-
-/graphstats?>
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ -- CSS --?>
+ -- title --?>
+ /if_total?>
+ /if_daily?>
+ /if_weekly?>
+ /if_monthly?>
+
+
+
+-- body tag --?>
+
+
+
+-- title --/?>
+/if_total?>
+/if_daily?>
+/if_weekly?>
+/if_monthly?>
+
+
+
+
+
+
+
+
+
+ -- Ordered by words --?>
+ |
+
+
+
+-- [2392920 words total] --?>
+
+
+
+
+
+
+
+
+ %
+ |
+ /graphs?>
+
+
+
+ " alt=""> |
+ /graphs?>
+
+
+
+ - /"> - |
+ /graphs?>
+
+
+
+
+
+
+/graphstats?>
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/stats/classic/hosts.tpl b/templates/stats/classic/hosts.tpl
index 36b2cee..84bd1cf 100644
--- a/templates/stats/classic/hosts.tpl
+++ b/templates/stats/classic/hosts.tpl
@@ -1,15 +1,15 @@
-
--- "Most used" --?>
-
- -- "ISPs" --?> |
- -- "TLDs" --?> |
-
-
-
-
- () |
- () |
-
-
-/hosts?>
+
+-- "Most used" --?>
+
+ -- "ISPs" --?> |
+ -- "TLDs" --?> |
+
+
+
+
+ () |
+ () |
+
+
+/hosts?>
\ No newline at end of file
diff --git a/templates/stats/classic/kicks.tpl b/templates/stats/classic/kicks.tpl
index dfd7892..395d302 100644
--- a/templates/stats/classic/kicks.tpl
+++ b/templates/stats/classic/kicks.tpl
@@ -1,14 +1,14 @@
-
--- "X random kicks" --?>
-
-
-
-
-
- /kick_contexts?>
-
-
- |
-
-/random_kicks?>
+
+-- "X random kicks" --?>
+
+
+
+
+
+ /kick_contexts?>
+
+
+ |
+
+/random_kicks?>
\ No newline at end of file
diff --git a/templates/stats/classic/loginerror.tpl b/templates/stats/classic/loginerror.tpl
index cacd8c3..1a1db85 100644
--- a/templates/stats/classic/loginerror.tpl
+++ b/templates/stats/classic/loginerror.tpl
@@ -1,24 +1,24 @@
-
-
-
-
- -- "Login Error" --/?>
-
-
-
--- body tag --?>
-
--- "Login Error" --/?>
-
--- "Your attempt to login resulted in the following error:" --/?>
-
-
-
--- "Try again" --/?>
-
-
-
-
-
-
+
+
+
+
+ -- "Login Error" --/?>
+
+
+
+-- body tag --?>
+
+-- "Login Error" --/?>
+
+-- "Your attempt to login resulted in the following error:" --/?>
+
+
+
+-- "Try again" --/?>
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/stats/classic/misc.tpl b/templates/stats/classic/misc.tpl
index a327efb..91f0918 100644
--- a/templates/stats/classic/misc.tpl
+++ b/templates/stats/classic/misc.tpl
@@ -1,36 +1,36 @@
-
-
-
-
-
- -- CSS --?>
-
-
-
-
--- body tag --?>
-
--- title --?>
-
-
-/if_topics?>
-
-/if_urls?>
-
-
-/if_hosts?>
-
-/if_kicks?>
-
-/if_chan_topwords?>
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ -- CSS --?>
+
+
+
+
+-- body tag --?>
+
+-- title --?>
+
+
+/if_topics?>
+
+/if_urls?>
+
+
+/if_hosts?>
+
+/if_kicks?>
+
+/if_chan_topwords?>
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/stats/classic/navbar.tpl b/templates/stats/classic/navbar.tpl
index 6054cd8..a5cd85e 100644
--- a/templates/stats/classic/navbar.tpl
+++ b/templates/stats/classic/navbar.tpl
@@ -1,9 +1,9 @@
-
-
- /top/total/words/">-- "topX" --?> |
- /misc/">-- "misc stats" --?> |
- /users/">-- "userlist" --?> |
- /onchan/">-- "who's on now?" --?> |
- -- "other chans" --?> |
-
+
\ No newline at end of file
diff --git a/templates/stats/classic/onchan.tpl b/templates/stats/classic/onchan.tpl
index 0099b82..f59c069 100644
--- a/templates/stats/classic/onchan.tpl
+++ b/templates/stats/classic/onchan.tpl
@@ -1,51 +1,51 @@
-
-
-
-
-
- -- CSS --?>
-
-
-
-
--- body tag --?>
-
-
-
- -- Currently on channel: --?> |
-
- nick |
- user |
- info |
- idle time |
-
-
-
-
- |
-
-
- /">
- |
-
- /if_icqnr?>
-
- /if_homepage?>
- /if_email?>
- /if_binary?>
- |
- /if_user?>
- - | | /if_nouser?>
- /if_netsplitted?> |
-
-
-/onchanlist?>
-
-
-
-
-
-
-
-
+
+
+
+
+
+ -- CSS --?>
+
+
+
+
+-- body tag --?>
+
+
+
+ -- Currently on channel: --?> |
+
+ nick |
+ user |
+ info |
+ idle time |
+
+
+
+
+ |
+
+
+ /">
+ |
+
+ /if_icqnr?>
+
+ /if_homepage?>
+ /if_email?>
+ /if_binary?>
+ |
+ /if_user?>
+ - | | /if_nouser?>
+ /if_netsplitted?> |
+
+
+/onchanlist?>
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/stats/classic/password_emailed.tpl b/templates/stats/classic/password_emailed.tpl
index ce4e2f7..edf239e 100644
--- a/templates/stats/classic/password_emailed.tpl
+++ b/templates/stats/classic/password_emailed.tpl
@@ -1,18 +1,18 @@
-
-
-
-
- -- "Password emailed" --/?>
-
-
-
--- body tag --?>
-
--- "Your password has been emailed to you." --/?>
-
-
-
-
-
-
+
+
+
+
+ -- "Password emailed" --/?>
+
+
+
+-- body tag --?>
+
+-- "Your password has been emailed to you." --/?>
+
+
+
+
+
+