<?
require_once(__DIR__ . '/../../vendor/autoload.php');
use Smalot\PdfParser\Parser;
// use React\EventLoop\Factory;
// use React\Promise\Promise;
use Throwable;
function dcBasicAuth() {
    if (isset($_SERVER['HTTP_HOST'])) {

        $host_names = explode(".", $_SERVER['HTTP_HOST']);
        $bottom_host_name = $host_names[count($host_names)-2] . "." . $host_names[count($host_names)-1];

        if ($bottom_host_name === getenv('BASIC_AUTH_DOMAIN')) {
            $authUser = array(
                getenv('BASIC_AUTH_USER_INTERNAL') => getenv('BASIC_AUTH_USER_PASSWORD_INTERNAL'),
                getenv('BASIC_AUTH_USER_EXTERNAL') => getenv('BASIC_AUTH_USER_PASSWORD_EXTERNAL')
            );
            $realm = "Restricted area";
            if (!isset($_SERVER['PHP_AUTH_USER'])) {
                showBasicAuth($realm);
            }
            if (!isset($authUser[$_SERVER['PHP_AUTH_USER']]) || !isset($_SERVER['PHP_AUTH_PW'])) {
                showBasicAuth($realm);
            }
            if ($authUser[$_SERVER['PHP_AUTH_USER']] !== $_SERVER['PHP_AUTH_PW']) {
                showBasicAuth($realm);
            }
        }
    }
}

/**
 * @param $realm
 */
function showBasicAuth($realm): void
{
    header('WWW-Authenticate: Basic realm="'.$realm.'"');
    header('HTTP/1.0 401 Unauthorized');
    die();
}
function encryptId($id)
{
    $encryptedId = base64_encode($id . "EC1ibm38FI53cxmSnQUi");
    return $encryptedId;
}

// Entschlüsselt eine zuvor verschlüsselte ID, um ihre ursprüngliche Form wiederherzustellen.
function decryptId($encryptedId)
{
    $decryptedId = base64_decode($encryptedId);
    $id = str_replace("EC1ibm38FI53cxmSnQUi", "", $decryptedId);
    return $id;
}
//mysqli_result analog zu mysql_result
function mysqli_result( $res, $row = 0, $col = 0 ) {
    if ($row >= 0 && @mysqli_num_rows($res) > $row) {
        @mysqli_data_seek($res, $row);
        $resrow = @mysqli_fetch_row($res);
        if (isset($resrow[$col])) {
            return $resrow[$col];
        }
    }
    return FALSE;
}

// Verbindung mir der Datenbank herstellen
function db_connect() {
    $servername = $GLOBALS['myservername'];
    $login = $GLOBALS['mylogin'];
    $pass = $GLOBALS['mypass'];
    $db = $GLOBALS['mydb'];

    $GLOBALS['mysql_con'] = mysqli_connect($servername, $login, $pass) or die (mysqli_error($GLOBALS['mysql_con']) . " - Keine Verbindung hergestellt!");
    @mysqli_select_db($GLOBALS['mysql_con'], $db) or die (mysqli_error($GLOBALS['mysql_con']) . " - Keine Verbindung hergestellt!");
    @mysqli_query($GLOBALS['mysql_con'], "set character set 'utf8';");
    @mysqli_query($GLOBALS['mysql_con'], "set names 'utf8';");

    $pdo = new PDO('mysql:host='.$servername.';dbname='.$db, $login, $pass);
    $GLOBALS['pdo_conn'] = $pdo;
}

// Globales führen der Reihenfolge in der Felder angewählt werden
function tabcounter() {
    $counter = $GLOBALS["tabcounter"];
    $GLOBALS["tabcounter"]++;
    return $counter;
}

// Funktion zum erstellen eines internen Links
function ml( $sitepart, $key1, $value1, $key2 = NULL, $value2 = NULL, $key3 = NULL, $value3 = NULL, $key4 = NULL, $value4 = NULL ) {
    $newget = $_GET;
    unset($newget["payment_error"], $newget["login_error"], $newget["sid"], $newget["site"], $newget["language"], $newget["level_1"], $newget["level_2"], $newget["level_3"], $newget["level_4"], $newget["level_5"], $newget["action"], $newget["action_id"], $newget["slevel_1"], $newget["slevel_2"], $newget["slevel_3"], $newget["slevel_4"], $newget["slevel_5"]);

    foreach ($newget as $key => $val){
        if(substr($key,0,6) === 'action' && $val === 'send'){
            unset($newget[$key]);
        }
    }

    if ($key1 <> "") {
        $newget[$key1 . $sitepart["navigation_has_sitepart_id"]] = $value1;
    }
    if ($key2 <> "") {
        $newget[$key2 . $sitepart["navigation_has_sitepart_id"]] = $value2;
    }
    if ($key3 <> "") {
        $newget[$key3 . $sitepart["navigation_has_sitepart_id"]] = $value3;
    }
    if ($key4 <> "") {
        $newget[$key4 . $sitepart["navigation_has_sitepart_id"]] = $value4;
    }

    return ("?" . http_build_query($newget));
}

function ml2( $data ) {
    $newget = $_GET;
    unset($newget["sid"], $newget["site"], $newget["language"], $newget["level_1"], $newget["level_2"], $newget["level_3"], $newget["level_4"], $newget["level_5"], $newget["action"], $newget["action_id"], $newget["slevel_1"], $newget["slevel_2"], $newget["slevel_3"], $newget["slevel_4"], $newget["slevel_5"]);
    $newget = array_merge($newget, $data);
    return ("?" . http_build_query($newget));
}

// Array vor SQL-Injection schützen
function secure_array( $bad_array, $check_strip_tags = FALSE ) {

    //$keywords = ['INSERT','SELECT','DROP','SHOW','TRUNCATE','CONCAT','information_schema','substring(','version(','ascii','database(','load_file(','OUTFILE','BENCHMARK','unhex'];
    $keywords = [''];

    $secure_array = array();
    foreach ($bad_array as $key => $value) {
        if (is_array($bad_array[$key])) {
            $secure_array[$key] = secure_array($bad_array[$key], $check_strip_tags);
        } else {
            $hex2stringValue = hexToStr($value);
            foreach($keywords as $keyword) {
                if ((stripos($value,$keyword) !== false) || (stripos($hex2stringValue,$keyword) !== false)) {
                    die();
                }
            }
            $secure_array[$key] = secure_var($value, $check_strip_tags);
        }
    }
    return $secure_array;
}

// Array vor SQL-Injection schützen für navconnect
function secure_array_nav( $bad_array, $check_strip_tags = FALSE ) {

    $keywords = ['INSERT','SELECT','SHOW','TRUNCATE','CONCAT','information_schema','substring(','version(','ascii(','database(','load_file(','OUTFILE','BENCHMARK','unhex'];

    $secure_array = array();
    foreach ($bad_array as $key => $value) {
        if (is_array($bad_array[$key])) {
            $secure_array[$key] = secure_array($bad_array[$key], $check_strip_tags);
        } else {
            $hex2stringValue = hexToStr($value);
            foreach($keywords as $keyword) {
                if ((stripos($value,$keyword) !== false) || (stripos($hex2stringValue,$keyword) !== false)) {
                    die();
                }
            }
            $secure_array[$key] = secure_var($value, $check_strip_tags);
        }
    }
    return $secure_array;
}

function hexToStr($hex){
    $string='';
    for ($i=0; $i < strlen($hex)-1; $i+=2){
        $string .= chr(hexdec($hex[$i].$hex[$i+1]));
    }
    return $string;
}

// Variable vor SQL-Injection schützen
function secure_var( $bad_var, $check_strip_tags = FALSE ) {
    if (get_magic_quotes_gpc()) {
        $bad_var = stripslashes($bad_var);
    }
    if ($check_strip_tags) {
        $bad_var = strip_tags($bad_var);
    }
    $secure_var = mysqli_real_escape_string($GLOBALS['mysql_con'], $bad_var);
    return $secure_var;
}

// Gibt die Dc-Einstellungen zurück
function setup_get() {
    // satdnardwebsite auslesen. main_setup am 1.11.2014 geloescht
    $setup  = array();
    $query  = "SELECT id FROM main_site WHERE is_standard_site = 1 LIMIT 1";
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    if (@mysqli_num_rows($result) == 1) {
        $row                       = @mysqli_fetch_array($result);
        $setup['std_main_site_id'] = $row['id'];
        return $setup;
    }

    // keine default website gefunden, also die erstbeste nehmen
    $query                     = "SELECT id from main_site order by id asc limit 1";
    $result                    = @mysqli_query($GLOBALS['mysql_con'], $query);
    $row                       = @mysqli_fetch_array($result);
    $setup['std_main_site_id'] = $row['id'];
    return $setup;
}

/**
 * Seets site-code in GET if not set
 */
function set_sitecode_get()
{
    if(empty($_GET['site'])) {
        $site = (isset($_GET["site"]) && $_GET["site"] <> '') ? site_getbycode($_GET["site"]) : site_getbyid($GLOBALS["setup"]["std_main_site_id"]);
        $_GET['site'] = $site['code'];
    }
}


// Gibt den Datensatz der aktuellen Frontend-Seite zurück

function site_getbycode( $sitecode ) {
    $query  = ($sitecode <> '') ? "SELECT * FROM main_site WHERE code = '" . $sitecode . "'" : "SELECT * FROM main_site LIMIT 0,1";
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    if (@mysqli_num_rows($result) == 1) {
        return @mysqli_fetch_array($result);
    } else {
        $setup = setup_get();
        return site_getbyid($setup["std_main_site_id"]);
    }
}
function getSiteInfo($url){
    $query  = ($url <> '') ? "SELECT * FROM main_site WHERE site_url LIKE '%" . $url . "%'" : "SELECT * FROM main_site LIMIT 0,1";
     
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    if (@mysqli_num_rows($result) == 1) {
        return @mysqli_fetch_array($result);
    } else {
        return array();
    }
}
function site_getbyid( $siteid ) {
    $query  = ($siteid <> 0) ? "SELECT * FROM main_site WHERE id = '" . $siteid . "'" : "SELECT * FROM main_site LIMIT 0,1";
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    if (@mysqli_num_rows($result) == 1) {
        return @mysqli_fetch_array($result);
    }
}

// Realisiert einen Seitenwechsel
function site_change() {
    if (($_GET["change_site"]) | ($_POST["input_site_id"] <> '')) {
        $result = mysqli_query($GLOBALS['mysql_con'], "SELECT * FROM main_site WHERE id = '" . $_POST["input_site_id"]."'");
        if (@mysqli_num_rows($result) == 1) {
            $new_site     = @mysqli_fetch_array($result);
            $_GET["site"] = $new_site["code"];
        }
    }
}

// Gibt den Datensatz der aktuellen Frontend-Sprache zurück
function language_getbycode( $languagecode, $main_site_id ) {
    $query  = ($languagecode <> '') ? "SELECT * FROM main_language WHERE code = '" . $languagecode . "' AND main_site_id = '" . $main_site_id . "'" : "SELECT * FROM main_language LIMIT 0,1";
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    if (@mysqli_num_rows($result) == 1) {
        return @mysqli_fetch_array($result);
    }
}

function language_getbyid( $languageid ) {
    $query  = ($languageid <> 0) ? "SELECT * FROM main_language WHERE id = '" . $languageid . "'" : "SELECT * FROM main_language LIMIT 0,1";
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    if (@mysqli_num_rows($result) == 1) {
        return @mysqli_fetch_array($result);
    }
}

// Realisiert den Wechsel der Sprache
function language_change() {
    if (isset($_GET["change_language"]) && ($_GET["change_language"] <> '')) {
        $result = mysqli_query($GLOBALS['mysql_con'], "SELECT * FROM main_language WHERE code = '" . $_POST["change_language"] . "'");
        if (@mysqli_num_rows($result) == 1) {
            $new_language     = @mysqli_fetch_array($result);
            $_GET["language"] = $new_language["code"];
        }
    }
}

// Sprachen Drop-Down
function language_frontend_select( $selectname = "input_language_id", $value = NULL, $disabled = FALSE ) {
    $disabled_text = ($disabled) ? " disabled=\"disabled\"" : "";
    echo "<select" . $disabled_text . " style=\"height:18px;\" name=\"" . $selectname . "\" id=\"" . $selectname . "\">";
    $result = mysqli_query($GLOBALS['mysql_con'], "SELECT * FROM main_language");
    if (mysqli_num_rows($result) > 0) {
        while ($language = mysqli_fetch_array($result)) {
            if ($language["id"] == $value) {
                echo "<option selected=\"selected\" value=\"" . $language["id"] . "\">" . $language["name"] . "</option>";
            } else {
                echo "<option value=\"" . $language["id"] . "\">" . $language["name"] . "</option>";
            }
        }
    } else {
        echo "<option value=\"\"> - </option>";
    }
    echo "</select>";
}

// Gibt den Datenbankeintrag des aktuellen Layouts zurück
function layout_getbyid( $layoutid ) {
    $query  = "SELECT * FROM main_layout WHERE id = '" . $layoutid . "'";
    $result = mysqli_query($GLOBALS['mysql_con'], $query);
    $row    = mysqli_fetch_array($result);
    return $row;
}

function page_getbyid( $pageid ) {
    $query  = "SELECT * FROM main_page where id = '" . (int)$pageid."'";
    $result = mysqli_query($GLOBALS['mysql_con'], $query);
    $row    = mysqli_fetch_array($result);
    return $row;
}

// Gibt den Datenbankeintrag des aktuellen Menübereichs zurück
function navigation_get( $site, $language ) {
    $levelcode = "";
    if (!empty($_GET["level_1"])) {
        $levelcode = $_GET["level_1"];
    }
    if (!empty($_GET["level_2"])) {
        $levelcode = $_GET["level_2"];
    }
    if (!empty($_GET["level_3"])) {
        $levelcode = $_GET["level_3"];
    }
    if (!empty($_GET["level_4"])) {
        $levelcode = $_GET["level_4"];
    }
    if (!empty($_GET["level_5"])) {
        $levelcode = $_GET["level_5"];
    }
    if ($levelcode == "") {
        $navigation = navigation_getbyid($language["std_main_navigation_id"]);
        $query_mandant = "SELECT * FROM main_mandant WHERE id = '".$GLOBALS['main_contact']['current_mandant_id']."'";
        $result_mandant = @mysqli_query($GLOBALS['mysql_con'], $query_mandant);
        if (@mysqli_num_rows($result_mandant) == 1) {
            $mandant = @mysqli_fetch_array($result_mandant);
            $navigation = navigation_getbyid($mandant["main_navigation_id"]);
        }
    } else {
        $query  = "SELECT * FROM main_navigation WHERE main_site_id = '" . $site["id"] . "' AND main_language_id = '" . $language["id"] . "' AND code = '" . $levelcode . "'";
        $result = @mysqli_query($GLOBALS['mysql_con'], $query);
        if (@mysqli_num_rows($result) == 1) {
            $navigation = @mysqli_fetch_array($result);
        } else {
            $navigation = navigation_getbyid($language["std_main_navigation_id"]);
        }
    }
    //$navigation = navigation_get_rek($navigation);
    $i = 5;
    while ($i > $navigation["level"]) {
        $_GET["level_" . $i] = "";
        $i--;
    }
    set_navigation_level_vars_rek($navigation);
    return $navigation;
}

function navigation_get_rek( $navigation ) {
    if (($navigation["forward_type"] == 2) && ($navigation["forward_navigation_id"] <> '')) {
        $query = "SELECT * FROM main_navigation WHERE id = '" . $navigation["forward_navigation_id"] . "'";

        $result = @mysqli_query($GLOBALS['mysql_con'], $query);
        if (@mysqli_num_rows($result) == 1) {
            $navigation_temp = @mysqli_fetch_array($result);
            return navigation_get_rek($navigation_temp);
        }
    } else {
        return $navigation;
    }
}

// Fälscht Navigationsvariablen für Weiterleitung
function set_navigation_level_vars_rek( $navigation ) {
    $_GET["level_" . $navigation["level"]] = $navigation["code"];
    if ($navigation["level"] > 1) {
        $query  = "SELECT * FROM main_navigation WHERE id = " . $navigation["parent_id"];
        $result = @mysqli_query($GLOBALS['mysql_con'], $query);
        if (@mysqli_num_rows($result) == 1) {
            $temp_navigation = @mysqli_fetch_array($result);
            set_navigation_level_vars_rek($temp_navigation);
        }
    }
}

// Gib den Datensatz einer Navigationsebene zurück
function navigation_getbyid( $navigationid ) {
    $query  = "SELECT * FROM main_navigation WHERE id = '" . $navigationid . "'";
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    if (@mysqli_num_rows($result) == 1) {
        return @mysqli_fetch_array($result);
    }
}

function navigation_getbycode( $code, $site = '', $language = '' ) {
    if ($site == '') {
        $site = $GLOBALS["site"];
    }
    if ($language == '') {
        $language = $GLOBALS["language"];
    }
    $query  = "SELECT * FROM main_navigation WHERE main_site_id = '" . $site["id"] . "' AND main_language_id = '" . $language["id"] . "' AND code = '" . $code . "'";
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    if (@mysqli_num_rows($result) == 1) {
        return @mysqli_fetch_array($result);
    }
}

// Titel der Seite zusammenstellen
function site_title( $language, $navigation ) {
    if ($_GET["card"] != '') {
        $item = get_item_by_card_id($GLOBALS["shop"]["company"], $GLOBALS["shop"]["code"], $language["code"], $_GET["card"]);
        if (strlen($item["site_title"]) > 0) {
            $title = $item["site_title"] . " | " . $GLOBALS["language"]["site_title_name"];
        } else {
            $title = $item["description"] . " | " . $GLOBALS["language"]["site_title_name"];
        }
    } else {
        if ($_GET['shop_category'] == 'search') {
            $title = $GLOBALS["tc"]["search"] . " | ";
        } elseif ($_GET['shop_category'] == 'order') {
            $title = $GLOBALS["tc"]["order"] . " | ";
        } elseif ($_GET['shop_category'] == 'basket') {
            $title = $GLOBALS["tc"]["shopping_basket"] . " | ";
        } elseif ($GLOBALS["category"]["site_titel"] == '') {
            if ($GLOBALS["category"]["name"] != '') {
                $title = $GLOBALS["category"]["name"] . " | ";
            } elseif ($navigation["title_name"] <> '') {
                $title = $navigation["title_name"] . " | ";
            }
        } else {
            $title = $GLOBALS["category"]["site_titel"] . " | ";
        }
        $title .= $GLOBALS['language']["site_title_name"];
    }
    return $title;
}

//Canonical infos füllen
function get_canonical() {
    $url    = $_SERVER["SERVER_NAME"] . $_SERVER["REDIRECT_URL"];
    $domain = $_SERVER["SERVER_NAME"];
    //Sonderseiten
    switch ($_GET['shop_category']) {
        case "search":
            $path = "<link rel=\"canonical\" href=\"" . $url . "?shop_category=search\" />";
            break;
        case "order":
            $path = "<link rel=\"canonical\" href=\"" . $url . "?shop_category=order\" />";
            break;
        case "basket":
            $path = "<link rel=\"canonical\" href=\"" . $url . "?shop_category=basket\" />";
            break;
        case "account":
            $path = "<link rel=\"canonical\" href=\"" . $url . "?shop_category=account\" />";
            break;
        case "favorites":
            $path = "<link rel=\"canonical\" href=\"" . $url . "?shop_category=favorites\" />";
            break;
    }
    //Weiterleitungen
    $query            = "SELECT * FROM main_navigation WHERE id = '" . $GLOBALS['navigation']['id'] . "'";
    $result           = mysqli_query($GLOBALS['mysql_con'], $query);
    $row              = mysqli_fetch_object($result);
    $main_site_id     = $row->main_site_id;
    $main_language_id = $row->main_language_id;
    // Wird später durch parent_id überschrieben
    $parent_id = $row->parent_id;
    $forward   = $row->forward;
    if ($forward) {
        $parent_id = $row->forward_navigation_id;
    }
    $code = $row->code;
    //prüft ob shop, falls nicht > weiterleitungscanonical
    if ($code != 'shop') {
        $path = NULL;
        while ($parent_id != NULL) {
            $query_2 = "SELECT * FROM main_navigation WHERE id = '" . $parent_id . "'";

            $result_2  = mysqli_query($GLOBALS['mysql_con'], $query_2);
            $parent_id = '0';
            while ($row = mysqli_fetch_object($result_2)) {
                if ($row->code != $code) {
                    $path = $row->code . "/" . $path;
                }
                if ($row->forward != "0") {
                    $path      = "";
                    $parent_id = $row->forward_navigation_id;
                } else {
                    $parent_id = $row->parent_id;
                }
            }
        }
        //canonical pfad erstellen
        $path = $path . $code;
        if(isset($_GET['collection_id']) && (int)$_GET['collection_id'] > 0){
            $pathArray = explode('/',$_SERVER['REQUEST_URI']);
            $index = count($pathArray) - 2;
            $path .= '/'.$pathArray[$index];
             
        }

        $path = "<link rel='canonical' href='https://" . $domain . "/" . $GLOBALS["site"]["code"] . "/" . $GLOBALS["language"]["code"] . "/" . $path . "/'/>";
    } else {
        //Artikelliste ohne Sortieroption
        if (isset($GLOBALS["category"]["id"]) || isset($_GET['card'])) {
            if (!isset($_GET['page'])) {
                $page = 1;
            } else {
                $page = $_GET['page'];
            }
            if (!isset($_GET['card'])) {
                $path = '<link rel="canonical" href="https://' . $_SERVER["SERVER_NAME"] . $_SERVER["REDIRECT_URL"] . '"/>';
            } else {
                $card = $_GET['card'];

                $urlend    = $_SERVER["REQUEST_URI"];
                $urlend    = explode("?", $urlend);
                $urlmiddle = $urlend[0];
                $canonical = "";
                IF ($_GET['card'] != '') {
                    $itemquery  = "SELECT * FROM shop_item WHERE id='" . $_GET["card"]."'";
                    $itemresult = @mysqli_query($GLOBALS['mysql_con'], $itemquery);
                    $item       = @mysqli_fetch_assoc($itemresult);
                    if (strlen($item["parent_item_no"]) > 0) {
                        $parentitemquery  = "SELECT * FROM shop_item WHERE company='" . $GLOBALS["shop"]["company"] . "' AND shop_code='" . $GLOBALS["shop"]["item_source"] . "' AND language_code='" . $GLOBALS["shop_language"]["code"] . "' AND item_no='" . $item["parent_item_no"] . "'";
                        $parentitemresult = @mysqli_query($GLOBALS['mysql_con'], $parentitemquery);
                        $parent_item      = @mysqli_fetch_assoc($parentitemresult);
                    } else {
                        $parent_item = $item;
                    }
                    IF ($parent_item['id'] == '' || $parent_item['id'] == $item['id']) {
                        $canonical_card_id = $item['id'];
                        IF ($item['main_category_line_no'] <> 0) {
                            $cat_query = "SELECT code, name, parent_line_no AS plo FROM shop_category 
                                WHERE line_no = '" . $item['main_category_line_no'] . "'
                                    AND company = '". $GLOBALS["shop"]["company"] ."'
                                    AND shop_code = '". $GLOBALS["shop"]["category_source"] ."'
                                    AND language_code = '". $GLOBALS["shop_language"]["code"] ."'";
                        } ELSE {
                            $cat_query = "SELECT code, name, parent_line_no AS plo FROM shop_category 
                                WHERE line_no = 
                                  (SELECT category_line_no FROM shop_item_has_category 
                                    WHERE item_no = '" . $item['item_no'] . "'
                                    AND company = '". $GLOBALS["shop"]["company"] ."'
                                    AND shop_code = '". $GLOBALS["shop"]["item_source"] ."'
                                    AND language_code = '". $GLOBALS["shop_language"]["code"] ."'
                                    GROUP BY category_line_no ORDER BY category_line_no ASC LIMIT 1)
                                    AND company = '". $GLOBALS["shop"]["company"] ."'
                                    AND shop_code = '". $GLOBALS["shop"]["category_source"] ."'
                                    AND language_code = '". $GLOBALS["shop_language"]["code"] ."'";
                        }
                        $cat_result   = @mysqli_query($GLOBALS['mysql_con'], $cat_query);
                        $itemcategory = @mysqli_fetch_array($cat_result);
                        $caturl       = array();
                        $seek         = array('ä', 'ö', 'ü', 'ß','+', '*', ' ', '.', ',', '/', '\\', '"', "''", "'");
                        $replace      = array('ae', 'oe', 'ue', 'ss','plus', '-', '-', '-', '-', '', '', '&quot;', '&quot;', '');
                        $caturl[0]    = str_replace($seek, $replace, $itemcategory["code"]);
                        $caturl[0]    = htmlspecialchars($caturl[0], ENT_QUOTES, "UTF-8");
                        $caturl[0]    = $caturl[0] . "/";
                        $i            = 1;
                        WHILE ($itemcategory['plo'] > 0) {
                            $cat_query_rek = "SELECT code, name, parent_line_no AS plo 
                                              FROM shop_category 
                                              WHERE line_no = '" . $itemcategory['plo'] . "'
                                                AND company = '". $GLOBALS["shop"]["company"] ."'
                                                AND shop_code = '". $GLOBALS["shop"]["category_source"] ."'
                                                AND language_code = '". $GLOBALS["shop_language"]["code"] ."'";
                            $cat_res_rek   = @mysqli_query($GLOBALS['mysql_con'], $cat_query_rek);
                            $itemcategory  = @mysqli_fetch_array($cat_res_rek);
                            IF ($itemcategory['name'] != '') {
                                $seek       = array('ä', 'ö', 'ü', 'ß','+', '*', ' ', '.', ',', '/', '\\', '"', "''", "'");
                                $replace    = array('ae', 'oe', 'ue', 'ss','plus', '-', '-', '-', '-', '', '', '&quot;', '&quot;', '');
                                $caturl[$i] = str_replace($seek, $replace, $itemcategory["code"]);
                                $caturl[$i] = htmlspecialchars($caturl[$i], ENT_QUOTES, "UTF-8");
                                $caturl[$i] = $caturl[$i] . "/";
                            } ELSE {
                                $caturl[$i] = '';
                            }
                            $i++;
                        }
                        $catstring = "";
                        DO {
                            $catstring .= $caturl[$i];
                            $i--;
                        } WHILE ($i >= 0);
                        $seek            = array('ä', 'ö', 'ü', 'ß','+', '*', ' ', '.', ',', '/', '\\', '"', "''", "'");
                        $replace         = array('ae', 'oe', 'ue', 'ss','plus', '-', '-', '-', '-', '', '', '&quot;', '&quot;', '');
                        $itemdescription = str_replace($seek, $replace, $item["description"]);
                        $itemdescription = htmlspecialchars($itemdescription, ENT_QUOTES, "UTF-8");
                        $itemdescription = str_replace("&Acirc;", "", $itemdescription);
                        $itemdescription = str_replace("&acirc;", "", $itemdescription);
                        $itemdescription = trim($itemdescription, "+");
                        $base_string     = "https://" . $_SERVER["SERVER_NAME"] . "/";
                        $request_string  = $GLOBALS['site']['code'] . "/" . $GLOBALS['language']['code'] . "/shop/" . $catstring . $itemdescription . "/?card=" . $canonical_card_id;
                        $request_string  = str_replace("//", "/", $request_string);
                        $canonical       = $base_string . $request_string;
                        $canonical       = str_replace(" ", "-", $canonical);
                        $canonical       = str_replace("--", "-", $canonical);
                    } else {
                        $canonical_card_id = $parent_item["id"];
                        IF ($parent_item['main_category_line_no'] <> 0) {
                            $cat_query = "SELECT code, name, parent_line_no AS plo FROM shop_category 
                                WHERE line_no = '" . $parent_item['main_category_line_no'] . "'
                                    AND company = '". $GLOBALS["shop"]["company"] ."'
                                    AND shop_code = '". $GLOBALS["shop"]["category_source"] ."'
                                    AND language_code = '". $GLOBALS["shop_language"]["code"] ."'";
                        } ELSE {
                            $cat_query = "SELECT code, name, parent_line_no AS plo FROM shop_category 
                                WHERE line_no = 
                                  (SELECT category_line_no FROM shop_item_has_category 
                                    WHERE item_no = '" . $parent_item['item_no'] . "'
                                    AND company = '". $GLOBALS["shop"]["company"] ."'
                                    AND shop_code = '". $GLOBALS["shop"]["item_source"] ."'
                                    AND language_code = '". $GLOBALS["shop_language"]["code"] ."'
                                    GROUP BY category_line_no ORDER BY category_line_no ASC LIMIT 1)
                                    AND company = '". $GLOBALS["shop"]["company"] ."'
                                    AND shop_code = '". $GLOBALS["shop"]["category_source"] ."'
                                    AND language_code = '". $GLOBALS["shop_language"]["code"] ."'";
                        }
                        $cat_result   = @mysqli_query($GLOBALS['mysql_con'], $cat_query);
                        $itemcategory = @mysqli_fetch_array($cat_result);
                        $caturl       = array();
                        IF ($itemcategory['code'] != '') {
                            $seek      = array('ä', 'ö', 'ü', 'ß','+', '*', ' ', '.', ',', '/', '\\', '"', "''", "'");
                            $replace   = array('ae', 'oe', 'ue', 'ss','plus', '-', '-', '-', '-', '', '', '&quot;', '&quot;', '');
                            $caturl[0] = str_replace($seek, $replace, $itemcategory["code"]);
                            $caturl[0] = htmlspecialchars($caturl[0], ENT_QUOTES, "UTF-8");
                            $caturl[0] = $caturl[0] . "/";
                        } ELSE {
                            $caturl[0] = '';
                        }
                        $i = 1;
                        WHILE ($itemcategory['plo'] > 0) {
                            $cat_query_rek = "SELECT code, name, parent_line_no AS plo 
                                              FROM shop_category 
                                              WHERE line_no = '" . $itemcategory['plo'] . "'
                                                AND company = '". $GLOBALS["shop"]["company"] ."'
                                                AND shop_code = '". $GLOBALS["shop"]["category_source"] ."'
                                                AND language_code = '". $GLOBALS["shop_language"]["code"] ."'";
                            $cat_res_rek   = @mysqli_query($GLOBALS['mysql_con'], $cat_query_rek);
                            $itemcategory  = @mysqli_fetch_array($cat_res_rek);
                            IF ($itemcategory['name'] != '') {
                                $seek       = array('ä', 'ö', 'ü', 'ß','+', '*', ' ', '.', ',', '/', '\\', '"', "''", "'");
                                $replace    = array('ae', 'oe', 'ue', 'ss','plus', '-', '-', '-', '-', '', '', '&quot;', '&quot;', '');
                                $caturl[$i] = str_replace($seek, $replace, $itemcategory["code"]);
                                $caturl[$i] = htmlspecialchars($caturl[$i], ENT_QUOTES, "UTF-8");
                                $caturl[$i] = $caturl[$i] . "/";
                            } ELSE {
                                $caturl[$i] = '';
                            }
                            $i++;
                        }
                        $catstring = "";
                        DO {
                            $catstring .= $caturl[$i];
                            $i--;
                        } WHILE ($i >= 0);
                        $seek            = array('ä', 'ö', 'ü', 'ß','+', '*', ' ', '.', '/', '\\', '%', ',', 'Ø', 'Ã', 'ø', 'ã', 'Õ', 'õ', '"', "''", "'");
                        $replace         = array('ae', 'oe', 'ue', 'ss','plus', '-', '-', '-', '', '', 'proz', '+', '&Oslash;', '&Atilde;', '&oslash;', '&atilde;', '&Otilde;', '&otilde;', '&quot;', '&quot;', '');
                        $itemdescription = str_replace($seek, $replace, $item["description"]);
                        $itemdescription = htmlspecialchars($itemdescription, ENT_QUOTES, "UTF-8");
                        $itemdescription = str_replace("&Acirc;", "", $itemdescription);
                        $itemdescription = str_replace("&acirc;", "", $itemdescription);
                        $itemdescription = trim($itemdescription, "+");
                        $base_string     = "https://" . $_SERVER["SERVER_NAME"] . "/";
                        $request_string  = $GLOBALS['site']['code'] . "/" . $GLOBALS['language']['code'] . "/shop/" . $catstring . $itemdescription . "/?card=" . $canonical_card_id;
                        $request_string  = str_replace("//", "/", $request_string);
                        $canonical       = $base_string . $request_string;
                        $canonical       = str_replace(" ", "-", $canonical);
                        $canonical       = str_replace("--", "-", $canonical);
                    }
                }
                $canonical = strtolower($canonical);
                $path = '<link rel="canonical" href="' . $canonical . '"/>';
            }
        }
    }
    if ($path != $url) {
        $path = strtolower($path);
        return $path;
    }
}

