<?php
/*****************************************************************************
IP Reg, a PHP/MySQL IPAM tool
Copyright (C) 2007-2009 Wietse Warendorff (up to v0.5)
Copyright (C) 2011-2023 Thomas Hooge

SPDX-License-Identifier: GPL-3.0-or-later
*****************************************************************************/

// strip mac address to 12 char string
function strip_mac($mac) {
    // strip chars we don't need
    $mac = preg_replace("|[^a-fA-F0-9]|", "", $mac);

    // capitalize (just because it looks better eh)
    $mac = strtoupper($mac);

    // and return
    return ($mac);
}

// rebuild mac address
function write_mac($mac) {
    // check string length
    if (strlen($mac)!=12) {
        // if the MAC is empty, or for whatever reason incorrect, just return
        return $mac;
    } else {
        // count to 12...
        for ($i=0; $i<12; $i++) {
            // ... and strip mac to pieces
            ${"mac".$i} = $mac{$i};
        }

        // get user preference
        $user_mac = $_SESSION['suser_mac'];

        // count to 12 again...
        for($i=0; $i<12; $i++) {
            // ... and replace user preference with pieces
            $user_mac = preg_replace("/x/", ${"mac".$i}, $user_mac, 1);
        }

        // and return
        return $user_mac;
    }
}

// redirect page
function header_location($location) {
    // send header
    header("location: " . $location);

    // exit to be sure
    exit;
}

// sanitize input
function sanitize($input) {
    global $dblink;

    // trim whitespaces
    $input = @trim($input);

    // magic quotes enabled?
    if(get_magic_quotes_gpc()) {
        // strip slashes
        $input = stripslashes($input);
    }

    // convert to utf-8
    iconv("UTF-8", "UTF-8", $input);

    // convert special chars
    $input = htmlentities($input,ENT_QUOTES,'UTF-8');

    // and return
    return $input;
}

function mysql_nullstring($input) {
    if (isset($input)) {
        return $input;
    } else {
        return '';
    }
}

function lang_getfrombrowser ($allowed_languages, $default_language, $lang_variable = null, $strict_mode = true) {
    if ($lang_variable === null) {
        $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]);
        if (isset($matches[2])) {
            $lang_quality = (float)$matches[2];
        } else {
            $lang_quality = 1.0;
        }
        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;
                }
            }
            if ($strict_mode) {
                break;
            }
            array_pop ($lang_code);
        }
    }
    return $current_lang;
}

function print_tree_rec($tree, $level) {
    $output = '<ul class="treelvl' . $level. '">' . "\n";
    foreach ($tree as $node) {
        $output .= '<li><a href="' . $node['href'] . '">' . $node['value'] . '</a>';
        if ($node['children']) {
            $output .= "\n" . print_tree_rec($node['children'], $level+1);
        }
        $output .= "</li>\n";
    }
    $output .= "</ul>\n";
    return $output;
}

//function print_tree($params, &$smarty) {
function print_tree($params, Smarty_Internal_Template $template) {
    if (empty($params['level'])) {
        $level = 0;
    } else {
        $level = $params['level'];
    }
    if (empty($params['tree'])) {
        return '';
    } else {
        return print_tree_rec($params['tree'], $level);
    }
}

?>