]> git.ipfire.org Git - thirdparty/sarg.git/commitdiff
Output w3c compliant strict html (almost every output).
authorFrédéric Marchal <fmarchal@users.sourceforge.net>
Thu, 4 Feb 2010 06:07:30 +0000 (06:07 +0000)
committerFrédéric Marchal <fmarchal@users.sourceforge.net>
Thu, 4 Feb 2010 06:07:30 +0000 (06:07 +0000)
Prepare the transition to gettext.

25 files changed:
CMakeLists.txt
Makefile.in
authfail.c
css.c
dansguardian_report.c
datafile.c
denied.c
documentation/util.txt
download.c
getconf.c
html.c
include/conf.h
include/defs.h
include/info.h
index.c
log.c
realtime.c
repday.c
report.c
siteuser.c
squidguard_report.c
topsites.c
topuser.c
useragent.c
util.c

index 81d546673478302fa8f3207c9cdd8a25ebec7ff5..2b7c8fd12cdd4747b0c5692a66dcafa4195c9f6b 100755 (executable)
@@ -3,7 +3,7 @@ PROJECT(sarg C)
 SET(sarg_VERSION 2)
 SET(sarg_REVISION "3rc1")
 SET(sarg_BUILD "")
-SET(sarg_BUILDDATE "Feb-02-2010")
+SET(sarg_BUILDDATE "Feb-04-2010")
 
 INCLUDE(AddFileDependencies)
 INCLUDE(CheckIncludeFile)
index c75eca664e59cc787e505ebb4c77fff54f27ea8b..f13c1ea1054adb84ffdfb7ea543223e7f78d1d2a 100644 (file)
@@ -5,29 +5,31 @@ datarootdir=@datarootdir@
 datadir=@datadir@
 exec_prefix=@exec_prefix@
 PACKAGE_TARNAME=@PACKAGE_TARNAME@
-docdir=@docdir@
-CC             = @CC@
-BINDIR         = @bindir@
-IBINDIR        = -DBINDIR=\"@bindir@\"
-MANDIR         = @mandir@
-SYSCONFDIR     = @sysconfdir@
-SARGPHPDIR     = @SARGPHPDIR@
-LANGDIR                = @LANGDIR@
-FONTDIR                = @FONTDIR@
-IMAGEDIR       = @IMAGEDIR@
-ISYSCONFDIR    = -DSYSCONFDIR=\"@sysconfdir@\"
-ISARGPHPDIR    = -DSARGPHPDIR=\"@SARGPHPDIR@\"
-ILANGDIR       = -DLANGDIR=\"@LANGDIR@\"
-IFONTDIR       = -DFONTDIR=\"@FONTDIR@\"
-IIMAGEDIR      = -DIMAGEDIR=\"@IMAGEDIR@\"
-CFLAGS                 = @CFLAGS@
-CPPFLAGS       = @CPPFLAGS@
-LDFLAGS        = @LDFLAGS@
-DEFS            = @DEFS@
-LIBS            = @LIBS@
-SRCDIR                 = .
-VPATH          = .
-INSTALL        = cp
+docdir      = @docdir@
+CC          = @CC@
+BINDIR      = @bindir@
+MANDIR      = @mandir@
+SYSCONFDIR  = @sysconfdir@
+SARGPHPDIR  = @SARGPHPDIR@
+LANGDIR     = @LANGDIR@
+FONTDIR     = @FONTDIR@
+IMAGEDIR    = @IMAGEDIR@
+LOCALEDIR   = $(datadir)/locale
+IBINDIR     = -DBINDIR=\"@bindir@\"
+ISYSCONFDIR = -DSYSCONFDIR=\"@sysconfdir@\"
+ISARGPHPDIR = -DSARGPHPDIR=\"@SARGPHPDIR@\"
+ILANGDIR    = -DLANGDIR=\"@LANGDIR@\"
+IFONTDIR    = -DFONTDIR=\"@FONTDIR@\"
+IIMAGEDIR   = -DIMAGEDIR=\"@IMAGEDIR@\"
+ILOCALEDIR  = -DLOCALEDIR=\"$(localedir)\"
+CFLAGS      = @CFLAGS@
+CPPFLAGS    = @CPPFLAGS@
+LDFLAGS     = @LDFLAGS@
+DEFS        = $(IBINDIR) $(ISYSCONFDIR) $(ILANGDIR) $(IFONTDIR) $(IIMAGEDIR) $(ISARGPHPDIR) $(ILOCALEDIR) @DEFS@
+LIBS        = @LIBS@
+SRCDIR      = .
+VPATH       = .
+INSTALL     = cp
 
 INSTALL_PROGRAM = $(INSTALL)
 
@@ -51,7 +53,7 @@ DISTFILES = $(SRCS)
 all: sarg
 
 .c.o:
-       $(CC) -c -I. $(CPPFLAGS) $(DEFS) $(CFLAGS) $(IBINDIR) $(ISYSCONFDIR) $(ILANGDIR) $(IFONTDIR) $(IIMAGEDIR) $(ISARGPHPDIR) $<
+       $(CC) -c -I. $(CPPFLAGS) $(DEFS) $(CFLAGS) $<
 
 sarg: $(OBJS)
        $(CC) $(LDFLAGS) $(OBJS) -o $@ $(LIBS) $(LIBCRYPT)
index 601ab8eaa23c6763d373bc5b579869a2c527aa61..3f3543f2037c29224c432e9ded02bb18218cb759 100644 (file)
@@ -94,25 +94,12 @@ void authfail_report(void)
      exit(1);
    }
 
-   fprintf(fp_ou, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
-   css(fp_ou);
-   fputs("</head>\n",fp_ou);
-   if(strlen(FontFace) > 0) fprintf(fp_ou,"<font face=%s>\n",FontFace);
-   fprintf(fp_ou,"<body bgcolor=%s text=%s background='%s'>\n",BgColor,TxColor,BgImage);
-   write_logo_image(fp_ou);
-
-   if(IndexTree == INDEX_TREE_DATE)
-      show_sarg(fp_ou, "../../..");
-   else
-      show_sarg(fp_ou,"..");
-   fputs("<div align=\"center\"><table cellpadding=0 cellspacing=0>\n",fp_ou);
-   fprintf(fp_ou,"<tr><th class=\"title\">%s</th></tr>\n",Title);
-
+   write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,_("Authentication Failures"));
    fprintf(fp_ou,"<tr><td class=\"header_l\">%s: %s</td></tr>\n",text[89],period);
    fprintf(fp_ou,"<tr><th class=\"header_c\">%s</th></tr>\n",text[117]);
-   fputs("</table></div>\n",fp_ou);
+   close_html_header(fp_ou);
 
-   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"2\">\n",fp_ou);
+   fputs("<div class=\"report\"><table cellpadding=\"0\" cellspacing=\"2\">\n",fp_ou);
    fputs("<tr><td></td></tr>\n",fp_ou);
    fputs("<tr><td></td></tr>\n",fp_ou);
    fputs("<tr><td></td></tr>\n",fp_ou);
@@ -169,14 +156,10 @@ void authfail_report(void)
 
       fprintf(fp_ou,"<tr><td class=\"data2\">%s</td><td class=\"data2\">%s</td><td class=\"data2\">%s-%s</td><td class=\"data2\">%s<a href=\"%s\">%s</a></td></th>\n",name,ip,data,hora,BlockImage,url,url);
    }
-
-   fputs("</table>\n",fp_ou);
-
-   show_info(fp_ou);
-
-   fputs("</body>\n</html>\n",fp_ou);
-
    fclose(fp_in);
+
+   fputs("</table></div>\n",fp_ou);
+   write_html_trailer(fp_ou);
    fclose(fp_ou);
 
    unlink(authfail_in);
diff --git a/css.c b/css.c
index 702eda98b94f959e374e7cd32d815777f7dd126e..de5c6fa91719d95ebdbb892be7987efe69eddba8 100644 (file)
--- a/css.c
+++ b/css.c
@@ -47,16 +47,24 @@ void css(FILE *fp_css)
    }
 
    fprintf(fp_css,"<style type=\"text/css\">\n");
-   fprintf(fp_css,".logo {font-family:Verdana,Tahoma,Arial;font-size:11px;color:%s;vertical-align:middle;border:none;padding:0px;}\n",LogoTextColor);
+
+   fprintf(fp_css,".logo {font-family:Verdana,Tahoma,Arial;font-size:11px;color:%s;text-align:center;vertical-align:middle;border:none;padding:0px;margin-bottom:5px;}\n",LogoTextColor);
    fprintf(fp_css,".logo th {padding:0px;}\n");
    fprintf(fp_css,".logo img {vertical-align:middle;padding:0px;border:0px none;}\n");
    fprintf(fp_css,".body {font-family:%s;color:%s;background-color:%s;}\n",FontFace,TxColor,BgColor);
-   fprintf(fp_css,".info {font-family:%s;font-size:10px;}\n", FontFace);
+   fprintf(fp_css,".info {font-family:%s;font-size:10px;text-align:center;margin-top:1em;margin-bottom:1em;}\n", FontFace);
    fprintf(fp_css,".info a:link,a:visited {font-family:%s;color:#0000FF;font-size:10px;text-decoration:none;}\n", FontFace);
 