//Facebook meta daten Infos füllen
function get_fb_meta_info() {
    $card_id = (int)$_GET['card'];
    if (isset($card_id)) {
        $query  = "SELECT * FROM shop_item WHERE id = '" . $card_id . "'";
        $result = mysqli_query($GLOBALS['mysql_con'], $query);
        while ($row = mysqli_fetch_object($result)) {
            $item_no      = $row->item_no;
            $product_name = $row->description;
            $company = $row->company;
            $shop_code = $row->shop_code;
            $shop_language_code = $row->language_code;
            //image name füllen
            $query_2  = "SELECT * FROM shop_item_file WHERE item_no = '" . $item_no . "' AND company = '$company' AND shop_code = '$shop_code' AND language_code = '$shop_language_code' LIMIT 1";
            $result_2 = mysqli_query($GLOBALS['mysql_con'], $query_2);
            while ($row_2 = mysqli_fetch_object($result_2)) {
                $product_img = $row_2->filename;
            }
            //produkt beschreibung füllen
            $query_3  = "SELECT * FROM shop_item_description WHERE item_no = '" . $item_no . "'  AND company = '$company' AND shop_code = '$shop_code' AND language_code = '$shop_language_code' AND marketplace_only = 0 LIMIT 1";
            $result_3 = mysqli_query($GLOBALS['mysql_con'], $query_3);
            while ($row_3 = mysqli_fetch_object($result_3)) {
                $product_description = $row_3->content;
            }
        }
        $fb_meta_data = "<meta property='og:image' content='" . $_SERVER["SERVER_NAME"] . "/userdata/dcshop/images/thumb_2/" . $product_img . "'/>";
        $fb_meta_data .= "<meta property='og:title' content='" . $product_name . "'/>";
        $fb_meta_data .= "<meta property='og:url' content='" . $_SERVER["SERVER_NAME"] . $_SERVER["REDIRECT_URL"] . "?card=" . $card_id . "'/>";
        $fb_meta_data .= "<meta property='og:description' content='" . $product_description . "'/>";
        $fb_meta_data .= "<meta property='type' content='article'/>";

        return $fb_meta_data;
    }
}

//Bild erstellen
function get_image( $item ,$type = 1) {
    $item_no        = $item['item_no'];
    $parent_item_no = $item["parent_item_no"];
    //image name füllen
    $query  = "SELECT * FROM shop_item_file WHERE (item_no = '" . $item_no . "' OR item_no = '" . $parent_item_no . "') and customization = 0   LIMIT 1";
    $result = mysqli_query($GLOBALS['mysql_con'], $query);
    while ($row = mysqli_fetch_object($result)) {
        $product_img = $row->filename;
    }
    if ($product_img == '' || !file_exists("../../" . $GLOBALS["shop_setup"]["image_config"][$type]["path"] . "/" . $product_img)) {
        if ($GLOBALS['shop_language']['item_placeholder_image'] != '') {
            $product_img = $GLOBALS['shop_language']['item_placeholder_image'];
        } else {
            $product_img = "noimage.jpg";
        }
    }
    //$fb_review_data .= "<div class='label_article_name'>".$product_name."</div>";
    $image_link = "<div id='product_img'><img src='/userdata/dcshop/images/thumb_". $type . "/" . $product_img . "' /></div>";
    return $image_link;
}


//Bild erstellen
function get_customization_image( $item ,$type = 1) {
    $item_no        = $item['item_no'];
    $parent_item_no = $item["parent_item_no"];
    //image name füllen
    $query  = "SELECT * FROM shop_item_file WHERE ( item_no = '" . $item_no . "' OR item_no = '" . $parent_item_no . "' ) and customization = 1  LIMIT 1";
    $result = mysqli_query($GLOBALS['mysql_con'], $query);
    if($result->num_rows == 0)
    {
        return get_image($item, $type);
    }

    while ($row = mysqli_fetch_object($result)) {
        $product_img = $row->filename;
    }
    if ($product_img == '' || !file_exists("../../" . $GLOBALS["shop_setup"]["image_config"][$type]["path"] . "/" . $product_img)) {
        if ($GLOBALS['shop_language']['item_placeholder_image'] != '') {
            $product_img = $GLOBALS['shop_language']['item_placeholder_image'];
        } else {
            $product_img = "noimage.jpg";
        }
    }
    //$fb_review_data .= "<div class='label_article_name'>".$product_name."</div>";
    $image_link = "<div id='product_img'><img src='/userdata/dcshop/images/thumb_". $type . "/" . $product_img . "' /></div>";
    return $image_link;
}

// function search_in_pdf($directory, $searchText){
    
//     $parser = new Parser();
//     // $directory = __DIR__.$direct;
//     $files = scandir("/var/www/web4/htdocs/intranet/userdata/03_Module/01_Firmenwiki/AWO Wiki/".$directory."/".$directory);

    
//     foreach ($files as $file) {
//         if ($file != "." && $file != "..") {
//             if ($file !== null) {
//                 if (pathinfo("/var/www/web4/htdocs/intranet/userdata/03_Module/01_Firmenwiki/AWO Wiki/".$directory."/".$directory."/".$file)['extension'] == "pdf") {
//                     $pdf = $parser->parseFile("/var/www/web4/htdocs/intranet/userdata/03_Module/01_Firmenwiki/AWO Wiki/".$directory."/".$directory."/".$file);
//                     $text = $pdf->getText();
//                     if (strpos($text, $searchText)) {
//                         echo "<a href=\""."../../../userdata/03_Module/01_Firmenwiki/AWO Wiki/".$directory."/".$directory."/".$file."\" target=\"_blank\">".$file."</a></br>";
//                         continue;
//                     }else {
//                         echo "nix";
//                     }
//                 }else {
//                     continue;
//                 }
                
//             }
//         }
//     }
// }
// function search_pdf($search_text){
    
    
//     $files = scandir("/var/www/web4/htdocs/intranet/userdata/03_Module/01_Firmenwiki/AWO Wiki/");
    
//     foreach ($files as $file) {
//         if ($file != "." && $file != "..") {
//             if ($file !== null) {
//                 // echo $file;
//                 search_in_pdf($file, $search_text);
//             }
//         }
//     }
// }



//Facebook meta daten review erstellen
function create_fb_review( $card_id, $url ) {
    if (isset($card_id)) {
        $query  = "SELECT * FROM shop_item WHERE id = '" . $card_id . "'";
        $result = mysqli_query($GLOBALS['mysql_con'], $query);
        while ($row = mysqli_fetch_object($result)) {
            $item_no             = $row->item_no;
            $product_name        = $row->description;
            $product_description = $row->summary;
            //image name füllen
            $query_2  = "SELECT * FROM shop_item_file WHERE item_no = '" . $item_no . "' LIMIT 1";
            $result_2 = mysqli_query($GLOBALS['mysql_con'], $query_2);
            while ($row_2 = mysqli_fetch_object($result_2)) {
                $product_img = $row_2->filename;
            }
            //produkt beschreibung füllen
            //$query_3 = "SELECT * FROM shop_item_description WHERE item_no = '".$item_no."' LIMIT 1";
            //$result_3 = mysqli_query($GLOBALS['mysql_con'],$query_3);
            //while($row_3 = mysqli_fetch_object($result_3))
            //{
            //	$product_description = $row_3->summary;
            //} 
        }
        //$fb_review_data .= "<div class='label_article_name'>".$product_name."</div>";
        $fb_review_data .= "<div id='fb_product_img' class='modal-info-image'><img src='/userdata/dcshop/images/thumb_2/" . $product_img . "' /></div>";
        //$fb_review_data .= "<div id='fb_product_url'><a href='?card=".$card_id."'>".$url."?card=".$card_id."</a></div>";
        $fb_review_data .= "<div id='user_queue_order_text' class='modal-info-description'><div id='fb_product_name'><strong>" . $product_name . "</strong></div><div id='fb_product_description'>" . $product_description . "</div></div>";


        return $fb_review_data;
    }
}

function get_modal_infobox($item) {?>
    <div class="modal-item-info">
        <div class="row">
            <div class="col-xs-12 col-sm-6">
                <div class="modal-item-image">
                    <?= get_image($item,2) ?>
                </div>
            </div>
            <div class="col-xs-12 col-sm-6">
                <div class="modal-item-description">
                    <strong><?= $item['description'] ?></strong>
                    <br />
                    <?= $item['summary'] ?>
                </div>
            </div>
        </div>
    </div>
    <?
}

//Metadaten füllen, Übergabe per call-by-reference
function get_meta_data( $navigation, &$site_title, &$meta_keywords, &$meta_description, $is_shop = TRUE ) {
    // Meta-Daten aus Sprache füllen 
    //$meta_description = $GLOBALS["language"]["meta_description"];
    //$meta_keywords = $GLOBALS["language"]["meta_keywords"];  
    // Meta-Daten aus Navigation füllen
    if ($navigation["menu_name"] <> '') {
        $site_title = $navigation["menu_name"] . " | ";
    }
    if ($navigation["title_name"] <> '') {
        $site_title = $navigation["title_name"] . " | ";
    }
    if ($navigation["meta_description"] <> '') {
        $meta_description = $navigation["meta_description"];
    }
    if ($navigation["meta_keywords"] <> '') {
        $meta_keywords = $navigation["meta_keywords"];
    }
    // Meta-Daten für News füllen
    $query  = "SELECT * FROM main_navigation_has_sitepart WHERE main_navigation_id = " . $navigation["id"] . " AND main_sitepart_id = 2 LIMIT 1";
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    if (@mysqli_num_rows($result) == 1) {
        $navigation_has_sitepart = @mysqli_fetch_array($result);
        if ($_GET["news" . $navigation_has_sitepart["id"]] <> '') {
            $query  = "SELECT * FROM news_entry WHERE id = " . $_GET["news" . $navigation_has_sitepart["id"]] . " LIMIT 1";
            $result = @mysqli_query($GLOBALS['mysql_con'], $query);
            if (@mysqli_num_rows($result) == 1) {
                $news = @mysqli_fetch_array($result);
                if ($news["headline"] <> '') {
                    $site_title = $news["headline"] . " | ";
                }
                if ($news["summary"] <> '') {
                    $news["summary"]  = str_replace("\n", "", $news["summary"]);
                    $news["summary"]  = str_replace("\r", "", $news["summary"]);
                    $meta_description = $news["summary"];
                }
                if ($news["meta_keywords"] <> '') {
                    $meta_keywords = $news["meta_keywords"];
                }
            }
        }
    }
    //Metadaten nur für Shop
    if ($is_shop) {
        //Sonderkategorien
        if ($_GET['shop_category'] == 'search') {
            $site_title       = $GLOBALS["tc"]["search"] . " | ";
            $meta_description = '';
            $meta_keywords    = '';
        } elseif ($_GET['shop_category'] == 'order') {
            $site_title       = $GLOBALS["tc"]["order"] . " | ";
            $meta_description = '';
            $meta_keywords    = '';
        } elseif ($_GET['shop_category'] == 'basket') {
            $site_title       = $GLOBALS["tc"]["shopping_basket"] . " | ";
            $meta_description = '';
            $meta_keywords    = '';
        } elseif ($_GET['shop_category'] == 'account') {
            $site_title       = $GLOBALS["tc"]["my_account"] . " | ";
            $meta_description = '';
            $meta_keywords    = '';
        } elseif ($_GET['shop_category'] == 'favorites') {
            if ($GLOBALS["shop"]["shop_typ"] == 1) {
                $site_title       = $GLOBALS["tc"]["favorites"];
            } else {
                $site_title       = $GLOBALS["tc"]["favorites_b2b"];
            }
            $meta_description = '';
            $meta_keywords    = '';
        } else {
            //Artikelkategorie oder Artikelkarte
            if ($GLOBALS['category'] != '') {
                if ($GLOBALS["category"]["site_titel"] != '') {
                    $site_title = $GLOBALS["category"]["site_titel"] . " | ";
                } elseif ($GLOBALS["category"]["name"] != '') {
                    $site_title = $GLOBALS["category"]["name"] . " | ";
                }
                $meta_keywords    = $GLOBALS["category"]["meta_keywords"];
                $meta_description = ($GLOBALS["category"]["meta_description"] == '') ? $GLOBALS["category"]["category_description"] : $GLOBALS["category"]["meta_description"];
            }
            if ($_GET['card'] != '') {
                if ($GLOBALS["item"]["site_title"] != "" || $GLOBALS["item"]["description"] != "") {
                    $site_title = ($GLOBALS["item"]["site_title"] == '') ? $GLOBALS["item"]["description"] . " | " : $GLOBALS["item"]["site_title"] . " | ";
                }
                if ($GLOBALS["item"]["meta_keywords"] != "" || $GLOBALS["item"]["search_query"] != "") {
                    $meta_keywords = ($GLOBALS["item"]["meta_keywords"] == '') ? $GLOBALS["item"]["search_query"] : $GLOBALS["item"]["meta_keywords"];
                }
                if ($GLOBALS["item"]["meta_description"] != "" || $GLOBALS["item"]["summary"] != "") {
                    $meta_description = ($GLOBALS["item"]["meta_description"] == '') ? $GLOBALS["item"]["summary"] : $GLOBALS["item"]["meta_description"];
                }
            }
        }
    }
    // Meta-Daten aus Sprache anfügen
    $site_title .= $GLOBALS['language']["site_title_name"];
    $meta_description .= substr(strip_tags($GLOBALS["language"]["meta_description"]), 0, 200);
    $meta_keywords .= $GLOBALS["language"]["meta_keywords"];
}

// Gibt den Navigationspfad zurück
function curr_navigation_path( $site, $language, $navigation ) {
    return curr_navigation_path_rek($site["code"], $language["code"], $navigation["parent_id"], '');
}

function curr_navigation_path_rek( $sitecode, $languagecode, $parent_id, $path ) {
    if ($parent_id > 0) {
        $result = @mysqli_query($GLOBALS['mysql_con'], "SELECT * FROM main_view_active_navigation WHERE id = '".$parent_id."'");
        $nav    = @mysqli_fetch_array($result);
        switch ($nav["level"]) {
            case 4:
                $link = "/$sitecode/$languagecode/" . $_GET["level_1"] . "/" . $_GET["level_2"] . "/" . $_GET["level_3"] . "/" . $_GET["level4"] . "/";
                break;
            case 3:
                $link = "/$sitecode/$languagecode/" . $_GET["level_1"] . "/" . $_GET["level_2"] . "/" . $_GET["level_3"] . "/";
                break;
            case 2:
                $link = "/$sitecode/$languagecode/" . $_GET["level_1"] . "/" . $_GET["level_2"] . "/";
                break;
            case 1:
                $link = "/$sitecode/$languagecode/" . $_GET["level_1"] . "/";
                break;
        }
        $path = "<a href=\"$link\">" . htmlspecialchars($nav["menu_name"], ENT_QUOTES, "UTF-8") . "</a>" . $path;
        $path = curr_navigation_path_rek($sitecode, $languagecode, $nav["parent_id"], $path);
    }
    return $path;
}


//TF: 18.09.13 für Breadcrumb redaktionell, von NBM kopiert
function cust_curr_navigation_path( $site, $language, $navigation ) {
    if ((int)$navigation['id'] <> (int)$language['std_main_navigation_id'] && !isset($_GET['collection_id'])) {
        return '<div class="breadcrumb"><span><a href="/' . $GLOBALS["site"]["code"] . '/' . $GLOBALS["language"]["code"] . '/">' . $GLOBALS["tc"]["homepage"] . '</a>' . cust_curr_navigation_path_rek($site["code"], $language["code"], $navigation["parent_id"], '') . "<div class='chevron_right'></div><span class='current'>" . $navigation["menu_name"] . '</span></span></div>';
    } elseif(isset($_GET['collection_id'])) {
        switch ($navigation["level"]) {
            case 4:
                $link = "/".$GLOBALS["site"]["code"]."/".$GLOBALS["language"]["code"]."/" . $_GET["level_1"] . "/" . $_GET["level_2"] . "/" . $_GET["level_3"] . "/" . $_GET["level4"] . "/";
                break;
            case 3:
                $link = "/".$GLOBALS["site"]["code"]."/".$GLOBALS["language"]["code"]."/" . $_GET["level_1"] . "/" . $_GET["level_2"] . "/" . $_GET["level_3"] . "/";
                break;
            case 2:
                $link = "/".$GLOBALS["site"]["code"]."/".$GLOBALS["language"]["code"]."/" . $_GET["level_1"] . "/" . $_GET["level_2"] . "/";
                break;
            case 1:
                $link = "/".$GLOBALS["site"]["code"]."/".$GLOBALS["language"]["code"]."/" . $_GET["level_1"] . "/";
                break;
        }

        $IOCContainer = $GLOBALS['IOC'];
        $pdo = $IOCContainer->create('DynCom\mysyde\common\classes\PDOQueryWrapper');

        $collectionID = filter_var($_GET['collection_id'],FILTER_SANITIZE_NUMBER_INT);

        $prepStatement =  "
          SELECT
                *
          FROM main_collection
              WHERE  id = :collectionId
            ";
        $params = [
            [':collectionId', $collectionID, PDO::PARAM_INT],
        ];
        $pdo->setQuery($prepStatement);
        $pdo->prepareQuery();
        $pdo->bindParameters($params);
        $pdo->executePreparedStatement();
        $resultArray = $pdo->getResultArray();

        if (count($resultArray) == 1) {
            return '<div class="breadcrumb">
                <span><a href="/' . $GLOBALS["site"]["code"] . '/' . $GLOBALS["language"]["code"] . '/">' . $GLOBALS["tc"]["homepage"] . '</a>'
                . cust_curr_navigation_path_rek($site["code"], $language["code"], $navigation["parent_id"], '')
                . "<div class='chevron_right'></div><a href=\"".$link."\"><span>" . $navigation["menu_name"] . '</span></a><div class="chevron_right"></div><span class=\'current\'>'.$resultArray[0]["description"].'</span>
             </span></div>';
        } else {
            return '<div class="breadcrumb"><span><a href="/' . $GLOBALS["site"]["code"] . '/' . $GLOBALS["language"]["code"] . '/">' . $GLOBALS["tc"]["homepage"] . '</a>' . cust_curr_navigation_path_rek($site["code"], $language["code"], $navigation["parent_id"], '') . "<div class='chevron_right'></div><span class='current'>" . $navigation["menu_name"] . '</span></span></div>';
        }


    } else {
        return '<div class="breadcrumb"><span><a href="/' . $GLOBALS["site"]["code"] . '/' . $GLOBALS["language"]["code"] . '/">' . $GLOBALS["tc"]["homepage"] . '</a></span></div>';
    }
}

function cust_curr_navigation_path_rek( $sitecode, $languagecode, $parent_id, $path ) {
    if ($parent_id > 0) {
        $result = @mysqli_query($GLOBALS['mysql_con'], "SELECT * FROM main_view_active_navigation WHERE id = '".$parent_id."'");
        $nav    = @mysqli_fetch_array($result);
        switch ($nav["level"]) {
            case 4:
                $link = "/$sitecode/$languagecode/" . $_GET["level_1"] . "/" . $_GET["level_2"] . "/" . $_GET["level_3"] . "/" . $_GET["level4"] . "/";
                break;
            case 3:
                $link = "/$sitecode/$languagecode/" . $_GET["level_1"] . "/" . $_GET["level_2"] . "/" . $_GET["level_3"] . "/";
                break;
            case 2:
                $link = "/$sitecode/$languagecode/" . $_GET["level_1"] . "/" . $_GET["level_2"] . "/";
                break;
            case 1:
                $link = "/$sitecode/$languagecode/" . $_GET["level_1"] . "/";
                break;
        }
        if ($nav["level"] > 1) {
            $path = "<div class='chevron_right'></div><a href=\"$link\">" . htmlspecialchars($nav["menu_name"], ENT_QUOTES, "UTF-8") . "</a>" . $path;
        }
        $path = cust_curr_navigation_path_rek($sitecode, $languagecode, $nav["parent_id"], $path);
    }
    return $path;
}


function navigation_path( $site, $language, $navigation ) {
    return "/" . $site["code"] . "/" . $language["code"] . "/" . navigation_path_rek($navigation["id"], '');
}

function navigation_path_rek( $navigationid, $path ) {
    if ($navigationid <> '') {
        $result = @mysqli_query($GLOBALS['mysql_con'], "SELECT * FROM main_navigation WHERE id = '" . $navigationid."'");
        $nav    = @mysqli_fetch_array($result);
        $path   = $nav["code"] . "/" . $path;
        if ($nav["level"] > 0) {
            $path = navigation_path_rek($nav["parent_id"], $path);
        }
    }
    return $path;
}

// Gibt den Link auf die Seite auf der das mitgegebene Sitepart vorkommt zurück
function get_link_to_sitepart( $sitepartid ) {
    $query  = "SELECT * FROM main_navigation_has_sitepart WHERE id = '" . $sitepartid."'";
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    if (@mysqli_num_rows($result) == 1) {
        $sitepart = @mysqli_fetch_array($result);
        $link     = get_link_to_navigation($sitepart["main_navigation_id"]);
    }
    return $link;
}

// Gibt den Link auf eine Navigationsebene zurück
function get_link_to_navigation( $navigation_id ) {
    $query  = "SELECT * FROM main_navigation WHERE id = '" . $navigation_id."'";
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    if (@mysqli_num_rows($result) == 1) {
        $navigation = @mysqli_fetch_array($result);
        $link       = navigation_path($GLOBALS["site"], $GLOBALS["language"], $navigation);
    }
    return $link;
}

// Funktionen zur Menüdarstellung
// fullmenu Stellt das gesamte aufgeklappte Menü dar, menu stellt das bis zur aktuell gewählten Ebene aufgeklappte Menü dar, menu_area startet auf einem beliebigen Navigationseintrag
function navigation_full_menu( $site, $language, $navigation, $from_level, $to_level ) {
    navigation_fullmenu_rek($site, $language, $navigation, 0, 1, "", $from_level, $to_level);
    echo "\n";
    return TRUE;
}

function navigation_menu( $site, $language, $navigation, $from_level, $to_level ) {
    navigation_menu_rek($site, $language, $navigation, 0, 1, "", $from_level, $to_level);
    echo "\n";
    return TRUE;
}

function navigation_menu_area( $site, $language, $navigation_code, $to_level = 5 ) {
    $navigation = navigation_getbycode($navigation_code);
    $parent_id  = $navigation["id"];
    $level      = $navigation["level"] + 1;
    $navcode    = $navigation["code"] . "/";
    navigation_menu_rek($site, $language, $navigation, $parent_id, $level, $navcode, 1, $to_level);
    echo "\n";
    return TRUE;
}

function navigation_full_menu_area( $site, $language, $navigation_code, $to_level = 5 ) {
    $navigation = navigation_getbycode($navigation_code);
    $parent_id  = "";
    $level      = 1;
    $navcode    = "";
    if (!is_null($navigation)) {
        $parent_id  = $navigation["id"];
        $level      = $navigation["level"] + 1;
        $navcode    = $navigation["code"] . "/";
    }
    navigation_fullmenu_rek($site, $language, $navigation, $parent_id, $level, $navcode, 1, $to_level);
    echo "\n";
    return TRUE;
}

