#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
############################################################################
#
#   Programm: cms_ausgabe.pl
#   Datum:    21.10.2001
#
#   (c) Klaus Tucher 
#       T&B COMPUTER
#       Wehrstraße 15
#       73230 Kirchheim / Teck
# 
#       Anzeige eines Verzeichnisses
# 
# --------------------------------------------------------------------------
# Ä N D E R U N G S P R O T O K O L L
# ==========================================================================
# 28.10.03 $kt Vorschaufunktion (Änderungsvermerk //Vorschau )
# 
# 
############################################################################

# Libraries einlesen
# ==================
require "./pathinfo.cfg" || die "cms_ausgabe.pl: pathinfo.cfg nicht gefunden";
require "$DocumentRoot/$CmsDir/cms_lib.pl"  || die "cms_ausgabe.pl: $CmsDir/cms_lib.pl nicht gefunden!";

&parse_form;

# -------------------------------------------------------------------------------------
# Falls semantische Links (Aufruf HTML-Dateien) verwendet werden, muss der Request erst 
# umgesetzt werden
# Dateiname=Verzeichnis; Separator '--' trennt Verzeichnissebenen
# -------------------------------------------------------------------------------------

if ($FORM{'request'}) {

   my ($Verzeichnis,$Parameter)=split(/\?/,$FORM{'request'});
   $Verzeichnis=~s/.*\///;
   $Verzeichnis=~s/\.html//;

   if ($Verzeichnis=~/--shopcategory_(.*)/) { 
      $FORM{'Ext_Artikelgruppe'}=$1;
      $Verzeichnis=~s/--shopcategory_.*//;
      }
   if ($Verzeichnis=~/--shopitem_(.*)/) { 
      $FORM{'ArtikelNr'}=$1;
      $FORM{'Action'}='DetailArtikel';
      $Verzeichnis=~s/--shopitem_.*//;
      }

   my @tmpV=split(/--/,$Verzeichnis);

   foreach (@tmpV) {
# Umlaute werden schon bei der Generierung ersetzt
#      s/ä/ae/g;
#      s/ö/oe/g;
#      s/ü/ue/g;
#      s/Ä/Ae/g;
#      s/Ö/Oe/g;
#      s/Ü/Ue/g;
#      s/ß/ss/g;
      s/\W//g;
      }
   
   $FORM{'Verzeichnis'}=join('/',@tmpV);
   if ($Verzeichnis eq 'index') {$FORM{'Verzeichnis'}='';} # Startseite

   my @Params=split(/,/,$Parameter);
   foreach (@Params) {
      ($p,$v)=split(/:/);
      $FORM{$p}=$v;
      }

   # Semantische Links gehen immer ins Echtsystem!
   if (!$FORM{'Ausgabemodus'}) {$FORM{'Ausgabemodus'}='life';}
   }
# -------------------------------------------------------------------------------------
# Ende Interpretation des Requests
# -------------------------------------------------------------------------------------

$ServerAuthentification = 'no';

require "$DocumentRoot/$ConfigDir/medialist.cfg"; 
require "$DocumentRoot/$ConfigDir{$FORM{'Mandant'}}/cms.cnf";
require "$DocumentRoot/$CmsDir/cms_aus_lib.pl";
eval {
require "$DocumentRoot/$LocalThemeDir/Aktuelles_Design.theme";
};

# --- Schnittstelle: User-eigene Farbdefinitionen -->
eval {
  require "$DocumentRoot/$UserDataDir/$FORM{'Benutzer'}.theme";
  };


$SprachExt='';
if ($Installed_Options{'Fremdsprachen'}) {
   if (-e "$DocumentRoot/$ConfigDir{$FORM{'Mandant'}}/sprachen.cnf") {
      eval {require "$DocumentRoot/$ConfigDir{$FORM{'Mandant'}}/sprachen.cnf";};
         ($Ausgabemodus,$FORM{'Sprache'})=split(/\,/,$FORM{'Ausgabemodus'});
      }

   if ($FORM{'Sprache'} ne '' 
       && $FORM{'Sprache'} ne $Defaultsprache) {
      $SprachExt="\.$FORM{'Sprache'}";
      }
   else {
      $SprachExt="";
      $FORM{'Sprache'}  ="";
      }
   }

if (($FORM{'Ausgabemodus'}=~/^life/ || $FORM{'Ausgabemodus'}=~/^barrierefrei/)
    && !$FORM{'Newsletter'} && !$FORM{'HTML_Ausgabe'}) {
    $ContentDir =$ContentDirLive  if ($ContentDirLive);
    $CssDir     =$CssDirLive      if ($CssDirLive);
    $MenuDir    =$MenuDirLive     if ($MenuDirLive);
    $TemplateDir=$TemplateDirLive if ($TemplateDirLive);
    }