-   fprintf(fp_css,".title {font-family:%s;font-size:%s;color:%s;background-color:%s;text-align:center;}\n",FontFace,TitleFontSize,TiColor,BgColor);
-   fprintf(fp_css,".title2 {font-family:%s;font-size:%s;color:%s;background-color:%s;text-align:left;}\n",FontFace,TitleFontSize,TiColor,BgColor);
-   fprintf(fp_css,".title3 {font-family:%s;font-size:%s;color:%s;background-color:%s;text-align:right;}\n",FontFace,TitleFontSize,TiColor,BgColor);
+   fprintf(fp_css,".title {width:100%%;text-align:center;}\n");
+   fprintf(fp_css,"div.title > table {margin:auto;}\n");
+   fprintf(fp_css,".title_c {font-family:%s;font-size:%s;color:%s;background-color:%s;text-align:center;}\n",FontFace,TitleFontSize,TiColor,BgColor);
+   fprintf(fp_css,".title_l {font-family:%s;font-size:%s;color:%s;background-color:%s;text-align:left;}\n",FontFace,TitleFontSize,TiColor,BgColor);
+   fprintf(fp_css,".title_r {font-family:%s;font-size:%s;color:%s;background-color:%s;text-align:right;}\n",FontFace,TitleFontSize,TiColor,BgColor);
+
+   fprintf(fp_css,".index {width:100%%;text-align:center;}\n");
+   fprintf(fp_css,"div.index > table {margin:auto;}\n");
+   fprintf(fp_css,".report {width:100%%;text-align:center;}\n");
+   fprintf(fp_css,"div.report > table {margin:auto;}\n");
 
    fprintf(fp_css,".header_l {font-family:%s;font-size:%s;color:%s;background-color:%s;text-align:left;border-right:1px solid #666666;border-bottom:1px solid #666666;}\n",FontFace,HeaderFontSize,HeaderColor,HeaderBgColor);
    fprintf(fp_css,".header_r {font-family:%s;font-size:%s;color:%s;background-color:%s;text-align:right;border-right:1px solid #666666;border-bottom:1px solid #666666;}\n",FontFace,HeaderFontSize,HeaderColor,HeaderBgColor);
@@ -74,5 +82,9 @@ void css(FILE *fp_css)
    fprintf(fp_css,".text {font-family:%s;color:%s;font-size:%s;background-color:%s;text-align:right;}\n", FontFace, TxColor, FontSize, TxBgColor);
 
    fprintf(fp_css,".link {font-family:%s;font-size:%s;color:#0000FF;}\n", FontFace, FontSize);
-   fprintf(fp_css,".link a:link,a:visited {font-family:%s;font-size:%s;color:#0000FF;text-decoration:none;}\n</style>\n", FontFace, FontSize);
+   fprintf(fp_css,".link a:link,a:visited {font-family:%s;font-size:%s;color:#0000FF;text-decoration:none;}\n", FontFace, FontSize);
+
+   fprintf(fp_css,"a > img {border:none;}\n");
+
+   fputs("</style>\n",fp_css);
 }
index 226b0c833325b1b4098f26a90eb79a64cdc527d4..bf0ff88e50a9ca3526b2ec3aa29a741bdc868432 100644 (file)
@@ -82,25 +82,12 @@ void dansguardian_report(void)
      exit(1);
    }
 
-   fprintf(fp_ou, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
-   css(fp_ou);
-   fputs("</head>\n",fp_ou);
-   if(strlen(FontFace) > 0) fprintf(fp_ou,"<font face=%s>\n",FontFace);
-   fprintf(fp_ou,"<body bgcolor=%s text=%s background='%s'>\n",BgColor,TxColor,BgImage);
-   write_logo_image(fp_ou);
-
-   if(IndexTree == INDEX_TREE_DATE)
-      show_sarg(fp_ou, "../../..");
-   else
-      show_sarg(fp_ou,"..");
-   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ou);
-   fprintf(fp_ou,"<tr><th class=\"title\">%s</th></tr>\n",Title);
-
+   write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,_("DansGuardian"));
    fprintf(fp_ou,"<tr><td class=\"header_l\">%s: %s</td></tr>\n",text[89],period);
    fprintf(fp_ou,"<tr><th class=\"header_c\">%s</th></tr>\n",text[128]);
-   fputs("</table></div>\n",fp_ou);
+   close_html_header(fp_ou);
 
-   fputs("<div align=\"center\"><table cellpadding=\"1\" cellspacing=\"2\">\n",fp_ou);
+   fputs("<div class=\"report\"><table cellpadding=\"1\" cellspacing=\"2\">\n",fp_ou);
    fputs("<tr><td></td></tr>\n",fp_ou);
    fprintf(fp_ou,"<tr><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th></tr>\n",text[98],text[111],text[110],text[91],text[129]);
 
@@ -173,14 +160,10 @@ void dansguardian_report(void)
 
       fprintf(fp_ou,"<tr><td class=\"data2\" nospaw>%s</td><td class=\"data2\" nospaw>%s</td><td class=\"data2\" nospaw>%s-%s</td><td class=\"data2\" nospaw><a href=\"http://%s\">%s</a></td><td class=\"data2\" nospaw>%s</td></tr>\n",name,ip,date,hour,url,url,rule);
    }
-
-   fputs("</table>\n",fp_ou);
-
-   show_info(fp_ou);
-
-   fputs("</body>\n</html>\n",fp_ou);
-
    fclose(fp_in);
+
+   fputs("</table></div>\n",fp_ou);
+   write_html_trailer(fp_ou);
    fclose(fp_ou);
 
    unlink(dansguardian_in);
index 7a1b5e86f7186ff31dcb5690d78b51d15450f1f5..15b7e988a97eaede59a425ca7f1c74589c022da2 100644 (file)
@@ -41,7 +41,6 @@ void data_file(char *tmp)
    char ipantes[MAXLEN], nameantes[MAXLEN];
    char accsmart[MAXLEN];
    char crc2[50];
-   char wdname[MAXLEN];
    char *str;
    DIR *dirp;
    struct dirent *direntp;
@@ -53,7 +52,9 @@ void data_file(char *tmp)
    long long int oucache=0;
    long long int accbytes;
    long long int accelap;
+   int dlen;
    struct getwordstruct gwarea;
+   const char logext[]=".log";
 
    ipantes[0]='\0';
    nameantes[0]='\0';
@@ -63,8 +64,11 @@ void data_file(char *tmp)
 
    dirp = opendir(tmp);
    while ( (direntp = readdir( dirp )) != NULL ) {
-      if(strstr(direntp->d_name,".log") == 0)
+      dlen=strlen(direntp->d_name)-(sizeof(logext)-1);
+      if (dlen<=0) continue;
+      if(strcmp(direntp->d_name+dlen,logext) != 0)
          continue;
+
       if (snprintf(tmp3,sizeof(tmp3),"%s/%s",tmp,direntp->d_name)>=sizeof(tmp3)) {
          fprintf(stderr,"SARG: (datafile) directory path too long: %s/%s\n",tmp,direntp->d_name);
          exit(1);
@@ -74,10 +78,6 @@ void data_file(char *tmp)
          fprintf(stderr, "SARG: (datafile) %s: %s\n",text[45],tmp);
          exit(1);
       }
-      strcpy(wdname,direntp->d_name);
-      str=strchr(wdname,'.');
-      if (str) *str='\0';
-      strcat(user,wdname);
 
       ttopen=0;
       while(fgets(buf,sizeof(buf),fp_in)!=NULL) {
@@ -144,7 +144,7 @@ void data_file(char *tmp)
       }
 
       fclose(fp_in);
-}
+   }
 
    (void)closedir( dirp );
    if(debug)
index 710a146bdb2ae8bb1430389b3cff17a376f7789e..4918acb800bb7c69bca47d485c9e5b52bb64c263 100644 (file)
--- a/denied.c
+++ b/denied.c
@@ -82,25 +82,12 @@ void gen_denied_report(void)
      exit(1);
    }
 
-   fprintf(fp_ou, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
-   css(fp_ou);
-   fputs("</head>\n",fp_ou);
-   fprintf(fp_ou,"<body bgcolor=\"%s\" text=\"%s\" background=\"%s\">\n",BgColor,TxColor,BgImage);
-   write_logo_image(fp_ou);
-
-   if(IndexTree == INDEX_TREE_DATE)
-      show_sarg(fp_ou, "../../..");
-   else
-      show_sarg(fp_ou, "..");
-
-   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ou);
-   fprintf(fp_ou,"<tr><th class=\"title\">%s</b></th></tr>\n",Title);
-
+   write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,_("DENIED"));
    fprintf(fp_ou,"<tr><td class=\"header_l\">%s: %s</td></tr>\n",text[89],period);
    fprintf(fp_ou,"<tr><th class=\"header_c\">%s</th></tr>\n",text[46]);
-   fputs("</table></div>\n",fp_ou);
+   close_html_header(fp_ou);
 
-   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"2\">\n",fp_ou);
+   fputs("<div class=\"report\"><table cellpadding=\"0\" cellspacing=\"2\">\n",fp_ou);
    fputs("<tr><td></td></tr>\n",fp_ou);
    fprintf(fp_ou,"<tr><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th></tr>\n",text[98],text[111],text[110],text[91]);
 
@@ -154,18 +141,15 @@ void gen_denied_report(void)
       }
 
       if(BlockIt[0] != '\0')