function navigation_fullmenu_rek( $site, $language, $navigation, $parent_id, $level, $navcode, $from_level, $to_level ) {
    
    require MODULE_PATH . '/forwarding/forwarding_config.inc.php';

    switch ($level) {
        case 1:
            $levelcode = $_GET["level_1"];
            break;
        case 2:
            $levelcode = $_GET["level_2"];
            break;
        case 3:
            $levelcode = $_GET["level_3"];
            break;
        case 4:
            $levelcode = $_GET["level_4"];
            break;
        case 5:
            $levelcode = $_GET["level_5"];
            break;
    }
    $spaces = "    ";
    while ($count <= $level) {
        $spaces .= "  ";
        $count++;
    }
    try {
        //code...
    
    $left_join_main_department = "LEFT JOIN main_navigation_department ON main_view_active_navigation.id = main_navigation_department.main_navigation_id";
    $left_joint_main_mandant = "LEFT JOIN main_navigation_mandant ON main_view_active_navigation.id = main_navigation_mandant.main_navigation_id";
    $left_joint_main_role = "LEFT JOIN main_navigation_role ON main_view_active_navigation.id = main_navigation_role.main_navigation_id";
    $left_joint_main_fachbereich = "LEFT JOIN main_navigation_fachbereich ON main_view_active_navigation.id = main_navigation_fachbereich.main_navigation_id";
    $left_joint_main_einricht = "LEFT JOIN main_navigation_einricht ON main_view_active_navigation.id = main_navigation_einricht.main_navigation_id";

    $sql_uus = @mysqli_query($GLOBALS["mysql_con"], "SELECT * FROM main_contact_department WHERE main_contact_id = '".$_SESSION["login_id"]."';");
    $user = @mysqli_fetch_assoc($sql_uus);

   

    $parent_id_query = ($parent_id == "") ? " AND main_view_active_navigation.parent_id IS NULL" : " AND main_view_active_navigation.parent_id = '" . (int)$parent_id."'";
    $qqque = "SELECT main_view_active_navigation.* FROM main_view_active_navigation ".$left_joint_main_mandant." ".$left_join_main_department." ".$left_joint_main_fachbereich." ".$left_joint_main_einricht." ".$left_joint_main_role." WHERE main_view_active_navigation.main_site_id = '" . (int)$site["id"] . "' AND (main_navigation_mandant.main_mandant_id = '".$user["main_mandant_id"]."' OR main_navigation_mandant.main_mandant_id IS NULL) AND (main_navigation_department.main_department_id = '".$user["main_department_id"]."' OR main_navigation_department.main_department_id IS NULL) AND (main_navigation_fachbereich.main_fachbereich_id = '".$user["main_bereich_id"]."' OR main_navigation_fachbereich.main_fachbereich_id IS NULL) AND (main_navigation_einricht.main_einricht_id = '".$user["main_einricht_id"]."' OR main_navigation_einricht.main_einricht_id IS NULL) AND (main_navigation_role.main_role_id = '".$user["main_role_id"]."' OR main_navigation_role.main_role_id IS NULL) AND main_view_active_navigation.main_language_id = '" . (int)$language["id"]."'" . $parent_id_query . " ORDER BY sorting ASC";
    $result          = @mysqli_query($GLOBALS['mysql_con'], "SELECT main_view_active_navigation.* FROM main_view_active_navigation ".$left_joint_main_mandant." ".$left_join_main_department." ".$left_joint_main_fachbereich." ".$left_joint_main_einricht." ".$left_joint_main_role." WHERE main_view_active_navigation.main_site_id = '" . (int)$site["id"] . "' AND (main_navigation_mandant.main_mandant_id = '".$user["main_mandant_id"]."' OR main_navigation_mandant.main_mandant_id IS NULL) AND (main_navigation_department.main_department_id = '".$user["main_department_id"]."' OR main_navigation_department.main_department_id IS NULL) AND (main_navigation_fachbereich.main_fachbereich_id = '".$user["main_bereich_id"]."' OR main_navigation_fachbereich.main_fachbereich_id IS NULL) AND (main_navigation_einricht.main_einricht_id = '".$user["main_einricht_id"]."' OR main_navigation_einricht.main_einricht_id IS NULL) AND (main_navigation_role.main_role_id = '".$user["main_role_id"]."' OR main_navigation_role.main_role_id IS NULL) AND main_view_active_navigation.main_language_id = '" . (int)$language["id"]."'" . $parent_id_query . " ORDER BY sorting ASC");
    $show_level      = (($level >= $from_level) && ($level <= $to_level)) ? TRUE : FALSE;
    // echo "<script>console.log('".$qqque."')</script>";
    } catch (\Throwable $th) {
        echo $th;
    }
    if (@mysqli_num_rows($result) > 0) {
        $show_main_level = $show_level;
        if ($show_main_level) {
            echo "\n" . $spaces . "<ul class=\"level_$level\">";
        }
        while ($nav = @mysqli_fetch_array($result)) {
            //Icon herausziehen
            $getIconQuery = "SELECT navigation_icon FROM main_navigation WHERE id ='" . $nav["id"] . "'";
            $resultIconQuery = mysqli_query($GLOBALS["mysql_con"], $getIconQuery);
            $row = mysqli_fetch_array($resultIconQuery);
            $icon = $forwarding_icon_images[$row["navigation_icon"]]["image"];
            //END Icon herausziehen

            if (($nav["code"] == 'Infos') & ($to_level == 1)) {
                $show_level = FALSE;
            }
            $newnavcode = $navcode . $nav["code"] . "/";
            $active     = "";
            if ($nav["code"] == $levelcode) {
                $active = "class=\"active_tree\" ";
            }
            if ($nav["code"] == $navigation["code"]) {
                $active = "class=\"active\" ";
            }
            if ($show_level) {
                $addr = "/" . $site["code"] . "/" . $language["code"] . "/" . $newnavcode;
                $addr = str_replace('//','/',$addr);
                $display = "";
                $target = "";

                $current_date = new DateTime();
                $query_azubi = "SELECT * FROM meal_delivery_setup WHERE id = ".$current_date->format('d');
                $result_azubi = mysqli_query($GLOBALS["mysql_con"], $query_azubi);
                $row_azubi = mysqli_fetch_array($result_azubi);
                if($row_azubi['main_contact_id'] != $GLOBALS['main_contact']['id'] && $nav['code'] == "essenslieferung"){
                    $display = " style='display:none;' ";
                }

                if( $nav["code"] == '404' ){
                    $display = " style='display:none;' ";
                }
                
                if($nav["code"] == 'home' || $nav["code"] == 'startseite' || $nav["is_home_page"] == 1){
                    $addr = '/';
                }
                $link = "href= '".$addr."'";
                if($nav['forward_type'] == 3){
                    $target = "target='_blank'";
                }
                if($nav['forward_type'] == 4){
                    $link = "";
                }
                if( $nav["code"] == 'ticketcenter' and (get_permission_state('all_tickets', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) != 1 and get_permission_state('show_tickets', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) != 1)){
                    continue;
                }
                $if_query = "(content_id IS NOT NULL AND content_type != 'collection') OR content_id IS NULL OR (content_id IS NOT NULL AND main_mandant_id = ".$GLOBALS['main_contact']['current_mandant_id']." AND content_type = 'collection')";
                // $if_query = "main_collection_mandant_link.main_collection_id IS NOT NULL AND main_mandant_id = ".$GLOBALS['main_contact']['current_mandant_id'];
                $query2 = "SELECT * FROM main_page_link LEFT JOIN main_collection ON main_collection.main_collection_setup_id = main_page_link.main_collection_setup_id LEFT JOIN intranet_mandant_link ON main_collection.id = intranet_mandant_link.content_id WHERE (".$if_query.") AND main_page_id = ".$nav['forward_page_id']." AND main_collection_list = 1 AND main_collection.id NOT IN (SELECT main_collection_id FROM main_collection_read WHERE main_contact_id = ".$GLOBALS['main_contact']['id'].") AND main_collection.readable = 1";
                $result2 = @mysqli_query($GLOBALS['mysql_con'], $query2);
                $unread_collection = @mysqli_num_rows($result2);
                $collection_dot = "";
                if($unread_collection != 0){
                    $collection_dot = "<span class='hint'>".$unread_collection."</span>";
                }

                echo "\n" . $spaces . "  <li ".$display." class=\"level_$level\">";
                if($level >= 2){
                    echo "<div class='nav_description_wrapper'>";
                    echo "<a " . $active . $link . $target .">";
                    if($nav["image"] != ""){
                        echo "<div class='img_container'><img class='img-fluid' src='/userdata/navigation/".$nav["image"]."'></div>";
                    }
                    echo "<p class='level_".$level."_title'>". $icon . $nav["menu_name"]."</p>";
                    echo "<div class='nav_description'>".$nav['description']."</div>";
                    echo "</a>";
                    echo "</div>";
                }else {
                    echo "<a " . $active . $link . $target .">" . $icon . $nav["menu_name"] . $collection_dot ."</a>";
                }
            }
            navigation_fullmenu_rek($site, $language, $navigation, $nav["id"], ($level + 1), $newnavcode, $from_level, $to_level);
            if ($show_level) {
                echo "</li>";
            }
        }
        if ($show_main_level) {
            echo "\n" . $spaces . "</ul>";
        }
    }
    return TRUE;
}

function navigation_menu_rek( $site, $language, $navigation, $parent_id, $level, $navcode, $from_level, $to_level ) {

    switch ($level) {
        case 1:
            $levelcode = $_GET["level_1"];
            break;
        case 2:
            $levelcode = $_GET["level_2"];
            break;
        case 3:
            $levelcode = $_GET["level_3"];
            break;
        case 4:
            $levelcode = $_GET["level_4"];
            break;
        case 5:
            $levelcode = $_GET["level_5"];
            break;
    }
    $spaces = "";
    $count  = 0;
    while ($count <= $level) {
        $spaces .= "";
        $count++;
    }
    $parent_id_query = ($parent_id == 0) ? " AND parent_id IS NULL" : " AND parent_id = '" . $parent_id."'";
    $query           = "SELECT * FROM main_view_active_navigation WHERE main_site_id = '" . $site["id"] . "' AND main_language_id = '" . $language["id"]."'" . $parent_id_query . " ORDER BY sorting ASC";
    $result          = @mysqli_query($GLOBALS['mysql_con'], $query);
    $show_level      = (($level >= $from_level) && ($level <= $to_level)) ? TRUE : FALSE;
    if (@mysqli_num_rows($result) == 0) {
        return;
    }

    $show_main_level = $show_level;
    if ($show_main_level) {
        echo "" . $spaces . "<ul class=\"level_$level\">";
    }
    while ($nav = @mysqli_fetch_array($result)) {
        if ($nav["forward_type"] == 4) {
            $show_level = FALSE;
        } // platzhalter
        $newnavcode = $navcode . $nav["code"] . "/";
        $active     = "";
        if ($nav["code"] == $levelcode) {
            $active = "class=\"active_tree\" ";
        }
        if ($nav["code"] == $navigation["code"]) {
            $active = "class=\"active\" ";
        }

        $target = "";
        $href   = "/" . $site["code"] . "/" . $language["code"] . "/$newnavcode";
        if ($nav["forward_type"] == 3) {
            $target = 'target="_blank"';
            //$href = $nav['forward_url'];
        }

        if ($show_level) {
            echo "" . $spaces . "<li class=\"level_$level\"><a " . $target . " " . $active . "href=\"" . $href . "\">" . $nav["menu_name"] ."</a>";
        }
        if ($nav["code"] == $levelcode) {
            navigation_menu_rek($site, $language, $navigation, $nav["id"], ($level + 1), $newnavcode, $from_level, $to_level);
        }
        if ($show_level) {
            echo "</li>";
        }
        $show_level = (($level >= $from_level) && ($level <= $to_level)) ? TRUE : FALSE;
        $count++;
    }
    if ($show_main_level) {
        echo "" . $spaces . "</ul>";
    }

    return TRUE;
}

// Erzeugt XML-Sitemap für Suchmaschinen
function navigation_xmlsitemap( $site, $language, $navigation_code, $to_level = 5 ) {
    $navigation = navigation_getbycode($navigation_code);
    $parent_id  = $navigation["id"];
    $level      = $navigation["level"] + 1;
    $navcode    = $navigation["code"] . "/";
    echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
    echo "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">";
    navigation_fullmenu_rek($site, $language, $navigation, $parent_id, $level, $navcode, 1, $to_level);
    echo "\n";
    return TRUE;
}

function navigation_xmlsitemap_rek( $site, $language, $navigation, $parent_id, $level, $navcode, $from_level, $to_level ) {
    $spaces = "    ";
    while ($count <= $level) {
        $spaces .= "  ";
        $count++;
    }
    $parent_id_query = ($parent_id == 0) ? " AND parent_id IS NULL" : " AND parent_id = '" . $parent_id."'";
    $result          = @mysqli_query($GLOBALS['mysql_con'], "SELECT * FROM main_view_active_navigation WHERE main_site_id = '" . $site["id"] . "' AND main_language_id = " . $language["id"] . $parent_id_query . " ORDER BY sorting ASC");
    $show_level      = (($level >= $from_level) && ($level <= $to_level)) ? TRUE : FALSE;
    if (@mysqli_num_rows($result) > 0) {
        if ($show_level) {
            echo "\n" . $spaces . "<ul class=\"level_$level\">";
        }
        while ($nav = @mysqli_fetch_array($result)) {
            $newnavcode = $navcode . $nav["code"] . "/";
            $active     = "";
            if ($nav["code"] == $navigation["code"]) {
                $active = "class=\"active\" ";
            }
            if ($show_level) {
                echo "\n" . $spaces . "  <li class=\"level_$level\"><a " . $active . "href=\"/" . $site["code"] . "/" . $language["code"] . "/$newnavcode\">" . $nav["menu_name"] . "</a>";
            }
            navigation_fullmenu_rek($site, $language, $navigation, $nav["id"], ($level + 1), $newnavcode, $from_level, $to_level);
            if ($show_level) {
                echo "</li>";
            }
        }
        if ($show_level) {
            echo "\n" . $spaces . "</ul>";
        }
    }
    return TRUE;
}

// Erzeugt Dropdown mit den Sprachen
function get_language_select( $selectname = "input_language_id", $selected_id = NULL, $send_form = NULL ) {
    $send_form_text = ($send_form <> "") ? " onChange=\"document." . $send_form . ".submit();\"" : "";
    echo "<select" . $send_form_text . " class=\"select\" name=\"" . $selectname . "\" id=\"" . $selectname . "\">";
    $result = mysqli_query($GLOBALS['mysql_con'], "SELECT * FROM main_language");
    if (mysqli_num_rows($result) > 0) {
        while ($language = mysqli_fetch_array($result)) {
            if ($language["id"] == $selected_id) {
                echo "<option selected=\"selected\" value=\"" . $language["id"] . "\">" . $language["name"] . "</option>";
            } else {
                echo "<option value=\"" . $language["id"] . "\">" . $language["name"] . "</option>";
            }
        }
    } else {
        echo "<option value=\"\"> - </option>";
    }
    echo "</select>";
}

// Ereugt Dropdown mit den Seiten
function get_site_select( $selectname = "input_site_id", $selected_id = NULL, $send_form = NULL ) {
    $send_form_text = ($send_form <> "") ? " onChange=\"document." . $send_form . ".submit();\"" : "";
    echo "<select" . $send_form_text . " class=\"select\" name=\"" . $selectname . "\" id=\"" . $selectname . "\">";
    $result = mysqli_query($GLOBALS['mysql_con'], "SELECT * FROM main_site");
    if (mysqli_num_rows($result) > 0) {
        while ($site = mysqli_fetch_array($result)) {
            $selected_id_text = ($site["id"] == $selected_id) ? " selected=\"selected\"" : "";
            echo "<option" . $selected_id_text . " value=\"" . $site["id"] . "\">" . $site["name"] . "</option>";
        }
    } else {
        echo "<option value=\"\"> - </option>";
    }
    echo "</select>";
}

// Erzeugt Dropdown mit Siteparts
function get_sitepart_select( $selectname = "input_sitepart_id", $selected_id = NULL ) {
    echo "<select class=\"select\" name=\"" . $selectname . "\" id=\"" . $selectname . "\">";
    $result = mysqli_query($GLOBALS['mysql_con'], "SELECT * FROM main_site");
    if (mysqli_num_rows($result) > 0) {
        while ($site = mysqli_fetch_array($result)) {
            $selected_id_text = ($site["id"] == $selected_id) ? " selected=\"selected\"" : "";
            echo "<option" . $selected_id_text . " value=\"" . $site["id"] . "\">" . $site["name"] . "</option>";
        }
    } else {
        echo "<option value=\"\"> - </option>";
    }
    echo "</select>";
}

// Erzeugt Dropdown zum wechseln der Sprache
function get_language_change_select( $selectname = "input_language_id", $selected_id = NULL, $site ) {
    echo "<select class=\"select\" name=\"" . $selectname . "\" id=\"" . $selectname . "\" onchange=\"MM_jumpMenu('parent',this,0)\">";
    $result = mysqli_query($GLOBALS['mysql_con'], "SELECT * FROM main_language WHERE main_site_id = '" . $site["id"] . "'");
    if (mysqli_num_rows($result) > 0) {
        while ($language = mysqli_fetch_array($result)) {
            $selected_language_text = ($language["id"] == $selected_id) ? " selected=\"selected\"" : "";
            echo "<option" . $selected_language_text . " value=\"/mysyde/" . $site["code"] . "/" . $language["code"] . "/\">" . $language["name"] . "</option>";
        }
    } else {
        echo "<option value=\"\"> - </option>";
    }
    echo "</select>";
}

// Erzeugt Drop-Down zum wechseln der Seite
function get_site_change_select( $selectname = "site_language_id", $selected_id = NULL, $send_form = NULL ) {
    $send_form_text = ($send_form <> "") ? " onChange=\"document." . $send_form . ".submit();\"" : "";
    echo "<select" . $send_form_text . " class=\"select\" name=\"" . $selectname . "\" id=\"" . $selectname . "\" onchange=\"MM_jumpMenu('parent',this,0)\">";
    $result = mysqli_query($GLOBALS['mysql_con'], "SELECT * FROM main_site");
    if (mysqli_num_rows($result) > 0) {
        while ($site = mysqli_fetch_array($result)) {
            $selected_id_text = ($site["id"] == $selected_id) ? " selected=\"selected\"" : "";
            echo "<option" . $selected_id_text . " value=\"/mysyde/" . $site["code"] . "/\">" . $site["name"] . "</option>";
        }
    } else {
        echo "<option value=\"\"> - </option>";
    }
    echo "</select>";
}


function get_site_language_menu( $_currentSite, $_currentLanguage ) {
    // get all languages

    $return       = array();
    $output       = '';
    $selectedSite = '';
    $languages    = array();
    $sites        = array();

    $result = mysqli_query($GLOBALS['mysql_con'], "SELECT main_language.* FROM main_language
      left join main_site on main_language.main_site_id = main_site.id
      order by main_site.name, main_language.name");
    if (mysqli_num_rows($result) > 0) {
        while ($language = mysqli_fetch_array($result)) {
            $languages[] = $language;
            //$selected_language_text = ($language["id"] == $selected_id) ? " selected=\"selected\"" : "";
            //if($language["id"] == $selected_id)
            //echo "<option" . $selected_language_text . " value=\"/mysyde/" . $site["code"] . "/" . $language["code"] . "/\">" . $language["name"] . "</option>";
        }
    }


    $result = mysqli_query($GLOBALS['mysql_con'], "SELECT * FROM main_site order by name asc");
    if (mysqli_num_rows($result) > 0) {
        while ($site = mysqli_fetch_array($result)) {
            $sites[$site['id']] = $site;
        }
    }

    $query             = "SELECT * FROM main_site_admin_user_link where main_admin_user_id = " . (int)$GLOBALS["admin_user"]['id'];
    $result            = @mysqli_query($GLOBALS['mysql_con'], $query);
    $siteAdminLink = false;
    $siteAdminAvailableSites = array();
    if (@mysqli_num_rows($result) > 0) {
        $siteAdminLink = true;
        while ($row = @mysqli_fetch_array($result)) {
            $siteAdminAvailableSites[] = $row['main_site_id'];
        }
    }

    if (count($languages)) {
        foreach ($languages as $language) {

            if($siteAdminLink === true && !in_array($language['main_site_id'], $siteAdminAvailableSites)) {
                continue;
            }

            if ($_currentSite['id'] == $language['main_site_id'] && $_currentLanguage['id'] == $language['id']) {
                $selectedSite .= '<a href="#">' . $sites[$language['main_site_id']]['name'] . ' - ' . $language['name'] . '</a>';
            }
            $output .= sprintf('<li><a href="%s">%s - %s</a></li>',
                "/mysyde/" . $sites[$language['main_site_id']]['code'] . "/" . $language['code'] . "/",
                $sites[$language['main_site_id']]['name'],
                $language['name']
            );
        }
    } else {
        $output .= '<li><a href="#">Keine Website angelegt</a></li>';
    }

    $return['selectedSite']     = $selectedSite;
    $return['siteLanguageMenu'] = $output;

    return $return;
}
/* DUP breadcrumb GmbH 20190804 */
/* Senden vom mehreren Dateien update */
// Erstellt einen Eintrag im Mail-Log, wird erst mit mail_send versendet
function mail_create($subject, $message, $from, $to, $from_name = '', $to_name = '', $html_mail = FALSE, $attachment = "", $bcc = "", $attachment_2 = '', $delayed = 0, $payment_transaction_id = '') {
    $html_mail = ($html_mail) ? 1 : 0;
     
    //tut Array umwandeln zum Text
    // Wandle Array in Text um; wenn $attachment null ist, verwende ein leeres Array
    $attachments = implode(", ", (array)$attachment);
    if (($from <> '') && ($to <> '') && ($subject <> '')) {
        $query = "INSERT INTO main_mail_log(create_date, subject, message, from_adress, to_adress, from_name, 
                to_name, html_mail, attachment,bcc_address,attachment_2, main_site_code, main_language_code, shop_code, shop_language_code,delayed_send,payment_transaction_id)
				  VALUES (NOW(), '" . mysqli_real_escape_string($GLOBALS['mysql_con'], $subject) . "','" . mysqli_real_escape_string($GLOBALS['mysql_con'], $message) . "','" . $from . "','" . $to . "','" . $from_name . "',
				'" . $to_name . "'," . $html_mail . ", '" . $attachments . "','" . $bcc . "','" . $attachment_2 . "','".$GLOBALS["site"]["code"]."','".$GLOBALS["language"]["code"]."','".$GLOBALS["shop"]["code"]."','".$GLOBALS["shop_language"]["code"]."'," .$delayed.",'".$payment_transaction_id."'
		)";
        
        if (@mysqli_query($GLOBALS['mysql_con'], $query)) {
            return mysqli_insert_id($GLOBALS['mysql_con']);
        }
    } else {
        return FALSE;
    }
}

// Sendet alle noch nicht gesendeten E-Mails aus dem Mail-Log
function mail_send() {
    $counter = 0;
    $query   = "SELECT * FROM main_mail_log WHERE send_date IS NULL AND create_date >= SUBDATE(NOW(), 2) AND delayed_send = 0";
    $result  = @mysqli_query($GLOBALS['mysql_con'], $query);
    if (@mysqli_num_rows($result) > 0) {
        while ($mail = @mysqli_fetch_array($result)) {

            if (( $mail["attachment"] != "" )) {

                //wandelt Text wieder in Array um
                $file_array = $mail["attachment"];
                $arr = explode(',', $file_array);
                $arr = array_map('trim', $arr);
                
                //Fügen ins array relevant für absoluten Pfad
                foreach ($arr as $arr) {
                    $attachment[] = realpath("../.." . $arr);
                }

                $boundary        = md5(date('r', time()));
                $attachment_file = mail_attachment($attachment, $boundary);
                $body            = mail_html_body($mail["message"], $mail["html_mail"], $boundary);
                $body .= $attachment_file;
            } else {
                $body = mail_html_body($mail["message"], $mail["html_mail"]);
            }
            $header = mail_html_header($mail["from_adress"], $mail["to_adress"], $mail["from_name"], $mail["to_name"], $mail["attachment"], $boundary, $mail['bcc_address']);
            if (substr($mail["subject"], 0, 10) == "<TEXTMAIL>") {
                if (@mail(utf8_decode($mail["to_adress"]), utf8_decode(substr($mail["subject"], 10)), utf8_decode(strip_tags($mail["message"])), "From: " . utf8_decode($mail["from_adress"]))) {
                    $mail_send = TRUE;
                }
            } else {
                if (@mail(utf8_decode($mail["to_adress"]), utf8_decode($mail["subject"]), utf8_decode($body), utf8_decode($header),'-f '.$mail["from_adress"])) {
                    $mail_send = TRUE;
                }
            }
            if ($mail_send) {
                $query = "UPDATE main_mail_log SET send_date = now() WHERE id = " . $mail["id"];
                @mysqli_query($GLOBALS['mysql_con'], $query);
                $counter++;
                unlink($attachment_file);
            }
        }
    }
    return $counter;
}

function mail_html_body( $message, $html_mail = FALSE, $boundary = "" ) {
    if ($boundary != "") {
        $body = "--" . $boundary . "\n";
        $body .= "Content-Type: text/html\n";
        $body .= "Content-Transfer-Encoding: 8bit\n\n";
    }
    $body .= "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n";
    $body .= "<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n";
    $body .= "<head>\r\n";
    $body .= "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />\r\n";
    $body .= "<style type=\"text/css\">\r\n";
    $body .= "body,td,th { font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000; }\r\n";
    $body .= "h1 { font-size: 15px; color: ".$GLOBALS['shop_setup']['mail_color']."; margin: 0px; padding: 0px;}\r\n";
    $body .= "h2 { font-size: 13px; color: ".$GLOBALS['shop_setup']['mail_color']."; margin: 0px; padding: 0px;}\r\n";
    $body .= "h3,h4,h5 { font-size: 11px; color: ".$GLOBALS['shop_setup']['mail_color']."; margin: 0px; padding: 0px;}\r\n";
    $body .= ".small { font-size: 8px; color: ".$GLOBALS['shop_setup']['mail_color']."; }\r\n";
    $body .= ".order_price_total { text-align: right; }\r\n";
    $body .= ".text-right { text-align: right; }\r\n";
    $body .= "</style></head>\r\n";
    $body .= "<body>\r\n";
    if ($html_mail) {
        $body .= $message . "\r\n";
    } else {
        $body .= nl2br($message) . "\r\n";
    }
    $body .= "</body>\r\n";
    $body .= "</html>\r\n";
    return $body;
}

function mail_html_header( $from, $to, $from_name = '', $to_name = '', $attachment = "", $boundary = "", $bcc = "" ) {
    if ($from <> '') {
        $header = ($from_name <> '') ? "From: " . $from_name . " <" . $from . ">\n" : "From: " . $from . "\n";
    }
    if ($bcc != "") {
        $header .= "Bcc: " . $bcc . "\n";
    }
    $header .= "MIME-Version: 1.0\n";
    if (($attachment != "")) {
        $header .= "Content-Type: multipart/mixed; boundary=$boundary\n";
        $header .= "Content-Transfer-Encoding: 8bit\n\n";
    } else {
        $header .= "Content-type: text/html; charset=iso-8859-1\n\n";
    }
    return $header;
}

function mail_attachment( $attachment, $boundary ) {
    if (!is_array($attachment)) {
        $attachment_file = "--" . $boundary . "\n";
        $filename        = basename($attachment);
        $h               = fopen($attachment, 'rb');
        if (is_readable("../.." . $attachment)) {
            $filecontents = fread($h, filesize("../.." . $attachment));
        } else {
            $filecontents = fread($h, filesize($attachment));
        }
        $file_base64 = chunk_split(base64_encode($filecontents));

        $attachment_file .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$filename\"\n";
        $attachment_file .= "Content-Transfer-Encoding: base64\n";
        $attachment_file .= "Content-Disposition: attachment; " .
            "filename=$filename\n\n";
        $attachment_file .= $file_base64;
        $attachment_file .= "\n";
        $text .= "--$boundary--";
    } else {
        for ($x = 0; $x < count($attachment); $x++) {
            $attachment_file .= "--" . $boundary . "\n";
            $file     = fopen($attachment[$x], "rb");
            $data     = fread($file, filesize($attachment[$x]));
            $filename = basename($attachment[$x]);
            fclose($file);
            $data = chunk_split(base64_encode($data));
            $attachment_file .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$filename\"\n" .
                "Content-Disposition: attachment;\n" . " filename=\"$filename\"\n" .
                "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
        }
    }
    $attachment_file .= "--" . $boundary . "--\n";
    return $attachment_file;

}


// Speichert Bilder in flexibler Größe ab
function image_resize( $file, $save, $width, $height, $prop = TRUE ) {
    if (file_exists($file)) {

        $infos = @getimagesize($file);
        // Neue Maße berechnen unter beibehaltung der Proportionen
        if ($prop) {
            $iWidth  = $infos[0];
            $iHeight = $infos[1];
            $iRatioW = $width / $iWidth;
            $iRatioH = $height / $iHeight;
            if ($iRatioW > 1 && $iRatioH > 1) {
                $iNewW = $iWidth;
                $iNewH = $iHeight;
            } else {
                if ($iRatioW < $iRatioH) {
                    $iNewW = round($iWidth * $iRatioW);
                    $iNewH = round($iHeight * $iRatioW);
                } else {
                    $iNewW = round($iWidth * $iRatioH);
                    $iNewH = round($iHeight * $iRatioH);
                }
            }

        } else {
            $iNewW = $width;
            $iNewH = $height;
        }
        // Übergebnes Bild in Variable lesen
        switch ($infos[2]) {
            case 1:
                if (detect_animated_gif($file)) {
                    $is_animated = TRUE;
                } else {
                    $curr_img         = imagecreatefromgif($file);
                    $set_transparency = TRUE;
                }
                break;
            case 2:
                $curr_img = imagecreatefromjpeg($file);
                break;
            case 3:
                $curr_img         = imagecreatefrompng($file);
                $set_transparency = TRUE;
                break;
            case 18:
                $curr_img         = imagecreatefromwebp($file);
                $set_transparency = TRUE;
                break;
        }
        if (!$is_animated) {

            // Neues Bild mit den berechneten Maßen erzeugen
            $new_img = imagecreatetruecolor($iNewW, $iNewH);
            // Transparenz für PNG- und GIF-Bilder erhalten
            if ($set_transparency) {
                imagealphablending($new_img, FALSE);
                imagesavealpha($new_img, TRUE);
            }

            // Bildgröße umwandeln
            imagecopyresampled($new_img, $curr_img, 0, 0, 0, 0, $iNewW, $iNewH, $infos[0], $infos[1]);

            $exif = exif_read_data($file);
            if($exif['Orientation'] == 6 ){
                $new_img = imagerotate($new_img, -90, 0);
            }elseif($exif['Orientation'] == 8){
                $new_img = imagerotate($new_img, 90, 0);
            }

            // Umgewandeltes Bild abspeichern
            switch ($infos[2]) {
                case 1:
                    @unlink($save);
                    imagewebp($new_img, $save, 50);
                    // imagegif($new_img, $save);
                    break;
                case 2:
                    @unlink($save);
                    imagewebp($new_img, $save, 50);
                    // imagejpeg($new_img, $save, 95);
                    break;
                case 3:
                    @unlink($save);
                    imagewebp($new_img, $save, 50);
                    // imagepng($new_img, $save, 4);
                    break;
                case 18:
                    @unlink($save);
                    imagewebp($new_img, $save, 50);
                    break;
            }
        } else {
            @unlink($save);
            copy($file, $save);
        }
    }
}


function filename_validation( $_filename, $_ending = FALSE ) {
    if (!is_string($_filename)) {
        return FALSE;
    }
    if (!is_bool($_ending) && !is_array($_ending) && !is_string($_ending)) {
        return FALSE;
    }
    $_filename = strtolower($_filename);
    $replace   = array(
        '/ä/'              => 'ae',
        '/ü/'              => 'ue',
        '/ö/'              => 'oe',
        '/ß/'              => 'ss',
        '/\040/'           => '_',
        '/[^a-z0-9_\.\-]/' => ''
    );
    $_filename = preg_replace(array_keys($replace), array_values($replace), $_filename);
    $regex     = '';
    if (is_array($_ending)) {
        if (!deleteArrayElement($_ending, '')) {
            $regex = '(\.(' . implode('|', $_ending) . '))$';
        } else {
            $regex = '([\.(' . implode('|', $_ending) . ')]?)$';
        }
        $regex = '(\.(' . implode('|', $_ending) . '))$';
    } elseif (is_string($_ending)) {
        $regex = '\.' . $_ending;
    } elseif ($_ending) {
        $regex = '\.[a-z0-9_\.\-]+';
    }
    if (preg_match('/^[a-z0-9_\.\-]+' . $regex . '/', $_filename)) {
        return $_filename;
    } else {
        return FALSE;
    }
}


