<?php
session_start('DGID');
if (isset($_SESSION['ini_settings']) && is_array($_SESSION['ini_settings'])) {
    foreach ($_SESSION['ini_settings'] as $key=>$value) {
        ini_set($key,$value);
    }
}
if (isset($_POST['ini_setting'])) {
    $_SESSION['ini_settings'][$_POST['ini_setting']] = $_POST['local_value'];
    ini_set($_POST['ini_setting'],$_POST['local_value']);
}

// require the DataGrid package
require_once('Structures/DataGrid.php');

// Instantiate the DataGrid class limiting it to 5 rows of data
$data_grid = new Structures_DataGrid(10);


// Add columns for displaying php_ini settings
$column = new Structures_DataGrid_Column('Setting','ini_setting','ini_setting');
$data_grid->addColumn($column);
$column = new Structures_DataGrid_Column('Global Value','global_value','global_value');
$data_grid->addColumn($column);
$column = new Structures_DataGrid_Column('Local Value','local_value','local_value');
$data_grid->addColumn($column);
$column = new Structures_DataGrid_Column('Access','access','access');
$data_grid->addColumn($column);

// Add a column for editing php.ini settings
$column = new Structures_DataGrid_Column('Edit', null, null, array('align' => 'center'), null, null, 'editLink($label=Edit)');
$data_grid->addColumn($column);

// Get the current php.ini settings to use as data
$ini_settings = ini_get_all();
foreach ($ini_settings as $key=>$value) {
    // create inline editable forms
    if ($_GET['edit_setting'] == $key) {
        $value['local_value'] = "<form method='POST'><input type='hidden' name='ini_setting' value='{$key}'><input type='text' name='local_value' value='{$value['local_value']}'><input type='submit' name='edit' value='edit'></form>";
    }
    
    // re-arrange the array for our purposes
    $data_set[] = array_merge(array('ini_setting'=>$key),$value);
}

// fill the data grid rows
foreach ($data_set as $data_row) {
    $row = new Structures_DataGrid_Record($data_row);
    $data_grid->addRecord($row);
}

// listen to paging
if (isset($_GET['page']) && 0 < $_GET['page']) {
    $data_grid->setCurrentPage($_GET['page']);
}

// listen to sorting
if (isset($_GET['orderBy'])) {
    $data_grid->sortRecordSet($_GET['orderBy'],$_GET['direction']);
}

// format the data grid
$data_grid->renderer->setTableAttribute('bgcolor','#CCCCCC');
$data_grid->renderer->setTableHeaderAttributes( array('bgcolor'=>'#CCCCCC') );
$data_grid->renderer->setTableOddRowAttributes( array('bgcolor'=>'#FFFFFF'));
$data_grid->renderer->setTableEvenRowattributes( array('bgcolor'=>'#DFDFDF'));
$data_grid->renderer->allowEmptyRows = true;

echo '<div align="center"><h3>PHP.ini Browser</h3>';
echo $data_grid->render();
echo $data_grid->renderer->getPaging();
echo '<br /><br /><font size="1"><i>only the settings with a access level of 1 or 7 may be edited [<a href="http://us4.php.net/ini_set">php ini reference</a>]<br />editing settings only modifies the current user session</i></font>';
echo '</div>';

if (isset($_SESSION['ini_settings']) && is_array($_SESSION['ini_settings'])) {
    echo '<br /><br />modified ini settings:<pre><code>';
    foreach ($_SESSION['ini_settings'] as $key=>$value) {
        echo "{$key} = {$value}\n";
    }
    echo '</code></pre>';
}


function editLink($params) { 
    if ($_GET['edit_setting'] == $params['record']['ini_setting']) {
        return;
    }
    
    if (1 == $params['record']['access'] || 7 == $params['record']['access']) {
        return "<a href='{$_SERVER['REQUEST_URI']}&edit_setting={$params['record']['ini_setting']}'>{$params['label']}</a>";
    }
    else {
        return '<i>locked</i>';
    }

}
?>
