<?php 
 
if (!isset($adminindex)) { 
    die("Abort." . __FILE__); 
} 
 
$oCfg=new confighandler("config_user"); 
// $aUserCfg=$oCfg->get(); 
$aTC = array(); 
 
// ---------------------------------------------------------------------- 
// actions 
// ---------------------------------------------------------------------- 
 
if($sAppAction){ 
    $aResult=array(); 
    switch ($sAppAction){ 
         
        case 'updateconfig': 
            $aRawCfg=json_decode($_POST['rawdata'], 1); 
            if(!is_array($aRawCfg)){ 
                $oMsg->add($aLangTxt['AdminMessageSettings-update-error-no-json'] . '<button class="btn" onclick="javascript:history.back();">back</button>', 'error'); 
            } else { 
                if (!$oCfg->set($aRawCfg)){ 
                    $oMsg->add($aLangTxt['AdminMessageSettings-update-error'], 'error'); 
                } else { 
                    $oMsg->add($aLangTxt['AdminMessageSettings-update-ok'], 'success'); 
                } 
            } 
            break; 
         
        default: 
            $oMsg->add("SKIP: action $sAppAction is not implemented (yet).", 'error'); 
    } 
} 
 
// RESCAN CONFIG - repeated in inc_config.php 
$aUserCfg=$oCfg->get("config_user"); 
$aCfg = array_merge($aDefaultCfg, $aUserCfg); 
 
 
foreach(array_keys($aUserCfg) as $sKey){ 
    if (!array_key_exists($sKey, $aDefaultCfg)){ 
        $oMsg->add(sprintf($aLangTxt['AdminMessageSettings-wrong-key'], $sKey) . " <pre>'$sKey': ".  json_encode($aUserCfg[$sKey])."</pre>", 'warning'); 
    } 
} 
 
 
// ---------------------------------------------------------------------- 
// 2 tabs for raw data 
// ---------------------------------------------------------------------- 
 
foreach (array( 
    "config_user" => array("edit" => true), 
    // "internal-config_default" => array("edit" => false), 
) as $sCfgfile => $aSettings) { 
    $myvar = $sCfgfile; 
    $sData = file_get_contents(dirname(__DIR__) . '../../config/' . $sCfgfile . '.json'); 
    $sOut=$aSettings['edit'] 
            ? '<form class="form" method="post" action="'.getNewQs(array()).'">' 
                . '<input name="appaction" value="updateconfig" type="hidden">' 
                . '<input name="appconfig" value="'.$sCfgfile.'" type="hidden">' 
                . '<textarea id="ta" name="rawdata" class="form-control raw" rows="15">' . htmlentities($sData) . '</textarea><br>' 
                . '<button class="btn btn-primary" title="'.$aLangTxt['ActionOKHint'].'"' 
                    . '>'.$aCfg['icons']['actionOK'].$aLangTxt['ActionOK'].'</button>' 
            . '</form>' 
            : '<pre>' . htmlentities($sData) . '</pre>' 
            ; 
     
    $aTC[] = array( 
        'tab' => $aCfg['icons']['tab_'.$myvar] . $myvar, 
        'content' => '<h4>' . $aCfg['icons']['tab_'.$myvar] . $sCfgfile . '</h4> 
            <div class="subh3">' 
            . '<div class="hintbox">' 
                . $aLangTxt['AdminHintRaw-' . $sCfgfile] 
            . '</div>' 
            . $sOut 
          . '</div> 
        ' 
    ); 
     
} 
 
// ---------------------------------------------------------------------- 
// tab settings that shows overrides  
// ---------------------------------------------------------------------- 
$aCfgUser = $oCfg->get("config_user"); 
 
 
// $myvar = 'overrides'; 
$sTableId='tblCompareSettings'; 
$sTable = '<table class="table datatable" id="'.$sTableId.'" style="width: 100%;"><thead>' 
        . '<tr>' 
        . '<th>' . $aLangTxt['AdminMenuSettings-var'] . '</th>' 
        . '<th>' . $aLangTxt['AdminMenuSettings-description'] . '</th>' 
        . '<th>' . $aLangTxt['AdminMenuSettings-uservalue'] . '</th>' 
        . '<th>' . $aLangTxt['AdminMenuSettings-default'] . '</th>' 
        . '</tr>' 
        . '</thead>' 
        . '<tbody>'; 