function detect_animated_gif( $filename ) {
    if ($fh = @fopen($filename, 'rb')) {
        $count = 0;
        while (!feof($fh) && $count < 2) {
            $chunk = fread($fh, 1024 * 100); //read 100kb at a time
            $count += preg_match_all('#\x00\x21\xF9\x04.{4}\x00\x2C#s', $chunk, $matches);
        }
        fclose($fh);
    }
    if ($count > 1) {
        return (TRUE);
    }
}

// Gibt CSS-Klasse für bestimmte Dateitypen zurück
function get_button_file_typ( $filename ) {
    $filename_array = explode('.', $filename);
    $file_typ       = $filename_array[(count($filename_array) - 1)];
    switch ($file_typ) {
        case 'pdf':
            return "button_pdf";
            break;
        case 'doc':
        case 'docx':
        case 'txt':
            return "button_doc";
            break;
        case 'xls':
        case 'xlsx':
        case 'csv':
        case 'rtf':
            return "button_xls";
            break;
        case 'zip':
        case 'rar':
            return "button_zip";
            break;
        case 'jpg':
        case 'gif':
        case 'bmp':
        case 'tif':
        case 'eps':
        case 'png':
            return "button_img";
            break;
        default:
            return "";
            break;
    }
}

// Gibt CSS-Klasse für bestimmte Dateitypen zurück
function get_button_file_typ_new( $filename ) {
    $filename_array = explode('.', $filename);
    $file_typ       = $filename_array[(count($filename_array) - 1)];
    switch ($file_typ) {
        case 'pdf':
            return "pdf-o";
            break;
        case 'doc':
        case 'docx':
            return "word-o";
            break;
        case 'txt':
            return "text-o";
            break;
        case 'xls':
        case 'xlsx':
        case 'csv':
        case 'rtf':
            return "excel-o";
            break;
        case 'zip':
        case 'rar':
            return "archive-o";
            break;
        case 'jpg':
        case 'gif':
        case 'bmp':
        case 'tif':
        case 'eps':
        case 'png':
            return "image-o";
            break;
        case 'mp3':
            return "audio-o";
            break;
        case 'mp4':
        case 'webm':
        case 'ogg':
        case 'm4v':
            return "movie-o";
            break;
        case 'ppt':
        case 'pptx':
            return "powerpoint-o";
            break;
        default:
            return "o";
            break;
    }
}

// Generiert Passwort
function generate_password( $zeichen = 8 ) {
    $chars = array_merge(
        range(0, 9),
        range('a', 'z'),
        range('A', 'Z')
    );
    shuffle($chars);
    return implode('', array_slice($chars, 0, $zeichen));
}

// Gibt den Datensatz des über die Session ermittelten Besuchers wieder
function get_visitor() {

    $query = "DELETE FROM 
		main_visitor 
	WHERE 
	(
		session_date != '0000-00-00 00:00:00'
	  AND
		session_date IS NOT NULL
	  AND
		valid_until != '0000-00-00 00:00:00'
	  AND
		valid_until IS NOT NULL
	  AND
		valid_until <= NOW()	
	  AND
		nav_login != 1
	)
	OR
	(
		session_date != '0000-00-00 00:00:00'
	  AND
		session_date IS NOT NULL
	  AND
		(main_user_id IS NULL OR main_user_id = 0)
	  AND
		(main_admin_user_id IS NULL OR main_admin_user_id = 0)
	  AND
		session_date <= DATE_SUB(NOW(),INTERVAL 90 MINUTE)	
	  AND
		nav_login != 1	
	)
	OR
	(
		session_date != '0000-00-00 00:00:00'
	  AND
		session_date IS NOT NULL
	  AND
		(
			remember_token IS NULL
		  OR
			remember_token = ''
		)
	  AND
		session_date <= DATE_SUB(NOW(),INTERVAL 90 MINUTE)	
	  AND
		nav_login != 1		
	)
	OR
	(
		nav_login = 1
	  AND
		(session_date <= DATE_SUB(NOW(),INTERVAL 90 MINUTE) OR session_date IS NULL OR session_date = '0000-00-00 00:00:00')
	)";
    @mysqli_query($GLOBALS['mysql_con'], $query);
    if ($_GET['sid'] != '') {
        $query  = "SELECT * FROM main_visitor WHERE session_id = '" . mysqli_real_escape_string($GLOBALS['mysql_con'],$_GET['sid']) . "' AND (remember_token = '' OR remember_token IS NULL)";
        $result = mysqli_query($GLOBALS['mysql_con'], $query);
        if (mysqli_num_rows($result) == 1) {
            $row         = mysqli_fetch_assoc($result);
            $countquery  = "SELECT * FROM main_visitor WHERE session_id = '" . mysqli_real_escape_string($GLOBALS['mysql_con'],session_id()) . "' AND (remember_token = '' OR remember_token IS NULL)";
            $countresult = mysqli_query($GLOBALS['mysql_con'], $countquery);
            if (mysqli_num_rows($countresult) > 0) {
                $query = "DELETE FROM main_visitor WHERE session_id = '" . $_GET['sid'] . "' AND (remember_token = '' OR remember_token IS NULL)";
                mysqli_query($GLOBALS['mysql_con'], $query);
                $oldvisitor = mysqli_fetch_assoc($countresult);
                $query      = "UPDATE main_visitor 
						  SET frontend_login = TRUE, cookie_only = FALSE, session_date  = NOW(), main_user_id = '" . $row['main_user_id'] . "'
						  WHERE id = '" . $oldvisitor['id'] . "'";
                mysqli_query($GLOBALS['mysql_con'], $query);
            } else {
                $query = "UPDATE main_visitor SET session_id = '" . mysqli_real_escape_string($GLOBALS['mysql_con'],session_id()) . "' WHERE id = " . $row['id'];
                mysqli_query($GLOBALS['mysql_con'], $query);
            }
        }
    }
    $query  = "SELECT * FROM main_visitor WHERE session_id = '" . mysqli_real_escape_string($GLOBALS['mysql_con'],session_id()) . "'";
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    if ((!empty($_POST['remember_login']) && ($_POST['remember_login'] == 'on')) || !empty($GLOBALS['visitor']['remember_token'])) {
        $cookie_timeout = COOKIE_DAYS_VALID * 24 * 60 * 60;
        setcookie('sid' . $GLOBALS['site']['code'], session_id(), time() + $cookie_timeout, '/');
    } else {
        $cookie_timeout = 90 * 60 * 60;
        setcookie('sid' . $GLOBALS['site']['code'], session_id(), NULL, '/');
    }
    if (@mysqli_num_rows($result) != 0) {
        $visitor         = @mysqli_fetch_array($result);
        $query           = "UPDATE main_visitor SET session_date = NOW() WHERE id = '" . $visitor["id"] . "'";
        $_SESSION['vid'] = $visitor['id'];
        @mysqli_query($GLOBALS['mysql_con'], $query);
        return $visitor;
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];
        $ipv4 = filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ? $ip : '';
        $regexCount = null;
        $ipv4anon = preg_replace('/(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3}).*/', '$1.$2.$3.0', $ipv4, -1, $regexCount);
        $ipv6 = filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) ? $ip : '';
        $ipv6sections = [];
        $ipv6anon = implode(':',explode(':',$ipv6,2));

        $query = "INSERT INTO main_visitor (id,session_id,last_ipv4_anon,last_ipv6_anon,session_date,valid_until) VALUES (NULL,'" . mysqli_real_escape_string($GLOBALS['mysql_con'],session_id()) . "','".$ipv4anon."','".$ipv6anon."',NOW(),DATE_ADD(NOW(),INTERVAL 30 DAY))";
        if (@mysqli_query($GLOBALS['mysql_con'], $query)) {
            $id      = mysqli_insert_id($GLOBALS['mysql_con']);
            $query   = "SELECT * FROM main_visitor WHERE id='" .$id."'";
            $result  = @mysqli_query($GLOBALS['mysql_con'], $query);
            $visitor = @mysqli_fetch_assoc($result);
            return $visitor;
        } else {
            die('Es konnte kein Besucher-Datensatz erzeugt oder ermittelt werden. Bitte wenden Sie sich an den Support. Fehler: ' . mysqli_error($GLOBALS['mysql_con']));
        }
    }
}

// Holt Datensatz des Admin-Benutzers anhand eines Besuchereintrags

function get_admin_user( $visitor ) {
    if ($visitor["admin_login"]) {
        $query  = "SELECT main_admin_user.* FROM main_visitor LEFT join main_admin_user ON main_admin_user.id = main_visitor.main_admin_user_id WHERE main_visitor.id = '" . $visitor["id"] . "'";
        $result = @mysqli_query($GLOBALS['mysql_con'], $query);
        if (@mysqli_num_rows($result) == 1) {
            $admin_user = @mysqli_fetch_array($result);
            return $admin_user;
        }
    }

    return FALSE;
}

function update_visitor_data( $_data = array() ) {
    $query  = "select data from main_visitor where id = '" . $GLOBALS["visitor"]['id']."'";
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    if (@mysqli_num_rows($result) == 1) {
        $visitordata = @mysqli_fetch_array($result);
        $data        = unserialize($visitordata['data']);

        if (is_array($data) && count($data)) {
            $_data = array_merge($data, $_data);
        }
    }

    $data                       = serialize($_data);
    $query                      = "UPDATE main_visitor set data = '" . $data . "' WHERE id = '" . $GLOBALS["visitor"]['id']."'";
    $GLOBALS["visitor"]['data'] = $data;
    @mysqli_query($GLOBALS['mysql_con'], $query);
}

function get_visitor_data() {
    $data = unserialize($GLOBALS["visitor"]['data']);
    if ($data == "") {
        return array();
    }

    return $data;
}

// Ermittelt den Sprachcode anhand des Browsers des Besuchers
function lang_getfrombrowser() {
    $language         = language_getbyid($GLOBALS["site"]["std_main_language_id"]);
    $default_language = $language["code"];
    $query            = "SELECT code FROM main_language";
    $result           = @mysqli_query($GLOBALS['mysql_con'], $query);
    $i                = 0;
    if (@mysqli_num_rows($result) > 0) {
        while ($language = @mysqli_fetch_array($result)) {
            $allowed_languages[$i] = $language["code"];
        }
        $strict_mode   = FALSE;
        $lang_variable = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
        if (empty($lang_variable)) {
            return $default_language;
        }
        $accepted_languages = preg_split('/,\s*/', $lang_variable);
        $current_lang       = $default_language;
        $current_q          = 0;
        foreach ($accepted_languages as $accepted_language) {
            $res = preg_match('/^([a-z]{1,8}(?:-[a-z]{1,8})*)' .
                '(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/i', $accepted_language, $matches);
            if (!$res) {
                continue;
            }
            $lang_code = explode('-', $matches[1]);
            $lang_quality = 1.0;
            if (isset($matches[2])) {
                $lang_quality = (float)$matches[2];
            }
            while (count($lang_code)) {
                if (in_array(strtolower(join('-', $lang_code)), $allowed_languages)) {
                    if ($lang_quality > $current_q) {
                        $current_lang = strtolower(join('-', $lang_code));
                        $current_q    = $lang_quality;
                        break;
                        echo $current_lang . " " . $current_q . " - ";
                    }
                }
                if ($strict_mode) {
                    break;
                }
                array_pop($lang_code);
            }
        }
        return $current_lang;
    }
}

// Wandelt ein Deutsch formatiertes Datum in SQL-Format um
function datetosql( $date ) {
    if ($date <> '') {
        $newdate = date("Y-m-d", strtotime($date));
        return "'" . $newdate . "'";
    } else {
        return "NULL";
    }
}

// Wandelt ein SQL-Datum in das deutsche Format um
function datefromsql( $date ) {
    if ($date <> '') {
        $newdate = date("d.m.Y", strtotime($date));
        return $newdate;
    } else {
        return "";
    }
}
// Wandelt ein Deutsch formatiertes Datum in SQL-Format um
function datetimetosql( $date ) {
    if ($date <> '') {
        $newdate = date("Y-m-d H:i", strtotime($date));
        return "'" . $newdate . "'";
    } else {
        return "NULL";
    }
}

// Wandelt ein SQL-Datum in das deutsche Format um
function datetimefromsql( $date ) {
    if ($date <> '') {
        $newdate = date("d.m.Y H:i", strtotime($date));
        return $newdate;
    } else {
        return "";
    }
}

// Funktion zum anzeige eine Tabelle aus einem SQL-Query
function linklist( $result, $formname = "linklist", $format = NULL, $inputname = "input_id", $dblclick_action = "edit", $sortable = FALSE, $sortableUpdateAction = 'update_sortorder', $deleteAction = "", $withoutDataTable = FALSE ) {
    $translation = \DynCom\mysyde\common\classes\Registry::get("translation");
    $columnsCount = 0;
    if ((int)$GLOBALS['shop']['id'] > 0) {
        linklist2($result, $formname, $format, $inputname);
    } else {
        $num_rows = @mysqli_num_rows($result);
        $keyCount = 1;
        if ($num_rows >= 1) {
            $firstrow     = TRUE;
            $tbody = TRUE;
            $sortableText = $sortable === TRUE ? ' sortableTable' : '';
            echo "  <table id='".$formname."_table' data-sortableupdateaction=\"{$sortableUpdateAction}\" cellpadding=0 cellspacing=0 border=0 class=\"linklist" . $sortableText . "\">\n";
            while ($row = @mysqli_fetch_array($result, 1)) {
                if ($firstrow) {
                    // insert header
                    if (is_array($format)) {
                        reset($format);
                    } else {
                        $format = [];
                    }
                    echo " <thead>   <tr>\n";
                    $counter = 1;
                    foreach ($row as $key => $value) {
                        if ($key == "option") {
                            @next($format);
                            continue;
                        }
                        $curr_format = ($key <> "id") ? @current($format) : "option";
                        echo "      " . format_key($key, $inputname, $curr_format) . "\n";
                        $columnsCount = $key;
                        if ($sortable === TRUE && $counter == 2) {
                            echo "      " . format_key("", "") . "\n";
                        }
                        @next($format);
                        $counter++;
                    }
                    // echo '<td>'.$translation->get("action").'</td>';
                    echo "    </tr>\n";
                    echo "   </thead> <tbody>\n";
                    $firstrow = FALSE;
                }

                $markCheckedRow = FALSE;
                if (isset($_REQUEST['linklist_form'])) {
                    if ($formname == $_REQUEST['linklist_form']) {
                        $markCheckedRow = TRUE;
                    }
                } else {
                    $markCheckedRow = TRUE;
                }

                if ($markCheckedRow === TRUE) {
                    $checkedRow = $row['id'] == $_REQUEST[$inputname] ? 'true' : 'false';
                }
                
                echo "  <tr id=\"linklistid_{$row['id']}\" class=\"linklist_content\" data-checked=\"" . $checkedRow . "\" data-inputname=\"" . $inputname . "\" data-action=\"" . $dblclick_action . "\" data-inputid=\"{$row['id']}\">\n";
                if (is_array($format)) {
                    reset($format);
                }
                $counter = 1;
                foreach ($row as $key => $value) {
                    $curr_format = ($key <> "id") ? @current($format) : "option";
                    if ($key == "option") {
                        @next($format);
                        continue;
                    }
                    echo "      " . format_value($value, $inputname, $curr_format) . "\n";
                    if($key == $columnsCount){
                        // loadAction($formname, $deleteAction, $dblclick_action, $keyCount); 
                        $keyCount++;
                    }   
                    if ($sortable === TRUE && $counter == 2) {
                        echo "      " . format_value("", "sorticon", "sort") . "\n";
                    }
                    @next($format);
                    $counter++;
                }
                echo "   </tr>\n";
            }
            echo "</tbody>  </table>\n";
            if($withoutDataTable == FALSE){
                loadDataTable($formname.'_table');         
            }
        } else {
            echo "<div class=\"infobox\">" . $translation->get("no_rows_found") . "</div>";
        }
    }
}

function loadDataTable($formname){
    // Load DT styles
    echo '      <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/dt/dt-1.11.4/datatables.min.css"/>
    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/fomantic-ui/2.8.8/semantic.min.css"/>
    <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.11.4/css/dataTables.semanticui.min.css"/>';
    // Load DT styles End
        // Load DT Scripts
        echo    '<script
                src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
                <script type="text/javascript" src="https://cdn.datatables.net/1.11.4/js/jquery.dataTables.min.js"></script>
                <script type="text/javascript" src="https://cdn.datatables.net/1.11.4/js/dataTables.semanticui.min.js"></script>
                <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/fomantic-ui/2.8.8/semantic.min.js"></script>';    
                 // Load DT Scripts End
?>
<script>
      var $y = jQuery.noConflict();
      $y(document).ready( function () {

        $y("<?='#'.$formname;?>").DataTable({
            "paging":   false,
            "ordering": true,
            "language": { 
                "search":"", 							
                "searchPlaceholder": "Suche",

            
            },



        
            "lengthMenu": [[5, 10, 15, 30, -1], [5, 10, 15, 30, "All"]],
            "pageLength": "All",
            "responsive": true,
            'searching'   : true,
            "scrollX": false,
            "info":     false,
            columnDefs: [
                
            ],
        } );
    });

    
</script>

<?}
// Funktion zum anzeige eine Tabelle aus einem SQL-Query für shop
function linklist2( $result, $formname = "linklist", $format = NULL, $inputname = "input_id" ) {

    $num_rows = @mysqli_num_rows($result);
    if ($num_rows >= 1) {
        $firstrow          = TRUE;
        $input_arr_counter = 0;
        echo "  <div class=\"linklist table_area\">\n";
        while ($row = @mysqli_fetch_array($result, 1)) {
            if ($firstrow) {
                @reset($format);
                echo "    <div class='table_row table_header'>\n";
                foreach ($row as $key => $value) {

                    $curr_format = ($key <> "id") ? @current($format) : "option";

                    echo "      " . format_key2($key, $inputname, $curr_format) . "\n";
                    @next($format);
                }
                echo "    </div>\n";
                $firstrow = FALSE;
            }
            $input_arr_text = ($num_rows > 1) ? "[" . $input_arr_counter . "]" : "";
            echo "<div class='table_row table_body' onClick=\"document." . $formname . "." . $inputname . $input_arr_text . ".checked = true; \">\n";
            $input_arr_counter++;
            @reset($format);
            foreach ($row as $key => $value) {
                $curr_format = ($key <> "id") ? @current($format) : "option";
                echo "      " . format_value2($value, $inputname, $curr_format, $key) . "\n";
                @next($format);
            }
            echo "</div>\n";
        }
        echo "</div>\n";
    } else {
        $style = ($formname == "form_sales_return_history_list" ? " style=\"margin-top: 0 !important;\"" : "");
        echo "<div class=\"emptybox\"".$style.">Keine Datens&auml;tze vorhanden</div>";
    }
    switch ($formname) {
        case "form_shipment_address_list":
            $action = 'edit_shipment_address&action_id=edit';
            break;
        case "form_shop_user_list":
            $action = 'edit_shop_user&action_id=edit';
            break;
        case "form_order_history_list":
            $action = 'order_history&action_id=card';
            break;
        case "form_sales_contract_history_list":
            $action = 'contract_history&action_id=card';
            break;
        case "form_sales_invoice_history_list":
            $action = 'sales_invoice_history&action_id=card';
            break;
        case "form_sales_shipment_history_list":
            $action = 'sales_shipment_history&action_id=card';
            break;
        case "form_sales_cr_memo_history_list":
            $action = 'sales_cr_memo_history&action_id=card';
            break;
        case "form_sales_return_history_list":
            $action = 'sales_return_history&action_id=card';
            break;
    }
    ?>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#<?=$formname;?> .table_body').click(function(){
                $('#<?=$formname;?>').attr('action','?shop_category=account&action=<?=$action?>');
                $('#<?=$formname;?>').submit();
            });
        });
    </script>

    <?php
}

function format_value( $value, $inputname, $format = NULL ) {
    $translation = \DynCom\mysyde\common\classes\Registry::get("translation");

    switch ($format) {
        case 'text':
            return "<td class=\"" . $format . "\"><div>" . $value . "</div></td>";
            break;
        case 'date':
            return "<td class=\"" . $format . "\"><div>" . $value . "</div></td>";
            break;
        case 'euro':
            return "<td class=\"" . $format . "\"><div style='text-align: right;'>" . number_format($value, 2, ',', '.') . " &euro;</div></td>";
            break;
        case 'decimal':
            return "<td class=\"" . $format . "\"><div>" . number_format($value, 2, ',', '.') . "</div></td>";
            break;
        case 'integer':
            return "<td class=\"" . $format . "\"><div>" . number_format($value, 0, '', '') . "</div></td>";
            break;
        case 'boolean':
            return ($value == 1) ? "<td class=\"" . $format . "\"><div>" . $translation->get("yes") . "</div></td>" : "<td><div>" . $translation->get("no") . "</div></td>";
            break;
        case 'boolean_active':
            return ($value == 1) ? "<td class=\"" . $format . "\"><div>" . $translation->get("active") . "</div></td>" : "<td><div>" . $translation->get("inactive") . "</div></td>";
            break;
        case 'option':
            $checked = ($value == $_POST[$inputname]) ? " checked=\"checked\"" : "";
            return "<td style=\"width: 20px;display:none;\" class=\"" . $format . "\"></td>";
            break;
        case 'sort':
            return "<td width=\"100\" class=\"sorticon\"><div>" . $value . "</div></td>";
            break;
        case 'href':
            return "<td width=\"100\" class=\"sorticon\"><div> <a href= '".$value."' target='_blank'><span class='material-icons'>link</span>". "</a></div></td>";
            break;    
        default:
            return "<td class=\"" . $format . "\"><div>" . $value . "</div></td>";
            break;
    }
}

function format_value2( $value, $inputname, $format = NULL ,$key = "" ) {
    if($key != "") {
        $label = "<span class=\"table_cell_label\">" . $key . "</span> ";
    }else{
        $label = "";
    }
    switch ($format) {
        case 'text':
            return "<div class=\"table_cell " . $format . "\">".$label . "<span>".htmlspecialchars($value, ENT_QUOTES, "UTF-8") . "</span></div>";
            break;
        case 'date':
            return "<div class=\"table_cell text-right datepicker\">" . $label . "<span>".htmlspecialchars($value, ENT_QUOTES, "UTF-8") . "</span></div>";
            break;
        case 'euro':
            return "<div class=\"table_cell text-right " . $format . "\">" . $label . "<span>".number_format($value, 2, ',', '.') . " &euro;</span></div>";
            break;
        case 'decimal':
            return "<div class=\"table_cell text-right " . $format . "\">" . $label . "<span>".number_format($value, 2, ',', '.') . "</span></div>";
            break;
        case 'integer':
            return "<div class=\"table_cell text-right " . $format . "\">" . $label . "<span>".number_format($value, 0, '', '') . "</span></div>";
            break;
        case 'boolean':
            return ($value == 1) ? "<div class=\"table_cell " . $format . "\">".$label."<span>Ja</span></div>" : "<div class=\"table_cell " . $format . "\">".$label."<span>Nein</span></div>";
            break;
        case 'boolean_active':
            return ($value == 1) ? "<div class=\"table_cell " . $format . "\">".$label."<span>Aktiv</span></div>" : "<div class=\"table_cell " . $format . "\">".$label."<span>Inaktiv</span></div>";
            break;
        case 'option':
            $checked = ($value == $_POST[$inputname]) ? " checked=\"checked\"" : "";
            return "<div style=\"width: 20px; display:none;\" class=\"table_cell " . $format . "\"><input id=\"" . $inputname . "\" name=\"" . $inputname . "\" type=\"radio\" value=\"" . $value . "\"" . $checked . "/></div>";
            break;
        default:
            return "<div class=\"table_cell " . $format . "\">" . $label . "<span>".htmlspecialchars($value, ENT_QUOTES, "UTF-8") . "</span></div>";
            break;
    }
}

function format_key( $key, $inputname, $format = NULL ) {
    switch ($format) {
        case 'option':
            return "<td style=\"display:none;\" class=\"" . $format . "\"></td>";
            break;
        
        default:
            return "<td class=\"" . $format . "\"><div>" . $key . "</div></td>";
            break;
    }
}

function format_key2( $key, $inputname, $format = NULL ) {
    switch ($format) {
        case 'option':
            return "<div class=\"table_cell " . $format . "\" style=\"display:none\">&nbsp;</div>";
            break;
        case 'date' :
            return "<div class=\"table_cell text-right datepicker\">" . htmlspecialchars($key, ENT_QUOTES, "UTF-8") . "</div>";
            break;
        case 'euro':
            return "<div class=\"table_cell text-right ". $format . "\">" . htmlspecialchars($key, ENT_QUOTES, "UTF-8") . "</div>";
            break;
        case 'decimal':
            return "<div class=\"table_cell text-right ". $format . "\">" . htmlspecialchars($key, ENT_QUOTES, "UTF-8") . "</div>";
            break;
        case 'integer':
            return "<div class=\"table_cell text-right ". $format . "\">" . htmlspecialchars($key, ENT_QUOTES, "UTF-8") . "</div>";
            break;
        default:
            return "<div class=\"table_cell " . $format . "\">" . htmlspecialchars($key, ENT_QUOTES, "UTF-8") . "</div>";
            break;
    }
}

function format_seperator( $format ) {
    switch ($format) {
        case 'option':
            return "<td style=\"display:none;\"><div>&nbsp;</div></td>";
            break;
        default:
            return "<td class=\"linklist_seperator\">&nbsp;</td>";
            break;
    }
}

function button( $typ, $name, $formname, $action = "", $confirm = "", $promoted = TRUE ) {
    $confirm_start_text = "";
    $confirm_end_text   = "";
    if ($confirm <> "") {
        $confirm_start_text = "if(confirm('" . $confirm . "')) { ";
        $confirm_end_text   = " }";
    }

    if ($typ == "") {
        $typ = "inhalt_collection graybox";
    }

    $_promoted = $promoted === TRUE ? 'promoted' : 'not_promoted';
    if ($GLOBALS['shop_language']['code'] != '') {
        switch ($typ) {
            case "reset":
                echo "<a class=\"button_" . $typ . "\" href=\"javascript:void(0);\" onclick=\"" . $confirm_start_text . "document." . $formname . ".reset(); return false;" . $confirm_end_text . "\">" . htmlspecialchars($name, ENT_QUOTES, "UTF-8") . "</a>\n";
                break;
            default:
                echo "<a class=\"button_" . $typ . "\" href=\"javascript:void(0);\" onclick=\"" . $confirm_start_text . "document." . $formname . ".action='" . $action . "'; document." . $formname . ".submit(); return false" . $confirm_end_text . ";\">" . htmlspecialchars($name, ENT_QUOTES, "UTF-8") . "</a>\n";
                break;
        }
    } else {
        switch ($typ) {
            case "reset":
                echo "<li class=\"" . $_promoted . "\"> <a data-formname=\"" . $formname . "\" class=\"button_" . $typ . "\" href=\"javascript:void(0);\" onclick=\"setCurrentToolbarClicked(this);" . $confirm_start_text . "document." . $formname . ".reset(); return false;" . $confirm_end_text . "\">" . $name . "</li></a>\n";
                break;
            case "closeoverlay":    
                echo "<div class=\"" . $_promoted . "\"> <a data-formname=\"" . $formname . "\" class=\"button_" . $typ . "\" href=\"javascript:void(0);\" onclick=\"setCurrentToolbarClicked(this);" . $action . ";\">" . $name . "</a></div>\n";
                break;
            default:
                echo "<li class=\"" . $_promoted . "\"> <a data-formname=\"" . $formname . "\" class=\"button_" . $typ . "\" href=\"javascript:void(0);\" onclick=\"setCurrentToolbarClicked(this);" . $action . ";\">" . $name . "</a></li>\n";
                break;
        }
    }
}

function button2( $typ, $name, $formname, $action = "", $confirm = "" ) {
    if ($confirm <> "") {
        $confirm_start_text = "if(confirm('" . $confirm . "')) { ";
        $confirm_end_text   = " }";
    }
    switch ($typ) {
        case "reset":
            echo "<li><a class=\"button_" . $typ . "\" href=\"javascript:void(0);\" onclick=\"" . $confirm_start_text . "document." . $formname . ".reset(); return false;" . $confirm_end_text . "\">" . htmlspecialchars($name, ENT_QUOTES, "UTF-8") . "</a></li>\n";
            break;
        default:
            echo "<li><a class=\"button_" . $typ . "\" href=\"javascript:void(0);\" onclick=\"" . $confirm_start_text . "document." . $formname . ".action='" . $action . "'; document." . $formname . ".submit(); return false" . $confirm_end_text . ";\">" . htmlspecialchars($name, ENT_QUOTES, "UTF-8") . "</a></li>\n";
            break;
    }
}

function button_finish( $typ, $name, $formname, $action = "", $confirm = "" ) {
    if ($confirm <> "") {
        $confirm_start_text = "if(confirm('" . $confirm . "')) { ";
        $confirm_end_text   = " }";
    }
    switch ($typ) {
        case "reset":
            echo "<a class=\"button_" . $typ . "\" href=\"javascript:void(0);\" onclick=\"" . $confirm_start_text . " pay_other(); return false;" . $confirm_end_text . "\">" . htmlspecialchars($name, ENT_QUOTES, "UTF-8") . "</a>\n";
            break;
        default:
            echo "<a class=\"button_" . $typ . "\" href=\"javascript:void(0);\" onclick=\"" . $confirm_start_text . " pay_other(); return false" . $confirm_end_text . ";\">" . htmlspecialchars($name, ENT_QUOTES, "UTF-8") . "</a>\n";
            break;
    }
}