# Errorhandling bei nicht existierender Seite
if (!-e "$DocumentRoot/$ContentDir/$FORM{'Verzeichnis'}") {
   $FORM{'Suchbegriff'} = $FORM{'Verzeichnis'};
   $FORM{'Suchbegriff'} =~s /\// /g;
   if (-e "$DocumentRoot/$ContentDir/$ParserInit{'Error_404'}") {
      $FORM{'Verzeichnis'} = $ParserInit{'Error_404'};
      }
   else {
      $FORM{'Verzeichnis'} = "";
      }
   }

if ($FORM{'Ausgabemodus'}=~/^barrierefrei/) {
   if (-e "$DocumentRoot/$ConfigDir{$FORM{'Mandant'}}/barrierefrei.cnf") {
      require "$DocumentRoot/$ConfigDir{$FORM{'Mandant'}}/barrierefrei.cnf";
      }

   @Barrierefrei_Options=split(/\,/,$FORM{'Ausgabemodus'});
   my $Ausgabemodus = shift (@Barrierefrei_Options);
   $FORM{'Sprache'}   = shift (@Barrierefrei_Options);

   my $ParamNr = 0;
   my $an,$Linktext,$Dummy,$ParamString;
   my @tmp;
   @Barrierefrei_Stylesheets=();
   foreach (@BF_Parameter) {
      $Barrierefrei_Stylesheet = $StyleSheetRumpf . '_';
      my ($BF_Marke,$BF_Flag1,$BF_Flag2) = split(/\|/,$BF_Parameter[$ParamNr]);
      $Linktext=$BF_Flag1;
      if ($Barrierefrei_Options[$ParamNr] eq '1') {
         $an='1';
         $Linktext=$BF_Flag2;
         }
      else {
         $an='0';
         $Barrierefrei_Options[$ParamNr] ='0';
         }
      for (my $i=0;$i<$ParamNr;$i++) {
         $Barrierefrei_Stylesheet .= '_';
         }
      if ($ParamNr ne $StyleSheetIndex) {
         $Barrierefrei_Stylesheet .= $an;
         push(@Barrierefrei_Stylesheets,"$Barrierefrei_Stylesheet\.css");
         }
      elsif ($Barrierefrei_Options[$StyleSheetIndex] ne '0') {
         push(@Barrierefrei_Stylesheets,"$StyleSheetRumpf\.css");
         }

      @tmp = split(/\,/,$FORM{'Ausgabemodus'});
      $Dummy=shift(@tmp);
      $Dummy=shift(@tmp);
      my $ParamString = '';
      if ($tmp[$ParamNr] eq '1') {$tmp[$ParamNr]='0';}
      else {$tmp[$ParamNr]='1';}
      $ParamString=join(',' , @tmp);

      $Barrierefrei_Link{$BF_Marke} = "<a href=\"/$CmsDir/cms_ausgabe.pl?Ausgabemodus=barrierefrei,$FORM{'Sprache'},$ParamString&Verzeichnis=$FORM{'Verzeichnis'}&Mandant=$FORM{'Mandant'}&Benutzer=$FORM{'Benutzer'}&Passwort=$FORM{'Passwort'}&SessionID=$FORM{'SessionID'}\" accesskey=\"" . substr($Linktext,0,1) . "\">$Linktext</a>";
      $ParamNr++;
      }
   }

&hole_Datum;
&Lese_Ereignisse;

# Ausgabe eröffnen
# ================
$|=1;


$Param_Verzeichnis = $FORM{'Verzeichnis'};
$Parameter{'Seitenpfad'} = $FORM{'Verzeichnis'};


# Statisches HTML
if ($FORM{'Newsletter'}) {
   require "$DocumentRoot/$ConfigDir{$FORM{'Mandant'}}/newsletter.cnf";
   &Erlaubte_Verzeichnisse;
   $HTMLDAT = "$DocumentRoot/$NewsletterDir/$FORM{'Newsletter'}";
### BAUSTELLE
   &openfile (HTML,">$HTMLDAT");
   $FORM{'Verzeichnis'}="$Newsletter_Contents/$FORM{'Newsletter'}";
   $Param_Verzeichnis = $FORM{'Verzeichnis'};
   }

