#!/usr/bin/perl 

# #################################################################################################
# solution_finder.pl

# Cubeware - Frontend
# Bereich: Solution Finder 
# Anzeige Auswahl-Liste nach Rubriken für die Suche
# Ergebnisse gefundener Webseiten anzeigen

# Autor: intellitools - die multimedia schmiede

# Version: 1.0.0 

# ################################################################################################


# ************************************************************
# Benoetigte Bibliotheken
# ************************************************************
require 5.001;

use CWFrGlobal;

use URI::Escape;

use strict;

use CGI qw(-autoload :all);
my $CGI_Objekt = new CGI;
use CGI::Carp qw(fatalsToBrowser);

# ************************************************************
# Config
# ************************************************************

# -----------------------------------------------
# Allgemein
# -----------------------------------------------
my $self_script = '/cgi-bin/solution_finder.pl';
my $templ_name_rahmen = 'sf/solution-finder.html';
#my $templ_name_rahmen = 'bla';
my $templ_name_content = 'solutionfinder_content';


# -----------------------------------------------
# Frontend Cookie definieren
# Immer neue Session-ID fuer Cookie setzen
# Es werden 2 Cookies gesetzt:
# 1. Session-Cookie mit ID auf Session-Daten in DB
# 2. Statisches Cookie fuer Solution-Finder
#    zum einfachen Status-Check ueber Typo3-PHP-Script
# Beide Cookies mit gleicher Laufzeit speichern
# -----------------------------------------------

# Cookie-Name
my $cookie_name = $CWConfig::CW_FR_COOKIE_NAME;
my $cookie_name_sf = $CWConfig::CW_FR_SF_COOKIE_NAME;

# CGI-Cookie Definitionen
my $zufallszahl = int(rand 2000);
my $zeit = time();
my $zufallszahl_zeit = $zufallszahl.$zeit;
my $cookie_value = crypt("$zufallszahl_zeit","cw");
$cookie_value =~ s/[^a-zA-Z0-9]//g;

# Session-Cookie fuer DB
my $cookie = $CGI_Objekt->cookie(
                -NAME       => $cookie_name,
                -VALUE      => $cookie_value,
                #-EXPIRES    => "",
                -EXPIRES    => "+7d", # Laufzeit 7 Tage
                -PATH       => "/",
);

# Status-Cookie Values
# 1 - Solutionfinder aufgerufen
# 2 - Solutionfinder aufgerufen und Sucheergebnisse vorhanden
my $cookie_value_sf = '1';

# ************************************************************
# Initialisierungen
# ************************************************************

# -----------------------------------------------
# CGI-Data
# -----------------------------------------------
my %cgi_data = $CGI_Objekt->Vars();

# Sprache
my $lang = $cgi_data{lang};
if ($lang =~ /en/i) { 
    $lang = 'en';
    
} elsif ($lang =~ /es/i) { 
    $lang = 'es';

} else {
    $lang = 'de';
}

# Array Keyword
@{ $cgi_data{suche_keywords_ary} } = $CGI_Objekt->param('suche_keywords');

    

# -----------------------------------------------
# Content-Template
# -----------------------------------------------
my $templ_content_ref =
    &CWFrGlobal::get_appl_templ_content(
        LANG       => $lang,
        TEMPL_NAME => $templ_name_content,
    );
    
my %templ_content = %$templ_content_ref;

# -----------------------------------------------
# DB-Handler 
# -----------------------------------------------
my $dbh = &DbiLibIT::db_connect_auto();



# -----------------------------------------------
# Allgemein benutzte Vars
# -----------------------------------------------
my $cnt;
my $sel_str;
my $sel_str_debug;
my @sel_ary = ();
my $del_str;
my $do_row_cnt;
my $status_message_templ = '';
my $status_message = '';
my $fehler = 0;
my $fehlertext = '';
my $cnt2;


# -----------------------------------------------
# Session-Cookie und -Daten
# -----------------------------------------------
my $session_daten_ref;
my $session_vorhanden;
my %session_daten;