-         sprintf(BlockImage,"<a href=\"%s%s?url=%s\"><img src=\"%s/sarg-squidguard-block.png\" border=\"0\"></a>&nbsp;",wwwDocumentRoot,BlockIt,url,ImageFile);
+         sprintf(BlockImage,"<a href=\"%s%s?url=%s\"><img src=\"%s/sarg-squidguard-block.png\"></a>&nbsp;",wwwDocumentRoot,BlockIt,url,ImageFile);
       else BlockImage[0]='\0';
 
-      fprintf(fp_ou,"<tr><td class=\"data\">%s</td><td class=\"data\">%s</td><td class=\"data\">%s-%s</td><td class=\"data2\">%s<a href=\"%s\">%s</a></td></th>\n",name,ip,data,hora,BlockImage,url,url);
+      fprintf(fp_ou,"<tr><td class=\"data\">%s</td><td class=\"data\">%s</td><td class=\"data\">%s-%s</td><td class=\"data2\">%s<a href=\"http://%s\">%s</a></td></tr>\n",name,ip,data,hora,BlockImage,url,url);
    }
-
-   fputs("</table>\n",fp_ou);
-
-   show_info(fp_ou);
-   fputs("</body></html>\n",fp_ou);
-
    fclose(fp_in);
+
+   fputs("</table></div>\n",fp_ou);
+   write_html_trailer(fp_ou);
    fclose(fp_ou);
 
    unlink(denied_in);
index ce89c0aeb778dfd259d909bfb2bcbb4ddeec0e30..36e8d261ad5fb8d9e6133c3a40a468230898213d 100644 (file)
@@ -670,12 +670,12 @@ the report and when the report was generated.
 
 
 
-/*! \fn void show_sarg(FILE *fp_ou, const char *ind)
+/*! \fn void show_sarg(FILE *fp_ou, int depth)
 Write the header of the report to tell that it was generated by sarg.
 
 \param fp_ou The handle of the HTML file.
-\param ind The path to use to have access to the images directory with the sarg logo. It is a succession of ..
-to move up until the root of the reports with the images directory.
+\param depth How deep is the page in the directory tree. It is used to prepend the images directory name
+with as many .. as necessary. If the page is at the same level as the image directory, the depth is zero.
 */
 
 
@@ -695,14 +695,24 @@ Get the size, in human readable form and kibibytes, of the content of a director
 
 
 
-/*! \fn void write_html_header(FILE *fp_ou, const char * ind)
+/*! \fn void write_html_header(FILE *fp_ou, int depth, const char *title)
 Write the HTML header of a HTML report file. The DTD correspond to a
 transitional HTML version 4.01. The title of the document is taken from
 the global variable ::Title.
 
 \param fp_ou The file to which the HTML header is written.
-\param ind The path to pass to show_arg() to find the root directory where the
-images directory is.
+\param depth How deep is the page in the directory tree. The depth is passed to show_sarg().
+\param title The title of the page.
+*/
+
+
+
+
+
+/*! \fn void close_html_header(FILE *fp_ou)
+Close the header opened by write_html_header().
+
+\param fp_ou The file to which the HTML header is written.
 */
 
 
index 063078046a7f191839a28a89e0c78bf8569a9334..5711f3f188c65f2e7b49304ea513b6319b4a734e 100644 (file)
@@ -87,27 +87,12 @@ void download_report(void)
      exit(1);
    }
 
-   fprintf(fp_ou, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
-   css(fp_ou);
-   fputs("</head>\n",fp_ou);
-
-   fprintf(fp_ou,"<body bgcolor=\"%s\" text=\"%s\" background=\"%s\">\n",BgColor,TxColor,BgImage);
-
-   write_logo_image(fp_ou);
-
-   if(IndexTree == INDEX_TREE_DATE)
-      show_sarg(fp_ou, "../../..");
-   else
-      show_sarg(fp_ou, "..");
-
-   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ou);
-   fprintf(fp_ou,"<tr><th class=\"title\">%s</th></tr>\n",Title);
-
+   write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,_("Downloads"));
    fprintf(fp_ou,"<tr><td class=\"header_l\">%s: %s</td></tr>\n",text[89],period);
    fprintf(fp_ou,"<tr><th class=\"header_c\">%s</th></tr>\n",text[125]);
-   fputs("</table></div>\n",fp_ou);
+   close_html_header(fp_ou);
 
-   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"2\">\n",fp_ou);
+   fputs("<div class=\"report\"><table cellpadding=\"0\" cellspacing=\"2\">\n",fp_ou);
    fputs("<tr><td></td></tr>\n",fp_ou);
    fprintf(fp_ou,"<tr><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th></tr>\n",text[98],text[111],text[110],text[91]);
 
@@ -164,18 +149,15 @@ void download_report(void)
 
       fprintf(fp_ou,"<tr><td class=\"data\">%s</td><td class=\"data\">%s</td><td class=\"data\">%s-%s</td><td class=\"data2\">",name,ip,data,hora);
       if(BlockIt[0]!='\0')
-         fprintf(fp_ou,"<a href=\"%s%s?url=%s\"><img src=\"%s/sarg-squidguard-block.png\" border=\"0\"></a>&nbsp;",wwwDocumentRoot,BlockIt,url,ImageFile);
+         fprintf(fp_ou,"<a href=\"%s%s?url=%s\"><img src=\"%s/sarg-squidguard-block.png\"></a>&nbsp;",wwwDocumentRoot,BlockIt,url,ImageFile);
       fprintf(fp_ou,"<a href=\"%s\">",url);
       output_html_string(fp_ou,url);
       fputs("</a></td></tr>\n",fp_ou);
    }
-
-   fputs("</table>\n",fp_ou);
-
-   show_info(fp_ou);
-   fputs("</body>\n</html>\n",fp_ou);
-
    fclose(fp_in);
+
+   fputs("</table></div>\n",fp_ou);
+   write_html_trailer(fp_ou);
    fclose(fp_ou);
 
    unlink(report_in);
index ebe17bee5bb91915ffafd2a4353d598999d2232d..63875a6801ba2b25f1d95714331b9cb2a6c75dcf 100644 (file)
--- a/getconf.c
+++ b/getconf.c
@@ -425,7 +425,7 @@ static void parmtest(char *buf)
 
    if (getparam_string("mail_utility",buf,MailUtility,sizeof(MailUtility))>0) return;
 
-   if (getparam_string("topsites_num",buf,TopSitesNum,sizeof(TopSitesNum))>0) return;
+   if (getparam_int("topsites_num",buf,&TopSitesNum)>0) return;
 
    if (getparam_int("topuser_num",buf,&TopUsersNum)>0) return;
 
diff --git a/html.c b/html.c
index 108bca705cfd97cee756fb1b6bc2fc7fa1e8b971..a7c61cc8925d01454a7eb1e8a814c92187c03767 100644 (file)
--- a/html.c
+++ b/html.c
@@ -235,34 +235,15 @@ void htmlrel(void)
          exit(1);
       }
 
-      fputs("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n",fp_ou);
-      fputs("<html>\n",fp_ou);
-      fputs("<head>\n",fp_ou);
-      fprintf(fp_ou,"  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
-      css(fp_ou);
-      fputs("</head>\n",fp_ou);
+      write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 4 : 2,_("User report"));
+      fprintf(fp_ou,"<tr><td class=\"header_l\">%s:&nbsp;%s</td></tr>\n",text[89],period);
+      fprintf(fp_ou,"<tr><td class=\"header_l\">%s:&nbsp;%s</td></tr>\n",text[90],name2);
+      fprintf(fp_ou,"<tr><td class=\"header_l\">%s:&nbsp;%s, %s</td></tr>\n",text[104],UserSortField,UserSortOrder);
+      fprintf(fp_ou,"<tr><td class=\"header_c\">%s %s</td></tr>\n",text[32],text[55]);
+      //fputs("<tr><td></td></tr>\n",fp_ou);
+      close_html_header(fp_ou);
 