elsif (!$no_header) {

   %WbCookie=();
#$testaus.="get $ENV{'HTTP_COOKIE'}<br>";
   if ($ENV{'HTTP_COOKIE'} ne '') {
      foreach ( split /\s*;\s*/, $ENV{'HTTP_COOKIE'} ) {
#$testaus.="Analyze: $_<br>";
         my ($name, $value) = split /=/;
         $name =~ tr/+/ /;
         $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

         $value =~ tr/+/ /;
         $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

         $WbCookie{$name}=$value;
#$testaus.="get C $name=$value<br>";
         }

      } # Wenn Cookies

   $WbCookie{'WEBIOS_Ads'} = "1";

   # ----------------------------------
   # +++ Nur für den Shop relevant: +++
   # ----------------------------------


   if ($FORM{'ArtikelNr'} ne '') {
      # Artikelhistorie: Hier werden aufgerufene Artikelnummern in einem Cookie gespeichert.
      $WbCookie{'WEBIOS_ArtHist'} =~s/\:$FORM{'ArtikelNr'}\://;
      $WbCookie{'WEBIOS_ArtHist'} .= "\:$FORM{'ArtikelNr'}";
      $WbCookie{'WEBIOS_ArtHist'} =~s/^\://;

#      # Abgegebene Artikelbewertungen (Verhinderung von Dubletten)
#      if ($WbShp_LfdNr ne '') {
#         $WbCookie{'WEBIOS_Shp_Feedback'} =~s/\:$FORM{'ArtikelNr'}-$WbShp_LfdNr\://;
#         $WbCookie{'WEBIOS_Shp_Feedback'} .= ":$FORM{'ArtikelNr'}-$WbShp_LfdNr";
#         }
      }

      
   use CGI::Cookie;
   $WbCookie = "Set-Cookie: ";
   foreach $cname (sort keys %WbCookie) {
#$testaus.="set C $cname=$WbCookie{$cname}<br>";

      my $Cookie = new CGI::Cookie(
                        -name    => "$cname", 
                        -value   => "$WbCookie{$cname}",
                        -expires => "+1d");
      $WbCookie .= "$Cookie ; ";
      }

   $WbCookie =~s / \; $//;
#$testaus.="set $WbCookie";
   print "Content-type: text/html\n$WbCookie\n\n";
#print "$testaus";
   }

($Bereichsverzeichnis) = split(/\// , $FORM{'Verzeichnis'});
$Bereichsname = $Verzeichnisse{$Bereichsverzeichnis};
@tmp = split(/ *-> */,$Bereichsname);
$Bereichsname = pop @tmp;

&verzeichnis_template($Param_Verzeichnis);


$Template = $FORM{'Template'} || $Template || $Standardtemplate;

# Zugriffszähler
# --------------
if (&installed('cms/cms_counter.pl')) {
   &Increment_Counter;
   }

# Browse - and - Edit
# -------------------
$Browse_Edit_Flag = "";
if ($FORM{'Benutzer'} ne "" 
    && $Rechte ne 'Gast'
    && $FORM{'Ausgabemodus'}!~/^life/) { 
    &Erlaubte_Verzeichnisse;
    my $Verzeichnis_erlaubt='no';

    foreach $Verzeichnis(@Erlaubte_Verzeichnisse) {
       chomp ($Verzeichnis);
       if ($Verzeichnis eq $FORM{'Verzeichnis'}) {$Verzeichnis_erlaubt = "yes";}
       }

    if ($Verzeichnis_erlaubt eq "yes") {$Browse_Edit_Flag = "yes";}
    }
# Ende Browse - and - Edit

# -------------------------
# 29.09.2002 -- Linkmanager
# -------------------------
undef $Linkmanager;
$Linkmanager = &installed('cms/linkman.pl');
@glob_links=();
if (&openfile (LNK, "<$DocumentRoot/$ContentDir/links.lnk")) {
   while ($_=<LNK>) {
      &GlDefineLink("$_");
      }
   &closefile (LNK);
   }
@seiten_links = ();
if (&openfile (LNK, "<$DocumentRoot/$ContentDir/$FORM{'Verzeichnis'}/seitenlinks.lnk")) {
   while ($_=<LNK>) {
      &GlDefineLink("$_");
      }
   &closefile (LNK);
   }

&lese_Template ("$Template");
&AusgabeMain('parseDir');

# Statisches HTML
# BAUSTELLE
if ($FORM{'Newsletter'}) {
   &closefile (HTML);
   }


1;


sub Increment_Counter {
   my $Counter=1;
   local *CNTR;
   my $counterfile = 'counter' . substr($heute,6,4) . substr($heute,3,2) . '.cntr';

   if (open (CNTR, "<$DocumentRoot/$ContentDir/$FORM{'Verzeichnis'}/$counterfile")) {
      $Counter=<CNTR> || 0;
      close (CNTR);
      $Counter++;
      }

   if (open (CNTRNEU, ">$DocumentRoot/$ContentDir/$FORM{'Verzeichnis'}/$counterfile\.neu")) {
      print CNTRNEU $Counter; 
      close (CNTRNEU);

      rename "$DocumentRoot/$ContentDir/$FORM{'Verzeichnis'}/$counterfile\.neu" , "$DocumentRoot/$ContentDir/$FORM{'Verzeichnis'}/$counterfile";

      }
   }

