diff options
Diffstat (limited to 'contrib')
| -rw-r--r-- | contrib/conf_merge/confdiffmerge.php | 169 | 
1 files changed, 169 insertions, 0 deletions
diff --git a/contrib/conf_merge/confdiffmerge.php b/contrib/conf_merge/confdiffmerge.php new file mode 100644 index 00000000000..7bcaef5042e --- /dev/null +++ b/contrib/conf_merge/confdiffmerge.php @@ -0,0 +1,169 @@ +<!-- +  @title   Configuration file merger/differ. +  @about   This script allows you to diff two config files and select which value to pick between the two. +           It will then give you an updated configuration file with the settings you chose. +           How-to: a) Paste both versions of your config file, submit the form. +                   b) Select values you want to keep in the next form, then submit said form. +                   c) Copy the output'd config file and profit! +           Note: if either one of your config file has custom values, make sure that it is set to be the NEW +                 config file on the first step (right hand textarea). This will be adressed at a later date. +  @author  Warpten +  @date    05/17/2014 +  @license GNU GPL v2(GPL) +  @version 0.0.1 +--> +<!DOCTYPE html> +<html> +<head> +    <title><world/auth>server.conf diff</title> +    <style type="text/css"> +    form * { font-family: Verdana; font-size: 11px; } +    form#step1 { position: relative; width: 800px; } +    form#step2 { width: 500px; } +    form > div { position: absolute; width: 50%; height: 500px; } +    form > div:nth-child(1) { right: 0px; } +    textarea { width: 90%; height: 500px; } +    h3 { display: block; margin: 3px; padding: auto; text-align: center; } +    input.valueName { border: 0px; background-color: white; } +    form > p { margin: 0; padding: 3px; border-bottom: 1px solid black; } +    textarea#result { width: 1000px; } +    </style> +</head> + +<body> +<?php + +function printIndent($string, $indent = 1) +{ +    echo str_pad("\r\n" . $string, $indent, "    "); +} + +if (!isset($_POST['step'])) +{ +?> +    <form action="" method="POST" id="step1"> +        <div> +            <h3>Paste the new configuration file</h3> +            <textarea name="leftFile"></textarea> +        </div><div> +            <h3>Paste the old configuration file</h3> +            <textarea name="rightFile"></textarea> +            <input type="submit" value="Compare files" /> +        </div> +        <input type="hidden" name="step" value="0" /> +    </form> +<?php +} +else if ($_POST['step'] == 0) +{ +    if (@empty($_POST['leftFile']) || @empty($_POST['rightFile'])) +        printf("You did not provide either the old or the new configuration file.<br />"); + +    define('EOL', "\n\n"); +    $settingsData = array(); + +    // Process them +    $newFile = explode(EOL, $_POST['leftFile']); +    $oldFile = explode(EOL, $_POST['rightFile']); +     +    for ($i = 0, $o = count($oldFile); $i < $o; ++$i) +    { +        $oldFile[$i] = explode(PHP_EOL, $oldFile[$i]); +        for ($j = 0, $p = count($oldFile[$i]); $j < $p; ++$j) +        { +            $currentLine = $oldFile[$i][$j]; +            if (preg_match("#^([A-Z.]+) = (?:\"?)(.*)(?:\"?)$#iU", $currentLine, $data) !== false) +                if (strlen($data[1]) != 0) +                    $settingsData[$data[1]]["oldValue"] = str_replace('"', '', trim($data[2])); +        } +    } +     +    for ($i = 0, $o = count($newFile); $i < $o; ++$i) +    { +        $newFile[$i] = explode(PHP_EOL, $newFile[$i]); +        for ($j = 0, $p = count($newFile[$i]); $j < $p; ++$j) +        { +            $currentLine = $newFile[$i][$j]; +            if (preg_match("#^([A-Z.]+) = (?:\"?)(.*)(?:\"?)$#iU", $currentLine, $data) !== false) +                if (strlen($data[1]) != 0) +                    $settingsData[$data[1]]["newValue"] = str_replace('"', '', trim($data[2])); +        } +    } +     +    printIndent("<p>Please select values you want to keep. Note the script will default to new values, unless said <i>new</i> value does not exist.<br />You also can take advantage of this form and edit fields.</p>", 1); +    printIndent('<form action="" method="POST" id="step2">', 1); + +    foreach ($settingsData as $itemName => &$values) +    { +        $displayOld = isset($values['oldValue']) ? $values['oldValue'] : "Value missing"; +        $displayNew = isset($values['newValue']) ? $values['newValue'] : "Value missing"; +         +        if ($displayOld == $displayNew) +            continue; +         +        $line  = '<p><input type="text" class="valueName" name="nameCross[]" value="' . $itemName . '" />'; +        $line .= '<input type="radio" name="optionSelector[' . $itemName . ']" value="oldValue" ' . ($displayOld != "Value missing" ? "checked" : "") . '/>'; +        $line .= '<input type="text" name="oldValue[]" value="' . $displayOld . '" /> '; +        $line .= '<input type="radio" name="optionSelector[' . $itemName . ']" value="newValue" ' . ($displayNew != "Value missing" ? "checked" : "") . '/>'; +        $line .= '<input type="text" name="newValue[]" value="' . $displayNew . '" /></p>'; +        printIndent($line, 2); +    } +    printIndent('<input type="hidden" name="step" value="1" />', 2); +    printIndent('<input type="submit" value="Gief resulting configuration file" />', 2); +    printIndent('<input type="hidden" name="file" value="' . htmlspecialchars($_POST['rightFile']) . '" />', 2); +    printIndent('</form>', 1); +} +else if ($_POST['step'] == 1) +{ +    $errors = array(); +     +    $confFile = $_POST['file']; + +    foreach ($_POST['optionSelector'] as $valueName => &$keyName) +    { +        $definiteValueIndex = -1; +        foreach ($_POST['nameCross'] as $index => &$key) +        { +            if ($key == $valueName) +            { +                $definiteValueIndex = $index; +                break; +            } +        } +         +        if ($definiteValueIndex == -1) +        { +            // TODO: Handle custom values that get lost +            continue; +        } + +        $newStr = $_POST[$keyName][$definiteValueIndex]; +        $oldStr = $_POST[$keyName == "oldValue" ? "newValue" : "oldValue"][$definiteValueIndex]; +        if (!ctype_digit($newStr)) +            $newStr = '"' . $newStr . '"'; +        if (!ctype_digit($oldStr)) +            $oldStr = '"' . $oldStr . '"'; +         +        $newValueString = $valueName . " = " . $newStr; +        $oldValueString = $valueName . " = " . $oldStr; +        $confFile = str_replace($oldValueString, $newValueString, $confFile); +    } +    echo "<p>Here is your new configuration file:</p>"; +    echo '<form><textarea id="result">'; +    printf('%s', $confFile); +    echo '</textarea></form>'; +     +    if (!empty($errors)) +    { +        echo "<p>The following errors happened during processing:</p><ul><li>"; +        echo implode("</li><li>", $errors); +        echo "</li>"; +    } +} +?> + +<script type="text/javascript"> + +</script> +</body> +</html>  | 