-      fprintf(fp_ou,"<body style=\"font-family:%s;font-size:%s;background-color:%s; \
-           background-image:url(%s)\">\n",FontFace,TitleFontSize,BgColor,BgImage);
-
-      write_logo_image(fp_ou);
-
-      if(IndexTree == INDEX_TREE_DATE)
-         show_sarg(fp_ou, "../../../..");
-      else
-         show_sarg(fp_ou, "../..");
-
-      fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ou);
-      fprintf(fp_ou,"<tr><th class=\"title\" colspan=\"2\">%s</th></tr>\n",Title);
-
-      fprintf(fp_ou,"<tr><td class=\"header_l\" colspan=\"2\">%s:&nbsp;%s</td></tr>\n",text[89],period);
-      fprintf(fp_ou,"<tr><td class=\"header_l\" colspan=\"2\">%s:&nbsp;%s</td></tr>\n",text[90],name2);
-      fprintf(fp_ou,"<tr><td class=\"header_l\" colspan=\"2\">%s:&nbsp;%s, %s</td></tr>\n",text[104],UserSortField,UserSortOrder);
-      fprintf(fp_ou,"<tr><td class=\"header_c\" colspan=\"2\">%s %s</td></tr>\n",text[32],text[55]);
-      fputs("<tr><td></td></tr>\n",fp_ou);
-
-      fputs("</table></div>\n",fp_ou);
-      fputs("<div align=\"center\"><table cellpadding=\"2\" cellspacing=\"1\">\n",fp_ou);
+      fputs("<div class=\"report\"><table cellpadding=\"2\" cellspacing=\"1\">\n",fp_ou);
 
       if(denied_report[0]!='\0') {
          fprintf(fp_ou,"<tr><td class=\"header_l\" colspan=\"11\"><a href=\"denied_%s.html\">%s</a> %s</td></tr>\n",denied_report,text[116],text[55]);
@@ -335,22 +316,6 @@ void htmlrel(void)
             else
                strcpy(tmp6,"../../images");
 
-            if((ReportType & REPORT_TYPE_SITE_USER_TIME_DATE) != 0) {
-               strcpy(ltext110,text[110]);
-               for(s=ltext110; *s; ++s)
-                  *s=tolower(*s);
-               strcpy(siteind,urly);
-               str=siteind;
-               for(z1=0; str[z1]; z1++) {
-                  if(str[z1]=='?' || str[z1]=='-' || str[z1]=='.' || str[z1]==':' || str[z1]=='/' || str[z1]=='\\' || str[z1]=='*' ||
-                     str[z1]=='\'' || str[z1]=='\"' || str[z1]=='$')
-                     str[z1]='_';
-               }
-               fprintf(fp_ou,"<td class=\"data\"><a href=\"tt%s-%s.html\"><img src=\"%s/datetime.png\" border=\"0\" title=\"%s %s\" alt=\"T\"></a></td>",usuario,siteind,tmp6,ltext110,text[55]);
-            } else {
-               fprintf(fp_ou,"<td class=\"data\"></td>");
-            }
-
             if(!LongUrl) {
                char *endofhost=strchr(url,'/');
                if (endofhost) *endofhost='\0';
@@ -366,11 +331,28 @@ void htmlrel(void)
                }
             }
 
+            if((ReportType & REPORT_TYPE_SITE_USER_TIME_DATE) != 0) {
+               strcpy(ltext110,text[110]);
+               for(s=ltext110; *s; ++s)
+                  *s=tolower(*s);
+               for(z1=0; urly[z1]; z1++) {
+                  if(urly[z1]=='?' || urly[z1]=='-' || urly[z1]=='.' || urly[z1]==':' || urly[z1]=='/' || urly[z1]=='\\' ||
+                     urly[z1]=='*' || urly[z1]=='\'' || urly[z1]=='\"' || urly[z1]=='$')
+                     siteind[z1]='_';
+                  else
+                     siteind[z1]=urly[z1];
+               }
+               siteind[z1]='\0';
+               fprintf(fp_ou,"<td class=\"data\"><a href=\"tt%s-%s.html\"><img src=\"%s/datetime.png\" title=\"%s %s\" alt=\"T\"></a></td>",usuario,siteind,tmp6,ltext110,text[55]);
+            } else {
+               fprintf(fp_ou,"<td class=\"data\"></td>");
+            }
+
             if(Privacy)
                fprintf(fp_ou,"<td class=\"data2\"><span style=\"color:%s;\">%s</span></td>",PrivacyStringColor,PrivacyString);
             else {
                if(BlockIt[0]!='\0') {
-                  fprintf(fp_ou,"<td class=\"data2\"><a href=\"%s%s?url=%s\"><img src=\"%s/sarg-squidguard-block.png\" border=\"0\"></a><a href=\"http://%s\">&nbsp;%s</a></td>",wwwDocumentRoot,BlockIt,urly,tmp6,urly,urly);
+                  fprintf(fp_ou,"<td class=\"data2\"><a href=\"%s%s?url=%s\"><img src=\"%s/sarg-squidguard-block.png\"></a><a href=\"http://%s\">&nbsp;%s</a></td>",wwwDocumentRoot,BlockIt,urly,tmp6,urly,urly);
                } else
                   fprintf(fp_ou,"<td class=\"data2\"><a href=\"http://%s\" title=\"%s\">%s</a></td>",urly,urly,url);
             }
@@ -590,11 +572,7 @@ void htmlrel(void)
       }
 
       fputs("</table></div>\n",fp_ou);
-
-      show_info(fp_ou);
-
-      fputs("</body>\n</html>\n",fp_ou);
-
+      write_html_trailer(fp_ou);
       fclose(fp_ou);
 
       htaccess(wusuario);
index 55729a01ebd6c71290f826573b24f7ff15c12a90..76f3ae47c8ac0dca9023943165d7dc48644a69e9 100755 (executable)
@@ -121,6 +121,21 @@ int mkstemps(char *template, int suffixlen);
 #define mkstemp(template) mkstemps(template,0)
 #endif
 
+#ifdef ENABLE_NLS
+#include <libintl.h>
+#define _(String) gettext(String)
+#ifdef gettext_noop
+#define N_(String) gettext_noop(String)
+#else
+#define N_(String) (String)
+#endif
+#else /* No NLS */
+#define _(String) (String)
+#define N_(String) (String)
+#define textdomain(String)
+#define bindtextdomain(Domain,Directory)
+#endif
+
 #if defined(__MINGW32__)
 #define mkdir(p,m) _mkdir(p)
 
@@ -226,7 +241,7 @@ char u2[255];
 char RecordsWithoutUser[20];
 int UseComma;
 char MailUtility[PATH_MAX];
-char TopSitesNum[20];
+int TopSitesNum;
 int TopUsersNum;
 char ExcludeCodes[256];
 char TopsitesSortField[15];
@@ -371,6 +386,7 @@ int  download_count;
 int  authfail_count;
 int  dansguardian_count;
 int  squidguard_count;
+int  useragent_count;
 int  limit_flag;
 int  color1;
 int  color2;
index 1df5f5ea08301ba5b8ab8874dcc0a411cbbcc34d..954a4d543cbbd0dc4cfbb8ad4eb724e659b6553b 100755 (executable)
@@ -153,9 +153,10 @@ void fixper(char *tbuf, char *period, const char *duntil);
 char *fixtime(long int elap);
 void fixendofline(char *str);
 void show_info(FILE *fp_ou);
-void show_sarg(FILE *fp_ou, const char *ind);
+void show_sarg(FILE *fp_ou, int depth);
 void write_logo_image(FILE *fp_ou);
-void write_html_header(FILE *fp_ou, const char * ind);
+void write_html_header(FILE *fp_ou, int depth, const char *title);
+void close_html_header(FILE *fp_ou);
 void write_html_trailer(FILE *fp_ou);
 void output_html_string(FILE *fp_ou,const char *str);
 void subs(char *str, int size, char *from, char *to);
index 728f0f0c60e5b685aaad06665ee7ab930d142bb2..e0693c948ddf3ed8e3ae8db2abd285f944d4644c 100755 (executable)
@@ -1,3 +1,3 @@
-#define VERSION PACKAGE_VERSION" Feb-02-2010"
+#define VERSION PACKAGE_VERSION" Feb-04-2010"
 #define PGM PACKAGE_NAME
 #define URL "http://sarg.sourceforge.net"
diff --git a/index.c b/index.c
index 5a50d682640c33eaf4abdc4fdd9ff88ca1e5c39f..c9a1c44869fa03bfad9410a8d1c2d3cc51dd6240 100644 (file)
--- a/index.c
+++ b/index.c
@@ -84,6 +84,7 @@ static void make_date_index(void)
    char monthnum[10];
    char dayindex[MAXLEN];
    char daynum[10];
+   char title[80];
    int yearsort[150];
    int nyears;
    int year;
@@ -131,7 +132,9 @@ static void make_date_index(void)
       fprintf(stderr, "SARG: (index) %s: %s - %s\n",text[45],yearindex,strerror(errno));
       exit(1);
    }
-   write_html_header(fp_ou, ".");
+   write_html_header(fp_ou,0,"SARG reports");
+   close_html_header(fp_ou);
+   fputs("<div class=\"index\"><table cellpadding=\"1\" cellspacing=\"2\">\n<tr><td></td><td></td></tr>\n",fp_ou);
    fprintf(fp_ou,"<tr><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th></tr>\n",text[130],text[132]);
    for (y=0 ; y<nyears ; y++) {
       if (order>0)
@@ -172,7 +175,10 @@ static void make_date_index(void)
          fprintf(stderr, "SARG: (index) %s: %s - %s\n",text[45],monthindex,strerror(errno));
          exit(1);
       }
-      write_html_header(fp_ou2,"..");
+      snprintf(title,sizeof(title),"SARG: report for %04d",year);
+      write_html_header(fp_ou2,1,title);
+      close_html_header(fp_ou2);
+      fputs("<div class=\"index\"><table cellpadding=\"1\" cellspacing=\"2\">\n<tr><td></td><td></td></tr>\n",fp_ou2);
       fprintf(fp_ou2,"<tr><th class=\"header_l\">%s/%s</th></tr>\n",text[130],text[131]);
       for (m=0 ; m<nmonths ; m++) {
          if (order>0)
@@ -227,7 +233,10 @@ static void make_date_index(void)
             fprintf(stderr, "SARG: (index) %s: %s - %s\n",text[45],dayindex,strerror(errno));
             exit(1);
          }
-         write_html_header(fp_ou3,"../..");
+         snprintf(title,sizeof(title),"SARG: report for %04d/%02d",year,month);
+         write_html_header(fp_ou3,2,title);
+         close_html_header(fp_ou3);
+         fputs("<div class=\"index\"><table cellpadding=\"1\" cellspacing=\"2\">\n<tr><td></td><td></td></tr>\n",fp_ou3);
          fprintf(fp_ou3,"<tr><th class=\"header_l\">%s/%s/%s</th></tr>\n",text[130],text[131],text[127]);
          for (d=0 ; d<ndays ; d++) {
             if (order>0)
@@ -243,13 +252,16 @@ static void make_date_index(void)
             }
             fprintf(fp_ou3,"<tr><td class=\"data2\"><a href=\"%s/index.html\">%s %s %s</a></td></tr>\n",daynum,yearnum,nmonth,daynum);
          }