function set_page_link(
    $sitepart_id,
    $header_id,
    $collection_list = 0,
    $collection_id = 0,
    $collection_setup_id = 0,
    $collection_view_type = 0,
    $collection_items = 0,
    $collection_page_list_id = 0,
    $main_page_group = 0,
    $main_page_group_code = "",
    $main_page_group_name = "",
    $main_page_group_link = ""
) {

    $sorting = @mysqli_fetch_array(@mysqli_query($GLOBALS['mysql_con'], "SELECT MAX(sorting)+1 AS 'newsorting' FROM main_page_link WHERE main_page_id = '" . $_REQUEST["input_page_id"] . "'"));
    $sorting = ($sorting["newsorting"] <> "") ? $sorting = $sorting["newsorting"] : $sorting = 1;

    $layout_area_id = 0;
    $active         = 0;

    $sessiondata = get_visitor_data();

    if (isset($sessiondata['page_options']['page_option_layoutarea'])) {
        $layout_area_id = $sessiondata['page_options']['page_option_layoutarea'];
    }

    if (isset($sessiondata['page_options']['page_option_active'])) {
        $active = $sessiondata['page_options']['page_option_active'];
    }

    $query = "INSERT INTO main_page_link (
			main_page_id, 
			main_sitepart_id, 
			main_sitepart_header_id,
			main_collection_list, 
			main_collection_id, 
			main_collection_setup_id, 
			main_collection_page_list_id,
			main_collection_items,
			main_collection_view_type,
			main_page_group,
			main_page_group_code,
			main_page_group_name,
			main_page_group_link,
			modified_user, 
			modified_date, 
			layout_area_id, 
			active, 
			sorting
		)
		VALUES (
			'" . $_REQUEST["input_page_id"] . "',
			'" . $sitepart_id . "',
			'" . $header_id . "',
			'" . $collection_list . "',
			'" . $collection_id . "',
			'" . $collection_setup_id . "',
			'" . $collection_page_list_id . "',
			'" . $collection_items . "',
			'" . $collection_view_type . "',
			'" . $main_page_group . "',
			'" . $main_page_group_code . "',
			'" . $main_page_group_name . "',
			'" . $main_page_group_link . "',
			" . (int)$GLOBALS["admin_user"]['id'] . ",
			" . time() . ",
			" . $layout_area_id . ",
			" . $active . ",
			" . $sorting . "
		)
	";

    @mysqli_query($GLOBALS['mysql_con'], $query);
    $input_id = mysqli_insert_id($GLOBALS['mysql_con']);

    $query = "UPDATE main_page set modified_date = " . time() . ", modified_user = " . (int)$GLOBALS["admin_user"]['id'] . " where id = '" . (int)$_REQUEST["input_page_id"]."'";
    @mysqli_query($GLOBALS['mysql_con'], $query);

    $_REQUEST['input_id']              = $input_id;
    $_REQUEST['get_real_page_link_id'] = 0;

    update_visitor_data(array(
        'page_options' => array()
    ));
}

function set_component_link( $sitepart_id, $header_id, $collection_list = 0, $collection_id = 0, $collection_setup_id = 0, $collection_view_type = 0, $collection_items = 0, $collection_page_list_id = 0 ) {
    $sorting = @mysqli_fetch_array(@mysqli_query($GLOBALS['mysql_con'], "SELECT MAX(sorting)+1 AS 'newsorting' FROM main_component_link WHERE main_component_id = '" . $_REQUEST["input_component_id"]."'"));
    $sorting = ($sorting["newsorting"] <> "") ? $sorting = $sorting["newsorting"] : $sorting = 1;

    $query = "INSERT INTO main_component_link (
		main_component_id, 
		main_sitepart_id, 
		main_sitepart_header_id, 
		main_collection_list, 
		main_collection_id, 
		main_collection_setup_id, 
		main_collection_page_list_id,
		main_collection_items,
		main_collection_view_type,
		modified_user, 
		modified_date, 
		sorting
		) VALUES (
			'" . $_REQUEST["input_component_id"] . "',
			'" . $sitepart_id . "',
			'" . $header_id . "',
			'" . $collection_list . "',
			'" . $collection_id . "',
			'" . $collection_setup_id . "',
			'" . $collection_page_list_id . "',
			'" . $collection_items . "',
			'" . $collection_view_type . "',
			" . (int)$GLOBALS["admin_user"]['id'] . ",
			" . time() . ",
			" . $sorting . "
		)
	";
    @mysqli_query($GLOBALS['mysql_con'], $query);
    $input_id = mysqli_insert_id($GLOBALS['mysql_con']);

    $query = "UPDATE main_component set modified_date = " . time() . ", modified_user = " . (int)$GLOBALS["admin_user"]['id'] . " where id = '" . (int)$_REQUEST["input_component_id"]."'";
    @mysqli_query($GLOBALS['mysql_con'], $query);

    $_REQUEST['input_id']              = $input_id;
    $_REQUEST['get_real_page_link_id'] = 0;
}

function is_page_edit() {
    if ($_REQUEST["input_page_id"] && $_REQUEST["input_page_id"] != "") {
        return TRUE;
    } else {
        return FALSE;
    }
}

function is_component_edit() {
    if ($_REQUEST["input_component_id"] && $_REQUEST["input_component_id"] != "") {
        return TRUE;
    } else {
        return FALSE;
    }
}
function is_contact_edit() {
    if ($_REQUEST["input_contactform_id"] && $_REQUEST["input_contactform_id"] != "") {
        return TRUE;
    } else {
        return FALSE;
    }
}
function set_multi_contact_link(
    $sitepart_id,
    $header_id,
    $collection_list = 0,
    $collection_id = 0,
    $collection_setup_id = 0,
    $collection_view_type = 0,
    $collection_items = 0,
    $collection_page_list_id = 0,
    $main_page_group = 0,
    $main_page_group_code = "",
    $main_page_group_name = "",
    $main_page_group_link = "",
    $input_contactform_id = 0,
    $contactform_line_id = 0
) {
    
    
    $sorting = @mysqli_fetch_array(@mysqli_query($GLOBALS['mysql_con'], "SELECT MAX(sorting)+1 AS 'newsorting' FROM multi_contactform_link WHERE main_section_id = '" . $_REQUEST["input_section_id"] . "'"));
    $sorting = ($sorting["newsorting"] <> "") ? $sorting = $sorting["newsorting"] : $sorting = 1;

    $layout_area_id = 0;
    $active         = 0;
    if(isset($_REQUEST['input_contactform_id'])){
        $input_contactform_id = $_REQUEST['input_contactform_id'];
    }
    if(isset($_REQUEST['contactform_line_id'])){
        $contactform_line_id = $_REQUEST['contactform_line_id'];
        
    }
    if(isset($_REQUEST['input_active'])){
        $active = 1;
    }
    $sessiondata = get_visitor_data();
    if (isset($_REQUEST['input_layout_area_id'])) {
        $layout_area_id = $_REQUEST['input_layout_area_id'];
    }
    if (isset($sessiondata['page_options']['page_option_layoutarea'])) {
        $layout_area_id = $sessiondata['page_options']['page_option_layoutarea'];
    }

    if (isset($sessiondata['page_options']['page_option_active'])) {
        $active = $sessiondata['page_options']['page_option_active'];
    }
   $layout_class_defined = '';
   if(isset($_REQUEST['layout_class_defined'])){
       $layout_class_defined = $_REQUEST['layout_class_defined'];
   }
    $query = "INSERT INTO multi_contactform_link (
			main_section_id, 
			main_sitepart_id, 
			main_sitepart_header_id,
			main_collection_list, 
			main_collection_id, 
			main_collection_setup_id, 
			main_collection_section_list_id,
			main_collection_items,
			main_collection_view_type,
			main_section_group,
			main_section_group_code,
			main_section_group_name,
			main_section_group_link,
			modified_user, 
			modified_date, 
			layout_area_id, 
			active, 
			sorting,
            contact_form_id,
            contactform_line_id,
            layout_class_defined
		)
		VALUES (
			'" . $_REQUEST["input_section_id"] . "',
			'" . $sitepart_id . "',
			'" . $header_id . "',
			'" . $collection_list . "',
			'" . $collection_id . "',
			'" . $collection_setup_id . "',
			'" . $collection_page_list_id . "',
			'" . $collection_items . "',
			'" . $collection_view_type . "',
			'" . $main_page_group . "',
			'" . $main_page_group_code . "',
			'" . $main_page_group_name . "',
			'" . $main_page_group_link . "',
			" . (int)$GLOBALS["admin_user"]['id'] . ",
			" . time() . ",
			" . $layout_area_id . ",
			" . $active . ",
			" . $sorting . ",
            ".$input_contactform_id.",
            ".$contactform_line_id.",
            '".$layout_class_defined."'
		)
	";
 
    @mysqli_query($GLOBALS['mysql_con'], $query);
    $input_id = mysqli_insert_id($GLOBALS['mysql_con']);

    $query = "UPDATE contactform_header set modified_date = " . time() . ", modified_user = " . (int)$GLOBALS["admin_user"]['id'] . " where id = '" . (int)$_REQUEST["input_contactform_id"]."'";
    @mysqli_query($GLOBALS['mysql_con'], $query);
 
    $_REQUEST['input_id']              = $_REQUEST["input_contactform_id"];
    $_REQUEST['data-inputid'] =  $input_id;
    $_REQUEST['get_real_page_link_id'] = 0;

    
}
function is_collection_edit() {
    $sessiondata = get_visitor_data();

    if ($sessiondata['collection_options']['collection_edit'] === TRUE) {
        return TRUE;
    } else {
        return FALSE;
    }
}

/**
 * Erzeugt eine selectbox zum auswaehlen von input-typen bei einer kollektion
 *
 * @access public
 *
 * @param string $name       Label
 * @param string $selectname name der selectbox
 *
 * @return void
 */
function create_collection_select( $collections, $name, $selectname = "input_choose_collection", $input_line, $disabled = FALSE, $chooseText = FALSE, $onchange = "" ) {

    $translation  = \DynCom\mysyde\common\classes\Registry::get("translation");
    $siteparts    = \DynCom\mysyde\common\classes\Siteparts::get();
    $disabledText = "";
    if ($disabled === TRUE) {
        $disabledText = 'disabled="disabled"';
    }

    echo "<div class=\"label\"><label for=\"" . $selectname . "\">" . $name . "</label></div>";
    echo "<div class=\"input\"><select " . $disabledText . " onchange=\"" . $onchange . "\" class=\"bigselect\" name=\"" . $selectname . "\" id=\"" . $selectname . "\">";

    if ($chooseText === TRUE) {
        echo "<option value=\"\">" . $translation->get("please_choose") . "</option>";
    }

    foreach ($collections as $setupId => $setupData) {
        $selected = '';

        if ($setupId == $input_line['main_collection_setup_id'] || $_REQUEST['filter_collection_setup_id'] == $setupId) {
            $selected = 'selected="selected"';
        }
        echo "<option " . $selected . " value=\"" . $setupId . "\">" . $setupData['description'] . "</option>";
    }

    echo "</select>";
}

function create_contactform_select( $contactforms, $name, $selectname = "input_choose_collection", $input_line, $disabled = FALSE ) {
    $translation  = \DynCom\mysyde\common\classes\Registry::get("translation");
    $siteparts    = \DynCom\mysyde\common\classes\Siteparts::get();
    $disabledText = "";
    if ($disabled === TRUE) {
        $disabledText = 'style="display:none;"';
    }

    echo "<div " . $disabledText . " class=\"registration_select\">";

    echo "<div class=\"label\"><label for=\"" . $selectname . "\">" . $name . "</label></div>";
    echo "<div class=\"input\"><select class=\"bigselect\" name=\"" . $selectname . "\" id=\"" . $selectname . "\">";

    foreach ($contactforms as $setupId => $setupData) {
        $selected = '';

        if ($setupId == $input_line['registration_contactform_id'] || $_REQUEST['registration_contactform_id'] == $setupId) {
            $selected = 'selected="selected"';
        }
        echo "<option " . $selected . " value=\"" . $setupId . "\">" . $setupData['description'] . "</option>";
    }

    echo "</select>";

    echo "</div></div>";
}

/**
 * Erzeugt eine selectbox zum auswählen von Seiten, die eine Kollektionsliste enthalten
 *
 * @access public
 *
 * @param string $name       Label
 * @param string $selectname name der selectbox
 *
 * @return void
 */
function create_page_with_collection_select( $collection_setup_id, $name, $selectname = "input_choose_collection", $input_line, $disabled = FALSE ) {

    if ((int)$collection_setup_id <= 0) {
        return;
    }

    $translation  = \DynCom\mysyde\common\classes\Registry::get("translation");
    $siteparts    = \DynCom\mysyde\common\classes\Siteparts::get();
    $disabledText = "";
    if ($disabled === TRUE) {
        $disabledText = 'disabled="disabled"';
    }

    $pageIds = array();
    $query   = "SELECT main_page_id FROM main_page_link WHERE main_collection_setup_id = '" . $collection_setup_id."'";
    $result  = @mysqli_query($GLOBALS['mysql_con'], $query);
    while ($row = @mysqli_fetch_array($result, 1)) {
        $pageIds[] = $row['main_page_id'];
    }

    if (count($pageIds) == 0) {
        echo "<p class=\"bold info\">Keine Seite mit diesem Kollektionstyp gefunden.</p>";
        return;
    }

    $pages  = array();
    // $query  = "SELECT * FROM main_navigation WHERE forward_page_id IN (" . join(",", $pageIds) . ") AND forward_type = 1 AND main_language_id = " . $GLOBALS["language"]['id'];
    $querySetup = "SELECT * FROM main_collection_setup WHERE id = ".$collection_setup_id;
    $resultSetup = @mysqli_query($GLOBALS['mysql_con'], $querySetup);
    $rowSetup = @mysqli_fetch_array($resultSetup);
    if($rowSetup['main_language_id'] != $GLOBALS["language"]['id'] && $rowSetup['is_multidomain'] == 1){
        $query  = "SELECT * FROM main_navigation WHERE forward_page_id IN (" . join(",", $pageIds) . ") AND forward_type = 1 " ;
    }else{
        $query  = "SELECT * FROM main_navigation WHERE forward_page_id IN (" . join(",", $pageIds) . ") AND forward_type = 1 AND main_language_id = " . $GLOBALS["language"]['id'];
    }
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    while ($row = @mysqli_fetch_array($result, 1)) {
        $pages[$row['id']] = $row;
    }

    if (count($pages) == 0) {
        echo "<p class=\"bold info\">Keine Seite mit diesem Kollektionstyp gefunden.</p>";
        return;
    }

    echo "<div class=\"label\"><label for=\"" . $selectname . "\">" . $name . "</label></div>";
    echo "<div class=\"input\"><select " . $disabledText . " class=\"bigselect\" name=\"" . $selectname . "\" id=\"" . $selectname . "\">";

    foreach ($pages as $pageId => $pageData) {
        $selected = '';
        // multi-setup site name
        $query = "SELECT ms.name FROM main_site as ms WHERE ms.id= ".$pageData['main_site_id']." LIMIT 1";
         
        $resultSite = @mysqli_query($GLOBALS['mysql_con'], $query);
        $siteData = @mysqli_fetch_array($resultSite);
        $Sitename = "";
        if(count($siteData) > 0){
            $Sitename  = ' - '.$siteData['name'];
        }
        // site name

        if ($pageId == $input_line[$selectname]) {
            $selected = 'selected="selected"';
        }
        echo "<option " . $selected . " value=\"" . $pageId . "\">" . $pageData['menu_name'] . $Sitename. "</option>";
    }

    echo "</select>";
}

function create_collection_preview_tags($page_link_id){

    $query = "SELECT * FROM main_page_collection_tag_link WHERE main_page_link_id = '" . $page_link_id . "'";
    $result = mysqli_query($GLOBALS['mysql_con'], $query);
    $tags = array();
    while($row = @mysqli_fetch_array($result)){
        array_push($tags,$row['code']);
    }

    $tags = implode(', ', $tags);

    input("Tags", "input_tags", "text", $tags, 999);
}

function create_collection_preview_group_select( $collection_setup_id, $page_link_id, $active_groups = array() ) {
    $translation = \DynCom\mysyde\common\classes\Registry::get("translation");

    $query  = "SELECT * FROM main_collection_setup_group WHERE main_collection_setup_id = '" . $collection_setup_id."'";
    $result = mysqli_query($GLOBALS['mysql_con'], $query);
    if (@mysqli_num_rows($result) == 0) {
        return;
    } 
     
    ?>
    <!-- while start -->
    <div class="label"><?php echo $translation->get("collection_groups"); ?></div>
            <div class="groups bc-select-ui ui fluid multiple search selection dropdown" style="clear:both;display:inline-block;">
                <input type="hidden" name="select_group">
                <i class="dropdown icon"></i>
                <div class="default text"><?php echo $translation->get("collection_groups"); ?></div>
                <div class="menu">
                    <?  
                        
                    
                        while($row = @mysqli_fetch_array($result)) {
                            
                                echo "<div class=\"item\" data-value=\"{$row['id']}\">".$row["description"]."</div>";
                            
                        }
                      
                    ?>
                </div>
    </div>
    <!-- While End -->
    <?  
    ?>
    <script type="text/javascript" src="/plugins/jquery/jquery-3.5.1.min.js"></script>
                <script type="text/javascript" src="/plugins/Semantic-UI-master/semantic.min.js"></script>
                <link rel="stylesheet" type="text/css" href="/plugins/Semantic-UI-master/bc-semantic.css?time=<?= filemtime($_SERVER['DOCUMENT_ROOT'] . '/plugins/Semantic-UI-master/bc-semantic.css')?>">
                <script>
                    var $y = jQuery.noConflict();

                    $y( document ).ready(function() {
                        $y('.groups.ui.fluid.multiple.dropdown').dropdown('set selected', <?= json_encode($active_groups) ?>); 
                    });


    </script>
    <?

}

function update_sitepart_changes( $sitepartId, $headerId, $delete = FALSE ) {

    $languageId = (int)$GLOBALS["language"]['id'];

    if ($delete === TRUE) {
        $query = "DELETE FROM main_sitepart_changes where main_language_id = " . $languageId . " and main_sitepart_id = " . (int)$sitepartId . " and main_sitepart_header_id = '" . (int)$headerId."'";
        @mysqli_query($GLOBALS['mysql_con'], $query);
        return;
    }

    // check if row exists
    $query = "SELECT id from main_sitepart_changes where main_language_id = '" . $languageId . "' and main_sitepart_id = '" . (int)$sitepartId . "' and main_sitepart_header_id = '" . (int)$headerId."'";

    $result   = @mysqli_query($GLOBALS['mysql_con'], $query);
    $num_rows = @mysqli_num_rows($result);
    if ($num_rows >= 1) {
        $query = "update main_sitepart_changes SET 
			modified_date = " . time() . ",
			modified_user = " . (int)$GLOBALS["admin_user"]['id'] . "
		WHERE main_language_id = " . $languageId . " and main_sitepart_id = " . (int)$sitepartId . " and main_sitepart_header_id = '" . (int)$headerId."'";
    } else {
        $query = "insert into main_sitepart_changes (main_language_id, main_sitepart_id, main_sitepart_header_id, modified_date, modified_user) VALUES (
			" . $languageId . ",
			" . $sitepartId . ",
			'" . $headerId . "',
			" . time() . ",
			" . (int)$GLOBALS["admin_user"]['id'] . "
		)";
    }

    @mysqli_query($GLOBALS['mysql_con'], $query);
}


//Alte Input-funktion
//function input($name,$inputname,$typ,$value = NULL,$maxlength = NULL,$disabled = FALSE) {
//    echo "<div class=\"label\"><label for=\"" . $inputname . "\">" . htmlspecialchars($name, ENT_QUOTES, "UTF-8") . "</label></div>";
//	$disabled_text = ($disabled) ? " disabled=\"disabled\"" : "";
//	$maxlength_text = ($maxlength <> '') ? " maxlength=\"" . $maxlength . "\"" : "";
//	switch($typ) {
//		case "smalltextarea": echo "<div class=\"input\"><textarea name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"small\"" . $disabled_text . $maxlength_text . ">" . $value . "</textarea></div>\n"; break;
//		case "textarea": echo "<div class=\"input\"><textarea name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"normal\"" . $disabled_text . $maxlength_text . ">" . $value . "</textarea></div>\n"; break;
//		case "file": echo "<div class=\"input\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"" . $typ . "\" type=\"file\" /></div>\n"; break;
//		case "checkbox": $checked_text = ($value) ? "checked=\"checked\"" : ""; echo "<div class=\"input\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"checkbox\" type=\"checkbox\"" . $disabled_text . $checked_text . "/></div>\n"; break;
//		case "checkbox_with_formreload": $checked_text = ($value) ? "checked=\"checked\"" : ""; echo "<div class=\"input\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"checkbox\" type=\"checkbox\"" . $disabled_text . $checked_text . " onclick=\"this.form.submit();\"/></div>\n"; break;
//		case "password": echo "<div class=\"input\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"code\" type=\"password\"" . $disabled_text . $maxlength_text . " value=\"" . $value . "\" /></div>\n"; break;
//		case "input_pref_delivery_date": echo "<div class=\"input\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"code\" type=\"text\"" . $disabled_text . $maxlength_text . " value=\"" . $value . "\" /><img src=\"/layout/frontend/bluestar/img/calendar_icon.png\" width=\"15\" height=\"16\" onclick='fPopCalendar(\"date\")' /></div> \n"; break;
//		default: echo "<div class=\"input\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"" . $typ . "\" type=\"text\"" . $disabled_text . $maxlength_text . " value=\"" . $value . "\" /></div>\n"; break;
//	}
//}

function input( $name, $inputname, $typ, $value = "on", $maxlength = NULL, $disabled = FALSE, $evaluate = FALSE, $script = "", $idSuffix = '', $required = FALSE ) {
    if ($evaluate && $value == "") {
        //$eval_string = "<font color=\"red\">Bitte fÃ¼llen Sie dieses Feld aus</font>";
        $typ = $typ . "_error";
    } else {
        //$eval_string = "";
    }
    $eval_string = "";
    $required_text = ($required) ? " required=\"required\"" : "";
    
    if ($typ != "smalltext_cc_2_error" && $typ != "hidden") {
        echo "<div class=\"label " . $inputname . "\"><label for=\"" . $inputname . "\" >" . $name . "</label></div>";
    }
    $disabled_text  = ($disabled) ? " disabled=\"disabled\"" : "";
    $maxlength_text = ($maxlength <> '') ? " maxlength=\"" . $maxlength . "\"" : "";
    $value = htmlspecialchars($value);
    if ($typ == "checkbox") {
        if ($value == 1) {
            $value = "on";
        } else if ($value == 0) {
            $value = "";
        }
    }
    //$checked_text = "on";

    switch ($typ) {
        case "smalltextarea":
            echo "<div class=\"input " . $inputname . "\"><textarea name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"small\"" . $disabled_text . $maxlength_text . $required_text . ">" . $value . "</textarea></div>\n";
            break;
        case "textarea":
            echo "<div class=\"input " . $inputname . "\"><textarea name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"normal\"" . $disabled_text . $maxlength_text . $required_text . ">" . $value . "</textarea></div>\n";
            break;
        case "smalltext_cn_1_error":
            echo "<div class=\"input_2\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"" . $typ . "\" type=\"text\"" . $disabled_text . $maxlength_text . $required_text . " value=\"" . $value . "\" " . $script . " />" . $eval_string . "\n";
            break;
        case "smalltext_cn_1":
            echo "<div class=\"input_2\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"" . $typ . "\" type=\"text\"" . $disabled_text . $maxlength_text . $required_text . " value=\"" . $value . "\" " . $script . " />" . $eval_string . "\n";
            break;
        case "smalltext_cn_2_error":
            echo "<input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"" . $typ . "\" type=\"text\"" . $disabled_text . $maxlength_text . $required_text . " value=\"" . $value . "\" " . $script . " />" . $eval_string . "\n";
            break;
        case "smalltext_cn_2":
            echo "<input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"" . $typ . "\" type=\"text\"" . $disabled_text . $maxlength_text . $required_text . " value=\"" . $value . "\" " . $script . " />" . $eval_string . "\n";
            break;
        case "file":
            echo "<div class=\"input " . $inputname . "\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"" . $typ . "\" type=\"file\"" . $required_text . " /></div>\n";
            break;
        case "checkbox":
            $checked_text = ($value == "on") ? "checked=\"checked\"" : "";
            echo "<div class=\"input " . $inputname . "\"><input name=\"" . $inputname . "\" id=\"" . $inputname.$idSuffix . "\" class=\"checkbox\" type=\"checkbox\"" . $disabled_text . $checked_text . $required_text . " " . $script . "/>" . $eval_string . "</div>\n";
            break;
        case "checkbox_shop":
            $checked_text = ($value == "on") ? "checked=\"checked\"" : "";
            echo "<div class=\"input " . $inputname . "\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"checkbox_shop\" type=\"checkbox\"" . $disabled_text . $checked_text . $required_text . " " . $script . "/>" . $eval_string . "</div>\n";
            break;
        case "checkbox_with_formreload":
            $checked_text = ($value) ? "checked=\"checked\"" : "";
            echo "<div class=\"input " . $inputname . "\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"checkbox\" type=\"checkbox\"" . $disabled_text . $checked_text . $required_text . " onclick=\"this.form.submit();\"/>" . $eval_string . "</div>\n";
            break;
        case "checkbox_with_formreload_checked":
            $checked_text = ($value) ? "checked=\"checked\"" : "";
            echo "<div class=\"input " . $inputname . "\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"checkbox\" type=\"checkbox\"" . $disabled_text . $checked_text . $required_text . " onclick=\"this.form.submit();\"/></div>\n";
            break;
        case "password":
            echo "<div class=\"input " . $inputname . "\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"code\" type=\"password\"" . $disabled_text . $maxlength_text . $required_text . " value=\"" . $value . "\" /></div>\n";
            break;
        case "date":
            echo "<div class=\"input " . $inputname . "\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"date\" type=\"date\"" . $script . $disabled_text . $maxlength_text . $required_text . " value=\"" . $value . "\" /></div> \n";
            break;
        case "input_pref_delivery_date":
            echo "<div class=\"input " . $inputname . "\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"code\" type=\"text\"" . $disabled_text . $maxlength_text . $required_text . " value=\"" . $value . "\"  " . $script . " readonly /></div> \n";
            break;
        case "hidden":
            echo "<input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"" . $typ . "\" type=\"hidden\"" . $disabled_text . $maxlength_text . " value=\"" . $value . "\" " . $script . " />\n";
            break;
        case "number":
            echo "<div class=\"input " . $inputname . "\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"" . $typ . "\" type=\"number\"" . $disabled_text . $maxlength_text . $required_text . " value=\"" . $value . "\" " . $script . " min=\"0\" />" . $eval_string . "</div>\n";
            break;
        case "color":
            echo "<div class=\"input " . $inputname . "\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"" . $typ . "\" type=\"color\"" . $disabled_text . $maxlength_text . $required_text . " value=\"" . $value . "\" " . $script . " min=\"0\" />" . $eval_string . "</div>\n";
            break;
        default:
            echo "<div class=\"input " . $inputname . "\"><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"" . $typ . "\" type=\"text\"" . $disabled_text . $maxlength_text . $required_text . " value=\"" . $value . "\" " . $script . " />" . $eval_string . "</div>\n";
            break;
    }
}