foreach ($aDefaultCfg as $sKey => $val) { 
    $value = ''; 
    $sClass = "default"; 
    $bHasUserCfg=array_key_exists($sKey, $aCfgUser); 
    // genenerate new config 
    $aNewCfg=$aCfgUser; 
     
    if ($bHasUserCfg) { 
        $sClass = "user"; 
        $value = $aCfgUser[$sKey]; 
        unset($aNewCfg[$sKey]); 
        $sFormButton='<button class="btn btn-default" title="'.$aLangTxt['ActionResetToDefaultsHint'].' '.$sKey.'"' 
            . '>'.$aCfg['icons']['actionReset'].$aLangTxt['ActionResetToDefaults'].'</button>'; 
    } else { 
        $aNewCfg[$sKey]=$val; 
        $sFormButton='<button class="btn btn-default" title="'.$aLangTxt['ActionAdd'].' '.$sKey.'"' 
            . '>'.$aCfg['icons']['actionAdd'].$aLangTxt['ActionAdd'].'</button>'; 
    } 
    if (!isset($aLangTxt['cfg-' . $sKey])) { 
        $sClass = "error"; 
    } 
     
    $sNewCfg=json_encode($aNewCfg); 
     
    $sTable.='<tr class="' . $sClass . '">' . "\n" 
            . '<td>' . $sKey . '</td>' . "\n" 
            . '<td>' . (isset($aLangTxt['cfg-' . $sKey]) ? $aLangTxt['cfg-' . $sKey] : $aLangTxt['cfg-wrongitem'] ) . '</td>' . "\n" 
             
            // --- show user config value 
            . '<td>' . ($bHasUserCfg ? '<pre class="active">' . htmlentities(json_encode($aCfgUser[$sKey], (defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : false ))) . '</pre>' : '-' ) . '</td>' . "\n" 
 
            // --- show default config and button 
            . '<td><pre' . (!$bHasUserCfg ? ' class="default"': '' )  
                . '>"'.$sKey.'": '.htmlentities(json_encode($val, (defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : false )))  
                .($sNewCfg 
                    ?  '<form class="form" method="post" action="'.getNewQs(array()).'">' 
                        . '<input name="appaction" value="updateconfig" type="hidden">' 
                        . '<input name="appconfig" value="'.$sCfgfile.'" type="hidden">' 
                        . '<textarea id="ta" name="rawdata" class="form-control raw" rows="15" style="display: none;">' . htmlentities($sNewCfg) . '</textarea><br>' 
                        . $sFormButton 
                    . '</form>' 
                    : '' 
                 ) 
                . '</pre>' 
            . '</td>' . "\n" 
            . '</tr>' . "\n" 
    ; 
} 
$sTable.='<tbody></table><div style="clear: both;"></div>'; 
$aOptions = array_merge($aCfg['datatableOptions'], array( 
    "bPaginate"=>false,"bLengthChange"=>false,"bFilter"=>true,"bSort"=>false,"bAutoWidth"=>false,"bStateSave"=>false 
)); 
 
// $sJsOnReady = '$("#' . $sTableId . '").dataTable('.json_encode($aOptions, 1).');'; 
 
$aTC[] = array( 
        'tab' => $aCfg['icons']['tab_Compare'] . $aLangTxt['AdminMenuSettingsCompare'], 
        'content' => '<h4>' . $aCfg['icons']['tab_Compare'] . $aLangTxt["AdminMenuSettingsCompare"] . '</h4> 
            <div class="subh3">' 
            . '<div class="hintbox">' 
                . $aLangTxt['AdminHintSettingsCompare'] 
            . '</div>' 
            . $sTable 
        . '</div>' 
    ); 
 
// ---------------------------------------------------------------------- 
// output 
// ---------------------------------------------------------------------- 
 
echo $oDatarenderer->renderTabbedContent($aTC); 
 
 
 |