$session_daten_ref = &CWFrGlobal::session_daten();

# Wenn keine Session vorhanden ist, muss ein Session-Cookie 
# geschrieben werden
if ($session_daten_ref == -1) {
    
    $session_vorhanden = 0;
} else {
    $session_vorhanden = 1; 
    %session_daten = %$session_daten_ref;
}


# ************************************************************
# Aktionen
# ************************************************************  

# ============================================================
# CGI-Param aufbereiten 
# im Modus "suche" und "resetkeywords"
# ============================================================
if ( $cgi_data{aufruf_modus} =~ m/suche/i 
        || $cgi_data{aufruf_modus} =~ m/resetkeywords/i ) {
          
    my $new_cgi_data_ref = &cgi_data_aufbereiten(
                                CGI_DATA => \%cgi_data,
                           );
    %cgi_data = %$new_cgi_data_ref;   
}

# ============================================================
# Bei Aufrufmodus Zuruecksetzen "resetkeywords"
# ============================================================
if ( $cgi_data{aufruf_modus} =~ m/resetkeywords/i ) {
    
    # Suche Keywords loeschen
    
    $cgi_data{'suche_keywords'} = '';
    
    my %zus_session_eintraege = ();

    $zus_session_eintraege{'sf_keywords'} = $cgi_data{'suche_keywords'};

    $session_daten_ref = 
            &CWFrGlobal::session_daten(
                ZUS_SESSION_EINTRAEGE => \%zus_session_eintraege
            );
    %session_daten = %$session_daten_ref;
}

# ============================================================
# Bei Aufrufmodus "suche"
# ============================================================
if ( $cgi_data{aufruf_modus} =~ m/suche/i ) {
    
    # -----------------------------------------------
    # Suche Keywords in Session merken
    # -----------------------------------------------
    my %zus_session_eintraege = ();
            
    $zus_session_eintraege{'sf_keywords'} = $cgi_data{'suche_keywords'};
    
    $session_daten_ref = 
            &CWFrGlobal::session_daten(
                ZUS_SESSION_EINTRAEGE => \%zus_session_eintraege
            );
    
    if ($session_daten_ref == -1) {
        
        $session_vorhanden = 0;
    } else {
        $session_vorhanden = 1; 
        %session_daten = %$session_daten_ref;
    };
}


# ============================================================
# Bei Wiederaufruf der letzen Ergebnisse
# ueber Session-Daten, nur wenn Session vorhanden ist
# ============================================================
if ( $cgi_data{aufruf_modus} !~ m/suche/i 
        && $session_vorhanden == 1) {
    
    # String Keyword zuweisen
    $cgi_data{'suche_keywords'} = $session_daten{var_eintraege}{sf_keywords};
    
    # Array Keywords zuweisen
    my $suche_keywords_string = $cgi_data{'suche_keywords'};
    $suche_keywords_string =~ s/^\:\://;
    $suche_keywords_string =~ s/\:\:$//;
    
    if ($suche_keywords_string !~ /^\s*$/) {
        @{ $cgi_data{suche_keywords_ary} } = split /\:\:/, $suche_keywords_string;
    } else {
        @{ $cgi_data{suche_keywords_ary} } = ();
    }
    
    # Wenn Keywords vorhanden sind
    if ($suche_keywords_string !~ /^\s*$/) {
    
        # Modus im Nachhinein auf "suche" einstellen, um
        # im Abschnitt "Display" die benoetigten Daten aus der DB
        # zu lesen
        $cgi_data{aufruf_modus} = 'suche';
    }
}


# ************************************************************
# Display
# ************************************************************

# ============================================================
# Suchmaske
# ============================================================