function input_shop($name = '', $inputname = '', $typ = '', $value = "on", $maxlength = NULL, $disabled = FALSE, $evaluate = FALSE, $script = "", $required = false) {
    if ($evaluate && $value == "") {
        $error = "has-danger";
    }else{
        $error = "";
    }
    $eval_string = "";

    if ($typ != "smalltext_cc_2_error" && $typ != "smalltext_cn_2" && $name != "") {
        $label = "<label for=\"" . $inputname . "\">" . $name . "</label>";
    }else{
        $label = "";
    }
    $disabled_text  = ($disabled) ? " disabled=\"disabled\"" : "";
    $maxlength_text = ($maxlength <> '') ? " maxlength=\"" . $maxlength . "\"" : "";
    if ($typ == "checkbox") {
        if ($value == 1) {
            $value = "on";
        } else if ($value == 0) {
            $value = "";
        }
    }
    $reg_val = '';
    if ($required) {
        $req_val = " required";
    }
    $error .= $req_val;
    //$checked_text = "on";
    switch ($typ) {
        case "smalltextarea":
            echo "<div class=\"input form-group ".$typ." ".$error."\">".$label."<textarea name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"small form-control\"" . $disabled_text . $maxlength_text . ">" . $value . "</textarea></div>\n";
            break;
        case "textarea":
            $breaks = array("<br />","<br>","<br/>");
            $value = str_ireplace($breaks, "\r\n", $value);
            echo "<div class=\"input form-group ".$typ." ".$error."\">".$label."<textarea name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"normal form-control\"" . $disabled_text . $maxlength_text . ">" . $value . "</textarea></div>\n";
            break;
        case "smalltext_cn_1_error":
            echo "<div class=\"input_2 form-group ".$typ." ".$error."\">".$label."<input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\" form-control " . $typ . "\" type=\"text\"" . $disabled_text . $maxlength_text . " value=\"" . $value . "\" " . $script . " />" . $eval_string . "\n";
            break;
        case "smalltext_cn_1":
            echo "<div class=\"input_2 form-group ".$typ." ".$error."\">".$label."<input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\" form-control " . $typ . "\" type=\"text\"" . $disabled_text . $maxlength_text . " value=\"" . $value . "\" " . $script . " />" . $eval_string . "\n";
            break;
        case "smalltext_cn_2_error":
            echo "<input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\" form-control " . $typ . " ".$error."\" type=\"text\"" . $disabled_text . $maxlength_text . " value=\"" . $value . "\" " . $script . " />" . $eval_string . "\n";
            break;
        case "smalltext_cn_2":
            echo "<input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\" form-control " . $typ . " ".$error."\" type=\"text\"" . $disabled_text . $maxlength_text . " value=\"" . $value . "\" " . $script . " />" . $eval_string . "\n";
            break;
        case "file":
            echo "<div class=\"input form-group ".$typ." ".$error."\">".$label."<input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\" form-control " . $typ . "\" type=\"file\" /></div>\n";
            break;
        case "checkbox":
            $checked_text = ($value == "on") ? "checked=\"checked\"" : "";
            echo "<div class=\"input form-group ".$typ." ".$error." form-check ".$inputname."\"><label class='form-check-label'><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"form-check-input\" type=\"checkbox\"" . $disabled_text . $checked_text . " " . $script . "/>".$name."</label></div>\n";
            break;
        case "checkbox_action":
            $checked_text = ($value == "on") ? "checked=\"checked\"" : "";
            echo "<div class=\"input form-group ".$typ." ".$error." form-check\"><label class='form-check-label color-action'><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"form-check-input\" type=\"checkbox\"" . $disabled_text . $checked_text . " " . $script . "/>".$name."</label></div>\n";
            break;
        case "checkbox_shop":
            $checked_text = ($value == "on") ? "checked=\"checked\"" : "";
            echo "<div class=\"input form-group ".$typ." ".$error." form-check\"><label class='form-check-label'><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"form-check-input\" type=\"checkbox\"" . $disabled_text . $checked_text . " " . $script . "/>".$name."</label></div>\n";
            break;
        case "checkbox_with_formreload":
            $checked_text = ($value) ? "checked=\"checked\"" : "";
            echo "<div class=\"input form-group ".$typ." ".$error." form-check\"><label class='form-check-label'><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"form-check-input\" type=\"checkbox\"" . $disabled_text . $checked_text . " onclick=\"this.form.submit();\"/>".$name."</label></div>\n";
            break;
        case "checkbox_with_formreload_checked":
            $checked_text = ($value) ? "checked=\"checked\"" : "";
            echo "<div class=\"input form-group ".$typ." ".$error." form-check\"><label class='form-check-label'><input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"checkbox form-control\" type=\"checkbox\"" . $disabled_text . $checked_text . " onclick=\"this.form.submit();\"/>".$name."</label></div>\n";
            break;
        case "password":
            echo "<div class=\"input form-group ".$typ." ".$error."\">".$label."<input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"code form-control\" type=\"password\"" . $disabled_text . $maxlength_text . " value=\"" . $value . "\" /></div>\n";
            break;
        case "date":
            echo "<div class=\"input form-group ".$typ." ".$error."\">".$label."<input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"datepicker form-control\" type=\"text\"" . $script . $disabled_text . $maxlength_text . " value=\"" . $value . "\" /></div> \n";
            break;
        case "input_pref_delivery_date":
            echo "<div class=\"input form-group ".$typ." ".$error."\">".$label."<input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"datepicker form-control\" type=\"text\"" . $disabled_text . $maxlength_text . " value=\"" . $value . "\"  " . $script . " readonly /></div> \n";
            break;
        default:
            echo "<div class=\"input form-group ".$typ." ".$error."\">".$label."<input name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\" form-control " . $typ . "\" type=\"text\"" . $disabled_text . $maxlength_text . " value=\"" . $value . "\" " . $script . " />" . $eval_string . "</div>\n";
            break;
    }
}

function text( $name, $value ) {
    echo "<div class=\"label\"><label>" . $name . "</label></div>";
    echo "<div class=\"input\"><input type=\"text\" class=\"text\" disabled=\"disabled\" value=\"" . $value . "\" /></div>\n";
}

function input_select( $name, $inputname, $values, $value_names, $preselect = "", $disabled = FALSE, $auto_update = FALSE, $onchange = "" ) {
    $disabled_text   = ($disabled) ? " disabled=\"disabled\"" : "";
    $autoupdate_text = ($auto_update) ? " onchange=\"this.form.submit();\"" : "";
    echo "<div class=\"label\"><label for=\"" . $inputname . "\">" . $name . "</label></div>";
    echo "<div class=\"input\">\n\t<select " . $onchange . " " . $disabled_text . $autoupdate_text . " name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"select\">\n";
    FOR ($i = 0; $i < count($values); $i++) {
        echo "\t\t<option value=\"" . $values[$i] . "\"";
        IF ($values[$i] == $preselect) {
            echo " selected=\"selected\" ";
        }
        echo ">" . $value_names[$i] . "</option>\n";
    }
    echo "\t</select>\n</div>\n";
}

function input_select_from_sql($name, $inputname, $query, $preselect = "", $disabled = FALSE, $auto_update = FALSE, $onchange = "", $withEmpty = FALSE ) {
    $disabled_text   = ($disabled) ? " disabled=\"disabled\"" : "";
    $autoupdate_text = ($auto_update) ? " onchange=\"this.form.submit();\"" : "";
    
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    echo "<div class=\"label\"><label for=\"" . $inputname . "\">" . $name . "</label></div>";
    echo "<div class=\"input\">\n\t<select " . $onchange . " " . $disabled_text . $autoupdate_text . " name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"select\">\n";
    if($withEmpty){
        echo "<option value='0'>---</option>";
    }
    while($res = @mysqli_fetch_array($result)) {
        echo "\t\t<option value=\"" . $res['id'] . "\"";
        IF ($res['id'] == $preselect) {
            echo " selected=\"selected\" ";
        }
        echo ">" . $res['name'] . "</option>\n";
    }
    echo "\t</select>\n</div>\n";
}
function input_select_from_sql_bereich($name, $inputname, $query, $preselect = "", $disabled = FALSE, $auto_update = FALSE, $onchange = "", $withEmpty = FALSE ) {
    $disabled_text   = ($disabled) ? " disabled=\"disabled\"" : "";
    $autoupdate_text = ($auto_update) ? " onchange=\"this.form.submit();\"" : "";
    
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    echo "<div class=\"label\"><label for=\"" . $inputname . "\">" . $name . "</label></div>";
    echo "<div class=\"input\">\n\t<select " . $onchange . " " . $disabled_text . $autoupdate_text . " name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"select\">\n";
    if($withEmpty){
        echo "<option value='0'>---</option>";
    }
    while($res = @mysqli_fetch_array($result)) {
        echo "\t\t<option value=\"" . $res['id'] . "\"";
        IF ($res['id'] == $preselect) {
            echo " selected=\"selected\" ";
        }
        echo ">" . $res['description'] . "</option>\n";
    }
    echo "\t</select>\n</div>\n";
}
function input_select_from_sql_mandant($name, $inputname, $query, $preselect = "", $disabled = FALSE, $auto_update = FALSE, $onchange = "", $withEmpty = FALSE ) {
    $disabled_text   = ($disabled) ? " disabled=\"disabled\"" : "";
    $autoupdate_text = ($auto_update) ? " onchange=\"this.form.submit();\"" : "";
    
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    echo "<div class=\"label\"><label for=\"" . $inputname . "\">" . $name . "</label></div>";
    echo "<div class=\"input\">\n\t<select " . $onchange . " " . $disabled_text . $autoupdate_text . " name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"select\">\n";
    if($withEmpty){
        echo "<option value='0'>---</option>";
    }
    while($res = @mysqli_fetch_array($result)) {
        echo "\t\t<option value=\"" . $res['id'] . "\"";
        IF ($res['id'] == $preselect) {
            echo " selected=\"selected\" ";
        }
        echo ">" . $res['description'] . "</option>\n";
    }
    echo "\t</select>\n</div>\n";
}
function input_select_from_sql_ein($name, $inputname, $query, $preselect = "", $disabled = FALSE, $auto_update = FALSE, $onchange = "", $withEmpty = FALSE ) {
    $disabled_text   = ($disabled) ? " disabled=\"disabled\"" : "";
    $autoupdate_text = ($auto_update) ? " onchange=\"this.form.submit();\"" : "";
    
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    echo "<div class=\"label\"><label for=\"" . $inputname . "\">" . $name . "</label></div>";
    echo "<div class=\"input\">\n\t<select " . $onchange . " " . $disabled_text . $autoupdate_text . " name=\"" . $inputname . "\" id=\"" . $inputname . "\" class=\"select\">\n";
    if($withEmpty){
        echo "<option value='0'>---</option>";
    }
    while($res = @mysqli_fetch_array($result)) {
        echo "\t\t<option value=\"" . $res['id'] . "\"";
        IF ($res['id'] == $preselect) {
            echo " selected=\"selected\" ";
        }
        echo ">" . $res['description'] . "</option>\n";
    }
    echo "\t</select>\n</div>\n";
}

// Gibt die Meta-Tags der aktuellen Navigation als DIV-Boxen zurück
function get_search_tags( $navigation = '' ) {
    if ($navigation == '') {
        $navigation = $GLOBALS["navigation"];
    }
    if ($navigation["search_tags"] <> '') {
        echo "<div class=\"search_tags\">\n";
        $search_tags = explode(",", $navigation["meta_keywords"]);
        foreach ($search_tags as $value) {
            echo "<span>" . $value . "</span>\n";
        }
        echo "</div>\n";
    }
}

// Prüft ob das Projekt lokal oder auf dem Webserver läuft
function local_environment() {
    return ((strtoupper(substr(php_uname('s'), 0, 3)) === 'WIN'));
}


