File "Settings.php"
Full Path: /home/timepamn/dailynetworth.org/wp-content/plugins/hide-my-wp/controllers/Settings.php
File size: 39.55 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Settings Class
* Called when the plugin setting is loaded
*
* @file The Settings file
* @package HMWP/Settings
* @since 4.0.0
*/
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
class HMWP_Controllers_Settings extends HMWP_Classes_FrontController {
/**
* List of events/actions
*
* @var $listTable HMWP_Models_ListTable
*/
public $listTable;
/**
* Class constructor
* Initiates the class by calling the parent constructor, adding necessary filters and actions, checking options, and performing various setup tasks.
*
* @return void
* @throws Exception
*/
public function __construct() {
parent::__construct();
//If save settings is required, show the alert
if ( HMWP_Classes_Tools::getOption( 'changes' ) ) {
add_action( 'admin_notices', array( $this, 'showSaveRequires' ) );
HMWP_Classes_Tools::saveOptions( 'changes', false );
}
if ( ! HMWP_Classes_Tools::getOption( 'hmwp_valid' ) ) {
add_action( 'admin_notices', array( $this, 'showPurchaseRequires' ) );
}
//Add the Settings class only for the plugin settings page
add_filter( 'admin_body_class', array(
HMWP_Classes_ObjController::getClass( 'HMWP_Models_Menu' ),
'addSettingsClass'
) );
//If the option to prevent broken layout is on
if ( HMWP_Classes_Tools::getOption( 'prevent_slow_loading' ) ) {
//check the frontend on settings successfully saved
add_action( 'hmwp_confirmed_settings', function () {
//check the frontend and prevent from showing brake websites
$url = _HMWP_URL_ . '/view/assets/img/logo.svg?hmwp_preview=1&test=' . mt_rand( 11111, 99999 );
$url = HMWP_Classes_ObjController::getClass( 'HMWP_Models_Rewrite' )->find_replace_url( $url );
$response = HMWP_Classes_Tools::hmwp_localcall( $url, array( 'redirection' => 0, 'cookies' => false ) );
//If the plugin logo is not loading correctly, switch off the path changes
if ( ! is_wp_error( $response ) && wp_remote_retrieve_response_code( $response ) == 404 ) {
HMWP_Classes_Tools::saveOptions( 'file_mappings', array( home_url() ) );
}
} );
}
//save the login path on Cloud
add_action( 'hmwp_apply_permalink_changes', function () {
HMWP_Classes_Tools::sendLoginPathsApi();
} );
}
/**
* Initialize the plugin and perform various setup tasks.
*
* This method:
* - Retrieves the current page and handles its corresponding tab function if available.
* - Ensures the 'is_plugin_active_for_network' function is available.
* - Configures NGINX specific settings and alerts based on the environment.
* - Sets alerts based on transient values for restore settings.
* - Displays config rules for validation.
* - Loads necessary media files for settings pages.
* - Checks for plugin activation and displays a connect prompt if necessary.
* - Displays error notifications if any configuration issues are detected.
* - Disables certain options for specific environments such as WPEngine.
* - Checks compatibility with other plugins and displays alerts.
* - Ensures necessary JavaScript is enabled in the browser.
*
* @return void
* @throws Exception
*/
public function init() {
/////////////////////////////////////////////////
// Get the current Page
$page = HMWP_Classes_Tools::getValue( 'page' );
if ( strpos( $page, '_' ) !== false ) {
$tab = substr( $page, ( strpos( $page, '_' ) + 1 ) );
if ( method_exists( $this, $tab ) ) {
call_user_func( array( $this, $tab ) );
}
}
/////////////////////////////////////////////////
// We need that function so make sure is loaded
if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
include_once ABSPATH . '/wp-admin/includes/plugin.php';
}
if ( HMWP_Classes_Tools::isNginx() && HMWP_Classes_Tools::getOption( 'test_frontend' ) && HMWP_Classes_Tools::getOption( 'hmwp_mode' ) <> 'default' ) {
$config_file = HMWP_Classes_ObjController::getClass( 'HMWP_Models_Rules' )->getConfFile();
if ( HMWP_Classes_Tools::isLocalFlywheel() ) {
if ( strpos( $config_file, '/includes/' ) !== false ) {
$config_file = substr( $config_file, strpos( $config_file, '/includes/' ) + 1 );
}
HMWP_Classes_Error::setNotification( sprintf( esc_html__( "Local & NGINX detected. In case you didn't add the code in the NGINX config already, please add the following line. %s", 'hide-my-wp' ), '<br /><br /><code><strong>include ' . $config_file . ';</strong></code> <br /><strong><br /><a href="' . esc_url( HMWP_Classes_Tools::getOption('hmwp_plugin_website') . '/kb/how-to-setup-hide-my-wp-on-local-flywheel/' ) . '" target="_blank">' . esc_html__( "Learn how to setup on Local & Nginx", 'hide-my-wp' ) . ' >></a></strong>' ), 'notice', false );
} else {
HMWP_Classes_Error::setNotification( sprintf( esc_html__( "NGINX detected. In case you didn't add the code in the NGINX config already, please add the following line. %s", 'hide-my-wp' ), '<br /><br /><code><strong>include ' . $config_file . ';</strong></code> <br /><strong><br /><a href="' . esc_url( HMWP_Classes_Tools::getOption('hmwp_plugin_website') . '/kb/how-to-setup-hide-my-wp-on-nginx-server/' ) . '" target="_blank">' . esc_html__( "Learn how to setup on Nginx server", 'hide-my-wp' ) . ' >></a></strong>' ), 'notice', false );
}
}
// Setting Alerts based on Logout and Error statements
if ( get_transient( 'hmwp_restore' ) == 1 ) {
$restoreLink = '<a href="' . esc_url( add_query_arg( array( 'hmwp_nonce' => wp_create_nonce( 'hmwp_restore_settings' ), 'action' => 'hmwp_restore_settings' ) ) ) . '" class="btn btn-default btn-sm ml-3" />' . esc_html__( "Restore Settings", 'hide-my-wp' ) . '</a>';
HMWP_Classes_Error::setNotification( esc_html__( 'Do you want to restore the last saved settings?', 'hide-my-wp' ) . $restoreLink );
}
// Show the config rules to make sure they are okay
if ( HMWP_Classes_Tools::getValue( 'hmwp_config' ) ) {
// Initialize WordPress Filesystem
$wp_filesystem = HMWP_Classes_ObjController::initFilesystem();
$config_file = HMWP_Classes_ObjController::getClass( 'HMWP_Models_Rules' )->getConfFile();
if ( $config_file <> '' && $wp_filesystem->exists( $config_file ) ) {
$rules = $wp_filesystem->get_contents( HMWP_Classes_ObjController::getClass( 'HMWP_Models_Rules' )->getConfFile() );
HMWP_Classes_Error::setNotification( '<pre>' . $rules . '</pre>' );
}
HMWP_Classes_Error::setNotification( '<pre>' . print_r( $_SERVER, true ) . '</pre>' );
}
// Load the css for Settings
HMWP_Classes_ObjController::getClass( 'HMWP_Classes_DisplayController' )->loadMedia( 'popper' );
if ( is_rtl() ) {
HMWP_Classes_ObjController::getClass( 'HMWP_Classes_DisplayController' )->loadMedia( 'bootstrap.rtl' );
HMWP_Classes_ObjController::getClass( 'HMWP_Classes_DisplayController' )->loadMedia( 'rtl' );
} else {
HMWP_Classes_ObjController::getClass( 'HMWP_Classes_DisplayController' )->loadMedia( 'bootstrap' );
}
HMWP_Classes_ObjController::getClass( 'HMWP_Classes_DisplayController' )->loadMedia( 'bootstrap-select' );
HMWP_Classes_ObjController::getClass( 'HMWP_Classes_DisplayController' )->loadMedia( 'font-awesome' );
HMWP_Classes_ObjController::getClass( 'HMWP_Classes_DisplayController' )->loadMedia( 'switchery' );
HMWP_Classes_ObjController::getClass( 'HMWP_Classes_DisplayController' )->loadMedia( 'alert' );
HMWP_Classes_ObjController::getClass( 'HMWP_Classes_DisplayController' )->loadMedia( 'clipboard' );
HMWP_Classes_ObjController::getClass( 'HMWP_Classes_DisplayController' )->loadMedia( 'settings' );
// Show connect for activation
if ( ! HMWP_Classes_Tools::getOption( 'hmwp_token' ) ) {
$this->show( 'Connect' );
return;
}
if ( HMWP_Classes_Tools::getOption( 'error' ) ) {
HMWP_Classes_Error::setNotification( esc_html__( 'There is a configuration error in the plugin. Please Save the settings again and follow the instruction.', 'hide-my-wp' ) );
}
if ( HMWP_Classes_Tools::isWpengine() ) {
add_filter( 'hmwp_option_hmwp_mapping_url_show', "__return_false" );
}
// Check compatibilities with other plugins
HMWP_Classes_ObjController::getClass( 'HMWP_Models_Compatibility' )->getAlerts();
// Show errors on top
HMWP_Classes_ObjController::getClass( 'HMWP_Classes_Error' )->hookNotices();
echo '<meta name="viewport" content="width=640">';
echo '<noscript><div class="alert-danger text-center py-3">' . sprintf( esc_html__( "Javascript is disabled on your browser! You need to activate the javascript in order to use %s plugin.", 'hide-my-wp' ), HMWP_Classes_Tools::getOption( 'hmwp_plugin_name' ) ) . '</div></noscript>';
$this->show( ucfirst( str_replace( 'hmwp_', '', $page ) ) );
$this->show( 'blocks/Upgrade' );
}
/**
* Logs relevant data for the application, including URLs of sites if multisite is enabled,
* and sets the log table data by fetching information from a remote API.
*
* @return void
* @throws Exception
*/
public function log() {
$this->listTable = HMWP_Classes_ObjController::getClass( 'HMWP_Models_ListTable' );
if ( apply_filters( 'hmwp_showlogs', true ) ) {
$args = $urls = array();
$args['search'] = HMWP_Classes_Tools::getValue( 's', false );
//If it's multisite
if ( is_multisite() ) {
if ( function_exists( 'get_sites' ) && class_exists( 'WP_Site_Query' ) ) {
$sites = get_sites();
if ( ! empty( $sites ) ) {
foreach ( $sites as $site ) {
$urls[] = ( _HMWP_CHECK_SSL_ ? 'https://' : 'http://' ) . rtrim( $site->domain . $site->path, '/' );
}
}
}
} else {
$urls[] = home_url();
}
//pack the urls
$args['urls'] = json_encode( array_unique( $urls ) );
//Set the log table data
$logs = HMWP_Classes_Tools::hmwp_remote_get( _HMWP_API_SITE_ . '/api/log', $args );
if ( $logs = json_decode( $logs, true ) ) {
if ( isset( $logs['data'] ) && ! empty( $logs['data'] ) ) {
$logs = $logs['data'];
} else {
$logs = array();
}
} else {
$logs = array();
}
$this->listTable->setData( $logs );
}
}
/**
* Handle temporary login when the advanced pack is not installed.
*
* @return void
* @throws Exception
*/
public function templogin() {
if ( ! HMWP_Classes_Tools::isAdvancedpackInstalled() ) {
add_filter( 'hmwp_getview', function ( $output, $block ) {
if ( $block == 'Templogin' ) {
return '<div id="hmwp_wrap" class="d-flex flex-row p-0 my-3">
<div class="hmwp_row d-flex flex-row p-0 m-0">
<div class="hmwp_col flex-grow-1 px-3 py-3 mr-2 mb-3 bg-white">
' . $this->getView( 'blocks/Install' ) . '
</div>
</div>
</div>';
}
return $output;
}, PHP_INT_MAX, 2 );
}
}
/**
* Handles two-factor authentication feature if the advanced pack is installed.
* Modifies the view output to prompt installation if advanced pack is not present.
*
* @return void
* @throws Exception
*/
public function twofactor() {
if ( ! HMWP_Classes_Tools::isAdvancedpackInstalled() ) {
add_filter( 'hmwp_getview', function ( $output, $block ) {
if ( $block == 'Twofactor' ) {
return '<div id="hmwp_wrap" class="d-flex flex-row p-0 my-3">
<div class="hmwp_row d-flex flex-row p-0 m-0">
<div class="hmwp_col flex-grow-1 px-3 py-3 mr-2 mb-3 bg-white">
' . $this->getView( 'blocks/Install' ) . '
</div>
</div>
</div>';
}
return $output;
}, PHP_INT_MAX, 2 );
}
}
/**
* Load media header
*/
public function hookHead() {
}
/**
* Show this message to notify the user when to update the settings
*
* @return void
* @throws Exception
*/
public function showSaveRequires() {
if ( HMWP_Classes_Tools::getOption( 'hmwp_hide_plugins' ) || HMWP_Classes_Tools::getOption( 'hmwp_hide_themes' ) ) {
global $pagenow;
if ( $pagenow == 'plugins.php' ) {
HMWP_Classes_ObjController::getClass( 'HMWP_Classes_DisplayController' )->loadMedia( 'alert' );
?>
<div class="notice notice-warning is-dismissible">
<div style="display: inline-block;">
<form action="<?php echo HMWP_Classes_Tools::getSettingsUrl( 'hmwp_permalinks' ) ?>" method="POST">
<?php wp_nonce_field( 'hmwp_newpluginschange', 'hmwp_nonce' ) ?>
<input type="hidden" name="action" value="hmwp_newpluginschange"/>
<p>
<?php echo sprintf( esc_html__( "New Plugin/Theme detected! Update %s settings to hide it. %sClick here%s", 'hide-my-wp' ), HMWP_Classes_Tools::getOption( 'hmwp_plugin_name' ), '<button type="submit" style="color: blue; text-decoration: underline; cursor: pointer; background: none; border: none;">', '</button>' ); ?>
</p>
</form>
</div>
</div>
<?php
}
}
}
/**
* Display a notification if the purchase requires renewal.
*
* @return void
*/
public function showPurchaseRequires() {
global $pagenow;
$expires = (int) HMWP_Classes_Tools::getOption( 'hmwp_expires' );
if ( $expires > 0 ) {
$error = sprintf( esc_html__( "Your %s %s license expired on %s %s. To keep your website security up to date please make sure you have a valid subscription on %saccount.hidemywpghost.com%s", 'hide-my-wp' ), '<strong>', HMWP_Classes_Tools::getOption( 'hmwp_plugin_name' ), date( 'd M Y', $expires ), '</strong>', '<a href="' . HMWP_Classes_Tools::getCloudUrl( 'orders' ) . '" style="line-height: 30px;" target="_blank">', '</a>' );
if ( $pagenow == 'plugins.php' || $pagenow == 'index.php' ) {
?>
<div class="col-sm-12 mx-0 hmwp_notice error notice">
<div style="display: inline-block;"><p> <?php echo esc_html( $error ) ?> </p></div>
</div>
<?php
} else {
HMWP_Classes_Error::setNotification( $error );
}
}
}
/**
* Get the Admin Menu Tabs
*
* @param string|null $current The currently selected tab, if any.
*
* @return string Returns the HTML content for the admin tabs.
* @throws Exception
*/
public function getAdminTabs( $current = null ) {
//Add the Menu Sub Tabs in the selected page
$subtabs = HMWP_Classes_ObjController::getClass( 'HMWP_Models_Menu' )->getSubMenu( $current );
$content = '<div class="hmwp_nav d-flex flex-column bd-highlight mb-3">';
$content .= '<div class="m-0 px-3 pt-2 pb-3 font-dark font-weight-bold text-logo"><a href="' . esc_url( HMWP_Classes_Tools::getOption( 'hmwp_plugin_website' ) ) . '" target="_blank"><img src="' . esc_url( HMWP_Classes_Tools::getOption( 'hmwp_plugin_logo' ) ? HMWP_Classes_Tools::getOption( 'hmwp_plugin_logo' ) : _HMWP_ASSETS_URL_ . 'img/logo.svg' ) . '" class="ml-0 mr-2" style="height:35px; max-width: 140px;" alt=""></a></div>';
foreach ( $subtabs as $tab ) {
$content .= '<a href="#' . esc_attr( $tab['tab'] ) . '" class="m-0 px-3 py-3 font-dark hmwp_nav_item" data-tab="' . esc_attr( $tab['tab'] ) . '">' . wp_kses_post( $tab['title'] ) . '</a>';
}
$content .= '</div>';
return $content;
}
/**
* Called when an action is triggered
*
* @throws Exception
*/
public function action() {
parent::action();
if ( ! HMWP_Classes_Tools::userCan( HMWP_CAPABILITY ) ) {
return;
}
switch ( HMWP_Classes_Tools::getValue( 'action' ) ) {
case 'hmwp_settings':
//Save the settings
if ( isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] === 'POST' ) {
// Save the whitelist IPs
$this->saveWhiteListIps();
// Save the whitelist paths
$this->saveWhiteListPaths();
/** @var $this ->model HMWP_Models_Settings */
$this->model->savePermalinks( $_POST );
}
//load the after saving settings process
if ( $this->model->applyPermalinksChanged() ) {
HMWP_Classes_Error::setNotification( esc_html__( 'Saved' ), 'success' );
// Add action hook for later use
do_action( 'hmwp_settings_saved' );
}
break;
case 'hmwp_tweakssettings':
// Save the settings
if ( isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] === 'POST' ) {
$this->model->saveValues( $_POST );
}
HMWP_Classes_Tools::saveOptions( 'hmwp_disable_click_message', HMWP_Classes_Tools::getValue( 'hmwp_disable_click_message', '', true ) );
HMWP_Classes_Tools::saveOptions( 'hmwp_disable_inspect_message', HMWP_Classes_Tools::getValue( 'hmwp_disable_inspect_message', '', true ) );
HMWP_Classes_Tools::saveOptions( 'hmwp_disable_source_message', HMWP_Classes_Tools::getValue( 'hmwp_disable_source_message', '', true ) );
HMWP_Classes_Tools::saveOptions( 'hmwp_disable_copy_paste_message', HMWP_Classes_Tools::getValue( 'hmwp_disable_copy_paste_message', '', true ) );
HMWP_Classes_Tools::saveOptions( 'hmwp_disable_drag_drop_message', HMWP_Classes_Tools::getValue( 'hmwp_disable_drag_drop_message', '', true ) );
// Load the after saving settings process
if ( $this->model->applyPermalinksChanged() ) {
HMWP_Classes_Error::setNotification( esc_html__( 'Saved' ), 'success' );
// Add action for later use
do_action( 'hmwp_tweakssettings_saved' );
}
break;
case 'hmwp_mappsettings':
// Save Mapping for classes and ids
HMWP_Classes_Tools::saveOptions( 'hmwp_mapping_classes', HMWP_Classes_Tools::getValue( 'hmwp_mapping_classes' ) );
HMWP_Classes_Tools::saveOptions( 'hmwp_mapping_file', HMWP_Classes_Tools::getValue( 'hmwp_mapping_file' ) );
HMWP_Classes_Tools::saveOptions( 'hmwp_file_cache', HMWP_Classes_Tools::getValue( 'hmwp_file_cache' ) );
// Save the patterns as array
// Save CDN URLs
if ( $urls = HMWP_Classes_Tools::getValue( 'hmwp_cdn_urls' ) ) {
$hmwp_cdn_urls = array();
foreach ( $urls as $row ) {
if ( $row <> '' ) {
$row = preg_replace( '/[^A-Za-z0-9-_.:\/]/', '', $row );
if ( $row <> '' ) {
$hmwp_cdn_urls[] = $row;
}
}
}
HMWP_Classes_Tools::saveOptions( 'hmwp_cdn_urls', json_encode( $hmwp_cdn_urls ) );
}
// Save Text Mapping
if ( $hmwp_text_mapping_from = HMWP_Classes_Tools::getValue( 'hmwp_text_mapping_from' ) ) {
if ( $hmwp_text_mapping_to = HMWP_Classes_Tools::getValue( 'hmwp_text_mapping_to' ) ) {
$this->model->saveTextMapping( $hmwp_text_mapping_from, $hmwp_text_mapping_to );
}
}
// Save URL mapping
if ( $hmwp_url_mapping_from = HMWP_Classes_Tools::getValue( 'hmwp_url_mapping_from' ) ) {
if ( $hmwp_url_mapping_to = HMWP_Classes_Tools::getValue( 'hmwp_url_mapping_to' ) ) {
$this->model->saveURLMapping( $hmwp_url_mapping_from, $hmwp_url_mapping_to );
}
}
// Load the after saving settings process
if ( $this->model->applyPermalinksChanged( true ) ) {
HMWP_Classes_Error::setNotification( esc_html__( 'Saved' ), 'success' );
// Add action for later use
do_action( 'hmwp_mappsettings_saved' );
}
break;
case 'hmwp_firewall':
// Save the settings
if ( isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] === 'POST' ) {
// Save the whitelist IPs
$this->saveWhiteListIps();
// Blacklist ips,hostnames, user agents, referrers
$this->saveBlackListIps();
$this->saveBlackListHostnames();
$this->saveBlackListUserAgents();
$this->saveBlackListReferrers();
// Save the whitelist paths
$this->saveWhiteListPaths();
// Save the rest of the settings
$this->model->saveValues( $_POST );
// Save CDN URLs
if ( $codes = HMWP_Classes_Tools::getValue( 'hmwp_geoblock_countries' ) ) {
$countries = array();
foreach ( $codes as $code ) {
if ( $code <> '' ) {
$code = preg_replace( '/[^A-Za-z]/', '', $code );
if ( $code <> '' ) {
$countries[] = $code;
}
}
}
HMWP_Classes_Tools::saveOptions( 'hmwp_geoblock_countries', json_encode( $countries ) );
} else {
HMWP_Classes_Tools::saveOptions( 'hmwp_geoblock_countries', array() );
}
// If no change is made on settings, just return
if ( ! $this->model->checkOptionsChange() ) {
return;
}
// Save the rules and add the rewrites
$this->model->saveRules();
// Load the after saving settings process
if ( $this->model->applyPermalinksChanged() ) {
HMWP_Classes_Error::setNotification( esc_html__( 'Saved' ), 'success' );
//add action for later use
do_action( 'hmwp_firewall_saved' );
}
}
break;
case 'hmwp_advsettings':
if ( isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] === 'POST' ) {
$this->model->saveValues( $_POST );
// Save the loading moment
HMWP_Classes_Tools::saveOptions( 'hmwp_firstload', in_array( 'first', HMWP_Classes_Tools::getOption( 'hmwp_loading_hook' ) ) );
HMWP_Classes_Tools::saveOptions( 'hmwp_priorityload', in_array( 'priority', HMWP_Classes_Tools::getOption( 'hmwp_loading_hook' ) ) );
HMWP_Classes_Tools::saveOptions( 'hmwp_laterload', in_array( 'late', HMWP_Classes_Tools::getOption( 'hmwp_loading_hook' ) ) );
// Send the notification email in case of Weekly report
if ( HMWP_Classes_Tools::getValue( 'hmwp_send_email' ) && HMWP_Classes_Tools::getValue( 'hmwp_email_address' ) ) {
$args = array( 'email' => HMWP_Classes_Tools::getValue( 'hmwp_email_address' ) );
HMWP_Classes_Tools::hmwp_remote_post( _HMWP_ACCOUNT_SITE_ . '/api/log/settings', $args, array( 'timeout' => 5 ) );
}
if ( HMWP_Classes_Tools::getOption( 'hmwp_firstload' ) ) {
// Add the must-use plugin to force loading before all others plugins
HMWP_Classes_ObjController::getClass( 'HMWP_Models_Compatibility' )->addMUPlugin();
} else {
HMWP_Classes_ObjController::getClass( 'HMWP_Models_Compatibility' )->deleteMUPlugin();
}
// Load the after saving settings process
if ( $this->model->applyPermalinksChanged() ) {
HMWP_Classes_Error::setNotification( esc_html__( 'Saved' ), 'success' );
// Add action hook for later use
do_action( 'hmwp_advsettings_saved' );
}
}
break;
case 'hmwp_savecachepath':
// Save the option to change the paths in the cache file
HMWP_Classes_Tools::saveOptions( 'hmwp_change_in_cache', HMWP_Classes_Tools::getValue( 'hmwp_change_in_cache' ) );
// Save the cache directory
$directory = HMWP_Classes_Tools::getValue( 'hmwp_change_in_cache_directory' );
if ( $directory <> '' ) {
$directory = trim( $directory, '/' );
// Remove sub dirs
if ( strpos( $directory, '/' ) !== false ) {
$directory = substr( $directory, 0, strpos( $directory, '/' ) );
}
if ( ! in_array( $directory, array(
'languages',
'mu-plugins',
'plugins',
'themes',
'upgrade',
'uploads'
) ) ) {
HMWP_Classes_Tools::saveOptions( 'hmwp_change_in_cache_directory', $directory );
} else {
wp_send_json_error( esc_html__( 'Path not allowed. Avoid paths like plugins and themes.', 'hide-my-wp' ) );
}
} else {
HMWP_Classes_Tools::saveOptions( 'hmwp_change_in_cache_directory', '' );
}
if ( HMWP_Classes_Tools::isAjax() ) {
wp_send_json_success( esc_html__( 'Saved', 'hide-my-wp' ) );
}
break;
case 'hmwp_devsettings':
// Set dev settings
HMWP_Classes_Tools::saveOptions( 'hmwp_debug', HMWP_Classes_Tools::getValue( 'hmwp_debug' ) );
break;
case 'hmwp_devdownload':
// Initialize WordPress Filesystem
$wp_filesystem = HMWP_Classes_ObjController::initFilesystem();
// Set header as text
HMWP_Classes_Tools::setHeader( 'text' );
$filename = preg_replace( '/[-.]/', '_', wp_parse_url( home_url(), PHP_URL_HOST ) );
header( "Content-Disposition: attachment; filename=" . $filename . "_wghost_debug.txt" );
if ( function_exists( 'glob' ) ) {
$pattern = _HMWP_CACHE_DIR_ . '*.log';
$files = glob( $pattern, 0 );
if ( ! empty( $files ) ) {
foreach ( $files as $file ) {
echo basename( $file ) . PHP_EOL;
echo "---------------------------" . PHP_EOL;
echo $wp_filesystem->get_contents( $file ) . PHP_EOL . PHP_EOL . PHP_EOL . PHP_EOL;
}
}
}
exit();
case 'hmwp_ignore_errors':
// Empty WordPress rewrites count for 404 error.
// This happens when the rules are not saved through config file
HMWP_Classes_Tools::saveOptions( 'file_mappings', array() );
break;
case 'hmwp_abort':
case 'hmwp_restore_settings':
// Get keys that should not be replaced
$tmp_options = array(
'hmwp_token',
'api_token',
'hmwp_plugin_name',
'hmwp_plugin_menu',
'hmwp_plugin_logo',
'hmwp_plugin_website',
'hmwp_plugin_account_show',
);
$tmp_options = array_fill_keys( $tmp_options, true );
foreach ( $tmp_options as $keys => &$value ) {
$value = HMWP_Classes_Tools::getOption( $keys );
}
// Get the safe options from database
HMWP_Classes_Tools::$options = HMWP_Classes_Tools::getOptions( true );
// Set tmp data back to options
foreach ( $tmp_options as $keys => $value ) {
HMWP_Classes_Tools::$options[ $keys ] = $value;
}
HMWP_Classes_Tools::saveOptions();
//set frontend, error & logout to false
HMWP_Classes_Tools::saveOptions( 'test_frontend', false );
HMWP_Classes_Tools::saveOptions( 'file_mappings', array() );
HMWP_Classes_Tools::saveOptions( 'error', false );
HMWP_Classes_Tools::saveOptions( 'logout', false );
// Load the after saving settings process
$this->model->applyPermalinksChanged( true );
break;
case 'hmwp_newpluginschange':
// Reset the change notification
HMWP_Classes_Tools::saveOptions( 'changes', 0 );
remove_action( 'admin_notices', array( $this, 'showSaveRequires' ) );
// Generate unique names for plugins if needed
if ( HMWP_Classes_Tools::getOption( 'hmwp_hide_plugins' ) ) {
HMWP_Classes_ObjController::getClass( 'HMWP_Models_Rewrite' )->hidePluginNames();
}
if ( HMWP_Classes_Tools::getOption( 'hmwp_hide_themes' ) ) {
HMWP_Classes_ObjController::getClass( 'HMWP_Models_Rewrite' )->hideThemeNames();
}
// Load the after saving settings process
if ( $this->model->applyPermalinksChanged() ) {
HMWP_Classes_Error::setNotification( esc_html__( 'The list of plugins and themes was updated with success!' ), 'success' );
}
break;
case 'hmwp_confirm':
HMWP_Classes_Tools::saveOptions( 'error', false );
HMWP_Classes_Tools::saveOptions( 'logout', false );
HMWP_Classes_Tools::saveOptions( 'test_frontend', false );
HMWP_Classes_Tools::saveOptions( 'file_mappings', array() );
//Send email notification about the path changed
HMWP_Classes_ObjController::getClass( 'HMWP_Models_Rewrite' )->sendEmail();
// Save to safe mode in case of db
if ( ! HMWP_Classes_Tools::getOption( 'logout' ) ) {
HMWP_Classes_Tools::saveOptionsBackup();
}
// Force the rechck security notification
delete_option( HMWP_SECURITY_CHECK_TIME );
HMWP_Classes_Tools::saveOptions( 'download_settings', true );
// Add action hook for later use
do_action( 'hmwp_confirmed_settings' );
break;
case 'hmwp_manualrewrite':
HMWP_Classes_Tools::saveOptions( 'error', false );
HMWP_Classes_Tools::saveOptions( 'logout', false );
HMWP_Classes_Tools::saveOptions( 'test_frontend', true );
HMWP_Classes_Tools::saveOptions( 'file_mappings', array() );
// Save to safe mode in case of db
if ( ! HMWP_Classes_Tools::getOption( 'logout' ) ) {
HMWP_Classes_Tools::saveOptionsBackup();
}
// Clear the cache if there are no errors
HMWP_Classes_Tools::emptyCache();
if ( HMWP_Classes_Tools::isNginx() ) {
@shell_exec( 'nginx -s reload' );
}
break;
case 'hmwp_changepathsincache':
// Check the cache plugin
HMWP_Classes_ObjController::getClass( 'HMWP_Models_Compatibility' )->checkCacheFiles();
HMWP_Classes_Error::setNotification( esc_html__( 'Paths changed in the existing cache files', 'hide-my-wp' ), 'success' );
break;
case 'hmwp_backup':
// Save the Settings into backup
if ( ! HMWP_Classes_Tools::userCan( HMWP_CAPABILITY ) ) {
return;
}
HMWP_Classes_Tools::getOptions();
HMWP_Classes_Tools::setHeader( 'text' );
$filename = preg_replace( '/[-.]/', '_', wp_parse_url( home_url(), PHP_URL_HOST ) );
header( "Content-Disposition: attachment; filename=" . $filename . "_wghost_backup.txt" );
if ( function_exists( 'base64_encode' ) ) {
echo base64_encode( json_encode( HMWP_Classes_Tools::$options ) );
}
exit();
case 'hmwp_rollback':
$hmwp_token = HMWP_Classes_Tools::getOption( 'hmwp_token' );
$api_token = HMWP_Classes_Tools::getOption( 'api_token' );
$options = HMWP_Classes_Tools::$default;
// Prevent duplicates
foreach ( $options as $key => $value ) {
// Set the default params from tools
HMWP_Classes_Tools::saveOptions( $key, $value );
HMWP_Classes_Tools::saveOptions( 'hmwp_token', $hmwp_token );
HMWP_Classes_Tools::saveOptions( 'api_token', $api_token );
}
// Remove the custom rules
HMWP_Classes_ObjController::getClass( 'HMWP_Models_Rules' )->writeToFile( '', 'HMWP_VULNERABILITY' );
HMWP_Classes_ObjController::getClass( 'HMWP_Models_Rules' )->writeToFile( '', 'HMWP_RULES' );
HMWP_Classes_Error::setNotification( esc_html__( 'Great! The initial values are restored.', 'hide-my-wp' ) . " <br /> ", 'success' );
break;
case 'hmwp_rollback_stable':
HMWP_Classes_Tools::setHeader( 'html' );
$plugin_slug = 'hide-my-wp';
$rollback = HMWP_Classes_ObjController::getClass( 'HMWP_Models_Rollback' );
$rollback->set_plugin( array(
'version' => HMWP_STABLE_VERSION,
'plugin_name' => _HMWP_ROOT_DIR_,
'plugin_slug' => $plugin_slug,
'package_url' => sprintf( 'https://downloads.wordpress.org/plugin/%s.%s.zip', $plugin_slug, HMWP_STABLE_VERSION ),
) );
$rollback->run();
wp_die( '', esc_html__( "Rollback to Previous Version", 'hide-my-wp' ), [
'response' => 200,
] );
case 'hmwp_restore':
// Initialize WordPress Filesystem
$wp_filesystem = HMWP_Classes_ObjController::initFilesystem();
// Restore the backup
if ( ! HMWP_Classes_Tools::userCan( HMWP_CAPABILITY ) ) {
return;
}
if ( ! empty( $_FILES['hmwp_options'] ) && $_FILES['hmwp_options']['tmp_name'] <> '' ) {
$options = $wp_filesystem->get_contents( $_FILES['hmwp_options']['tmp_name'] );
try {
if ( function_exists( 'base64_encode' ) && base64_decode( $options ) <> '' ) {
$options = base64_decode( $options );
}
$options = json_decode( $options, true );
if ( is_array( $options ) && isset( $options['hmwp_ver'] ) ) {
foreach ( $options as $key => $value ) {
if ( $key <> 'hmwp_token' && $key <> 'api_token' ) {
HMWP_Classes_Tools::saveOptions( $key, $value );
}
}
//load the after saving settings process
if ( $this->model->applyPermalinksChanged( true ) ) {
HMWP_Classes_Error::setNotification( esc_html__( 'Great! The backup is restored.', 'hide-my-wp' ) . " <br /> ", 'success' );
}
} else {
HMWP_Classes_Error::setNotification( esc_html__( 'Error! The backup is not valid.', 'hide-my-wp' ) . " <br /> " );
}
} catch ( Exception $e ) {
HMWP_Classes_Error::setNotification( esc_html__( 'Error! The backup is not valid.', 'hide-my-wp' ) . " <br /> " );
}
} else {
HMWP_Classes_Error::setNotification( esc_html__( 'Error! No backup to restore.', 'hide-my-wp' ) );
}
break;
case 'hmwp_download_settings':
// Save the Settings into backup
if ( ! HMWP_Classes_Tools::userCan( HMWP_CAPABILITY ) ) {
return;
}
HMWP_Classes_Tools::saveOptions( 'download_settings', false );
HMWP_Classes_Tools::getOptions();
HMWP_Classes_Tools::setHeader( 'text' );
$filename = preg_replace( '/[-.]/', '_', wp_parse_url( home_url(), PHP_URL_HOST ) );
header( "Content-Disposition: attachment; filename=" . $filename . "_wghost_login.txt" );
$line = "\n" . "________________________________________" . PHP_EOL;
$message = sprintf( esc_html__( "Thank you for using %s!", 'hide-my-wp' ), HMWP_Classes_Tools::getOption( 'hmwp_plugin_name' ) ) . PHP_EOL;
$message .= $line;
$message .= esc_html__( "Your new site URLs are", 'hide-my-wp' ) . ':' . PHP_EOL . PHP_EOL;
$message .= esc_html__( "Admin URL", 'hide-my-wp' ) . ': ' . admin_url() . PHP_EOL;
$message .= esc_html__( "Login URL", 'hide-my-wp' ) . ': ' . site_url( HMWP_Classes_Tools::$options['hmwp_login_url'] ) . PHP_EOL;
$message .= $line;
$message .= esc_html__( "Note: If you can`t login to your site, just access this URL", 'hide-my-wp' ) . ':' . PHP_EOL . PHP_EOL;
$message .= site_url() . "/wp-login.php?" . HMWP_Classes_Tools::getOption( 'hmwp_disable_name' ) . "=" . HMWP_Classes_Tools::$options['hmwp_disable'] . PHP_EOL . PHP_EOL;
$message .= $line;
$message .= esc_html__( "Best regards", 'hide-my-wp' ) . ',' . PHP_EOL;
$message .= HMWP_Classes_Tools::getOption( 'hmwp_plugin_name' ) . PHP_EOL;
// Echo the new paths in a txt file
echo $message;
exit();
case 'hmwp_advanced_install':
if ( ! HMWP_Classes_Tools::userCan( HMWP_CAPABILITY ) ) {
return;
}
// Check the version
$response = wp_remote_get( 'https://account.hidemywpghost.com/updates-hide-my-wp-pack.json?rnd=' . wp_rand( 1111, 9999 ) );
if ( is_wp_error( $response ) ) {
HMWP_Classes_Error::setNotification( $response->get_error_message() );
} elseif ( wp_remote_retrieve_response_code( $response ) !== 200 ) {
HMWP_Classes_Error::setNotification( esc_html__( "Can't download the plugin.", 'hide-my-wp' ) );
} else {
if ( $data = json_decode( wp_remote_retrieve_body( $response ) ) ) {
$rollback = HMWP_Classes_ObjController::getClass( 'HMWP_Models_Rollback' );
$output = $rollback->install( array(
'version' => $data->version,
'plugin_name' => $data->name,
'plugin_slug' => $data->slug,
'package_url' => $data->download_url,
) );
if ( ! is_wp_error( $output ) ) {
$rollback->activate( $data->slug . '/index.php' );
wp_redirect( HMWP_Classes_Tools::getSettingsUrl( HMWP_Classes_Tools::getValue( 'page' ) . '#tab=' . HMWP_Classes_Tools::getValue( 'tab' ), true ) );
exit();
} else {
HMWP_Classes_Error::setNotification( $output->get_error_message() );
}
}
}
break;
case 'hmwp_pause_enable':
if ( ! HMWP_Classes_Tools::userCan( HMWP_CAPABILITY ) ) {
return;
}
set_transient( 'hmwp_disable', 1, 300 );
break;
case 'hmwp_pause_disable':
if ( ! HMWP_Classes_Tools::userCan( HMWP_CAPABILITY ) ) {
return;
}
delete_transient( 'hmwp_disable' );
break;
case 'hmwp_update_product_name':
if(HMWP_Classes_Tools::getOption('hmwp_plugin_name') == 'Hide My WP Ghost'){
HMWP_Classes_Tools::saveOptions('hmwp_plugin_name', _HMWP_PLUGIN_FULL_NAME_);
}
if(HMWP_Classes_Tools::getOption('hmwp_plugin_menu') == 'Hide My WP'){
HMWP_Classes_Tools::saveOptions('hmwp_plugin_menu', _HMWP_PLUGIN_FULL_NAME_);
}
if(HMWP_Classes_Tools::getOption('hmwp_plugin_website') == 'https://hidemywpghost.com'){
HMWP_Classes_Tools::saveOptions('hmwp_plugin_website', 'https://wpghost.com');
}
break;
}
}
/**
* Save the whitelist IPs into database
*
* @return void
*/
private function saveWhiteListIps() {
$whitelist = HMWP_Classes_Tools::getValue( 'whitelist_ip', '', true );
// Is there are separated by commas
if ( strpos( $whitelist, ',' ) !== false ) {
$whitelist = str_replace( ',', PHP_EOL, $whitelist );
}
$ips = explode( PHP_EOL, $whitelist );
if ( ! empty( $ips ) ) {
foreach ( $ips as &$ip ) {
$ip = trim( $ip );
// Check for IPv4 IP cast as IPv6
if ( preg_match( '/^::ffff:(\d+\.\d+\.\d+\.\d+)$/', $ip, $matches ) ) {
$ip = $matches[1];
}
}
$ips = array_unique( $ips );
HMWP_Classes_Tools::saveOptions( 'whitelist_ip', json_encode( $ips ) );
}
}
/**
* Save the whitelist Paths into database
*
* @return void
*/
private function saveWhiteListPaths() {
$whitelist = HMWP_Classes_Tools::getValue( 'whitelist_urls', '', true );
// Is there are separated by commas
if ( strpos( $whitelist, ',' ) !== false ) {
$whitelist = str_replace( ',', PHP_EOL, $whitelist );
}
$urls = explode( PHP_EOL, $whitelist );
if ( ! empty( $urls ) ) {
foreach ( $urls as &$url ) {
$url = trim( $url );
}
$urls = array_unique( $urls );
HMWP_Classes_Tools::saveOptions( 'whitelist_urls', json_encode( $urls ) );
}
}
/**
* Save the whitelist IPs into database
*
* @return void
*/
private function saveBlackListIps() {
$banlist = HMWP_Classes_Tools::getValue( 'banlist_ip', '', true );
// Is there are separated by commas
if ( strpos( $banlist, ',' ) !== false ) {
$banlist = str_replace( ',', PHP_EOL, $banlist );
}
$ips = explode( PHP_EOL, $banlist );
if ( ! empty( $ips ) ) {
foreach ( $ips as &$ip ) {
$ip = trim( $ip );
// Check for IPv4 IP cast as IPv6
if ( preg_match( '/^::ffff:(\d+\.\d+\.\d+\.\d+)$/', $ip, $matches ) ) {
$ip = $matches[1];
}
}
$ips = array_unique( $ips );
HMWP_Classes_Tools::saveOptions( 'banlist_ip', json_encode( $ips ) );
}
}
/**
* Save the Hostnames to Blacklist
*
* @return void
*/
private function saveBlackListHostnames() {
$banlist = HMWP_Classes_Tools::getValue( 'banlist_hostname', '', true );
//is there are separated by commas
if ( strpos( $banlist, ',' ) !== false ) {
$banlist = str_replace( ',', PHP_EOL, $banlist );
}
$list = explode( PHP_EOL, $banlist );
if ( ! empty( $list ) ) {
foreach ( $list as $index => &$row ) {
$row = trim( $row );
if ( preg_match( '/^[a-z0-9\.\*\-]+$/i', $row, $matches ) ) {
$row = $matches[0];
} else {
unset( $list[ $index ] );
}
}
$list = array_unique( $list );
HMWP_Classes_Tools::saveOptions( 'banlist_hostname', json_encode( $list ) );
}
}
/**
* Save the User Agents to the blacklist.
*
* @return void
*/
private function saveBlackListUserAgents() {
$banlist = HMWP_Classes_Tools::getValue( 'banlist_user_agent', '', true );
//is there are separated by commas
if ( strpos( $banlist, ',' ) !== false ) {
$banlist = str_replace( ',', PHP_EOL, $banlist );
}
$list = explode( PHP_EOL, $banlist );
if ( ! empty( $list ) ) {
foreach ( $list as $index => &$row ) {
$row = trim( $row );
if ( preg_match( '/^[a-z0-9\.\*\-]+$/i', $row, $matches ) ) {
$row = $matches[0];
} else {
unset( $list[ $index ] );
}
}
$list = array_unique( $list );
HMWP_Classes_Tools::saveOptions( 'banlist_user_agent', json_encode( $list ) );
}
}
/**
* Save the Referrers
*
* @return void
*/
private function saveBlackListReferrers() {
$banlist = HMWP_Classes_Tools::getValue( 'banlist_referrer', '', true );
// Is there are separated by commas
if ( strpos( $banlist, ',' ) !== false ) {
$banlist = str_replace( ',', PHP_EOL, $banlist );
}
$list = explode( PHP_EOL, $banlist );
if ( ! empty( $list ) ) {
foreach ( $list as $index => &$row ) {
$row = trim( $row );
if ( preg_match( '/^[a-z0-9\.\*\-]+$/i', $row, $matches ) ) {
$row = $matches[0];
} else {
unset( $list[ $index ] );
}
}
$list = array_unique( $list );
HMWP_Classes_Tools::saveOptions( 'banlist_referrer', json_encode( $list ) );
}
}
/**
* Adds a noscript tag to the footer to handle scenarios where JavaScript is disabled.
*
* @return void
*/
public function hookFooter() {
echo '<noscript><style>.tab-panel {display: block;}</style></noscript>';
}
}