<?php

include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
$user = $_SESSION['user'];

// Check module activation
if (!$_SESSION['FILEMANAGER_KEY']) {
    $_SESSION['request_uri'] = $_SERVER['REQUEST_URI'];
    header("Location: /login/");
    exit;
}

// Check login_as feature
if (($_SESSION['user'] == 'admin') && (!empty($_SESSION['look']))) {
    $user=$_SESSION['look'];
}


?>

<title>Edit file <?= htmlspecialchars($_REQUEST['path']) ?></title>
<meta charset="utf-8" /> 

<link href="/css/file_manager_editor.css" type="text/css" rel="stylesheet">
<script src="/js/cheef-editor/jquery/jquery-1.8.3.min.js"></script>
<script src="/js/cheef-editor/ace/ace.js"></script>
<script src="/js/cheef-editor/ace/theme-twilight.js"></script>
<script src="/js/cheef-editor/ace/mode-ruby.js"></script>
<script src="/js/cheef-editor/jquery-ace.min.js"></script>

<div id="message" style="display:none; position: absoulte;background-color: green; color: white; padding: 10px;"></div>
<div id="error-message" style="display:none; position: absoulte;background-color: red; color: white; padding: 10px;"></div>

<?php 

    if (!empty($_REQUEST['path'])) {
        $content = '';
        $path = $_REQUEST['path'];
        if (!empty($_POST['save'])) {
            // Check token
            if ((!isset($_POST['token'])) || ($_SESSION['token'] != $_POST['token'])) {
                header('location: /login/');
                exit();
            }

            $fn = tempnam ('/tmp', 'vst-save-file-');
            if ($fn) {
                $contents = $_POST['contents'];
                $contents = preg_replace("/\r/", "", $contents);
                $f = fopen ($fn, 'w+');
                fwrite($f, $contents);
                fclose($f);
                chmod($fn, 0644);

                if ($f) {
                    exec (VESTA_CMD . "v-copy-fs-file {$user} {$fn} ".escapeshellarg($path), $output, $return_var);
                    $error = check_return_code($return_var, $output);
                    if ($return_var != 0) {
                        print('<p style="color: white">Error while saving file</p>');
                        exit;
                    }
                }
                unlink($fn);
            }
        }

        exec (VESTA_CMD . "v-open-fs-file {$user} ".escapeshellarg($path), $content, $return_var);
        if ($return_var != 0) {
            print 'Error while opening file'; // todo: handle this more styled
            exit;
        }
        $content = implode("\n", $content)."\n";
    } else {
        $content = '';
    }
?>

<form id="edit-file-form" method="post">
<!-- input id="do-backup" type="button" onClick="javascript:void(0);" name="save" value="backup (ctrl+F2)" class="backup" / -->
<input type="submit" name="save" value="Save" class="save" />

<input type="hidden" id="token" name="token" value="<?=$_SESSION['token']?>">
<textarea name="contents" class="editor" id="editor" rows="4" style="display:none;width: 100%; height: 100%;"><?=htmlentities($content)?></textarea>

</form>

<script type="text/javascript" src="/js/hotkeys.js"></script>
<script type="text/javascript">
    $('.editor').ace({ theme: 'twilight', lang: 'ruby' });

    var dcrt = $('#editor').data('ace');
    dcrt.editor.ace.getSession().setNewLineMode('unix');
    var aceInstance = dcrt.editor.ace;
    aceInstance.gotoLine(0);
    aceInstance.focus();
    


    var makeBackup = function() {
        var params = {
            action: 'backup',
            token: '<?=$_SESSION['token']?>',
            path:   '<?= $path ?>'
        };
        
        $.ajax({url: "/file_manager/fm_api.php", 
            method: "POST",
            data:   params,
            dataType: 'JSON',
            success: function(reply) {
                var fadeTimeout = 3000;
                if (reply.result) {
                    $('#message').text('File backed up as ' + reply.filename);
                    clearTimeout(window.msg_tmt);
                    $('#message').show();
                    window.msg_tmt = setTimeout(function() {$('#message').fadeOut();}, fadeTimeout);
                }
                else {
                    $('#error-message').text(reply.message);
                    clearTimeout(window.errmsg_tmt);
                    $('#error-message').show();
                    window.errmsg_tmt = setTimeout(function() {$('#error-message').fadeOut();}, fadeTimeout);
                }
            }
        });
    }

    $('#do-backup').on('click', function(evt) {
        evt.preventDefault();
        
        makeBackup();
    });
    // 
    // Shortcuts
    // 
    shortcut.add("Ctrl+s",function() {
        var inp = $('<input>').attr({'type': 'hidden', 'name': 'save'}).val('Save');
        $('#edit-file-form').append(inp);
        $('#edit-file-form').submit();
    },{
        'type':             'keydown',
        'propagate':        false,
        'disable_in_input': false,
        'target':           document
    });
    shortcut.add("Ctrl+F2",function() {
        makeBackup();
    },{
        'type':             'keydown',
        'propagate':        false,
        'disable_in_input': false,
        'target':           document
    });
    
</script>