+         fputs("</table></div>\n",fp_ou3);
          write_html_trailer(fp_ou3);
          fclose(fp_ou3);
       }
+      fputs("</table></div>\n",fp_ou2);
       write_html_trailer(fp_ou2);
       fclose(fp_ou2);
    }
 
+   fputs("</table></div>\n",fp_ou);
    write_html_trailer(fp_ou);
    fclose(fp_ou);
 }
@@ -381,7 +393,9 @@ static void make_file_index(void)
       fprintf(stderr, "SARG: (index) %s: %s\n",text[45],wdir);
       exit(1);
    }
-   write_html_header(fp_ou,".");
+   write_html_header(fp_ou,0,"SARG reports");
+   close_html_header(fp_ou);
+   fputs("<div class=\"index\"><table cellpadding=\"1\" cellspacing=\"2\">\n<tr><td></td><td></td></tr>\n",fp_ou);
    fprintf(fp_ou,"<tr><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th></tr>\n",text[101],text[102],text[103],text[93],text[96]);
    for (i=0 ; i<nsort ; i++) {
       if (order>0)
@@ -392,6 +406,7 @@ static void make_file_index(void)
       obttotal(outdir,item->dirname,tbytes,tuser,media);
       fprintf(fp_ou,"<tr><td class=\"data2\"><a href='%s/%s'>%s</a></td><td class=\"data2\">%s</td><td class=\"data\">%s</td><td class=\"data\">%s</td><td class=\"data\">%s</td></tr>\n",item->dirname,ReplaceIndex,item->dirname,item->date,tuser,tbytes,media);
    }
+   fputs("</table></div>\n",fp_ou);
    write_html_trailer(fp_ou);
    fclose(fp_ou);
 
diff --git a/log.c b/log.c
index 553db948b90c90d25bbabe96c88744c38f22d7da..89b7e42676e73704e713003c960715350fd23c30 100644 (file)
--- a/log.c
+++ b/log.c
@@ -175,7 +175,7 @@ int main(int argc,char *argv[])
    strcpy(RecordsWithoutUser,"ip");
    UseComma=0;
    strcpy(MailUtility,"mailx");
-   strcpy(TopSitesNum,"100");
+   TopSitesNum=100;
    UserIp=0;
    strcpy(TopuserSortField,"BYTES");
    strcpy(UserSortField,"BYTES");
@@ -272,6 +272,7 @@ int main(int argc,char *argv[])
    authfail_count=0;
    dansguardian_count=0;
    squidguard_count=0;
+   useragent_count=0;
    DeniedReportLimit=10;
    AuthfailReportLimit=10;
    DansGuardianReportLimit=10;
@@ -300,7 +301,10 @@ int main(int argc,char *argv[])
 
 #ifdef HAVE_LOCALE_H
    setlocale(LC_TIME,"");
+   setlocale (LC_MESSAGES, "");
 #endif
+   bindtextdomain (PACKAGE_NAME, LOCALEDIR);
+   textdomain (PACKAGE_NAME);
 
    NAccessLog=0;
    for(x=0; x<=MAXLOGS; x++)
index 7668dc9cb433c0dac96391d16333396296eef1e4..016771259e1b71727a3e69c4d92d8a0bbee3c8c4 100755 (executable)
@@ -251,7 +251,7 @@ static void header(void)
    puts("</head>\n");
    printf(buf,"<body style=\"font-family:%s;font-size:%s;background-color:%s;background-image:url(%s)\">\n",FontFace,TitleFontSize,BgColor,BgImage);
    puts("<div align=\"center\"><table cellpadding=\"1\" cellspacing=\"1\">\n");
-   printf("<tr><th class=\"title2\" colspan=\"10\">SARG %s</th></tr>\n",text[134]);
+   printf("<tr><th class=\"title_l\" colspan=\"10\">SARG %s</th></tr>\n",text[134]);
    printf("<tr><th class=\"text\" colspan=\"10\">%s: %d s</th></tr>\n",text[136],realtime_refresh);
    printf("<tr><th class=\"header_c\">%s</th><th class=\"header_c\">%s</th><th class=\"header_c\">%s</th><th class=\"header_c\">%s</th><th class=\"header_l\">%s</th></tr>\n",text[110],text[111],text[98],text[135],text[91]);
 }
index d865e86bdd82175600a208e78f87e9d5b22e303a..218ad01510e4f3fff531b88d05ea5216ac86c1e6 100644 (file)
--- a/repday.c
+++ b/repday.c
@@ -69,23 +69,9 @@ void report_day(const char *user)
      exit(1);
    }
 
-   fprintf(fp_ou, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
-   css(fp_ou);
-   fputs("</head>\n",fp_ou);
-   //if(strlen(FontFace) > 0) fprintf(fp_ou,"<font face=%s>\n",FontFace);
-   fprintf(fp_ou,"<body bgcolor=\"%s\" text=\"%s\" background=\"%s\">\n",BgColor,TxColor,BgImage);
-   write_logo_image(fp_ou);
-
-   if(IndexTree == INDEX_TREE_DATE)
-      show_sarg(fp_ou, "../../../..");
-   else
-      show_sarg(fp_ou, "../..");
-
-   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ou);
-   fprintf(fp_ou,"<tr><th class=\"title\" colspan=\"2\">%s</th></tr>\n",Title);
-
-   fputs("</table></div>\n",fp_ou);
-   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ou);
+   write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 4 : 2,_("Day report"));
+   close_html_header(fp_ou);
+   fputs("<div class=\"report\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ou);
 
    fprintf(fp_ou,"<tr><td class=\"header_c\" colspan=\"2\">%s:&nbsp;%s</td></tr>\n",text[89],period);
 
@@ -110,7 +96,7 @@ void report_day(const char *user)
    fputs("<tr><td></td></tr><tr><td></td></tr>\n",fp_ou);
    fputs("<tr><td></td></tr><tr><td></td></tr></table>\n",fp_ou);
 
-   fputs("<table cellpadding=\"0\" cellspacing=\"2\">\n", fp_ou);
+   fputs("<table class=\"report\" cellpadding=\"0\" cellspacing=\"2\">\n", fp_ou);
 
    fputs( "<tr><td></td>\n", fp_ou );
 
@@ -167,6 +153,7 @@ void report_day(const char *user)
       ttt+=elap;
 
    }
+   fclose(fp_in);
 
    for( i = 0; i < hours.len; i++ )
      sprintf(c[ hours.list[ i ] ],"%s",fixtime(v[ hours.list[ i ] ]));
@@ -187,12 +174,8 @@ void report_day(const char *user)
      fprintf(fp_ou, "<td class=\"header_r\">%s</td>\n", c[ hours.list[ i ] ] );
    fprintf(fp_ou, "<td class=\"header_r\">%s</td></tr>\n", fixtime(ttt) );
 
-   fputs("</table></div>\n",fp_ou);
-
-   show_info(fp_ou);
-
-   fputs("</body>\n</html>\n",fp_ou);
-   fclose(fp_in);
+   fputs("</table>\n",fp_ou);
+   write_html_trailer(fp_ou);
    fclose(fp_ou);
    return;
 }
index 9766540e60668ef48c339a8159928d73a17289a2..fb482597be9328ec163fa61907a67fd04eb8e40e 100644 (file)
--- a/report.c
+++ b/report.c
@@ -247,27 +247,14 @@ void gerarel(void)
                for(str=ltext110; *str; ++str)
                   *str=tolower(*str);
 
-               fprintf(fp_tt, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
-               css(fp_tt);
-               fputs("</head>\n",fp_tt);
-               fprintf(fp_tt,"<body bgcolor=\"%s\" text=\"%s\" background=\"%s\">\n",BgColor,TxColor,BgImage);
-               write_logo_image(fp_tt);
-
-               if(IndexTree == INDEX_TREE_DATE)
-                  show_sarg(fp_tt, "../../../..");
-               else
-                  show_sarg(fp_tt, "../..");
-
-               fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_tt);
-               fprintf(fp_tt,"<tr><th class=\"title\" colspan=\"2\">%s</th></tr>\n",Title);
-
-               fprintf(fp_tt,"<tr><td class=\"header_l\" colspan=\"2\">%s:&nbsp;%s</td></tr>\n",text[89],period);
-               fprintf(fp_tt,"<tr><td class=\"header_l\" colspan=\"2\">%s:&nbsp;%s</td></tr>\n",text[90],name);
-               fprintf(fp_tt,"<tr><td class=\"header_l\" colspan=\"2\">%s:&nbsp;%s, %s</td></tr>\n",text[104],UserSortField,UserSortOrder);
-               fprintf(fp_tt,"<tr><th class=\"header_c\" colspan=\"2\">%s</th></tr>\n",text[32]);
-
-               fputs("</table></div>\n",fp_tt);
-               fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"2\">\n",fp_tt);
+               write_html_header(fp_tt,(IndexTree == INDEX_TREE_DATE) ? 4 : 2,_("Site access report"));
+               fprintf(fp_tt,"<tr><td class=\"header_l\">%s:&nbsp;%s</td></tr>\n",text[89],period);
+               fprintf(fp_tt,"<tr><td class=\"header_l\">%s:&nbsp;%s</td></tr>\n",text[90],name);
+               fprintf(fp_tt,"<tr><td class=\"header_l\">%s:&nbsp;%s, %s</td></tr>\n",text[104],UserSortField,UserSortOrder);
+               fprintf(fp_tt,"<tr><th class=\"header_c\">%s</th></tr>\n",text[32]);
+               close_html_header(fp_tt);
+
+               fputs("<div class=\"report\"><table cellpadding=\"0\" cellspacing=\"2\">\n",fp_tt);
                fputs("<tr><td></td><td></td></tr>",fp_tt);
                bzero(tmp4, MAXLEN);
                strncpy(tmp4,text[110],4);