function show_ck_editor( $content, $style, $css_path, $style_path, $name = "textcontent" ) {
    $path = realpath(__DIR__ . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . 'Registry.php');
    if (file_exists($path)) {
        require_once($path);
    }
    $translation = \DynCom\mysyde\common\classes\Registry::get("translation");
    if ($style == "dc") {
        echo("<textarea name=$name id=$name>" . $content . "</textarea>
			<script type='text/javascript'>
				var editor = CKEDITOR.replace( '$name',{
					customConfig: '/plugins/ckeditor/" . $style . "_config.js',
					contentsCss: '/" . $css_path . "',
	        		filebrowserBrowseUrl : '/plugins/ckfinder/ckfinder.html',
				 	filebrowserImageBrowseUrl : '/plugins/ckfinder/ckfinder.html?type=Images',
				 	filebrowserFlashBrowseUrl : '/plugins/ckfinder/ckfinder.html?type=Flash',
				 	filebrowserUploadUrl :
				 	   '/plugins/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Files',
				 	filebrowserImageUploadUrl :
				 	   '/plugins/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Images',
				 	filebrowserFlashUploadUrl : '/plugins/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Flash',
					on: {
						save: function(evt) {
							if(jQuery('body').hasClass(\"ckeditor_maximized\")) {
								alert('" . $translation->get('ckeditor_save_error1') . "');
								return false;
							}

							setFormname(jQuery('#textcontent').closest('form').attr('id'));
							loadCard('save', true);
							return false;
						},
		
						maximize: function(e) {
							if(e.editor.getCommand('maximize').state == CKEDITOR.TRISTATE_ON){
				          		jQuery('body').addClass(\"ckeditor_maximized\");
				     		 } else {
				      			// minimized
				      			// remove special css from body
								jQuery('body').removeClass(\"ckeditor_maximized\");
				      		}
						}
					}
	    		} );
			</script>");
    } elseif ($style == "minimal") {
        echo("<textarea name=textcontent id=textcontent>" . $content . "</textarea>
			<script type='text/javascript'>
				var editor = CKEDITOR.replace( 'textcontent',{
					customConfig: '/plugins/ckeditor/" . $style . "_config.js',
				 	filebrowserImageBrowseUrl : '/plugins/ckfinder/ckfinder.html?type=Images',
				 	filebrowserImageUploadUrl :
				 	   '/plugins/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Images'
	    		} );
			</script>");
    } else {
        echo("<textarea name=textcontent id=textcontent>" . $content . "</textarea>
			<script type='text/javascript'>
				var editor = CKEDITOR.replace( 'textcontent',{
					customConfig: '/plugins/ckeditor/" . $style . "_config.js',
					stylesSet: 'my_styles:/" . $style_path . "',
					contentsCss: '/" . $css_path . "'
	    		});
				editor.on('instanceReady', function (evt) { evt.editor.execCommand('maximize'); }); 
			</script>");
    }
}

//Gibt Längen- und Breitengrad als Array für als String mitgelieferte Adresse aus
function geoencode( $adress ) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://maps.google.com/maps/api/geocode/json?address=" . urlencode($adress) . "&sensor=false");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    $json_data    = curl_exec($ch);
    $json_array   = json_decode($json_data, TRUE);
    $latlng_array = $json_array['results'][0]['geometry']['location'];

    return $latlng_array;
}

//Value von Checkboxen in 1 oder 0 umwandeln
function change_checkboxval_to_bool( $var ) {
    if ($var == "on") {
        return 1;
    } else {
        return 0;
    }
}

function create_meta_tags() {

    $pageData = $GLOBALS["page"];

    // Meta-Daten aus Sprache füllen
    $site_title       = $GLOBALS["navigation"]['menu_name'];
    $meta_description = $GLOBALS["language"]["meta_description"];
    $meta_keywords    = $GLOBALS["language"]["meta_keywords"];

	if(isset($_GET['collection_id']) && (int)$_GET['collection_id'] > 0) {
		$query = "SELECT description FROM main_collection where id = '" . $_GET['collection_id']."'";
		$result = @mysqli_query($GLOBALS['mysql_con'],$query);
		$row = @mysqli_fetch_array($result);
		$pageData['subtitle'] = $row['description'];
		$GLOBALS["page"]["subtitle"] = $row['description'];
	}

    // Meta-Daten aus Navigation füllen
    if ($pageData['subtitle'] != "") {
        $site_title = $pageData['subtitle'];
        if ($GLOBALS["language"]["site_title_name"] <> '') {
            $site_title .= ' - ' . $GLOBALS["language"]["site_title_name"];
        }
    }
    if ($pageData["meta_description"] <> '') {
        $meta_description = $pageData["meta_description"];
    }

    if ($pageData["meta_keywords"] <> '') {
        $meta_keywords = $pageData["meta_keywords"];
    }

    // Meta-Daten für News füllen
    /*
	$query = "SELECT * FROM main_navigation_has_sitepart WHERE main_navigation_id = ". $navigation["id"] . " AND main_sitepart_id = 2 LIMIT 1";
	$result = @mysqli_query($GLOBALS['mysql_con'],$query);
	if (@mysqli_num_rows($result) == 1) {
		$navigation_has_sitepart = @mysqli_fetch_array($result);
		if ($_GET["news" . $navigation_has_sitepart["id"]] <> '') {
			$query = "SELECT * FROM news_entry WHERE id = ". $_GET["news" . $navigation_has_sitepart["id"]] . " LIMIT 1";
			$result = @mysqli_query($GLOBALS['mysql_con'],$query);
			if (@mysqli_num_rows($result) == 1) {
				$news = @mysqli_fetch_array($result);			
				if ($news["headline"] <> '') {
				$site_title = $news["headline"];
					if ($GLOBALS["language"]["site_title_name"] <> '') {
						$site_title .= ' - ' . $GLOBALS["language"]["site_title_name"];	
					}
				}
				if ($news["summary"] <> '') {
					$news["summary"] = str_replace("\n", "", $news["summary"]);
					$news["summary"] = str_replace("\r", "", $news["summary"]);
					$meta_description = $news["summary"];	
				}
				if ($news["meta_keywords"] <> '') {
					$meta_keywords = $news["meta_keywords"];	
				}
			}
		}
	}
	*/
	//Metadaten nur für Shop
    if (is_array($GLOBALS['shop'])) {
        set_global_metadata_shop();
		if(strlen($GLOBALS['site_title']) > 0) {
			$site_title = $GLOBALS['site_title'];
		}
		if(strlen($GLOBALS['meta_description']) > 0) {
            $meta_description = $GLOBALS['meta_description'];
            $meta_description = html_entity_decode($meta_description);
            $meta_description = preg_replace("!\s+!",' ',$meta_description);
            $meta_description = htmlentities($meta_description);
		}		
		if(strlen($GLOBALS['meta_keywords']) > 0) {
			$meta_keywords = $GLOBALS['meta_keywords'];
		}
    }
    if ($site_title <> '') {
        echo "<title>" . $site_title . "</title>\n";
    }
    if($GLOBALS["page"]['no_index']){
        echo '<meta name="robots" content="noindex">';
    }
    if ($meta_keywords <> '') {
        $GLOBALS["meta_keywords"] = $meta_keywords;
        echo "<meta name=\"Keywords\" content=\"" . $meta_keywords . "\" />\n";
    }
    if ($meta_description <> '') {
        echo "<meta name=\"Description\" content=\"" . $meta_description . "\" />\n";
    }
}



function documents_insert(){

    $name_value = array(
        "II Führung und Organisation Teil 1" => "Teil II (Führung und Organisation)",
        "II Führung und Organisation Teil 2" => "Teil II (Führung und Organisation)",
        "III Ganztag" => "Teil III (Ganztag)",
        "III HzE" => "Teil III (HZE)",
        "III Kita" => "III Kita",
        "III Landesgeschäftsstelle" => "Teil III (Landesgeschäftsstelle)",
        "III OKJA Beratung" => "Teil III (OKJA/Beratung)",
        "Index" => "Index Übersicht",
    );

    $dir = "../../userdata/03_Module/01_Firmenwiki/AWO Wiki";
    $directories = scandir($dir);
    foreach($directories as $file) {

        if ($file != "." && $file != ".." && $name_value[$file] !== null) {
            $file_dir = "../../userdata/03_Module/01_Firmenwiki/AWO Wiki/".$file."/".$file;
            $file_directory = scandir($file_dir);
            foreach ($file_directory as $file_name) {
                
                if ($file_name != "." && $file_name != "..") {
                    // echo $file_name . "<br>";
                    $file_info = pathinfo($file_dir."/".$file_name);
                    $desc_collection = $file_name;
                    $time = time();
                    $extension = $file_info['extension'];
                    $file_sql_name = "03_Module/01_Firmenwiki/AWO Wiki/".$file."/".$file."/".$file_name;
                    $category = $name_value[$file];
                    @mysqli_query($GLOBALS['mysql_con'], "CALL documentsInsert('".$desc_collection."', '".$time."', '".$extension."', '".$file_sql_name."', '".$file_sql_name."', '".$category."');");
                    // echo $desc_collection."</br>".$time."</br>".$extension."</br>".$file_sql_name."</br>".$category."</br>===========";

                }
                
            }
        }
    }
}

function set_global_meta_tag_content_site() {

    $pageData = $GLOBALS["page"];

    // Meta-Daten aus Sprache füllen
    $site_title       = $GLOBALS["navigation"]['menu_name'];
    $meta_description = $GLOBALS["language"]["meta_description"];
    $meta_keywords    = $GLOBALS["language"]["meta_keywords"];

	if(isset($_GET['collection_id']) && (int)$_GET['collection_id'] > 0) {
		$query = "SELECT description FROM main_collection where id = '" . $_GET['collection_id']."'";
		$result = @mysqli_query($GLOBALS['mysql_con'],$query);
		$row = @mysqli_fetch_array($result);
		$pageData['subtitle'] = $row['description'];
		$GLOBALS["page"]["subtitle"] = $row['description'];
	}

    // Meta-Daten aus Navigation füllen
    if ($pageData['subtitle'] != "") {
        $site_title = $pageData['subtitle'];
        if ($GLOBALS["language"]["site_title_name"] <> '') {
            $site_title .= ' - ' . $GLOBALS["language"]["site_title_name"];
        }
    }
    if ($pageData["meta_description"] <> '') {
        $meta_description = $pageData["meta_description"];
    }

    if ($pageData["meta_keywords"] <> '') {
        $meta_keywords = $pageData["meta_keywords"];
    }

    // Meta-Daten für News füllen
    /*
	$query = "SELECT * FROM main_navigation_has_sitepart WHERE main_navigation_id = ". $navigation["id"] . " AND main_sitepart_id = 2 LIMIT 1";
	$result = @mysqli_query($GLOBALS['mysql_con'],$query);
	if (@mysqli_num_rows($result) == 1) {
		$navigation_has_sitepart = @mysqli_fetch_array($result);
		if ($_GET["news" . $navigation_has_sitepart["id"]] <> '') {
			$query = "SELECT * FROM news_entry WHERE id = ". $_GET["news" . $navigation_has_sitepart["id"]] . " LIMIT 1";
			$result = @mysqli_query($GLOBALS['mysql_con'],$query);
			if (@mysqli_num_rows($result) == 1) {
				$news = @mysqli_fetch_array($result);			
				if ($news["headline"] <> '') {
				$site_title = $news["headline"];
					if ($GLOBALS["language"]["site_title_name"] <> '') {
						$site_title .= ' - ' . $GLOBALS["language"]["site_title_name"];	
					}
				}
				if ($news["summary"] <> '') {
					$news["summary"] = str_replace("\n", "", $news["summary"]);
					$news["summary"] = str_replace("\r", "", $news["summary"]);
					$meta_description = $news["summary"];	
				}
				if ($news["meta_keywords"] <> '') {
					$meta_keywords = $news["meta_keywords"];	
				}
			}
		}
	}
	*/

    if ($site_title <> '') {
        $GLOBALS['site_title'] = $site_title;
    } else {
        $GLOBALS['site_title'] = NULL;
    }
    if ($meta_keywords <> '') {
        $GLOBALS["meta_keywords"] = $meta_keywords;
    } else {
        $GLOBALS["meta_keywords"] = NULL;
    }
    if ($meta_description <> '') {
        $GLOBALS['meta_description'] = $meta_description;
    } else {
        $GLOBALS['meta_description'] = NULL;
    }
}

//warenkorb zwischenseite "Lightbox"
function get_shadow_queue() {

    $body = "";
    if ($_GET["action"] == "shop_add_item_to_basket_card" || $_GET["action"] == "shop_add_item_to_basket_list" || $_GET["action"] == "shop_add_item_to_basket") {
        $body = "<div id=\"shadow\" class=\"shadow_bg\" onclick='hide();return false;'></div>";
    }
    return $body;
}

function is_item_no( $string ) {
    $pattern = '/^[0-9]+-?[0-9]*$/';
    $result  = preg_match($pattern, $string);
    if ($result === 1) {
        return TRUE;
    } else {
        return FALSE;
    }
}

function cologne_phon( $word ) {
    $query = 'SELECT cologne_phon(\'' . mysqli_real_escape_string($GLOBALS['mysql_con'],trim($word)) . '\')';
    $result = @mysqli_query($GLOBALS['mysql_con'],$query);
    $cologne_phon = @mysqli_result($result);
    if(strlen($cologne_phon) > 0) {
        $return_value = preg_replace('!\s+!', ' ', $cologne_phon);
        return $return_value;
    }

    /**
     * @param  string $word string to be analyzed
     *
     * @return string  $value represents the Kölner Phonetik value
     * @access public
     */

    // prepare for processing
    $value        = array();
    $value_2      = array();
    $value_3      = array();
    $word         = strtolower($word);
    $substitution = array(
        "ä"  => "a",
        "ö"  => "o",
        "ü"  => "u",
        "ß"  => "ss",
        "ph" => "f",
        " "  => "|"
    );
    foreach ($substitution as $letter => $subst) {
        $word = str_replace($letter, $subst, $word);
    }

    $len = strlen($word);

    // Rule for exeptions
    $exceptionsLeading1 = array(
        4 => array("ca", "ch", "ck", "cl", "co", "cq", "cu", "cx")
    );

    $exl1 = array("ca", "ch", "ck", "cl", "co", "cq", "cu", "cx");

    $exceptionsLeading2 = array(
        8 => array("dc", "ds", "dz", "tc", "ts", "tz")
    );

    $exl2 = array("dc", "ds", "dz", "tc", "ts", "tz");

    $exceptionsLeading3 = array(
        4 => array("ac,ak,ec,ek,ic,ik,oc,ok,uc,uk")
    );

    $exl3 = array("ac,ak,ec,ek,ic,ik,oc,ok,uc,uk");

    $exceptionsFollowing = array("sc", "zc", "cx", "kx", "qx");

    //Table for coding
    $codingTable = array(
        0  => array("a", "e", "i", "j", "o", "u", "y"),
        1  => array("b", "p"),
        2  => array("d", "t"),
        3  => array("f", "v", "w"),
        4  => array("c", "g", "k", "q"),
        48 => array("x"),
        5  => array("l"),
        6  => array("m", "n"),
        7  => array("r"),
        8  => array(),
        9  => Array("h")
    );

    for ($i = 0; $i < $len; $i++) {
        $rank = "";
        $sl   = $word[$i];
        if (isset($word[$i + 1])) {
            $dl = $word[$i] . $word[$i + 1];
        } else {
            $dl = $word[$i];
        }

        //DL-Handling
        if (strlen($dl) == 2) {
            //Leading
            if (($i == 0 && $dl == 'cr') || (in_array($dl, $exl1))) {
                $value[$i] = 4;
            }

            if (in_array($dl, $exl2)) {
                $value[$i] = 8;
            }

            if ($i > 0 && (in_array($dl, $exl3))) {
                $value[$i] = 4;
            }

            //Following
            if ($i > 0 && (in_array($word[$i - 1] . $word[$i], $exceptionsFollowing))) {
                $value[$i] = 8;
            }
        }

        // normal encoding
        if (empty($value[$i])) {
            foreach ($codingTable as $code => $letters) {
                if (in_array($word[$i], $letters)) {
                    $value[$i] = $code;
                }
            }
        }
        if (in_array($sl, array('c', 's', 'z')) && ((isset($word[$i - 1])) && !(in_array($word[$i - 1], array('a', 'e', 'i', 'o', 'u'))))) {
            $value[$i] = 8;
        }

        //Space
        if ($word[$i] == '|') {
            $value[$i] = '|';
        }
    }

    // delete double values
    $len = count($value);

    for ($i = 1; $i < $len; $i++) {
        if ($i > 1 && isset($value[$i - 1]) && $value[$i] == $value[$i - 1]) {
            $value[$i] = "";
        }
    }

    foreach ($value as $key => $value1) {
        if (isset($value1) && ($value1 == 0 || $value1 != '')) {
            $value_2[] = $value1;
        }
    }

    $len = count($value_2);
    // delete vocals
    for ($i = 1; $i < $len; $i++) {
        // omitting first characer code and h
        if (($value_2[$i] === 0 || $value_2[$i] === 9) && ($i !== 0) && ($value_2[$i - 1] !== '|')) {
            $value_2[$i] = "";
        }
    }

    $res_arr = array();
    $z       = 0;
    $value_3 = array();
    foreach ($value_2 as $key => $value) {
        if (isset($value) && $value == 0 || $value != '') {
            $value_3[] = $value;
        }
    }
    for ($i = 0; $i < count($value_3); $i++) {
        if ($value_3[$i] === '|') {
            $res_arr[$z] = ' ';
            $z++;
        } elseif (preg_match('/[0-9]/', $value_3[$i])) {
            $res_arr[$z] = $value_3[$i];
            if ($res_arr[$z] == 0 && $z === 0) {
                $res_arr[$z] = 9;
            }
            $z++;
        }
    }

    foreach ($res_arr as $key => &$value) {
        if ($value == 0) {
            $value = '';
        }
    }
    unset($value);
    $res_arr2 = array();
    foreach ($res_arr as $key => &$value2) {
        if ((int)$value > 0) {
            $res_arr2[] = $value2;
        }
    }
    unset($value2);
    $res_arr2 = array_filter($res_arr2);
    for ($i = 0; $i < count($res_arr2); $i++) {
        if ($res_arr2[$i] == 9) {
            $res_arr2[$i] = 0;
        }
        if ($i > 0 && $res_arr2[$i] === $res_arr2[$i - 1]) {
            $res_arr2[$i] = '';
        }
    }

    $res_arr2 = implode("", $res_arr2);
    return $res_arr2;
}

function get_number_matches( $search_term ) {
    $add_query_num = '';

    $query  = "SELECT *
			  FROM shop_item_cross_reference
			  WHERE item_reference_no like '%" . $search_term . "%'
				AND (customer_no = '" . $GLOBALS["shop_customer"]["customer_no"] . "' OR customer_no='')
				AND company ='" . $GLOBALS['shop']['company'] . "'
				";
    $result = mysqli_query($GLOBALS['mysql_con'], $query);
    if (mysqli_num_rows($result) != 0) {
        while ($row = mysqli_fetch_assoc($result)) {
            $add_query_num .= " OR shop_view_active_item.item_no LIKE '%" . $row['item_no'] . "%'";
        }
    }

    $number_query = "
	SELECT shop_view_active_item.*
	FROM shop_view_active_item
	WHERE		
		shop_view_active_item.company = '" . $GLOBALS["shop"]["company"] . "'
	  AND
		shop_view_active_item.shop_code = '" . $GLOBALS["shop"]["code"] . "'
	  AND
		shop_view_active_item.language_code = '" . $GLOBALS["shop_language"]["code"] . "'
	  AND	  
		shop_view_active_item.item_no LIKE '%" . $search_term . "%'
	  OR
		shop_view_active_item.ean_no LIKE '%" . $search_term . "%'
		" . $add_query_num . " 
	GROUP BY shop_view_active_item.item_no";


    $result        = @mysqli_query($GLOBALS['mysql_con'], $number_query);
    $search_string = "";
    $sort_string   = "";
    if (@mysqli_num_rows($result) > 0) {
        $search_string = "(";
        $z             = 0;
        while ($item = @mysqli_fetch_assoc($result)) {
            if ($z === 0) {
                $search_string .= " shop_item.id=" . $item["id"];
            } else {
                $search_string .= " OR shop_item.id=" . $item["id"];
            }
            $z++;
        }
        $search_string .= ")";
        $sort_string .= " CASE WHEN shop_item.item_no='" . $search_term . "' THEN 1 ELSE 0 END DESC, CASE WHEN shop_item.ean_no='" . $search_term . "' THEN 1 ELSE 0 END DESC,CASE WHEN shop_item_cross_reference.item_reference_no='" . $search_term . "' THEN 1 ELSE 0 END DESC,
		CASE WHEN shop_item.item_no LIKE '%" . $search_term . "%' THEN 1 ELSE 0 END DESC, CASE WHEN shop_item.ean_no='%" . $search_term . "%' THEN 1 ELSE 0 END DESC,CASE WHEN shop_item_cross_reference.item_reference_no='%" . $search_term . "%' THEN 1 ELSE 0 END DESC";
    }
    $return["search_string"] = $search_string;
    $return["sort_string"]   = $sort_string;
    return $return;
}

function getSpaceOrganigramm($key){
    
    echo var_dump($GLOBALS['mysql_con']);
    $sql_query_space = "SELECT main_department.description as 'desc', organigramm_einrichtungen.*, main_contact.*, main_role.* FROM `organigramm_einrichtungen` INNER JOIN main_contact ON organigramm_einrichtungen.contact_id=main_contact.id INNER JOIN main_contact_department ON main_contact.id=main_contact_department.main_contact_id INNER JOIN main_department ON organigramm_einrichtungen.department_id=main_department.id INNER JOIN main_role ON main_contact_department.main_role_id=main_role.id WHERE organigramm_einrichtungen.space='".$key."' AND main_role.id=3 ORDER BY main_department.id ASC;";
    $sql_space = @mysqli_query($GLOBALS['mysql_con'], $sql_query_space);

    // echo var_dump($sql_space);
    while ($row = @mysqli_fetch_array($sql_space)) {
        // echo "<div bereich-attribut=\"".$row['space']."\"  fachbereich-attribut=\"".$row['department_id']."\" class=\"og_card title_card_space\" id=\"card_dep_".$row['department_id']."\" onclick=\"loadOrganigrammDepart(".$row['space'].",".$row['department_id'].")\">".$row['desc']."<div class=\"og_card person_card\">".$row['name']."<span>".$row['description']."</span></div></div>"; 
    }
   
}


function getToken($code){
    $array = array();
    $headers = [
        'Content-Type: application/x-www-form-urlencoded'
    ];
    $fcmUrl = 'https://login.microsoftonline.com/organizations/oauth2/v2.0/token';
    $cRequest = curl_init();
    curl_setopt($cRequest, CURLOPT_URL, $fcmUrl);
    curl_setopt($cRequest, CURLOPT_POST, true);
    curl_setopt($cRequest, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($cRequest, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($cRequest, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($cRequest, CURLOPT_POSTFIELDS, http_build_query(array(
        'client_id' => '93d2326e-40da-4938-a4d4-1df743ebd29a',
        'scope' => 'openid User.ReadWrite User.ReadBasic.All Calendars.ReadWrite Presence.ReadWrite Mail.Read Mail.Read.Shared Mail.ReadBasic Mail.ReadBasic.Shared Mail.ReadWrite Mail.ReadWrite.Shared Mail.Send Mail.Send.Shared',
        'code' => $code,
        'redirect_uri' => 'https://intranet.awo-hamburg.de/',
        'grant_type' => 'authorization_code',
        'client_secret' => 'nlI8Q~XnsFkO~8T0U8hFgqb5c.mji5jjz5zV.dbV'

    )));
    $result = curl_exec($cRequest);;

    $obj_token = json_decode($result);
    $token_get = $obj_token->access_token;
    $refresh_token = $obj_token->refresh_token;
    array_push($array, $token_get);
    array_push($array, $refresh_token);
    curl_close($cRequest);
    return $array;
}

function img_size_mm( $img, $dpi ) {


    function px_to_mm( $px, $dpi ) {
        return in_to_mm($px / $dpi);
    }

    function mm_to_px( $mm, $dpi ) {
        return mm_to_in($mm) * $dpi;
    }

    function mm_to_in( $mm ) {
        return $mm * $GLOBALS["mm_per_in"];
    }

    function in_to_mm( $in ) {
        return $in * $GLOBALS["in_per_mm"];
    }

    $dimensions = getimagesize($img);
    $width      = $dimensions[0];
    $height     = $dimensions[1];

    if ($width > 0 && $height > 0) {
        $return[0] = px_to_mm($width, $dpi);
        $return[1] = px_to_mm($height, $dpi);
        return $return;
    } else {
        return FALSE;
    }
}

function log_text( $newtext ) {
    $file    = $GLOBALS["curr_logfile"];
    $current = file_get_contents($file);
    $current .= "\r\n\r\n" . $newtext;
    file_put_contents($file, $current);
}

function get_text_module_attachment( $company, $text_module_code, $attachment_no = 1 ) {
    $query    = 'SELECT attachment_' . $attachment_no . ' FROM shop_text_module WHERE company=\'' . $company . '\' AND code=\'' . $text_module_code . '\'';
    $result   = @mysqli_query($GLOBALS['mysql_con'], $query);
    $filename = @mysqli_result($result, 0, 0);
    if (strlen($filename) > 0) {
        return "/userdata/dcshop/documents/" . $filename;
    } else {
        return '';
    }
}

function get_visitor_small( $sid, $from_session = 0, $from_cookie = 0 ) {

    $query = "DELETE FROM 
		main_visitor 
	WHERE 
	(
		session_date != '0000-00-00 00:00:00'
	  AND
		session_date IS NOT NULL
	  AND
		valid_until != '0000-00-00 00:00:00'
	  AND
		valid_until IS NOT NULL
	  AND
		valid_until <= NOW()	
	  AND
		nav_login != 1
	)
	OR
	(
		session_date != '0000-00-00 00:00:00'
	  AND
		session_date IS NOT NULL
	  AND
		(main_user_id IS NULL OR main_user_id = 0)
	  AND
		(main_admin_user_id IS NULL OR main_admin_user_id = 0)
	  AND
		session_date <= DATE_SUB(NOW(),INTERVAL 90 MINUTE)	
	  AND
		nav_login != 1	
	)
	OR
	(
		session_date != '0000-00-00 00:00:00'
	  AND
		session_date IS NOT NULL
	  AND
		(
			remember_token IS NULL
		  OR
			remember_token = ''
		)
	  AND
		session_date <= DATE_SUB(NOW(),INTERVAL 90 MINUTE)	
	  AND
		nav_login != 1		
	)
	OR
	(
		nav_login = 1
	  AND
		(session_date <= DATE_SUB(NOW(),INTERVAL 90 MINUTE) OR session_date IS NULL OR session_date = '0000-00-00 00:00:00')
	)";
    @mysqli_query($GLOBALS['mysql_con'], $query);

    $query  = 'SELECT * FROM main_visitor WHERE session_id = ?';
    $stmt = mysqli_prepare($GLOBALS["mysql_con"],$query);
    $stmt->bind_param("s",$sid);
    $stmt->execute();
    $stmt->store_result();
    $assoc_array = fetchAssocStatement($stmt);

    if ($stmt->num_rows == 1) {
        $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
        /* foreach($cookies as $cookie) {
			$parts = explode('=', $cookie);
			$name = trim($parts[0]);
			$value = trim($parts[1]);
			$_SESSION[$name] = $value;			
		}	*/
        if ($from_session == 1) {
            $_SESSION['session_login'] = 1;
            $_SESSION['cookie_login']  = 0;
        } elseif ($from_cookie == 1) {
            $_SESSION['session_login'] = 0;
            $_SESSION['cookie_login']  = 1;
        }
        return $assoc_array;
    }
}


function cookie_login_postprocessing( $visitor, $cookies ) {
    $old_sid                    = $cookies['sid' . $GLOBALS['site']['code']];
    $old_token                  = trim($cookies[$GLOBALS['site']['code'] . '_remember_login']);
    $GLOBALS['test']['old_sid'] = $old_sid;
    if (session_regenerate_id()) {
        $newSid = session_id();
        \DynCom\mysyde\common\classes\Hook::update('session_id_changed',['old_sid' => $old_sid, 'new_sid' => $newSid]);

        $_SESSION['sid' . $GLOBALS['site']['code']] = $newSid;
        $cookie_login                               = FALSE;
        $cookie_removed                             = '';
        foreach ($cookies as $name => $value) {
            if (
                (isset($visitor['remember_token']))
                &&
                (strlen($visitor['remember_token']) > 0)
                &&
                ($name == $GLOBALS['site']['code'] . '_remember_login')
            ) {
                $cookie_login = TRUE;
                setcookie($name, '', time() - 1000);
                setcookie($name, '', time() - 1000, '/');
            }
        }
        $cookie_timeout = COOKIE_DAYS_VALID * 24 * 60 * 60;
        if ((!empty($visitor['remember_token'])) && (strlen($visitor['remember_token']) > 0) && $cookie_login) {
            $query                 = 'SELECT password FROM shop_user WHERE id=' . $visitor['main_user_id'];
            $result                = @mysqli_query($GLOBALS['mysql_con'], $query);
            $password              = @mysqli_result($result);
            $remember_token_unique = md5(uniqid(session_id(), TRUE) . $password . $GLOBALS['visitor']['main_user_id']);
            $query                 = 'UPDATE main_visitor SET session_id=\'' . session_id() . '\', cookie_only=1, frontend_login=1, remember_token=\'' . $remember_token_unique . '\' WHERE id=' . $visitor['id'];
            @mysqli_query($GLOBALS['mysql_con'], $query);
            $visitor_query  = "SELECT * FROM main_visitor WHERE id=" . $visitor['id'];
            $visitor_result = @mysqli_query($GLOBALS['mysql_con'], $visitor_query);
            $visitor        = @mysqli_fetch_assoc($visitor_result);
            if ($visitor['frontend_login']) {
                $GLOBALS['visitor']['frontend_login'] = 1;
            }
            setcookie($GLOBALS['site']['code'] . '_remember_login', $remember_token_unique, time() + $cookie_timeout, '/');
            setcookie('sid' . $GLOBALS['site']['code'], session_id(), time() + $cookie_timeout, '/');
        }
    }
}

function nav_login_postprocessing( &$visitor ) {
    $old_sid = $visitor['session_id'];
    if (session_regenerate_id()) {
        $new_sid                                    = session_id();
        $_SESSION['sid' . $GLOBALS['site']['code']] = $new_sid;
        $query                                      = 'UPDATE main_visitor SET session_id = \'' . $new_sid . '\' WHERE session_id = \'' . $old_sid . '\'';
        if (@mysqli_query($GLOBALS['mysql_con'], $query)) {
            $delete_query = 'DELETE FROM main_visitor WHERE main_user_id = ' . $visitor['main_user_id'] . ' AND nav_login=1 AND session_id != \'' . $new_sid . '\'';
            @mysqli_query($GLOBALS['mysql_con'], $delete_query);
            $select_query = 'SELECT * FROM main_visitor WHERE session_id = \'' . $new_sid . '\'';
            $result       = @mysqli_query($GLOBALS['mysql_con'], $select_query);
            if (@mysqli_num_rows($result) > 0) {
                $visitor = @mysqli_fetch_assoc($result);
            }
        } else {
            throw new Exception('NOT UPDATED: ' . $query);
        }

    }
}

// function scanDirectory($directory, &$filesArrays, $maxFiles = 30) {
//     try {
//         //code...
//     static $processedFiles = []; // Статическая переменная для хранения уже обработанных файлов
//     // Проверяем, является ли переданный путь директорией
//     if (!is_dir($directory)) {
//         return;
//     }
    
//     // Открываем директорию для чтения
//     if ($handle = opendir($directory)) {
//         // Проходим по содержимому директории
//         while (false !== ($file = readdir($handle))) {
//             if ($file != "." && $file != "..") {
//                 $path = $directory . DIRECTORY_SEPARATOR . $file;
//                 // Если это файл, добавляем его путь в массив текущего блока, только если он еще не был обработан
//                 if (is_file($path) && pathinfo($path)['extension'] == "pdf") {
//                     $lastKey = count($filesArrays) - 1;
//                     if (!isset($filesArrays[$lastKey]) || count($filesArrays[$lastKey]) >= $maxFiles) {
//                         $filesArrays[] = [];
//                         $lastKey++;
//                     }

//                     $filesArrays[$lastKey][] = $path;
//                     $processedFiles[] = $path; // Записываем обработанный файл в список
//                 }
//                 // Если это директория, вызываем функцию scanDirectory рекурсивно
//                 elseif (is_dir($path)) {
//                     scanDirectory($path, $filesArrays, $maxFiles);
//                 }
//             }else {
//                 continue;
//             }
//         }
//         // Закрываем дескриптор директории
//         closedir($handle);
//     }
//     } catch (\Throwable $th) {
//         echo $th;
//     }
// }



// function s_p_a($search_text, $filesArray){
//     try {
//         //code...
    
        
//     $exist = false;
//     $loop = Factory::create();
//     $count = 0;
//     $links = array();
//     foreach ($filesArray as $array) {
//         ${'search_in_pdf_async_'.$count} = function($array, $searchText, $links, $exist) {
            
//             $prefix = '/var/www/web4/htdocs/intranet/';
//             $prefix_name = '/var/www/web4/htdocs/intranet/userdata/03_Module/01_Firmenwiki/AWO Wiki/';
//             foreach ($array as $path) {
                
//                 $parser = new Parser();
//                 $pdf = $parser->parseFile($path);
//                 $text = $pdf->getText();
//                 if (strpos($text, $searchText)) {
//                     $exist = true;
//                     $cleaned_path = str_replace($prefix, '', $path);
//                     $cleaned_path_name = str_replace($prefix_name, '', $path);
//                     echo "<a class=\"kc_post_link\" href=\"../../../".$cleaned_path."\" target=\"_blank\"><div class=\"kc_post\"><h4 class=\"kc_post_title\">".$cleaned_path_name."</h4></div></a></br>";
//                     continue;
//                 }else {
//                     continue;
//                 }
//             }
//         };
//         $dyncFunction = ${'search_in_pdf_async_'.($count)}($array, $search_text, $links, $exist);
//         ${'promise_'.$count} = new Promise(function ($resolve, $reject) use ($dyncFunction) {
//             $resolve($dyncFunction);
//         });
//     }
//     if ($count > 0) {
//         for ($i = 1; $i < $count; $i++) { 
//             $promise = ${'promise_'.$i};
//             if ($promise !== null) {
//                 $promise->then(function ($result) { 
//                     echo $result."</br>";
//                 })->catch(function (Throwable $error) { // Здесь ожидается Throwable, а не просто string
//                     echo "Error: " . $error->getMessage();
//                 }); 
//             }else {
//                 continue;
//             }
//         }
//     }
//     $loop->run();
//     if ($exist == false) {
//         echo "<div>Datei nicht gefunden</div>";
//     }
//     } catch (\Throwable $th) {
//         echo $th;
//     }
// }


function just_search($searchText, $filesArray){
    $exist = false;
    $prefix = '/var/www/web4/htdocs/intranet/';
    $prefix_name = '/var/www/web4/htdocs/intranet/userdata/03_Module/01_Firmenwiki/AWO Wiki/';
    foreach ($filesArray as $array) {
        foreach ($array as $path) {
            $parser = new Parser();
            $pdf = $parser->parseFile($path);
            $text = $pdf->getText();
            if (strpos($text, $searchText)) {
                $exist = true;
                $cleaned_path = str_replace($prefix, '', $path);
                $cleaned_path_name = str_replace($prefix_name, '', $path);
                echo "<a class=\"kc_post_link\" href=\"../../../".$cleaned_path."\" target=\"_blank\"><div class=\"kc_post\"><h4 class=\"kc_post_title\">".$cleaned_path_name."</h4></div></a></br>";
                continue;
            }else {
                continue;
            }
        }
    }
    if ($exist == false) {
        echo "<div>Datei nicht gefunden</div>";
    }
}



function logQuery( $datetime, $query, $file, $line, $toGlobal = NULL, $toFile = FALSE, $toHTML = TRUE, $msg = '', $includeSession = FALSE, $includeCookie = FALSE, $includePost = FALSE, $includeGet = FALSE, $includeArray = NULL ) {
    $logtext = PHP_EOL . $datetime . ' - ' . $msg . PHP_EOL;
    $logtext .= '  QUERY: ' . $query . PHP_EOL;
    $logtext .= '  FILE: ' . $file . PHP_EOL;
    $logtext .= '  LINE: ' . $line . PHP_EOL;
    if ($includeSession) {
        $sessiontext = print_r($_SESSION, 1);
        $sessiontext = str_replace('\n(\n', '\n  (\n', $sessiontext);
        $logtext .= '  SESSION: ' . $sessiontext . PHP_EOL;
    }
    if ($includeCookie) {
        $cookietext = print_r($_COOKIE, 1);
        $cookietext = str_replace('\n(\n', '\n  (\n', $cookietext);
        $logtext .= '  COOKIE: ' . $cookietext . PHP_EOL;
    }
    if ($includePost) {
        $posttext = print_r($_POST, 1);
        $posttext = str_replace('\n(\n', '\n  (\n', $posttext);
        $logtext .= '  POST: ' . $posttext . PHP_EOL;
    }
    if ($includeGet) {
        $gettext = print_r($_GET, 1);
        $gettext = str_replace('\n(\n', '\n  (\n', $gettext);
        $logtext .= '  GET: ' . $gettext . PHP_EOL;
    }
    if (is_array($includeArray)) {
        $arrtext = print_r($includeArray, 1);
        $arrtext = str_replace('\n(\n', '\n  (\n', $arrtext);
        $logtext .= ' CUST-ARRAY: ' . $arrtext . PHP_EOL;
    }
    if (isset($toGlobals)) {
        $toGlobals .= $logtext;
        $GLOBALS['querylog'] .= $logtext;
    } elseif ($toFile) {

    }
    if ($toHTML) {
        echo '<!-- LOG: ' . $logtext . ' -->';
    }
    if ($toFile) {
        $querylog = fopen(rtrim($_SERVER['DOCUMENT_ROOT'],'/') . "/userdata/logfile-visitor.txt", "a+");
        fwrite($querylog, $logtext . PHP_EOL);
        fclose($querylog);
    }
}

function check_sid_for_login( $sid, $nav_login = FALSE ) {
    $nav_login_insert = ($nav_login ? ' AND nav_login=1 ' : '');
    $query            = 'SELECT EXISTS(SELECT id FROM main_visitor WHERE session_id = \'' . mysqli_real_escape_string($GLOBALS['mysql_con'], $sid) . '\' AND main_user_id > 0 AND frontend_login=1 ' . $nav_login_insert . ')';
    $result           = @mysqli_query($GLOBALS['mysql_con'], $query);
    return (@mysqli_result($result, 0, 0) == TRUE ? TRUE : FALSE);
}

function renew_session_dates( $visitor ) {
    if ((int)$visitor['id'] > 0) {
        $query = '
		UPDATE main_visitor SET session_date = NOW(), valid_until = DATE_ADD(NOW(),INTERVAL 30 DAY) WHERE id = ' . (int)$visitor['id'];
        @mysqli_query($GLOBALS['mysql_con'], $query);
    }
}

function set_shop_globals_from_site() {
    if (!empty($GLOBALS['language']['company']) && !empty($GLOBALS['language']['shop_code']) && !empty($GLOBALS['language']['shop_language_code'])) {
        $company            = $GLOBALS['language']['company'];
        $shop_code          = $GLOBALS['language']['shop_code'];
        $shop_language_code = $GLOBALS['language']['shop_language_code'];

        if (empty($GLOBALS['shop'])) {
            $shop_query  = "SELECT * FROM shop_shop WHERE company = '" . $company . "' AND code = '" . $shop_code . "'";
            $shop_result = @mysqli_query($GLOBALS['mysql_con'], $shop_query);
            $shop        = @mysqli_fetch_assoc($shop_result);
            if (!empty($shop['id']) && (int)$shop['id'] > 0) {
                $GLOBALS['shop'] = $shop;
            }
        }

        if (empty($GLOBALS['shop_language'])) {
            $shop_language_query  = "SELECT * FROM shop_language WHERE company = '" . $company . "' AND shop_code = '" . $shop_code . "' AND code = '" . $shop_language_code . "'";
            $shop_language_result = @mysqli_query($GLOBALS['mysql_con'], $shop_language_query);
            $shop_language        = @mysqli_fetch_assoc($shop_language_result);
            if (!empty($shop_language['id']) && (int)$shop_language['id'] > 0) {
                $GLOBALS['shop_language'] = $shop_language;
            }
        }

    } else {
        set_shop_globals_from_login();
    }
}

function set_shop_globals_from_login() {
    $query  = "SELECT target_site_code, target_language_code FROM main_shop_login WHERE main_language_id = " . (int)$GLOBALS['language']['id'];
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    if ((int)@mysqli_num_rows($result) === 1) {
        $row           = mysqli_fetch_assoc($result);
        $site_code     = $row['target_site_code'];
        $language_code = $row['target_language_code'];
        if (!empty($site_code) && !empty($language_code)) {
            //Shop holen
            $query       = "
				SELECT 
					shop_shop.*
				FROM 
					main_language,
					main_site,
					shop_shop
				WHERE
					main_site.code = '" . $site_code . "'
				  AND
					main_language.main_site_id = main_site.id
				  AND
					main_language.code = '" . $language_code . "'
				  AND
					shop_shop.company = main_language.company
				  AND
					shop_shop.code = main_language.shop_code
				";
            $shop_result = @mysqli_query($GLOBALS['mysql_con'], $query);
            $shop        = @mysqli_fetch_assoc($shop_result);
            if (!empty($shop['id']) && (int)$shop['id'] > 0) {
                $GLOBALS['shop'] = $shop;
                if ($language_code == 'de' || $language_code == 'DE' || $language_code == 'DEU' || $language_code == 'deu') {
                    $lang_snippet = " AND code IN('de','DE','DEU','deu','dea','DEA') ";
                } elseif ($language_code == 'dea' || $language_code == 'DEA') {
                    $lang_snippet = " AND code IN('dea','DEA') ";
                } elseif ($language_code == 'en' || $language_code == 'EN' || $language_code == 'ENU' || $language_code == 'enu') {
                    $lang_snippet = " AND code IN('en','EN','ENU','enu') ";
                }
                $query  = "SELECT * FROM shop_language WHERE company = '" . $shop['company'] . "' AND shop_code = '" . $shop['code'] . "' " . $lang_snippet;
                $result = @mysqli_query($GLOBALS['mysql_con'], $query);
                if ((int)@mysqli_num_rows($result) == 1) {
                    $shop_language = mysqli_fetch_assoc($result);
                    if (!empty($shop_language['id']) && (int)$shop_language['id'] > 0) {
                        $GLOBALS['shop_language'] = $shop_language;
                    }
                } else {
                    //echo $query;
                }
            } else {
                //echo $query;
            }
        }
    }
}

function get_login_fields_html( $shop ) {
    $email_field = (
    $show_labels_in_fields ?
        "
			<div>
				<div class='input'>
					<input type='text' name='input_email' id='input_email' value='" . $GLOBALS['shop_user']['email'] . "' />
				</div>
			</div>
			"
        :
        "
			<div>
				<div class='label'><label for='input_email'>" . $GLOBALS['tc']['email'] . "</label></div>
				<div class='input'><input type='text' name='input_email' id='input_email' value='" . $GLOBALS['shop_user']['email'] . "' /></div>
			</div>
			"
    );

    $login_field = (
    $show_labels_in_fields ?
        "
			<div>
				<div class='input'>
					<input type='text' name='input_login' id='input_login' value='" . $GLOBALS['shop_user']['login'] . "' />
				</div>
			</div>
			"
        :
        "
			<div>
				<div class='label'><label for='input_login'>" . $GLOBALS['tc']['login'] . "</label></div>
				<div class='input'><input type='text' name='input_login' id='input_login' value='" . $GLOBALS['shop_user']['login'] . "' /></div>
			</div>
			"
    );

    $customer_no_field = (
    $show_labels_in_fields ?
        "
			<div>
				<div class='input'>
					<input type='text' name='input_customer_no' id='input_customer_no' value='" . $GLOBALS['shop_customer']['customer_no'] . "' />
				</div>
			</div>
			"
        :
        "
			<div>
				<div class='label'><label for='input_customer_no'>" . $GLOBALS['tc']['customer_no'] . "</label></div>
				<div class='input'><input type='text' name='input_customer_no' id='input_customer_no' value='" . $GLOBALS['shop_customer']['customer_no'] . "' /></div>
			</div>
			"
    );

    $password_field = (
    $show_labels_in_fields ?
        "
			<div>
				<div class='input'>
					<input type='text' name='input_password' id='input_password'/>
				</div>
			</div>
			"
        :
        "
			<div>
				<div class='label'><label for='input_password'>" . $GLOBALS['tc']['password'] . "</label></div>
				<div class='input'><input type='password' name='input_password' id='input_password'/></div>
			</div>
			"
    );

    $field_1_html = '';
    $field_2_html = '';

    switch ($shop['login_type']) {
        case 0: //E-Mail & Passwort
            $field_1_html = $email_field;
            break;
        case 1: //Login & Passwort
            $field_1_html = $login_field;
            break;
        case 2: //Kunden-Nr., Login & Passwort
            $field_1_html = $customer_no_field;
            $field_2_html = $login_field;
            break;
        case 3: //Kunden-Nr., E-Mail & Passwort
            $field_1_html = $customer_no_field;
            $field_2_html = $email_field;
            break;
        case 4: //Kunden-Nr. & Passwort
            $field_1_html = $customer_no_field;
            break;
        default:
            break;
    }

    $pre_check_remember_login = (!empty($GLOBALS['visitor']['remember_token']) ? 'checked ' : '');

    $fields = '<input type="hidden" name="action" value="shop_login"/>' . $field_1_html . $field_2_html . $password_field .
        '<div>
				<div class="label">
					<label for="remember_login">' . $GLOBALS['tc']['remember_login'] . '</label>
				</div>
				<div class="input">
					<input type="checkbox" class="checkbox" name="remember_login" id="remember_login" ' . $pre_check_remember_login . '/>
				</div>
			</div>';
    return $fields;
}



function split_name( $name ) {
    $results = array();

    $r    = explode(' ', $name);
    $size = count($r);

    //check first for period, assume salutation if so
    if (mb_strpos($r[0], '.') === FALSE) {
        $results['salutation'] = '';
        $results['first']      = $r[0];
    } else {
        $results['salutation'] = $r[0];
        $results['first']      = $r[1];
    }

    //check last for period, assume suffix if so
    if (mb_strpos($r[$size - 1], '.') === FALSE) {
        $results['suffix'] = '';
    } else {
        $results['suffix'] = $r[$size - 1];
    }

    //combine remains into last
    $start = ($results['salutation']) ? 2 : 1;
    $end   = ($results['suffix']) ? $size - 2 : $size - 1;

    $last = '';
    for ($i = $start; $i <= $end; $i++) {
        $last .= ' ' . $r[$i];
    }
    $results['last'] = trim($last);

    return $results;
}

function validateDate( $date, $format = 'Y-m-d H:i:s' ) {
    $d = DateTime::createFromFormat($format, $date);
    return ($d && $d->format($format) == $date);
}

function stringEndsWith( $string, $endsWith ) {
    $strlen  = strlen($string);
    $testlen = strlen($endsWith);
    if ($testlen > $strlen) {
        return FALSE;
    }
    return substr_compare(strtolower($string), strtolower($endsWith), $strlen - $testlen, $testlen) === 0;
}

function MySQLTypeIsText( $typestring ) {
    $typestring = (string)$typestring;
    return (
        stringEndsWith($typestring, 'CHAR')
        ||
        stringEndsWith($typestring, 'TEXT')
    );
}

function MySQLTypeIsNumeric( $typestring ) {
    $typestring = strtoupper($typestring);
    return (
        stringEndsWith($typestring, 'INT')
        ||
        stringEndsWith($typestring, 'FLOAT')
        ||
        stringEndsWith($typestring, 'DECIMAL')
    );
}

function MySQLTypeIsDate( $typestring ) {
    $typestring = strtoupper($typestring);
    return (
        $typestring == 'DATETIME'
        ||
        $typestring == 'DATE'
        ||
        $typestring == 'TIMESTAMP'
    );
}

function array_depth( array $array ) {
    $max_indentation = 1;

    $array_str = print_r($array, TRUE);
    $lines     = explode("\n", $array_str);

    foreach ($lines as $line) {
        $indentation = (strlen($line) - strlen(ltrim($line))) / 4;

        if ($indentation > $max_indentation) {
            $max_indentation = $indentation;
        }
    }

    return ceil(($max_indentation - 1) / 2) + 1;
}

function mysqli_fetch_all_from_executed_stmt(mysqli_stmt $stmt) {
    try {
        // Get metadata for field names
        $meta = $stmt->result_metadata();

        // initialise some empty arrays
        $fields = $results = $fieldNames = array();

        // This is the tricky bit dynamically creating an array of variables to use
        // to bind the results
        while ($field = $meta->fetch_field()) {
            $fieldNames[] = $field->name;
            $var          = $field->name;
            $$var         = NULL;
            $fields[$var] = &$$var;
        }

        $fieldCount = count($fieldNames);

        // Bind Results
        call_user_func_array(array($stmt,'bind_result'),$fields);

        $i=0;
        while ($stmt->fetch()){
            for($l=0;$l<$fieldCount;$l++) {
                $results[$i][$fieldNames[$l]] = $fields[$fieldNames[$l]];
            }
            $i++;
        }

        $stmt->close();

        return $results;
    } catch(Exception $e) {
        return array();
    }
}

/**
 * @param $id
 *
 * @return bool
 */

function setMailSent( $id ) {
    $query = 'UPDATE main_mail_log SET send_date = now() WHERE id = ' . (int)$id;
    $result = @mysqli_query($GLOBALS['mysql_con'],$query);
    return (bool)$result;
}


function get_all_whitespace_collapsed_variants($string) {
    $string = str_replace(array(' AND ',' OR '),' ',$string);
    $tokens = explode(' ',$string);
    $urlencodedTokens = array_map(function($str){return urlencode($str);},$tokens);
    $noOfTokens = count($tokens);
    if($noOfTokens === 1) { return array(); }
    //$whitespaceCollapsedStrings = $tokens;
    $whitespaceCollapsedStrings = array();

    for($i = 0;$i <= ($noOfTokens - 1);++$i) {
        $newString = '';
        $newStringWildCard = '';
        for($j = 1;$j <= ($noOfTokens - $i);++$j) {
            $newSuffix = $tokens[(($i + $j)-1)];
            if($newSuffix !== 'AND' && $newSuffix !== 'OR') {
                $arrSearchStr = $newString . $newSuffix;
                $newString .= urlencode($newSuffix);
                $newStringWildCard .= (($newStringWildCard)?'*':'');
                $newStringWildCard .= $newSuffix;
                //$newString .= $newSuffix;
                if(!in_array($arrSearchStr,$tokens) && !in_array($newString,$urlencodedTokens)) {
                    if(!in_array($newString,$whitespaceCollapsedStrings) && mb_strlen($newString,'UTF-8')>0) {
                        $whitespaceCollapsedStrings[] = $newString;
                        //$whitespaceCollapsedStrings[] = $newStringWildCard;
                    }
                }
            }
        }
    }
    return $whitespaceCollapsedStrings;
}

function string_starts_with($haystack, $needle) {
    // search backwards starting from haystack length characters from the end
    return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== FALSE;
}

function string_ends_with($haystack, $needle) {
    // search forward starting from end minus needle length characters
    return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== FALSE);
}

if (!function_exists("array_column")) {
    function array_column($array,$column_name)
    {
        return array_map(function($element) use($column_name){return $element[$column_name];}, $array);
    }
}


function pad_string_to_mb_length($string,$to_length,$padChar = ' ')
{
    $padChar = (string)$padChar;
    $padChar = $padChar[0];
    $to_length = (int)$to_length;
    $currLength = mb_strlen($string);
    if ($currLength < $to_length) {
        while (mb_strlen($string) < $to_length) {
            $string = $string . $padChar;
        }
    }
    return $string;
}

function escapeChars($charsToEscape, $escapeSeq, &$string)
{
    $charsToEscape = preg_quote($charsToEscape, '/');
    $regexSafeEscapeSeq = preg_quote($escapeSeq, '/');
    $escapeSeq = preg_replace('/([$\\\\])/', '\\\$1', $escapeSeq);
    $stringCopy = $string;
    $correctedStringCopy = (preg_replace('/(?<!'.$regexSafeEscapeSeq.')(['.$charsToEscape.'])/', $escapeSeq.'$1', $stringCopy));
    $string = $correctedStringCopy;
}


function adjust_qty_by_min_max_step(&$newQty,$oldQty,$min,$max,$step)
{
    $newQty = (float)$newQty;
    $oldQty = (float)$oldQty;
    $signMultiplier = ($newQty < $oldQty) ? -1 : 1;
    $min = (float)$min;
    $max = (float)$max;
    $step = (float)$step;


    if (($newQty % $step) !== 0) {
        $stepMultiplier = abs($newQty / $step);
        if ($signMultiplier > 0) {
            $stepMultiplier = ceil($stepMultiplier);
        } else {
            $stepMultiplier = floor($stepMultiplier);
        }
        $newQty = $step * $stepMultiplier;
    }

    if ($newQty > $max) {
        $newQty = $max;
    } elseif($newQty < $min) {
        $newQty = $min;
    }

}
function normalize_search_string($string) {
    $string = trim(strip_tags($string));
    $string = preg_replace('/\s+/',' ',$string);
    escapeChars('+-&|!(){}[]^~*?:\\/','\\',$string);
    //$string = preg_replace('/\-/','*',$string);
    //$string = preg_replace('/[^[:alnum:]]/','',$string);
    //$string = preg_replace('/[^a-zA-Z0-9\s+\-_°&*?"]/','',$string);
    $subTerms = explode(' ',$string);
    $subtermCount = count($subTerms);
    //if(strpos($string,' ') === FALSE) return '"' . $string . '"';
    /*
    $termArr = array();

    $initTerm = $string;
    $initPhraseTerm = '"' . $initTerm . '"';
    $termArr[] = '(' . $initTerm . ')';
    $itemNoIntactTerm = "(item_no_intact:($initTerm))";
    $termArr[] = $itemNoIntactTerm;
    $vendorItemNoIntactTerm = "(vender_item_no_intact:($initTerm))";
    $termArr[] = $vendorItemNoIntactTerm;
    $referenceNosTerm = "(reference_nos:($initTerm))";
    $termArr[] = $referenceNosTerm;
    if($subtermCount > 1) {
        $fuzzyTerm = preg_replace('/(?<=^\b|\s\b)([\w]+)/','$1~2',$string);
        $descriptionIntactPhraseTerm = "(description_intact:\"$initTerm\"~2)";
        $termArr[] = $descriptionIntactPhraseTerm;
        $mainCombinedPhraseTerm = "(main_item_desc_combined:\"$initTerm\"~2)";
        $termArr[] = $mainCombinedPhraseTerm;
        $descriptionPhraseTerm = "(description:\"$initTerm\"~2)";
        $termArr[] = $descriptionPhraseTerm;
        $didYouMeanPhraseTerm = "(did_you_mean:\"$initTerm\"~2)";
        $termArr[] = $didYouMeanPhraseTerm;
    } else {
        $fuzzyTerm = $initTerm . '~2';
    }
    $descriptionIntactTerm = "(description_intact:($fuzzyTerm))";
    $termArr[] = $descriptionIntactTerm;
    $mainCombinedExactTerm = "(main_item_desc_combined_exact:($fuzzyTerm))";
    $termArr[] = $mainCombinedExactTerm;
    $didYouMeanTerm = "(did_you_mean:($fuzzyTerm))";
    $termArr[] = $didYouMeanTerm;
    $descriptionTerm = "(description:($initTerm))";
    $termArr[] = $descriptionTerm;
    $mainCombinedTerm = "(main_item_desc_combined:($initTerm))";
    $termArr[] = $mainCombinedTerm;
    $mainCombinedEdgeTerm = "(main_item_desc_combined_edge:($initTerm))";
    $termArr[] = $mainCombinedEdgeTerm;
    $mainCombinedNGramTerm = "(main_item_desc_combined_ngram:($initTerm))";
    $termArr[] = $mainCombinedNGramTerm;

    $termStr = implode(' AND ',$termArr);



    $string = ltrim($string,' AND ');
    $string = preg_replace('/\s+/',' ',$string);
    */
    if($subtermCount > 1) {
        $origString = $string;
    }
    //$string = preg_replace("/(?<=^|\"|\s)([^\s\"]+)(?=\s|\"|$)/",'$1~1',$string);	$string =

    //$string = preg_replace('/(?:\b\sAND\s\b)|(?:(?<!AND|OR)\s(?!AND|OR))/',' AND ',$string);
    //$string = preg_replace('/(?:\b\sOR\s\b)|(?:(?<!AND|OR)\s(?!AND|OR))/',' OR ',$string);

    if($subtermCount > 1) {
        //$string = '("' . $origString . '" AND ' . $string . ')';
        //$string = '("' . $origString . '")';
        $string = "$string";
    }

    return '(' . urlencode($string) . ')';
}

function formatBytes($bytes, $precision = 2) {
    $kilobyte = 1024;
    $megabyte = 1024 * 1024;

    if ($bytes >= 0 && $bytes < $kilobyte) {
        return $bytes . " b";
    }

    if ($bytes >= $kilobyte && $bytes < $megabyte) {
        return round($bytes / $kilobyte, $precision) . " kb";
    }

    return round($bytes / $megabyte, $precision) . " mb";
}

/**
 * This file is part of the array_column library
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 *
 * @copyright Copyright (c) Ben Ramsey (http://benramsey.com)
 * @license http://opensource.org/licenses/MIT MIT
 */
if (!function_exists('array_column')) {
    /**
     * Returns the values from a single column of the input array, identified by
     * the $columnKey.
     *
     * Optionally, you may provide an $indexKey to index the values in the returned
     * array by the values from the $indexKey column in the input array.
     *
     * @param array $input A multi-dimensional array (record set) from which to pull
     *                     a column of values.
     * @param mixed $columnKey The column of values to return. This value may be the
     *                         integer key of the column you wish to retrieve, or it
     *                         may be the string key name for an associative array.
     * @param mixed $indexKey (Optional.) The column to use as the index/keys for
     *                        the returned array. This value may be the integer key
     *                        of the column, or it may be the string key name.
     * @return array
     */
    function array_column($input = null, $columnKey = null, $indexKey = null)
    {
        // Using func_get_args() in order to check for proper number of
        // parameters and trigger errors exactly as the built-in array_column()
        // does in PHP 5.5.
        $argc = func_num_args();
        $params = func_get_args();
        if ($argc < 2) {
            trigger_error("array_column() expects at least 2 parameters, {$argc} given", E_USER_WARNING);
            return null;
        }
        if (!is_array($params[0])) {
            trigger_error(
                'array_column() expects parameter 1 to be array, ' . gettype($params[0]) . ' given',
                E_USER_WARNING
            );
            return null;
        }
        if (!is_int($params[1])
            && !is_float($params[1])
            && !is_string($params[1])
            && $params[1] !== null
            && !(is_object($params[1]) && method_exists($params[1], '__toString'))
        ) {
            trigger_error('array_column(): The column key should be either a string or an integer', E_USER_WARNING);
            return false;
        }
        if (isset($params[2])
            && !is_int($params[2])
            && !is_float($params[2])
            && !is_string($params[2])
            && !(is_object($params[2]) && method_exists($params[2], '__toString'))
        ) {
            trigger_error('array_column(): The index key should be either a string or an integer', E_USER_WARNING);
            return false;
        }
        $paramsInput = $params[0];
        $paramsColumnKey = ($params[1] !== null) ? (string) $params[1] : null;
        $paramsIndexKey = null;
        if (isset($params[2])) {
            if (is_float($params[2]) || is_int($params[2])) {
                $paramsIndexKey = (int) $params[2];
            } else {
                $paramsIndexKey = (string) $params[2];
            }
        }
        $resultArray = array();
        foreach ($paramsInput as $row) {
            $key = $value = null;
            $keySet = $valueSet = false;
            if ($paramsIndexKey !== null && array_key_exists($paramsIndexKey, $row)) {
                $keySet = true;
                $key = (string) $row[$paramsIndexKey];
            }
            if ($paramsColumnKey === null) {
                $valueSet = true;
                $value = $row;
            } elseif (is_array($row) && array_key_exists($paramsColumnKey, $row)) {
                $valueSet = true;
                $value = $row[$paramsColumnKey];
            }
            if ($valueSet) {
                if ($keySet) {
                    $resultArray[$key] = $value;
                } else {
                    $resultArray[] = $value;
                }
            }
        }
        return $resultArray;
    }
}

function safe_array_dot_access(array $arr, $dotKey, $defaultValue = null) {
    $keyParts = explode('.',$dotKey,100);
    $lastPartIndex = count($keyParts) - 1;
    $i = 0;
    $currPart = $keyParts[$i];
    foreach ($keyParts as $keyPart) {
        $keyPartDigit = $keyPart;
        if (ctype_digit($keyPart)) {
            $keyPartDigit = (int)$keyPart;
        }
        if ($i === $lastPartIndex) {
            if (isset($currPart[$keyPart])) {
                return $currPart[$keyPart];
            } elseif (isset($currPart[$keyPartDigit])) {
                return $currPart[$keyPartDigit];
            } else {
                return $defaultValue;
            }
        }
        if (array_key_exists($keyPart,$currPart)) {
            $currPart = $currPart[$keyPart];
            $i++;
        } elseif (array_key_exists($keyPartDigit,$currPart)) {
            $currPart = $currPart[$keyPartDigit];
            $i++;
        } else {
            return $defaultValue;
        }
    }
    return $defaultValue;
}

function universal_redirect($absoluteRedirectPath,$redirectCode = 302)
{
    if (!headers_sent()) {
        header('Location: ' . $absoluteRedirectPath,true,$redirectCode);
    } else {
        echo "
        <script type=\"text/javascript\">
        window.location.replace(\"$absoluteRedirectPath\");
        </script>
        ";

    }
}

function getSessionErrorMessages()
{
    if (isset($_SESSION['msgBag']['errors'])) {
        return $_SESSION['msgBag']['errors'];
    }
    return [];
}

function getSessionNotifications()
{
    if (isset($_SESSION['msgBag']['notifications'])) {
        return $_SESSION['msgBag']['notifications'];
    }
    return [];
}

function getSessionSuccessMessages()
{
    if (isset($_SESSION['msgBag']['successes'])) {
        return $_SESSION['msgBag']['successes'];
    }
    return [];
}

function printFlashMessages()
{

    $wrapper = '<div class="flash_messages" style="display:none;position:static;">%s</div>';
    $inner = '<div class="flash_message_%s">%s</div>';

    $allInner = '';
    if (array_key_exists('msgBag',$_SESSION)) {
        if (array_key_exists('successes',$_SESSION['msgBag'])) {
            foreach ($_SESSION['msgBag']['successes'] as $successMsg) {
                $allInner .= sprintf($inner,'success',$successMsg);
            }
        }
        if (array_key_exists('errors',$_SESSION['msgBag'])) {
            foreach ($_SESSION['msgBag']['errors'] as $errorMsg) {
                $allInner .= sprintf($inner,'error',$errorMsg);
            }
        }
        if (array_key_exists('notifications',$_SESSION['msgBag'])) {
            foreach ($_SESSION['msgBag']['notifications'] as $notification) {
                $allInner .= sprintf($inner,'notification',$notification);
            }
        }
    }
    $html = sprintf($wrapper,$allInner);
    $javascript = '
    <script type="text/javascript">
    $(\'.flash_messages\').fadeIn().delay(10000).fadeOut();
    </script>
    ';

    echo $html;
    echo $javascript;

    $_SESSION['msgBag'] = null;
    unset($_SESSION['msgBag']);

}

function  generateCallTrace()
{
    $e = new Exception();
    $trace = explode("\n", $e->getTraceAsString());
    // reverse array to make steps line up chronologically
    $trace = array_reverse($trace);
    array_shift($trace); // remove {main}
    array_pop($trace); // remove call to this method
    $length = count($trace);
    $result = array();

    for ($i = 0; $i < $length; $i++)
    {
        $result[] = ($i + 1)  . ')' . substr($trace[$i], strpos($trace[$i], ' ')); // replace '#someNum' with '$i)', set the right ordering
    }

    return "\t" . implode("\n\t", $result);
}

function get_requestbox($text, $title = "", $typ = "error", $instantLoad = true, $id = "requestbox"){
    if($title == ""){
        switch ($typ) {
            case "success":
                $title = $GLOBALS['tc']['success'];
                break;
            case "warning":
                $title = $GLOBALS['tc']['warning'];
                break;
            default:
                $title = $GLOBALS['tc']['error'];
                break;
        }
    }

    if ($instantLoad) {

    ?>
    <script type="text/javascript">
        $(window).load(function(){
            if ($('#<?= $id ?>').parents('.modal').length == 1) {
                parentModal = $('#<?= $id ?>').parents('.modal');
                newModal = $('#<?= $id ?>').appendTo('body');
                newModal.modal('show');
                parentModal.modal('show');
            } else {
                $('#<?= $id ?>').modal('show');
            }
        });
    </script>

    <? } ?>

    <div class="modal fade <?=$typ;?>" id="<?= $id ?>" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                    <h4 class="modal-title" id="myModalLabel"><?=$title?></h4>
                </div>
                <div class="modal-body">
                    <?=$text?>
                </div>
            </div>
        </div>
    </div>
    <?
}

function get_password_options() {
    $random_byte_length = 22;
    $salt = '';
    if (function_exists('random_bytes')) {
        return [
            'cost' => 11,
        ];
    } else {
        $salt = mcrypt_create_iv($random_byte_length,MCRYPT_DEV_URANDOM);
        return [
            'cost' => 11,
            'salt' => $salt,
        ];
    }
}

function fetchAssocStatement($stmt)
{
    if($stmt->num_rows>0)
    {
        $result = array();
        $md = $stmt->result_metadata();
        $params = array();
        while($field = $md->fetch_field()) {
            $params[] = &$result[$field->name];
        }
        call_user_func_array(array($stmt, 'bind_result'), $params);
        if($stmt->fetch())
            return $result;
    }

    return null;
}

function get_nl_coupon($sales_header = "") { //changed

    $dc_code = "";
    if ($sales_header != "") {
        $query = "SELECT * FROM shop_language WHERE company = '".$sales_header["company"]."' AND shop_code = '".$sales_header["shop_code"]."' AND code = '".$sales_header["language_code"]."'";
        $result = mysqli_query($GLOBALS['mysql_con'], $query);
        $language = mysqli_fetch_array($result);
        if (is_null($GLOBALS["shop_language"])) {
            $GLOBALS["shop_language"] = $language;
        }
        $query = "SELECT * FROM shop_shop WHERE company = '".$sales_header["company"]."' AND code = '".$sales_header["shop_code"]."'";
        $result = mysqli_query($GLOBALS['mysql_con'], $query);
        $shop = mysqli_fetch_array($result);
        if (is_null($GLOBALS["shop"])) {
            $GLOBALS["shop"] = $shop;
        }
    }
    if ($GLOBALS["shop_language"]["nl_coupon_active"] && $GLOBALS["shop_language"]["nl_coupon_header"] != "") {
        $dc_code        = random_str(7);

        $counter_line = 1;
        $new_code = true;

        while ($dc_code <> '' && $counter_line < 10 && $new_code == true)
        {
            $query_line = "SELECT id FROM shop_coupon_line
				 WHERE company = '" . $GLOBALS["shop"]["company"] . "'
				 AND shop_code = '" . $GLOBALS['shop']["code"] . "'
				 AND language_code = '" . $GLOBALS['shop_language']["code"] . "'
				 AND coupon_code = '" . $dc_code . "'";
            $result_line = mysqli_query($GLOBALS['mysql_con'], $query_line);

            if (mysqli_num_rows($result_line) > 0) {
                $dc_code = random_str(7);
                $new_code = true;
                $counter_line++;
            }
            else
            {
                $new_code = false;
            }
        }

        $header_code    = $GLOBALS["shop_language"]["nl_coupon_header"];
        $query = "SELECT * FROM shop_coupon_header 
                WHERE company = '".$GLOBALS["shop"]["company"]."' 
                AND shop_code = '".$GLOBALS["shop"]["code"]."' 
                AND language_code = '".$GLOBALS["shop_language"]["code"]."' 
                AND code = '".$header_code."'
        ";

        $result = mysqli_query($GLOBALS['mysql_con'], $query);
        if (mysqli_num_rows($result) == 1) {

            $coupon_header = mysqli_fetch_array($result);

            $query = "INSERT INTO shop_coupon_line 
                      SET company = '" . $GLOBALS["shop"]["company"] . "',
                          shop_code = '" . $GLOBALS['shop']["code"] . "',
                          language_code = '" . $GLOBALS['shop_language']["code"] . "',
                          code = '" . $coupon_header["code"] . "',
                          coupon_code = '" . $dc_code . "',
                          times_used = 0,
                          max_no_of_usage = 1,
                          amount = '" . $coupon_header["amount"] . "',
                          amount_left = '" . $coupon_header["amount"] . "',
                          update_insert = 1,
                          last_date_used=CURDATE()";
            mysqli_query($GLOBALS['mysql_con'], $query);

        }

    }
    return $dc_code;

}


function random_str($length, $keyspace = '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ')
{
    $str = '';
    $max = mb_strlen($keyspace, '8bit') - 1;
    for ($i = 0; $i < $length; ++$i) {
        $str .= $keyspace[random_int(0, $max)];
    }
    return $str;
}

function get_client_ip_address() {
    $ipAddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP']))
        $ipAddress = $_SERVER['HTTP_CLIENT_IP'];
    else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        $ipAddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_X_FORWARDED']))
        $ipAddress = $_SERVER['HTTP_X_FORWARDED'];
    else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
        $ipAddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_FORWARDED']))
        $ipAddress = $_SERVER['HTTP_FORWARDED'];
    else if(isset($_SERVER['REMOTE_ADDR']))
        $ipAddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipAddress = 'UNKNOWN';
    return $ipAddress;
}

function cartesian_product(array $input) {
    // filter out empty values
    $input = array_filter($input);

    $result = [[]];

    foreach ($input as $key => $values) {
        $append = array();

        foreach($result as $product) {
            foreach($values as $item) {
                $product[$key] = $item;
                $append[] = $product;
            }
        }

        $result = $append;
    }

    return $result;
}

function cartesian_product_generator(array $input)
{
    if ($input) {
        if ($u = array_pop($input)) {
            foreach (cartesian_product_generator($input) as $p) {
                foreach ($u as $v) {
                    yield $p + [count($p) => $v];
                }
            }
        }
    } else {
        yield[];
    }
}

function dropAllActionItemsOnUrlQuery():string{
    $actualURL = (isset($_SERVER['HTTPS']) ? "https" : "http") . '://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
    $actualURLParts = parse_url($actualURL);
    $actualURLPartsQuery = explode('&',$actualURLParts["query"]);
    $i = 0;
    foreach ($actualURLPartsQuery as $actualUrlPartQuery){
        $actualUrlPartQuery = explode('=',$actualUrlPartQuery);
        if ($actualUrlPartQuery[0] === 'action' || $actualUrlPartQuery[0] === 'action_id') {
            unset($actualURLPartsQuery[$i]);
        }
        $i++;
    }
    return implode('&',$actualURLPartsQuery);
}

function get_false_password_login_counter($ipHash,$loginHash)
{
    $pdoHost = getenv('MAIN_MYSQL_DB_HOST');
    $pdoPort = getenv('MAIN_MYSQL_DB_PORT');
    $pdoUser = getenv('MAIN_MYSQL_DB_USER');
    $pdoPass = getenv('MAIN_MYSQL_DB_PASS');
    $pdoSchema = getenv('MAIN_MYSQL_DB_SCHEMA');

    $pdo = new \DynCom\mysyde\common\classes\PDOQueryWrapper($pdoHost, $pdoPort, $pdoSchema, $pdoUser, $pdoPass);

    $prepStatement = " 
            
            SELECT 
    false_login.*
FROM
    false_login
WHERE
    ( false_login.ip_hash = :ip_hash  OR false_login.login_hash = :login_hash )
        ";
    $params = [
        [':ip_hash', $ipHash, PDO::PARAM_STR],
        [':login_hash', $loginHash, PDO::PARAM_STR],
    ];
    $pdo->setQuery($prepStatement);
    $pdo->prepareQuery();
    $pdo->bindParameters($params);
    $pdo->executePreparedStatement();
    $result = $pdo->getResultArray();
    return $result;
}
function add_false_password_loign_counter($ipHash,$loginHash, $counter = 1, $nextLoginTime, $blockCounter = 0  )
{
    $pdoHost = getenv('MAIN_MYSQL_DB_HOST');
    $pdoPort = getenv('MAIN_MYSQL_DB_PORT');
    $pdoUser = getenv('MAIN_MYSQL_DB_USER');
    $pdoPass = getenv('MAIN_MYSQL_DB_PASS');
    $pdoSchema = getenv('MAIN_MYSQL_DB_SCHEMA');

    $pdo = new \DynCom\mysyde\common\classes\PDOQueryWrapper($pdoHost, $pdoPort, $pdoSchema, $pdoUser, $pdoPass);

    $prepStatement = " 
            
            INSERT INTO `false_login`
                (`ip_hash`, `login_hash`, `total_counter`, `next_login_time`, block_counter)
                VALUES 
                (:ip_hash ,:login_hash, :counter, :next_login_time, 0)
                ON DUPLICATE KEY UPDATE block_counter = :block_counter , next_login_time = :next_login_time

                        ";

    if($counter == 1)
    {
        $prepStatement = " 
            
            INSERT INTO `false_login`
                (`ip_hash`, `login_hash`, `total_counter`, `next_login_time`, block_counter)
                VALUES 
                (:ip_hash ,:login_hash, :counter, :next_login_time, :block_counter)
                ON DUPLICATE KEY UPDATE total_counter = total_counter + 1 , next_login_time = :next_login_time

                        ";
    }
    $params = [
        [':ip_hash', $ipHash, PDO::PARAM_STR],
        [':login_hash', $loginHash, PDO::PARAM_STR],
        [':counter', $counter, PDO::PARAM_STR],
        [':next_login_time', $nextLoginTime, PDO::PARAM_STR],
        [':block_counter', $blockCounter, PDO::PARAM_STR],
    ];
    $pdo->setQuery($prepStatement);
    $pdo->prepareQuery();
    $pdo->bindParameters($params);
    $pdo->executePreparedStatement();
}


function delete_false_password_loign_counter($ipHash,$loginhash)
{
    $pdoHost = getenv('MAIN_MYSQL_DB_HOST');
    $pdoPort = getenv('MAIN_MYSQL_DB_PORT');
    $pdoUser = getenv('MAIN_MYSQL_DB_USER');
    $pdoPass = getenv('MAIN_MYSQL_DB_PASS');
    $pdoSchema = getenv('MAIN_MYSQL_DB_SCHEMA');

    $pdo = new \DynCom\mysyde\common\classes\PDOQueryWrapper($pdoHost, $pdoPort, $pdoSchema, $pdoUser, $pdoPass);

    $prepStatement = " 
            
            Delete From  `false_login` where ip_hash = :ip_hash or login_hash = :login_hash

                        ";
    $params = [
        [':ip_hash', $ipHash, PDO::PARAM_STR],
        [':login_hash', $loginhash, PDO::PARAM_STR],
    ];
    $pdo->setQuery($prepStatement);
    $pdo->prepareQuery();
    $pdo->bindParameters($params);
    $pdo->executePreparedStatement();
}

function getUserIP()
{
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];

    if(filter_var($client, FILTER_VALIDATE_IP))
    {
        $ip = $client;
    }
    elseif(filter_var($forward, FILTER_VALIDATE_IP))
    {
        $ip = $forward;
    }
    else
    {
        $ip = $remote;
    }

    return $ip;
}
function recaptcha() {
    $query  = 'SELECT * FROM google_recaptcha';
    $result = @mysqli_query($GLOBALS['mysql_con'], $query);
    $recaptcha = @mysqli_fetch_array($result);
    $secret = $recaptcha["secretkey"];
    $key = $recaptcha["websitekey"];
    $GLOBALS["secret"] = $secret;
    $GLOBALS["key"] = $key;
}

// FAQ MODULE
function replace_umlaut ($txt) {

    //Replace String to Entities

    if (strpos($txt,'Ö') !== false) {
        $txt = str_replace('Ö', '&Ouml;', $txt);
    }
    if (strpos($txt,'ö') !== false) {
        $txt = str_replace('ö', '&ouml;', $txt);
    }

    if (strpos($txt,'Ü') !== false) {
        $txt = str_replace('Ü', '&Uuml;', $txt);
    }
    if (strpos($txt,'ü') !== false) {
        $txt = str_replace('ü', '&uuml;', $txt);
    }

    if (strpos($txt,'Ä') !== false) { 
        $txt = str_replace('Ä', '&Auml;', $txt);
    }
    if (strpos($txt,'ä') !== false) {
        $txt = str_replace('ä', '&auml;', $txt);
    }

    return $txt;

}

// Funktion zum Laden des benutzerdefinierten Selektor-Aktionsumschalters
function loadAction($formname, $deleteAction, $dblclick_action, $counter){
    $translation = \DynCom\mysyde\common\classes\Registry::get("translation");
?>   
        <td >
        <?= '<a data-formname="'.$formname.'" class="button" href="javascript:void(0);" onclick="setCurrentToolbarClicked(this);loadCard(\''.$dblclick_action.'\');"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-pencil-square" viewBox="0 0 16 16">
  <path d="M15.502 1.94a.5.5 0 0 1 0 .706L14.459 3.69l-2-2L13.502.646a.5.5 0 0 1 .707 0l1.293 1.293zm-1.75 2.456-2-2L4.939 9.21a.5.5 0 0 0-.121.196l-.805 2.414a.25.25 0 0 0 .316.316l2.414-.805a.5.5 0 0 0 .196-.12l6.813-6.814z"/>
  <path fill-rule="evenodd" d="M1 13.5A1.5 1.5 0 0 0 2.5 15h11a1.5 1.5 0 0 0 1.5-1.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 1-.5.5h-11a.5.5 0 0 1-.5-.5v-11a.5.5 0 0 1 .5-.5H9a.5.5 0 0 0 0-1H2.5A1.5 1.5 0 0 0 1 2.5v11z"/>
</svg></a>';?>
                    <?= '<a data-formname="'.$formname.'" class="button" href="javascript:void(0);" onclick="setCurrentToolbarClicked(this);'.$deleteAction.'"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-trash" viewBox="0 0 16 16">
  <path d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6z"/>
  <path fill-rule="evenodd" d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1zM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118zM2.5 3V2h11v1h-11z"/>
</svg></a>';?>
             
        </td>
<?        
    // <!-- echo "<td width=\"100\" class=\"sorticon\"><div>" . 
    //                         ''. 
    //                         '<a data-formname="'.$formname.'" class="button_edit" href="javascript:void(0);" onclick="setCurrentToolbarClicked(this);loadCard(\''.$dblclick_action.'\');">'.$translation->get("edit").'</a>'.
    //                       "</div></td>"; -->
}