# -----------------------------------------------
# Keywords (Solution-Finder Items) aus DB lesen
# -----------------------------------------------
my $title_lang = 'title_' . $lang;
$sel_str = (" select c.$title_lang as cat_title, c.priority as cat_priority,
                     i.$title_lang as item_title, i.*
                from      cw_solution_cat c, cw_solution_item i  
                where     i.deleted = 0
                          and
                          c.uid = i.category
                order by c.priority, c.$title_lang, i.$title_lang
");
    
my @db_auswahl_keywords = &DbiLibIT::db_select( $dbh, $sel_str );


# -----------------------------------------------
# Auswahl-Liste nach Kategorien sortiert bauen
# Die Liste wird n-spaltig aufgebaut
# Pro Spalte wird eine Kategorie abgebildet
# 
# z.B.
# Kategorie 1  | Kategorie 2
#  - Item      |  - Item
#  - Item      |  - Item
# ------------------------
# Kategorie 3  | Kategorie 4
#  - Item      |  - Item
#  - Item      |  - Item
# usw...
# -----------------------------------------------

my $keywords_kat_merken = -1;
my $content_auswahl_keywords = '';
my $keywords_item = '';
my $keywords_kat_start = '';
my $item_checked;
my $anz_items_pro_kat;
my $akt_anz_items_pro_kat;
my $anz_items_spalte_1;
my $leer_item_spalte_2;

for ($cnt = 0; $cnt < @db_auswahl_keywords; $cnt++) {
    
    # Bei Kategorie-Wechsel
    if ($db_auswahl_keywords[$cnt]{'category'} != $keywords_kat_merken) {
        
        # Start Kategorie
        $keywords_kat_start = $templ_content{KEYWORDS_START_KAT};
        $keywords_kat_start =~ s/\{KEYWORD_KAT_NAME\}/$db_auswahl_keywords[$cnt]{'cat_title'}/;
        $content_auswahl_keywords .= $keywords_kat_start;
        
        
        # Kategorie merken
        $keywords_kat_merken = $db_auswahl_keywords[$cnt]{'category'};
        
        # +++++++++++++++++++++++++++++++++++
        # Anzahl Items pro Kategorie checken
        # +++++++++++++++++++++++++++++++++++
        
        $anz_items_pro_kat = 1;
        
        for ($cnt2 = $cnt + 1; $cnt2 < @db_auswahl_keywords; $cnt2++) {
            
            # Wenn Kategorie gleich, dann Items hochzaehlen
            if ($db_auswahl_keywords[$cnt2]{'category'} == $keywords_kat_merken) {
                $anz_items_pro_kat++;
            
            # ansonsten Schleife abbrechen
            } else {
                last;
            }
        }
        
        # Items werden in 2-spaltigen Layout dargestellt
        # daher Anzahl der 1. Spalte definieren
        
        if ($anz_items_pro_kat < 2) {
            $anz_items_spalte_1 = 1;
            
        } else {
            
            $anz_items_spalte_1 = sprintf("%d", ($anz_items_pro_kat / 2));
            
            if ( ($anz_items_pro_kat % 2) > 0) {
                $anz_items_spalte_1++;
                $leer_item_spalte_2 = 1;
            } else {
                $leer_item_spalte_2 = 0;
            
            }
        }
        
        # Aktuelle Anzahl Items pro Kategorie auf 1 initialisieren
        $akt_anz_items_pro_kat = 1;
    }
    
    # Start Item-Spalte, wenn neue Spalte bei neuer Kategorie
    # und neue Spalte innerhalb der Kategorie
    if ($akt_anz_items_pro_kat == 1 
            || $akt_anz_items_pro_kat == $anz_items_spalte_1 + 1) {
            
        $content_auswahl_keywords .= $templ_content{KEYWORDS_START_SPALTE};
    }
    
    # ++++++++++++++++++++++++++++++++
    # Item-Definition und Settings
    # ++++++++++++++++++++++++++++++++
    
    $keywords_item = $templ_content{KEYWORDS_ITEM};
    $keywords_item =~ s/\{KEYWORD_ID\}/$db_auswahl_keywords[$cnt]{'uid'}/;
    $keywords_item =~ s/\{KEYWORD_NAME\}/$db_auswahl_keywords[$cnt]{'item_title'}/;
    
    # Checken nach Vorauswahl Item
    $item_checked = '';
    if ($cgi_data{'suche_keywords'} =~ /\:\:$db_auswahl_keywords[$cnt]{'uid'}\:\:/) {
        $item_checked = 'checked';
    }
    $keywords_item =~ s/\{CHECKED\}/$item_checked/;
    
    # Item Ende, wenn keine neue Kategorie beim nächsten Schleifendurchlauf
    # und keine neue Spalte innerhalb der Kategorie
    if ( ( ($cnt + 1) < @db_auswahl_keywords) 
         && $db_auswahl_keywords[$cnt + 1]{'category'} == $keywords_kat_merken 
         && $akt_anz_items_pro_kat < $anz_items_spalte_1) {
        
        $keywords_item .= $templ_content{KEYWORDS_ENDE_ITEM}
    }
    
    $content_auswahl_keywords .= $keywords_item;
    
    # Leeres Item-Element am Ende der 2. Spalte
    if ($leer_item_spalte_2 == 1
            && $akt_anz_items_pro_kat == $anz_items_pro_kat) {
        $content_auswahl_keywords .= $templ_content{KEYWORDS_LEER_ITEM};
    }
    
    # Ende Item-Spalte, wenn neue Spalte innerhalb der Kategorie
    # oder letztem Item-Element innerhalb der Kategorie
    if ($akt_anz_items_pro_kat == $anz_items_spalte_1
            || $akt_anz_items_pro_kat == $anz_items_pro_kat) {
            
        $content_auswahl_keywords .= $templ_content{KEYWORDS_ENDE_SPALTE};
    }
        
    # Ende Kategorie
    if ($akt_anz_items_pro_kat == $anz_items_pro_kat) {
        $content_auswahl_keywords .= $templ_content{KEYWORDS_ENDE_KAT};
    }
    
    $akt_anz_items_pro_kat++;
    
}

# ============================================================
# Suchergebnisse
# Nur wenn Aufruf-Modus "Suche" gesetzt ist
# ============================================================
my $content_ergebnisliste;
my @db_ergebnisse;

if ( $cgi_data{aufruf_modus} =~ m/suche/i ) {
    
    # -----------------------------------------------
    # Where-Klausel 
    # -----------------------------------------------
    my $where_klausel = '';
    
    # +++++++++++++++++++++++++++++++++
    # Auswahl Keywords
    # +++++++++++++++++++++++++++++++++
    my @suche_keywords = @{ $cgi_data{suche_keywords_ary} };
    
    # Wenn nicht angegeben, Dummy setzen, damit nichts gefunden wird 
    if (scalar(@suche_keywords) < 1) {

        push @suche_keywords, 'nichts-gefunden';
    }
    
    my $where_klausel_keywords = ' ( ';    
    
    for ($cnt = 0; $cnt < scalar(@suche_keywords); $cnt++) {

        if ($cnt > 0) {
            $where_klausel_keywords .= ' OR ';        
        }

        $where_klausel_keywords 
            .= " FIND_IN_SET(\'$suche_keywords[$cnt]\',sfid) ";        
    }    
    $where_klausel_keywords .= ' ) ';
    
    # +++++++++++++++++++++++++++++++++
    # Auswahl Sprache
    # +++++++++++++++++++++++++++++++++
    
    my $lang_id;
    
    # Sprachen-ID aus DB lesen
    $sel_str = (" select uid, title
                    from cw_solution_lang  
                    where   deleted = 0
                            and
                            title like \'$lang\'
    ");
        
    my @db_cw_sprache = &DbiLibIT::db_select( $dbh, $sel_str );
    
    if (scalar(@db_cw_sprache) > 0) {
        $lang_id = $db_cw_sprache[0]{uid};
    } 
    
    # Falls nicht vorhanden auf default 0 setzen
    if ($lang_id < 1) {
        $lang_id = 0;
    }
    
    my $where_klausel_lang = " sflang = $lang_id "; 
    
    # +++++++++++++++++++++++++++++++++
    # Where-Klausel zusammenbauen
    # +++++++++++++++++++++++++++++++++    
    $where_klausel = " $where_klausel_keywords
                           and
                           $where_klausel_lang ";
    
    # -----------------------------------------------
    # Daten aus DB lesen
    # -----------------------------------------------
    
    # Um nur die aktuelle Online-Version der Link-Seiten zu holen:
    # Parent ID 'pid' darf nicht -1 sein
    #
    # ID der Seite 'uid' muss gleich Orginal ID der Seite 't3ver_oid' sein
    # wird leider beim Neuanlegen der Seite in Typo3 falsch
    # initialisiert, deshalb kann es nicht verwendet werden
    
    # sfrid ist die ID des SF Ergebnis-Bereiches 
    
    $sel_str = (" select sftitle, sfimage, sfshort, sfid, sfrid, sflang,
                         uid, pid, t3ver_oid, t3ver_id
                    from pages  
                    where   deleted = 0
                            and pid != -1 
                            and hidden = 0
                            # and uid = t3ver_oid
                            and $where_klausel
                    order by sfrid desc
    ");
    $sel_str_debug = $sel_str;
    
    @db_ergebnisse = &DbiLibIT::db_select( $dbh, $sel_str );
    
    # Weitere Verarbeitung der Liste, nur wenn was gefunden wurde
    if ( scalar(@db_ergebnisse) > 0 ) {
    
        # -----------------------------------------------
        # Ergebnis-Bereiche und Anzeige-Reihenfolge
        # fuer Bereich-Sortierung aus DB lesen
        # und in Parameter-Liste ergaenzen
        # -----------------------------------------------
        
        # Ergebnis-Bereiche aus DB lesen
        my $eb_title_lang = 'title_' . $lang;
        $sel_str = (" select uid, $eb_title_lang as title, priority
                            from cw_solution_result
                            where deleted = 0
            ");
        my @db_cw_solution_result_ary = &DbiLibIT::db_select( $dbh, $sel_str );
        
        # als Hash aufbereiten
        my %db_ergebnis_bereiche = ();
        
        for ($cnt = 0; $cnt < scalar(@db_cw_solution_result_ary); $cnt++) {
            
            $db_ergebnis_bereiche{"$db_cw_solution_result_ary[$cnt]{uid}"} 
                = { name => $db_cw_solution_result_ary[$cnt]{title},
                    folge => $db_cw_solution_result_ary[$cnt]{priority} };
        }
        
        # Ergebnis-Bereiche Parameter in Liste ergaenzen
        for ($cnt = 0; $cnt < scalar(@db_ergebnisse); $cnt++) {
            
            $db_ergebnisse[$cnt]{bereich_name} =
                    $db_ergebnis_bereiche{"$db_ergebnisse[$cnt]{sfrid}"}{name};
            
            $db_ergebnisse[$cnt]{bereich_folge} =
                    $db_ergebnis_bereiche{"$db_ergebnisse[$cnt]{sfrid}"}{folge};
        }
        
        # Liste sortieren nach eingestellter Sortierung der Ergebnis-Bereiche
        my @db_ergebnisse_sort = sort { 
                                        $$a{bereich_folge} <=> $$b{bereich_folge} 
                                            ||
                                        $$a{bereich_name} cmp $$b{bereich_name} 
                                      } @db_ergebnisse;
        
        @db_ergebnisse = @db_ergebnisse_sort;
        
        # -----------------------------------------------
        # Parameter in Liste ergaenzen und aufbereiten
        # -----------------------------------------------
        my $seiten_bereich_merken = -100;

        for ($cnt = 0; $cnt < scalar(@db_ergebnisse); $cnt++) {

            # +++++++++++++++++++++++++++++++++++++++++
            # Extras beim Wechsel Seiten-Bereich
            # +++++++++++++++++++++++++++++++++++++++++
            $db_ergebnisse[$cnt]{insert_bereich_start} = '';
            $db_ergebnisse[$cnt]{insert_bereich_ende} = '';

            if ($db_ergebnisse[$cnt]{sfrid} != $seiten_bereich_merken) {

                # Bereich Ende
                # +++++++++++++++++++++++++++++++++++++++++
                if ($cnt > 0) {
                    $db_ergebnisse[$cnt - 1]{insert_bereich_ende} = 
                        $templ_content{LISTE}{INSERT_BEREICH_ENDE};
                }

                # Bereich Start
                # +++++++++++++++++++++++++++++++++++++++++
                $db_ergebnisse[$cnt]{insert_bereich_start} =
                    $templ_content{LISTE}{INSERT_BEREICH_START};
            } 

            # Bereich Ende beim letzten Item
            # +++++++++++++++++++++++++++++++++++++++++
            if ($cnt + 1 == @db_ergebnisse) {
                $db_ergebnisse[$cnt]{insert_bereich_ende} = 
                    $templ_content{LISTE}{INSERT_BEREICH_ENDE};
            }
            
            $seiten_bereich_merken = $db_ergebnisse[$cnt]{sfrid};
            
    
            # Item Break
            $db_ergebnisse[$cnt]{insert_item_break}  = '';
            if ( ( ($cnt + 1) < @db_ergebnisse) 
                 && $db_ergebnisse[$cnt + 1]{sfrid} == $seiten_bereich_merken) {

                $db_ergebnisse[$cnt]{insert_item_break} 
                    = $templ_content{LISTE}{INSERT_ITEM_BREAK};
            }
            
            # +++++++++++++++++++++++++++++++++++++++++
            # Sonstige Params aufbereiten
            # +++++++++++++++++++++++++++++++++++++++++
            
            # Titel
            $db_ergebnisse[$cnt]{titel} = $db_ergebnisse[$cnt]{sftitle};
            
            # Text
            $db_ergebnisse[$cnt]{text} = $db_ergebnisse[$cnt]{sfshort};
            
            # Bild
            $db_ergebnisse[$cnt]{bild_url} = '';
            if ($db_ergebnisse[$cnt]{sfimage} !~ /^\s*$/) {
                $db_ergebnisse[$cnt]{bild_url} = 
                    $CWGlobal::http_sf_bilder . $db_ergebnisse[$cnt]{sfimage};
            }
            
            # Seiten-Url
            $db_ergebnisse[$cnt]{seite_url} = 
                $CWConfig::http_document_root . '/index.php?id=' . $db_ergebnisse[$cnt]{uid};
        }
    }
    
    # Status-Cookie auf "2 - fuer Suche-Ergebnisse vorhanden" setzen,
    # wenn Ergebnisse da sind
    
    # [-- INFO --] Hier koennte dann auch noch ein Session-Param 
    # [-- INFO --] mit der Anzahl der Suchergebnisse geschrieben werden
    
    if ( scalar(@db_ergebnisse) > 0 ) {
        $cookie_value_sf = '2';
    }
    
    # -----------------------------------------------
    # Listen-Content zusammenbauen
    # -----------------------------------------------
    $content_ergebnisliste =
        &CWGlobal::template_list_replace (     
            TEMPLATE    => \%{ $templ_content{LISTE} },
            LIST_ARRAY  => \@db_ergebnisse,
            LEER_OHNE_HEADER => 1,
        );


        
} # Ende Ergebnisliste nur bei Aufrufmodus "suche"


# -----------------------------------------------
# Content-Frame zusammenbauen
# -----------------------------------------------
my $content_frame = 
    &CWGlobal::template_replace ( 
        TEMPLATE => $templ_content{BASIS},
        VAR_HASH => { 
              STATUS_MESSAGE  => $status_message,
              LANG => $lang,
              SELF_SCRIPT => $self_script,
              KEYWORDS_AUSWAHL_LISTE => $content_auswahl_keywords,
              ERGEBNIS_LISTE => $content_ergebnisliste,
                    }
    );


# -----------------------------------------------
# Content-Header ausgeben
# -----------------------------------------------

# Status-Cookie definieren
my $cookie_sf = $CGI_Objekt->cookie(
                -NAME       => $cookie_name_sf,
                -VALUE      => $cookie_value_sf,
                #-EXPIRES    => "",
                -EXPIRES    => "+7d", # Laufzeit 7 Tage
                -PATH       => "/",
);

# Noch kein Session-Cookie vorhanden, dann 
# Session-Cookie und Status-Cookie schreiben
if ($session_vorhanden == 0) {
    print $CGI_Objekt->header(  -COOKIE  => [$cookie,$cookie_sf],
                                -expires => '-1d' );

# Session-Cookie bereits vorhanden, dann
# nur Status-Cookie schreiben
} else {
    print $CGI_Objekt->header(  -COOKIE  => [$cookie_sf],
                                -expires => '-1d' );

}

# -----------------------------------------------
# Rahmen-Template holen
# -----------------------------------------------
my $templ_rahmen =
    &CWFrGlobal::get_appl_templ_rahmen(
        LANG       => $lang,
        TEMPL_NAME => $templ_name_rahmen,
        SF_SESSION_COOKIE_VALUE  => 'dummywert',
        SF_STATUS_COOKIE_VALUE   => $cookie_value_sf,
    );
    
# -----------------------------------------------
# Rahmen und Content zusammenbauen
# -----------------------------------------------
my $content = 
    &CWGlobal::template_replace ( 
        TEMPLATE => $templ_rahmen,
        VAR_HASH => { 
                      CGI_BEREICH      => $content_frame,
                    }
    );
     
     
# Datenbank-Handle schliessen
&DbiLibIT::db_disconnect_auto($dbh);



# -----------------------------------------------
# Content ausgeben
# -----------------------------------------------

print $content;

#print '<br><br><h2>Debugging Info</h2><hr><br>';
#print $sel_str_debug;

#my $dumper_obj = Data::Dumper->new([\@db_ergebnisse], [qw(*db_ergebnisse)]);
#$dumper_obj->Indent(0);
#$dumper_obj->Pad('<br>');
#print $dumper_obj->Dump;


#my $dumper_obj2 = Data::Dumper->new([\%session_daten], [qw(*session_daten)]);
#$dumper_obj2->Indent(0);
#$dumper_obj2->Pad('<br>');
#print '<br><br>' . $dumper_obj2->Dump;

#print '<br><br>' . @db_auswahl_keywords;

#print '<br><br>' . @db_ergebnisse;


# ============================================================
# cgi_data_aufbereiten
# Bereitet verschiedene CGI-Parameter (Checkboxen, Selects)
# fuer den Wiederaufruf des Formulars auf
# ============================================================
sub cgi_data_aufbereiten {

    # -----------------------------------------------
    # Parameter-Uebergabe und Variablen-Definitionen
    # -----------------------------------------------
    my %args = (
        CGI_DATA        => {},
        @_
    );
    
    my $cgi_data_ref = $args{CGI_DATA};
    my %cgi_data = %$cgi_data_ref;
    my $cnt;
    
    # -----------------------------------------------
    # Daten aus Formular aufbereiten
    # -----------------------------------------------    
    
               
    # ++++++++++++++++++++++++++++++++++++++++++
    # Keywords - Optionen
    # ++++++++++++++++++++++++++++++++++++++++++
    my @keywords = @{ $cgi_data{suche_keywords_ary} };

    if (scalar(@keywords) < 1) {
       $cgi_data{'suche_keywords'} = '';
    } else {
       $cgi_data{'suche_keywords'} = join '::', @keywords;
       $cgi_data{'suche_keywords'} = '::' . $cgi_data{'suche_keywords'} . '::';    
    }
        
    # -----------------------------------------------
    # Return CGI-Data
    # -----------------------------------------------
    return \%cgi_data;

}


# ************************************************************
# Exit
# ************************************************************
exit;