@@ -470,7 +457,7 @@ void gravatmp(const char *oldaccuser, const char *oldurl, long long int nacc, lo
    ttopen=0;
 
    if(fp_tt) {
-      fputs("</table>\n",fp_tt);
+      fputs("</table>\n</div>\n",fp_tt);
       fputs("</body>\n</html>\n",fp_tt);
       fclose(fp_tt);
    }
index ca4b8e4ecaf183168df494d1d77ca97ffb7cc5f5..4f29e77e29e2da6c625c42a0c3d807cb10878368 100644 (file)
@@ -92,26 +92,12 @@ void siteuser(void)
      exit(1);
    }
 
-   fprintf(fp_ou, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
-   css(fp_ou);
-   fputs("</head>\n",fp_ou);
-   //if(strlen(FontFace) > 0) fprintf(fp_ou,"<font face=\"%s\">\n",FontFace);
-   fprintf(fp_ou,"<body bgcolor=\"%s\" text=\"%s\" background=\"%s\">\n",BgColor,TxColor,BgImage);
-   write_logo_image(fp_ou);
-
-   if(IndexTree == INDEX_TREE_DATE)
-      show_sarg(fp_ou, "../../..");
-   else
-      show_sarg(fp_ou, "..");
-
-   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ou);
-   fprintf(fp_ou,"<tr><th class=\"title\">%s</th></tr>\n",Title);
-
+   write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,_("Sites & Users"));
    fprintf(fp_ou,"<tr><td class=\"header_c\">%s: %s</td></tr>\n",text[89],period);
    fprintf(fp_ou,"<tr><th class=\"header_c\">%s</th></tr>\n",text[85]);
-   fputs("</table></div>\n",fp_ou);
+   close_html_header(fp_ou);
 
-   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"2\">\n",fp_ou);
+   fputs("<div class=\"report\"><table cellpadding=\"0\" cellspacing=\"2\">\n",fp_ou);
    fputs("<tr><td></td></tr>\n",fp_ou);
    if(BytesInSitesUsersReport)
       fprintf(fp_ou,"<tr><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th></tr>\n",text[100],text[91],text[93],text[103]);
@@ -197,7 +183,7 @@ void siteuser(void)
       }
 
       if(BlockIt[0]!='\0')
-         sprintf(BlockImage,"<a href=\"%s%s?url=%s\"><img src=\"../images/sarg-squidguard-block.png\" border=\"0\"></a>&nbsp;",wwwDocumentRoot,BlockIt,ourl);
+         sprintf(BlockImage,"<a href=\"%s%s?url=%s\"><img src=\"../images/sarg-squidguard-block.png\"></a>&nbsp;",wwwDocumentRoot,BlockIt,ourl);
       else BlockImage[0]='\0';
 
       if(strcmp(url,ourl) != 0 && nsitesusers) {
@@ -214,6 +200,7 @@ void siteuser(void)
          obytes=nbytes;
       }
    }
+   fclose(fp_in);
 
    if(nsitesusers) {
       fprintf(fp_ou,"<tr><td class=\"data\">%d</td><td class=\"data2\"><a href=\"http://%s\">%s</a></td><td class=\"data2\">%s</td></tr>\n",regs,ourl,ourl,users);
@@ -221,13 +208,8 @@ void siteuser(void)
 
    unlink(general2);
 
-   fputs("</table>\n</div>\n",fp_ou);
-
-   show_info(fp_ou);
-
-   fputs("</body>\n</html>\n",fp_ou);
-
-   fclose(fp_in);
+   fputs("</table></div>\n",fp_ou);
+   write_html_trailer(fp_ou);
    fclose(fp_ou);
 
    if(users)
index 4bd9cf2fcd9b29a3ae1ea72f8c7cce144b52fccf..6f60820a06cfcf762c8224a9a71de348187bdacb 100644 (file)
@@ -82,25 +82,12 @@ void squidguard_report(void)
      exit(1);
    }
 
-   fprintf(fp_ou, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
-   css(fp_ou);
-   fputs("</head>\n",fp_ou);
-   if(strlen(FontFace) > 0) fprintf(fp_ou,"<font face=%s>\n",FontFace);
-   fprintf(fp_ou,"<body bgcolor=%s text=%s background='%s'>\n",BgColor,TxColor,BgImage);
-   write_logo_image(fp_ou);
-
-   if(IndexTree == INDEX_TREE_DATE)
-      show_sarg(fp_ou, "../../..");
-   else
-      show_sarg(fp_ou,"..");
-   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ou);
-   fprintf(fp_ou,"<tr><th class=\"title\">%s</th></tr>\n",Title);
-
+   write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,_("SQUIDGUARD"));
    fprintf(fp_ou,"<tr><td class=\"header_l\">%s: %s</td></tr>\n",text[89],period);
    fprintf(fp_ou,"<tr><th class=\"header_c\">%s</th></tr>\n",text[120]);
-   fputs("</table></div>\n",fp_ou);
+   close_html_header(fp_ou);
 
-   fputs("<div align=\"center\"><table cellpadding=1 cellspacing=2>\n",fp_ou);
+   fputs("<div class=\"report\"><table cellpadding=1 cellspacing=2>\n",fp_ou);
    fputs("<tr><td></td></tr>\n",fp_ou);
    fprintf(fp_ou,"<tr><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th></tr>\n",text[98],text[111],text[110],text[91],text[121]);
 
@@ -173,14 +160,10 @@ void squidguard_report(void)
 
       fprintf(fp_ou,"<tr><td class=\"data2\">%s</td><td class=\"data2\">%s</td><td class=\"data2\">%s-%s</td><td class=\"data2\"><a href=\"http://%s\">%s</a></td><td class=\"data2\">%s</td></th>\n",name,ip,data,hora,url,url,rule);
    }
-
-   fputs("</table>\n",fp_ou);
-
-   show_info(fp_ou);
-
-   fputs("</body>\n</html>\n",fp_ou);
-
    fclose(fp_in);
+
+   fputs("</table></div>\n",fp_ou);
+   write_html_trailer(fp_ou);
    fclose(fp_ou);
 
    unlink(squidguard_in);
index 906e028e7a3963c03ea94a067fc634f20dd51de4..e4d4d81d9a1071977306ffa21cd536f4784c5e91 100644 (file)
@@ -216,39 +216,22 @@ void topsites(void)
      exit(1);
    }
 
-   regs=0;
-
-   fprintf(fp_ou, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
-   css(fp_ou);
-   fputs("</head>\n",fp_ou);
-   fprintf(fp_ou,"<body bgcolor=\"%s\" text=\"%s\" background=\"%s\">\n",BgColor,TxColor,BgImage);
-   write_logo_image(fp_ou);
-
-   if(IndexTree == INDEX_TREE_DATE)
-      show_sarg(fp_ou,"../../..");
-   else
-      show_sarg(fp_ou, "..");
-
-   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ou);
-   fprintf(fp_ou,"<tr><th class=\"title\">%s</th></tr>\n",Title);
-
+   write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,_("Top sites"));
    fprintf(fp_ou,"<tr><td class=\"header_c\">%s: %s</td></tr>\n",text[89],period);
-   fprintf(fp_ou,"<tr><th class=\"header_c\">%s %s %s</th></tr>\n",text[83],TopSitesNum,text[84]);
-   fputs("</table></div>\n",fp_ou);
+   fprintf(fp_ou,"<tr><th class=\"header_c\">%s %d %s</th></tr>\n",text[83],TopSitesNum,text[84]);
+   close_html_header(fp_ou);
 
-   fputs("<div align=\"center\"><table cellpadding=\"1\" cellspacing=\"2\">\n",fp_ou);
+   fputs("<div class=\"report\"><table cellpadding=\"1\" cellspacing=\"2\">\n",fp_ou);
    fputs("<tr><td></td></tr>\n",fp_ou);
    fprintf(fp_ou,"<tr><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th> \
                <th class=\"header_l\">%s</th><th class=\"header_l\">%s</th> \
                <th class=\"header_l\">%s</th></tr>\n", \
                text[100],text[91],text[92],text[93],text[99]);
 
-   regs=1;
+   regs=0;
    ntopsites = 0;
 
