<?php

if (!defined('WEBSHOP_LIB_DIR')) define('WEBSHOP_LIB_DIR', dirname(__FILE__) . '/../..');

require_once(WEBSHOP_LIB_DIR . '/iqsys/otpwebshop/util/RequestUtils.php');

/**
* Konfigurációs paraméterek kezelésének támogatása.
* Egyaránt kezeli a simpleshop és multishop környezet szerint kialakított
* .config állományokat.
* 
* @version 3.3.1
* @author Bodnár Imre / IQSYS
*/
class ConfigUtils {

    /**
    * @desc Konfigurációs paraméter kiolvasása simpleshop
    * vagy multishop környezet szerint kialakított
    * .config állományból
    * 
    * @param Array config az konfigurációs fájl tartalma
    * @param String paramName a keresett konfigurációs paraméter neve
    * @return string a paraméter értéke vagy null
    */
    function safeConfigParam($config, $paramName) {
        return array_key_exists($paramName, $config) ? $config[$paramName] : null;
    }
        
    /**
    * @desc Konfigurációs paraméter kiolvasása simpleshop
    * vagy multishop környezet szerint kialakított
    * .config állományból
    * 
    * @param Array config az konfigurációs fájl tartalma
    * @param String paramName a keresett konfigurációs paraméter neve
    * @param String posId a vonatkozó posId
    * @param mixed config a keresett konfigurációs paraméter alapértelmezett értéke 
    *   (arra az esetre, ha nem létezik a megfelelő paraméter)
    * @return mixed a paraméter értéke string vagy $defaultValue-val megegyező típusban
    */
    function getConfigParam($config, $paramName, $posId = NULL, $defaultValue = NULL) {
        $paramValue = NULL;
        if (is_null($posId)) {
            $paramValue = ConfigUtils::safeConfigParam($config, $paramName . '_' . $posId);
        }
        if (is_null($paramValue)) {
            $paramValue = ConfigUtils::safeConfigParam($config, $paramName);
        }
        if (is_null($paramValue)) {
            $paramValue = $defaultValue;
        }
        return $paramValue;
    }

    /**
    * @desc Logikai értékű konfigurációs paraméter kiolvasása simpleshop
    * vagy multishop környezet szerint kialakított
    * .config állományból
    * 
    * @param Array $config az konfigurációs fájl tartalma
    * @param String $paramName a keresett konfigurációs paraméter neve
    * @param String $posId a vonatkozó posId
    * @param mixed $defaultValue a keresett konfigurációs paraméter alapértelmezett értéke 
    *   (arra az esetre, ha nem létezik a megfelelő paraméter)
    * 
    * @return boolean a paraméter (vagy de$faultValue) logikai értéke
    */
    function getConfigParamBool($config, $paramName, $posId = NULL, $defaultValue = NULL) {
        $paramValue = ConfigUtils::getConfigParam($config, $paramName, $posId = NULL, $defaultValue = NULL);
        return RequestUtils::getBooleanValue($paramValue);
    }
    
    /**
    * @desc A Java-ra jellemző konfigurációs paraméter helyettesítés 
    * megvalósítása: a $paramValue string-ben szereplő {key} értékek
    * lecserélése a $values[key] szövegre.
    * 
    * @param string paramValue a helyettesítésre váró szöveg
    * @param array a helyettesítések key/value párban$
    * 
    * @return string a helyettesített szöveg 
    */
    function substConfigValue($paramValue, $values) {
        foreach ($values as $key => $value) {
            $paramValue = str_replace("{" . $key ."}", $value, $paramValue);
        }
        return $paramValue;       
    }
    
}

?>