-   while(fgets(buf,sizeof(buf),fp_in)!=NULL) {
-      if(regs>atoi(TopSitesNum))
-         break;
+   while(regs<TopSitesNum && fgets(buf,sizeof(buf),fp_in)!=NULL) {
       getword_start(&gwarea,buf);
       if (getword_atoll(&nacc,&gwarea,'\t')<0) {
          printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",sites);
@@ -270,22 +253,17 @@ void topsites(void)
       strcpy(wwork3,fixtime(twork3));
 
       if(BlockIt[0] != '\0')
-         sprintf(BlockImage,"<a href=\"%s%s?url=%s\"><img src=\"../images/sarg-squidguard-block.png\" border=\"0\"></a>&nbsp;",wwwDocumentRoot,BlockIt,url);
+         sprintf(BlockImage,"<a href=\"%s%s?url=%s\"><img src=\"../images/sarg-squidguard-block.png\"></a>&nbsp;",wwwDocumentRoot,BlockIt,url);
       else BlockImage[0]='\0';
 
 
-      fprintf(fp_ou,"<tr><td class=\"data\">%d</td><td class=\"data2\">%s<a href=\"http://%s\"><font class=\"link\">%s</font></a></td><td class=\"data\">%s</td><td class=\"data\">%s</td><td class=\"data\">%s</td></tr>\n",regs,BlockImage,url,url,wwork1,wwork2,wwork3);
+      fprintf(fp_ou,"<tr><td class=\"data\">%d</td><td class=\"data2 link\">%s<a href=\"http://%s\">%s</a></td><td class=\"data\">%s</td><td class=\"data\">%s</td><td class=\"data\">%s</td></tr>\n",regs,BlockImage,url,url,wwork1,wwork2,wwork3);
       regs++;
    }
-
-
-   fputs("</table>\n</div>\n",fp_ou);
-
-   show_info(fp_ou);
-
-   fputs("</body>\n</html>\n",fp_ou);
-
    fclose(fp_in);
+
+   fputs("</table></div>\n",fp_ou);
+   write_html_trailer(fp_ou);
    fclose(fp_ou);
 
    return;
index a5572d47581fe807a6ca766afe7332e2f6853efb..55058ebc200ef9c6752c45e9302ab942a99dd820 100644 (file)
--- a/topuser.c
+++ b/topuser.c
@@ -48,6 +48,7 @@ void topuser(void)
    char ipantes[MAXLEN], nameantes[MAXLEN];
    char sfield[10]="2,2";
    char order[255]="-r";
+   char title[80];
    int  totuser=0;
    int  topcount=0;
    char *s;
@@ -229,33 +230,25 @@ void topuser(void)
       exit(1);
    }
 
-   fprintf(fp_top3, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
-   css(fp_top3);
-   fputs("</head>\n<body class=\"body\">",fp_top3);
-   write_logo_image(fp_top3);
-
-   if(IndexTree == INDEX_TREE_DATE)
-      show_sarg(fp_top3, "../../..");
-   else
-      show_sarg(fp_top3, "..");
-   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_top3);
-   fprintf(fp_top3,"<tr><th class=\"title\">%s</th></tr>\n",Title);
+   snprintf(title,sizeof(title),_("SARG report for %s"),period);
+   write_html_header(fp_top3,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,title);
    fprintf(fp_top3,"<tr><td class=\"header_c\">%s: %s</td></tr>\n",text[89],period);
    fprintf(fp_top3,"<tr><td class=\"header_c\">%s: %s, %s</td></tr>\n",text[104],TopuserSortField,TopuserSortOrder);
    fprintf(fp_top3,"<tr><th class=\"header_c\">%s</th></tr>\n",text[137]);
-   fputs("</table></div>\n",fp_top3);
+   close_html_header(fp_top3);
 
-   fputs("<div align=\"center\"><table cellpadding=\"1\" cellspacing=\"2\">\n",fp_top3);
+   fputs("<div class=\"report\"><table cellpadding=\"1\" cellspacing=\"2\">\n",fp_top3);
    fputs("<tr><td>&nbsp;</td><td>&nbsp;</td></tr>\n",fp_top3);
 
-   if((ReportType & REPORT_TYPE_TOPSITES) != 0 && !Privacy) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"11\"><a href=\"topsites.html\"><font class=\"link\">%s</font></a><font class=\"text\"></font></td></tr>\n",text[119]);
-   if((ReportType & REPORT_TYPE_SITES_USERS) != 0 && !Privacy) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"11\"><a href=\"siteuser.html\"><font class=\"link\">%s</font></a><font class=\"text\"></font></td></tr>\n",text[85]);
-   if(dansguardian_count) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"11\"><a href=\"dansguardian.html\"><font class=\"link\">%s</font></a><font class=\"text\"></font></td></tr>\n",text[128]);
-   if(squidguard_count) fprintf(fp_top3,"<tr><td class=\"link\" colspan=11><a href=\"squidguard.html\"><font class=\"link\">%s</font></a><font class=\"text\"></font></td></tr>\n",text[122]);
-   if ((ReportType & REPORT_TYPE_DOWNLOADS) != 0 && download_count && !Privacy && ndownload) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"11\"><a href=\"download.html\"><font class=\"link\">%s</font></a><font class=\"text\"></font></td></tr>\n",text[125]);
-   if ((ReportType & REPORT_TYPE_DENIED) != 0 && denied_count && !Privacy) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"11\"><a href=\"denied.html\"><font class=\"link\">%s</font></a><font class=\"text\"></font></td></tr>\n",text[118]);
-   if ((ReportType & REPORT_TYPE_AUTH_FAILURES) != 0 && authfail_count && !Privacy) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"11\"><a href=\"authfail.html\"><font class=\"link\">%s</font></a><font class=\"text\"></font></td></tr>\n",text[117]);
-   if(smartfilter) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"11\"><a href=\"smartfilter.html\"><font class=\"link\">%s</font></a><font class=\"text\"></font></td></tr>\n",text[116]);
+   if((ReportType & REPORT_TYPE_TOPSITES) != 0 && !Privacy) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"topsites.html\">%s</a></td></tr>\n",text[119]);
+   if((ReportType & REPORT_TYPE_SITES_USERS) != 0 && !Privacy) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"siteuser.html\">%s</a></td></tr>\n",text[85]);
+   if(dansguardian_count) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"dansguardian.html\">%s</a></td></tr>\n",text[128]);
+   if(squidguard_count) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"squidguard.html\">%s</a></td></tr>\n",text[122]);
+   if ((ReportType & REPORT_TYPE_DOWNLOADS) != 0 && download_count && !Privacy && ndownload) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"download.html\">%s</a></td></tr>\n",text[125]);
+   if ((ReportType & REPORT_TYPE_DENIED) != 0 && denied_count && !Privacy) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"denied.html\">%s</a></td></tr>\n",text[118]);
+   if ((ReportType & REPORT_TYPE_AUTH_FAILURES) != 0 && authfail_count && !Privacy) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"authfail.html\">%s</a></td></tr>\n",text[117]);
+   if(smartfilter) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"smartfilter.html\">%s</a></td></tr>\n",text[116]);
+   if(UserAgentLog[0] != '\0' && useragent_count) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"useragent.html\">%s</a></td></tr>\n",_("Useragent"));
    fputs("<tr><td></td></tr>\n",fp_top3);
 
    if ((ReportType & REPORT_TYPE_TOPUSERS) == 0) {
@@ -320,7 +313,7 @@ void topuser(void)
       if(nacc < 1)
          continue;
       ntopuser = 1;
-      if(TopUsersNum > 0 && topcount >= TopUsersNum) goto final;
+      if(TopUsersNum > 0 && topcount >= TopUsersNum) break;
       tnbytes=nbytes;
       tnelap=elap;
 
@@ -358,10 +351,10 @@ void topuser(void)
          fputs("<td class=\"data2\">",fp_top3);
 #ifdef HAVE_GD
          if(Graphs) {
-            fprintf(fp_top3,"<a href=\"%s/graph_day.png\"><img src=\"%s/graph.png\" border=\"0\" title=\"%s\" alt=\"G\"></a>&nbsp;",user,ImageFile,text[126]);
+            fprintf(fp_top3,"<a href=\"%s/graph_day.png\"><img src=\"%s/graph.png\" title=\"%s\" alt=\"G\"></a>&nbsp;",user,ImageFile,text[126]);
          }
 #endif
-         fprintf(fp_top3,"<a href=\"%s/d%s.html\"><img src=\"%s/datetime.png\" border=\"0\" title=\"%s",user,user,ImageFile,ltext110);
+         fprintf(fp_top3,"<a href=\"%s/d%s.html\"><img src=\"%s/datetime.png\" title=\"%s",user,user,ImageFile,ltext110);
 #ifdef HAVE_GD
          fprintf(fp_top3," %s",text[55]);
 #endif
@@ -402,9 +395,10 @@ void topuser(void)
 
       topcount++;
    }
+   fclose(fp_top1);
+   unlink(top1);
 
    if((TopUserFields & TOPUSERFIELDS_TOTAL) != 0) {
-
       fputs("<tr>",fp_top3);
       if((TopUserFields & TOPUSERFIELDS_NUM) != 0)
          fputs("<td></td>",fp_top3);
@@ -457,29 +451,15 @@ void topuser(void)
       fputs("</tr>\n",fp_top3);
    }
 
-   if(UserAgentLog[0] != '\0') {
-      fputs("<tr><td></td></tr>\n",fp_top3);
-      fputs("<tr><td></td></tr>\n",fp_top3);
-      fputs("<td align=\"left\" colspan=\"8\"><font size=-1><a href=\"useragent.html\">Useragent</a> Report</td>\n",fp_top3);
-   }
-
-   fputs("</table></div>",fp_top3);
-
-   show_info(fp_top3);
-
-final:
-   fclose(fp_top1);
-   unlink(top1);
+   fputs("</table></div>\n",fp_top3);
+   write_html_trailer(fp_top3);
+   fclose(fp_top3);
 
    if((fp_ou=fopen(tusr,"w"))==NULL) {
       fprintf(stderr, "SARG: (topuser) %s: %s\n",text[45],tusr);
       exit(1);
    }
-
    fprintf(fp_ou,"%d\n",totuser);
-
-   fputs("</body>\n</html>\n",fp_top3);
-   fclose(fp_top3);
    fclose(fp_ou);
 
    return;
index 54d1a79c06872aed9095889f5ce135217338ecf0..461d23fdd21a8a55668c1a461b353339ba82b19f 100644 (file)
@@ -89,7 +89,8 @@ void useragent(void)
       }
       buildymd(day,month,year,wdate);
       ndate=atoi(wdate);
-      if (ndate<dfrom || ndate>duntil) continue;
+      if (ndate<dfrom) continue;
+      if (ndate>duntil) break;
       if(totregsl == 1)
          strcpy(idate,data);
       strcpy(fdate,data);
@@ -116,6 +117,7 @@ void useragent(void)
 
       fprintf(fp_ou,"%s\t%s\t%s\n",ip,agent,user);
       user[0]='\0';
+      useragent_count++;
    }
 
    if(debug) {
@@ -153,28 +155,17 @@ void useragent(void)
    if(debug)
       debuga("%s",text[72]);
 
-   fprintf(fp_ht, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
-   css(fp_ht);
-   fputs("</head>\n",fp_ht);
-   fputs("<body class=\"body\">\n",fp_ht);
-   write_logo_image(fp_ht);
-
-   if(IndexTree == INDEX_TREE_DATE)
-      show_sarg(fp_ht, "../../..");
-   else
-      show_sarg(fp_ht,"..");
-   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ht);
-   fprintf(fp_ht,"<tr><th class=\"title\">%s</th></tr>\n",text[105]);
+   write_html_header(fp_ht,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,_("Squid Useragent's Report"));
+   fprintf(fp_ht,"<tr><th class=\"header_c\">%s</th></tr>\n",text[105]);
    fprintf(fp_ht,"<tr><td class=\"header_c\">%s: %s - %s</td></tr>\n",text[89],idate,fdate);
-   fputs("</table></div>\n",fp_ht);
+   close_html_header(fp_ht);
 
-   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ht);
+   fputs("<br><br>\n",fp_ht);
 
-   fputs("</table></div>\n",fp_ht);
-   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ht);
+   fputs("<div class=\"report\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ht);
    fputs("<tr><td>&nbsp;</td><td>&nbsp;</td></tr>",fp_ht);
 
-   fprintf(fp_ou,"<tr><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th></tr>\n",text[98],text[106]);
+   fprintf(fp_ht,"<tr><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th></tr>\n",text[98],text[106]);
 
    while(fgets(buf,sizeof(buf),fp_in)!=NULL) {
       getword_start(&gwarea,buf);
@@ -211,7 +202,6 @@ void useragent(void)
 
    fputs("</table>\n",fp_ht);
    fclose(fp_in);
-   fclose(fp_ou);
 
    sprintf(csort,"sort -t \"\t\" -k 2,2 -o \"%s\" \"%s\"",tmp3,tmp2);
    cstatus=system(csort);
@@ -282,14 +272,9 @@ void useragent(void)
 
    unlink(tmp2);
 
-   if((fp_ht=fopen(hfile,"a"))==NULL) {
-      fprintf(stderr, "SARG: (useragent) %s: %s\n",text[45],hfile);
-      exit(1);
-   }
+   fputs("<br><br>\n",fp_ht);
 
-   fputs("<br/><br/>\n",fp_ht);
-
-   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ht);
+   fputs("<table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ht);
    fprintf(fp_ht,"<tr><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_c\">%%</th></tr>\n",text[106],text[107]);
 
    perc=0.;
@@ -305,12 +290,10 @@ void useragent(void)
 
       fprintf(fp_ht,"<tr><td class=\"data2\">%s</td><td class=\"data\">%d</td><td class=\"data\">%3.2lf</td></tr>\n",gwarea.current,nagent,perc);
    }
-
-   fputs("</table></html>\n",fp_ht);
-   show_info(fp_ht);
-
-   fputs("</table>\n</body>\n</html>\n",fp_ht);
    fclose(fp_in);
+
+   fputs("</table></div>\n",fp_ht);
+   write_html_trailer(fp_ht);
    fclose(fp_ht);
 
    unlink(tmp3);
diff --git a/util.c b/util.c
index 998e8dfa21764287f0b06ec3ce69d347808b4547..109271c4f6f4dc49799dfccc9ed195faa588d281 100644 (file)
--- a/util.c
+++ b/util.c
@@ -1422,28 +1422,48 @@ void show_info(FILE *fp_ou)
 
    if(!ShowSargInfo) return;
    zdate(ftime, sizeof(ftime), DateFormat);
-   fprintf(fp_ou,"<div align=\"center\"><table><tr><td><br><br></td><td class=\"info\">%s <a href='%s'><font class=\"info\">%s-%s</font></a> %s %s</td></tr></table></div>\n",text[108],URL,PGM,VERSION,text[109],ftime);
+   fprintf(fp_ou,"<div class=\"info\">%s <a href='%s'>%s-%s</a> %s %s</div>\n",text[108],URL,PGM,VERSION,text[109],ftime);
 }
 
-void show_sarg(FILE *fp_ou, const char *ind)
+void show_sarg(FILE *fp_ou, int depth)
 {
-   if(ShowSargLogo) fprintf(fp_ou,"<div align=\"center\"><table class=\"logo\">\n<tr><th><a href=\"http://sarg.sourceforge.net\"><img src=\"%s/images/sarg.png\" title=\"SARG, Squid Analysis Report Generator. Logo by Osamu Matsuzaki\" alt=\"Sarg\"></a>&nbsp;Squid Analysis Report Generator</th></tr>\n<tr><th class=\"title\">&nbsp</th></tr>\n</table></div>\n",ind);
+   int i;
+
+   if(!ShowSargLogo) return;
+   fputs("<div class=\"logo\"><a href=\"http://sarg.sourceforge.net\"><img src=\"",fp_ou);
+   for (i=0 ; i<depth ; i++)
+      fputs("../",fp_ou);
+   fputs("images/sarg.png\" title=\"SARG, Squid Analysis Report Generator. Logo by Osamu Matsuzaki\" alt=\"Sarg\"></a>&nbsp;Squid Analysis Report Generator</div>\n",fp_ou);
 }
 
 void write_logo_image(FILE *fp_ou)
 {
    if(LogoImage[0]!='\0')
-      fprintf(fp_ou, "<div align=\"center\"><table class=\"logo\">\n<tr><th><img src=\"%s\" width=\"%s\" height=\"%s\" alt=\"Logo\">&nbsp;%s</th></tr>\n<tr><td height=\"5\"></td></tr>\n</table>\n</div>\n",LogoImage,Width,Height,LogoText);
+      fprintf(fp_ou, "<div class=\"logo\"><img src=\"%s\" width=\"%s\" height=\"%s\" alt=\"Logo\">&nbsp;%s</div>\n",LogoImage,Width,Height,LogoText);
 }
 
-void write_html_header(FILE *fp_ou, const char * ind)
+void write_html_header(FILE *fp_ou, int depth, const char *page_title)
 {
-   fprintf(fp_ou, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
+   //fputs("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n",fp_ou);
+   fputs("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n",fp_ou);
+   fprintf(fp_ou, "<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
+   if (page_title) fprintf(fp_ou,"<title>%s</title>\n",page_title);
    css(fp_ou);
    fprintf(fp_ou,"</head>\n<body style=\"font-family:%s;font-size:%s;background-color:%s;background-image:url(%s)\">\n",FontFace,TitleFontSize,BgColor,BgImage);
    write_logo_image(fp_ou);
-   show_sarg(fp_ou, ind);
-   fprintf(fp_ou,"<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n<tr><th class=\"title\">%s</th></tr>\n</table></div>\n<div align=\"center\"><table cellpadding=\"1\" cellspacing=\"2\">\n<tr><td></td><td></td></tr>\n",Title);
+   show_sarg(fp_ou, depth);
+   fprintf(fp_ou,"<div class=\"title\"><table cellpadding=\"0\" cellspacing=\"0\">\n<tr><th class=\"title_c\">%s</th></tr>\n",Title);
+}
+
+void close_html_header(FILE *fp_ou)
+{
+   fputs("</table></div>\n",fp_ou);
+}
+
+void write_html_trailer(FILE *fp_ou)
+{
+   show_info(fp_ou);
+   fputs("</body>\n</html>\n",fp_ou);
 }
 
 void output_html_string(FILE *fp_ou,const char *str)
@@ -1518,16 +1538,6 @@ void url_module(const char *url, char *w2)
 }
 
 
-void write_html_trailer(FILE *fp_ou)
-{
-   char ftime[128];
-
-   fputs("</table></div>\n",fp_ou);
-   zdate(ftime, sizeof(ftime), DateFormat);
-   show_info(fp_ou);
-   fputs("</body>\n</html>\n",fp_ou);
-}
-
 void version(void)
 {
    printf("SARG Version: %s\n",VERSION);