2015-10-15 22:52:37 +10:00
< ? php
2020-03-26 14:05:04 +00:00
if ( defined ( 'MAINWP_DEBUG' ) && MAINWP_DEBUG === true ) {
2016-05-09 19:34:51 +02:00
@ error_reporting ( E_ALL );
2020-03-26 14:05:04 +00:00
@ ini_set ( 'display_errors' , true );
@ ini_set ( 'display_startup_errors' , true );
2020-02-25 19:41:28 +07:00
} else {
if ( isset ( $_REQUEST [ 'mainwpsignature' ])) {
2020-03-26 14:05:04 +00:00
@ ini_set ( 'display_errors' , false );
2020-02-25 22:31:13 +07:00
@ error_reporting ( 0 );
2020-03-27 19:18:06 +07:00
}
2016-03-15 20:54:21 +01:00
}
2015-10-15 22:52:37 +10:00
define ( 'MAINWP_CHILD_NR_OF_COMMENTS' , 50 );
define ( 'MAINWP_CHILD_NR_OF_PAGES' , 50 );
2020-03-26 14:11:33 +00:00
require_once ABSPATH . '/wp-admin/includes/file.php' ;
require_once ABSPATH . '/wp-admin/includes/plugin.php' ;
2015-10-15 22:52:37 +10:00
2016-02-15 22:08:39 +01:00
2015-10-15 22:52:37 +10:00
if ( isset ( $_GET [ 'skeleton_keyuse_nonce_key' ] ) && isset ( $_GET [ 'skeleton_keyuse_nonce_hmac' ] ) ) {
$skeleton_keyuse_nonce_key = intval ( $_GET [ 'skeleton_keyuse_nonce_key' ] );
$skeleton_keyuse_nonce_hmac = $_GET [ 'skeleton_keyuse_nonce_hmac' ];
$skeleton_keycurrent_time = intval ( time () );
2017-08-24 20:41:12 +02:00
if ( $skeleton_keycurrent_time >= $skeleton_keyuse_nonce_key && $skeleton_keycurrent_time <= ( $skeleton_keyuse_nonce_key + 30 ) ) {
2015-10-15 22:52:37 +10:00
if ( strcmp ( $skeleton_keyuse_nonce_hmac , hash_hmac ( 'sha256' , $skeleton_keyuse_nonce_key , NONCE_KEY ) ) === 0 ) {
if ( ! function_exists ( 'wp_verify_nonce' ) ) :
/**
* Verify that correct nonce was used with time limit .
*
* The user is given an amount of time to use the token , so therefore , since the
* UID and $action remain the same , the independent variable is the time .
*
* @ since 2.0 . 3
*
2020-03-26 14:05:04 +00:00
* @ param string $nonce Nonce that was used in the form to verify
2015-10-15 22:52:37 +10:00
* @ param string | int $action Should give context to what is taking place and be the same when nonce was created .
*
* @ return false | int False if the nonce is invalid , 1 if the nonce is valid and generated between
* 0 - 12 hours ago , 2 if the nonce is valid and generated between 12 - 24 hours ago .
*/
function wp_verify_nonce ( $nonce , $action = - 1 ) {
$nonce = ( string ) $nonce ;
$user = wp_get_current_user ();
$uid = ( int ) $user -> ID ;
if ( ! $uid ) {
/**
* Filter whether the user who generated the nonce is logged out .
*
* @ since 3.5 . 0
*
* @ param int $uid ID of the nonce - owning user .
* @ param string $action The nonce action .
*/
$uid = apply_filters ( 'nonce_user_logged_out' , $uid , $action );
}
if ( empty ( $nonce ) ) {
2018-12-19 17:01:08 +07:00
// To fix verify nonce conflict #1
// this is fake post field to fix some conflict of wp_verify_nonce()
// just return false to unverify nonce, does not exit
2020-03-26 15:29:54 +00:00
if ( isset ( $_POST [ $action ]) && ( $_POST [ $action ] == 'mainwp-bsm-unverify-nonce' )) {
2018-12-19 17:01:08 +07:00
return false ;
}
2018-11-14 21:33:36 +07:00
// to help tracing the conflict verify nonce with other plugins
@ ob_start ();
@ debug_print_backtrace ( DEBUG_BACKTRACE_IGNORE_ARGS );
$stackTrace = " \n " . @ ob_get_clean ();
2020-03-26 15:29:54 +00:00
die ( '<mainwp>' . base64_encode ( json_encode ( array ( 'error' => 'You dont send nonce: ' . $action . '<br/>Trace: ' . $stackTrace ) ) ) . '</mainwp>' );
2015-10-15 22:52:37 +10:00
}
2018-12-19 17:01:08 +07:00
// To fix verify nonce conflict #2
// this is fake nonce to fix some conflict of wp_verify_nonce()
2018-09-27 19:52:32 +02:00
// just return false to unverify nonce, does not exit
if ( $nonce == 'mainwp-bsm-unverify-nonce' ) {
return false ;
}
2015-10-15 22:52:37 +10:00
$token = wp_get_session_token ();
$i = wp_nonce_tick ();
// Nonce generated 0-12 hours ago
$expected = substr ( wp_hash ( $i . '|' . $action . '|' . $uid . '|' . $token , 'nonce' ), - 12 , 10 );
if ( hash_equals ( $expected , $nonce ) ) {
return 1 ;
}
// Nonce generated 12-24 hours ago
$expected = substr ( wp_hash ( ( $i - 1 ) . '|' . $action . '|' . $uid . '|' . $token , 'nonce' ), - 12 , 10 );
if ( hash_equals ( $expected , $nonce ) ) {
return 2 ;
}
2018-12-19 17:01:08 +07:00
// To fix verify nonce conflict #3
// this is fake post field to fix some conflict of wp_verify_nonce()
2018-09-27 19:52:32 +02:00
// just return false to unverify nonce, does not exit
2020-03-26 15:29:54 +00:00
if ( isset ( $_POST [ $action ]) && ( $_POST [ $action ] == 'mainwp-bsm-unverify-nonce' )) {
2018-09-27 19:52:32 +02:00
return false ;
}
@ ob_start ();
@ debug_print_backtrace ( DEBUG_BACKTRACE_IGNORE_ARGS );
$stackTrace = " \n " . @ ob_get_clean ();
2015-10-15 22:52:37 +10:00
// Invalid nonce
2020-03-26 15:29:54 +00:00
die ( '<mainwp>' . base64_encode ( json_encode ( array ( 'error' => 'Invalid nonce! Try to use: ' . $action . '<br/>Trace: ' . $stackTrace ) ) ) . '</mainwp>' );
2015-10-15 22:52:37 +10:00
}
endif ;
}
}
}
class MainWP_Child {
2020-03-26 19:45:07 +00:00
public static $version = '4.0.7' ;
2019-02-14 22:38:14 +07:00
private $update_version = '1.5' ;
2015-10-15 22:52:37 +10:00
private $callableFunctions = array (
'stats' => 'getSiteStats' ,
'upgrade' => 'upgradeWP' ,
'newpost' => 'newPost' ,
'deactivate' => 'deactivate' ,
'newuser' => 'newUser' ,
'newadminpassword' => 'newAdminPassword' ,
'installplugintheme' => 'installPluginTheme' ,
'upgradeplugintheme' => 'upgradePluginTheme' ,
2016-02-15 22:08:39 +01:00
'upgradetranslation' => 'upgradeTranslation' ,
2015-10-15 22:52:37 +10:00
'backup' => 'backup' ,
'backup_checkpid' => 'backup_checkpid' ,
'cloneinfo' => 'cloneinfo' ,
'security' => 'getSecurityStats' ,
'securityFix' => 'doSecurityFix' ,
'securityUnFix' => 'doSecurityUnFix' ,
'post_action' => 'post_action' ,
'get_all_posts' => 'get_all_posts' ,
'comment_action' => 'comment_action' ,
'comment_bulk_action' => 'comment_bulk_action' ,
'get_all_comments' => 'get_all_comments' ,
'get_all_themes' => 'get_all_themes' ,
'theme_action' => 'theme_action' ,
'get_all_plugins' => 'get_all_plugins' ,
'plugin_action' => 'plugin_action' ,
'get_all_pages' => 'get_all_pages' ,
'get_all_users' => 'get_all_users' ,
'user_action' => 'user_action' ,
'search_users' => 'search_users' ,
'get_terms' => 'get_terms' ,
'set_terms' => 'set_terms' ,
'insert_comment' => 'insert_comment' ,
'get_post_meta' => 'get_post_meta' ,
'get_total_ezine_post' => 'get_total_ezine_post' ,
'get_next_time_to_post' => 'get_next_time_to_post' ,
'cancel_scheduled_post' => 'cancel_scheduled_post' ,
'serverInformation' => 'serverInformation' ,
'maintenance_site' => 'maintenance_site' ,
'keyword_links_action' => 'keyword_links_action' ,
'branding_child_plugin' => 'branding_child_plugin' ,
'code_snippet' => 'code_snippet' ,
'uploader_action' => 'uploader_action' ,
'wordpress_seo' => 'wordpress_seo' ,
'client_report' => 'client_report' ,
'createBackupPoll' => 'backupPoll' ,
'page_speed' => 'page_speed' ,
'woo_com_status' => 'woo_com_status' ,
'links_checker' => 'links_checker' ,
'wordfence' => 'wordfence' ,
'delete_backup' => 'delete_backup' ,
'update_values' => 'update_values' ,
'ithemes' => 'ithemes' ,
'updraftplus' => 'updraftplus' ,
'backup_wp' => 'backup_wp' ,
'backwpup' => 'backwpup' ,
'wp_rocket' => 'wp_rocket' ,
'settings_tools' => 'settings_tools' ,
'skeleton_key' => 'skeleton_key' ,
2020-03-26 15:29:54 +00:00
'custom_post_type' => 'custom_post_type' ,
2016-12-08 20:54:26 +01:00
'backup_buddy' => 'backup_buddy' ,
2017-02-22 21:39:22 +01:00
'get_site_icon' => 'get_site_icon' ,
2018-09-27 19:52:32 +02:00
'vulner_checker' => 'vulner_checker' ,
'wp_staging' => 'wp_staging' ,
2018-06-26 19:52:53 +02:00
'disconnect' => 'disconnect' ,
'time_capsule' => 'time_capsule' ,
2018-11-27 15:07:40 +07:00
'extra_excution' => 'extra_execution' , // deprecated
2020-03-26 15:29:54 +00:00
'extra_execution' => 'extra_execution' ,
2020-03-26 17:03:00 +00:00
'wpvivid_backuprestore' => 'wpvivid_backuprestore' ,
2015-10-15 22:52:37 +10:00
);
2016-10-24 20:33:37 +02:00
private $FTP_ERROR = 'Failed! Please, add FTP details for automatic updates.' ;
2015-10-15 22:52:37 +10:00
private $callableFunctionsNoAuth = array (
'stats' => 'getSiteStatsNoAuth' ,
);
private $posts_where_suffix ;
private $comments_and_clauses ;
private $plugin_slug ;
private $plugin_dir ;
private $slug ;
private $maxHistory = 5 ;
2020-03-26 19:45:07 +00:00
private $filterFunction = null ;
2016-04-27 21:54:28 +02:00
public static $brandingTitle = null ;
2015-10-15 22:52:37 +10:00
2016-04-27 21:54:28 +02:00
public static $subPages ;
public static $subPagesLoaded = false ;
2015-10-15 22:52:37 +10:00
public function __construct ( $plugin_file ) {
$this -> update ();
2017-08-24 20:41:12 +02:00
$this -> load_all_options ();
2020-03-26 14:05:04 +00:00
$this -> filterFunction = function ( $a ) {
2020-03-26 17:03:00 +00:00
if ( $a == null ) {
2020-03-26 19:51:58 +00:00
return false ; }
2020-03-26 17:03:00 +00:00
if ( is_object ( $a ) && property_exists ( $a , 'last_checked' ) && ! property_exists ( $a , 'checked' )) {
2018-09-27 19:52:32 +02:00
return false ;
2020-03-26 14:11:33 +00:00
}
2018-04-17 20:33:10 +02:00
return $a ;
2018-09-27 19:52:32 +02:00
};
2015-10-15 22:52:37 +10:00
$this -> plugin_dir = dirname ( $plugin_file );
$this -> plugin_slug = plugin_basename ( $plugin_file );
2020-03-26 19:45:07 +00:00
list ( $t1 , $t2 ) = explode ( '/' , $this -> plugin_slug );
$this -> slug = str_replace ( '.php' , '' , $t2 );
2015-10-15 22:52:37 +10:00
$this -> posts_where_suffix = '' ;
$this -> comments_and_clauses = '' ;
add_action ( 'template_redirect' , array ( $this , 'template_redirect' ) );
2016-04-27 19:25:53 +02:00
add_action ( 'init' , array ( & $this , 'check_login' ), 1 );
2018-09-27 19:52:32 +02:00
add_action ( 'init' , array ( & $this , 'parse_init' ), 9999 );
2015-10-15 22:52:37 +10:00
add_action ( 'admin_menu' , array ( & $this , 'admin_menu' ) );
add_action ( 'admin_init' , array ( & $this , 'admin_init' ) );
2016-12-08 20:54:26 +01:00
add_action ( 'admin_head' , array ( & $this , 'admin_head' ) );
2016-03-15 20:54:21 +01:00
add_action ( 'init' , array ( & $this , 'localization' ), 33 );
2019-03-06 22:45:51 +07:00
add_action ( 'pre_current_active_plugins' , array ( & $this , 'detect_premium_themesplugins_updates' ) ); // to support detect premium plugins update
add_action ( 'core_upgrade_preamble' , array ( & $this , 'detect_premium_themesplugins_updates' ) ); // to support detect premium themes
2019-02-14 22:38:14 +07:00
2015-10-15 22:52:37 +10:00
if ( is_admin () ) {
2015-12-12 18:39:23 +01:00
MainWP_Helper :: update_option ( 'mainwp_child_plugin_version' , self :: $version , 'yes' );
2015-10-15 22:52:37 +10:00
}
$this -> checkOtherAuth ();
2016-12-08 20:54:26 +01:00
MainWP_Clone :: get () -> init ();
2015-10-15 22:52:37 +10:00
MainWP_Child_Server_Information :: init ();
2018-06-26 19:52:53 +02:00
MainWP_Client_Report :: Instance () -> init ();
2019-02-14 22:38:14 +07:00
MainWP_Child_Plugins_Check :: Instance ();
MainWP_Child_Themes_Check :: Instance ();
2015-10-15 22:52:37 +10:00
$this -> run_saved_snippets ();
if ( ! get_option ( 'mainwp_child_pubkey' ) ) {
2019-02-14 22:38:14 +07:00
MainWP_Child_Branding :: Instance () -> save_branding_options ( 'branding_disconnected' , 'yes' );
MainWP_Helper :: update_option ( 'mainwp_child_branding_disconnected' , 'yes' , 'yes' ); // to compatible
2015-10-15 22:52:37 +10:00
}
add_action ( 'admin_notices' , array ( & $this , 'admin_notice' ) );
add_filter ( 'plugin_row_meta' , array ( & $this , 'plugin_row_meta' ), 10 , 2 );
2016-03-03 20:28:07 +01:00
2020-03-26 20:01:04 +00:00
// WP-Cron
2016-03-03 20:28:07 +01:00
if ( defined ( 'DOING_CRON' ) && DOING_CRON ) {
2020-03-26 15:29:54 +00:00
if ( isset ( $_GET [ 'mainwp_child_run' ]) && ! empty ( $_GET [ 'mainwp_child_run' ] ) ) {
2016-03-03 20:28:07 +01:00
add_action ( 'init' , array ( $this , 'cron_active' ), PHP_INT_MAX );
}
}
2015-10-15 22:52:37 +10:00
}
2017-08-24 20:41:12 +02:00
function load_all_options () {
global $wpdb ;
2020-03-26 17:03:00 +00:00
if ( ! defined ( 'WP_INSTALLING' ) || ! is_multisite () ) {
2017-08-24 20:41:12 +02:00
$alloptions = wp_cache_get ( 'alloptions' , 'options' );
2020-03-26 14:11:33 +00:00
} else {
2017-08-24 20:41:12 +02:00
$alloptions = false ;
2020-03-26 14:11:33 +00:00
}
2017-08-24 20:41:12 +02:00
2020-03-26 17:03:00 +00:00
if ( ! defined ( 'WP_INSTALLING' ) || ! is_multisite () ) {
2017-08-24 20:41:12 +02:00
$notoptions = wp_cache_get ( 'notoptions' , 'options' );
2020-03-26 14:11:33 +00:00
} else {
2017-08-24 20:41:12 +02:00
$notoptions = false ;
2020-03-26 14:11:33 +00:00
}
2017-08-24 20:41:12 +02:00
2020-03-26 17:03:00 +00:00
if ( ! isset ( $alloptions [ 'mainwp_db_version' ]) ) {
2017-08-24 20:41:12 +02:00
$suppress = $wpdb -> suppress_errors ();
2020-03-26 19:45:07 +00:00
$options = array (
2017-08-24 20:41:12 +02:00
'mainwp_child_auth' ,
'mainwp_branding_plugin_header' ,
'mainwp_child_reports_db' ,
'mainwp_child_fix_htaccess' ,
'mainwp_child_pluginDir' ,
'mainwp_updraftplus_hide_plugin' ,
'mainwp_backwpup_ext_enabled' ,
'mainwpKeywordLinks' ,
'mainwp_child_server' ,
'mainwp_kwl_options' ,
'mainwp_kwl_keyword_links' ,
'mainwp_keyword_links_htaccess_set' ,
'mainwp_pagespeed_hide_plugin' ,
'mainwp_kwl_enable_statistic' ,
'mainwp_child_clone_permalink' ,
'mainwp_child_restore_permalink' ,
'mainwp_ext_snippets_enabled' ,
'mainwp_child_pubkey' ,
'mainwp_child_nossl' ,
'mainwp_security' ,
'mainwp_backupwordpress_ext_enabled' ,
2020-03-26 20:01:04 +00:00
// 'mainwp_wprocket_ext_enabled',
// 'mainwp_wordfence_ext_enabled',
2020-03-26 14:11:33 +00:00
'mainwp_branding_button_contact_label' ,
2017-08-24 20:41:12 +02:00
'mainwp_branding_extra_settings' ,
'mainwp_branding_child_hide' ,
'mainwp_branding_ext_enabled' ,
2020-03-26 20:01:04 +00:00
// 'mainwp_creport_ext_branding_enabled',
2017-08-24 20:41:12 +02:00
'mainwp_pagespeed_ext_enabled' ,
'mainwp_linkschecker_ext_enabled' ,
2020-03-26 20:01:04 +00:00
// 'mainwp_ithemes_ext_enabled',
2019-02-14 22:38:14 +07:00
'mainwp_child_branding_settings' ,
2020-03-26 14:05:04 +00:00
'mainwp_child_plugintheme_days_outdate' ,
2017-08-24 20:41:12 +02:00
);
2020-03-26 19:45:07 +00:00
$query = " SELECT option_name, option_value FROM $wpdb->options WHERE option_name in ( " ;
2017-08-24 20:41:12 +02:00
foreach ( $options as $option ) {
$query .= " ' " . $option . " ', " ;
}
2020-03-26 19:45:07 +00:00
$query = substr ( $query , 0 , strlen ( $query ) - 2 );
2020-03-26 14:05:04 +00:00
$query .= ')' ;
2017-08-24 20:41:12 +02:00
$alloptions_db = $wpdb -> get_results ( $query );
$wpdb -> suppress_errors ( $suppress );
2020-03-26 17:03:00 +00:00
if ( ! is_array ( $alloptions ) ) {
2020-03-26 19:51:58 +00:00
$alloptions = array ();
2020-03-26 14:11:33 +00:00
}
2017-08-24 20:41:12 +02:00
if ( is_array ( $alloptions_db ) ) {
foreach ( ( array ) $alloptions_db as $o ) {
$alloptions [ $o -> option_name ] = $o -> option_value ;
2020-03-26 15:29:54 +00:00
unset ( $options [ array_search ( $o -> option_name , $options ) ]);
2017-08-24 20:41:12 +02:00
}
foreach ( $options as $option ) {
$notoptions [ $option ] = true ;
}
if ( ! defined ( 'WP_INSTALLING' ) || ! is_multisite () ) {
wp_cache_set ( 'alloptions' , $alloptions , 'options' );
wp_cache_set ( 'notoptions' , $notoptions , 'options' );
}
}
}
return $alloptions ;
}
2015-10-15 22:52:37 +10:00
function update () {
$update_version = get_option ( 'mainwp_child_update_version' );
if ( $update_version === $this -> update_version ) {
return ;
}
if ( false === $update_version ) {
$options = array (
'mainwp_child_legacy' ,
'mainwp_child_auth' ,
'mainwp_child_uniqueId' ,
'mainwp_child_htaccess_set' ,
'mainwp_child_fix_htaccess' ,
'mainwp_child_pubkey' ,
'mainwp_child_server' ,
'mainwp_child_nonce' ,
'mainwp_child_nossl' ,
'mainwp_child_nossl_key' ,
'mainwp_child_remove_wp_version' ,
'mainwp_child_remove_rsd' ,
'mainwp_child_remove_wlw' ,
'mainwp_child_remove_core_updates' ,
'mainwp_child_remove_plugin_updates' ,
'mainwp_child_remove_theme_updates' ,
'mainwp_child_remove_php_reporting' ,
'mainwp_child_remove_scripts_version' ,
'mainwp_child_remove_styles_version' ,
'mainwp_child_remove_readme' ,
'mainwp_child_clone_sites' ,
'mainwp_child_pluginDir' ,
'mainwp_premium_updates' ,
'mainwp_child_activated_once' ,
'mainwp_maintenance_opt_alert_404' ,
'mainwp_maintenance_opt_alert_404_email' ,
'mainwp_ext_code_snippets' ,
'mainwp_ext_snippets_enabled' ,
'mainwp_temp_clone_plugins' ,
'mainwp_temp_clone_themes' ,
'mainwp_child_click_data' ,
'mainwp_child_clone_from_server_last_folder' ,
'mainwp_child_clone_permalink' ,
'mainwp_child_restore_permalink' ,
'mainwp_keyword_links_htaccess_set' ,
'mainwp_kwl_options' ,
'mainwp_kwl_keyword_links' ,
'mainwp_kwl_click_statistic_data' ,
'mainwp_kwl_statistic_data_' ,
'mainwp_kwl_enable_statistic' ,
'mainwpKeywordLinks' ,
2020-03-26 20:01:04 +00:00
// 'mainwp_branding_ext_enabled',
// 'mainwp_branding_plugin_header',
// 'mainwp_branding_support_email',
// 'mainwp_branding_support_message',
// 'mainwp_branding_remove_restore',
// 'mainwp_branding_remove_setting',
// 'mainwp_branding_remove_wp_tools',
// 'mainwp_branding_remove_wp_setting',
// 'mainwp_branding_remove_permalink',
// 'mainwp_branding_button_contact_label',
// 'mainwp_branding_send_email_message',
// 'mainwp_branding_message_return_sender',
// 'mainwp_branding_submit_button_title',
// 'mainwp_branding_disable_wp_branding',
// 'mainwp_branding_extra_settings',
// 'mainwp_branding_child_hide',
// 'mainwp_branding_show_support',
// 'mainwp_branding_disable_change',
2015-10-15 22:52:37 +10:00
);
foreach ( $options as $option ) {
MainWP_Helper :: fix_option ( $option );
}
2020-03-26 14:11:33 +00:00
} elseif ( ( '1.0' === $update_version ) || ( '1.1' === $update_version ) ) {
2015-10-15 22:52:37 +10:00
$options = array (
'mainwp_child_pubkey' ,
2020-03-26 20:01:04 +00:00
// 'mainwp_child_branding_disconnected',
// 'mainwp_branding_plugin_header',
2015-10-15 22:52:37 +10:00
'mainwp_child_update_version' ,
'mainwp_child_auth' ,
'mainwp_child_clone_permalink' ,
'mainwp_child_restore_permalink' ,
'mainwp_ext_snippets_enabled' ,
'mainwp_child_fix_htaccess' ,
'mainwp_child_pluginDir' ,
'mainwp_child_htaccess_set' ,
'mainwp_child_nossl' ,
'mainwp_updraftplus_ext_enabled' ,
'mainwpKeywordLinks' ,
'mainwp_keyword_links_htaccess_set' ,
2020-03-26 20:01:04 +00:00
// 'mainwp_branding_button_contact_label',
// 'mainwp_branding_extra_settings',
// 'mainwp_branding_ext_enabled',
// 'mainwp_creport_ext_branding_enabled',
2015-10-15 22:52:37 +10:00
'mainwp_pagespeed_ext_enabled' ,
'mainwp_linkschecker_ext_enabled' ,
2020-03-26 20:01:04 +00:00
// 'mainwp_wordfence_ext_enabled',
// 'mainwp_ithemes_ext_enabled',
2015-10-15 22:52:37 +10:00
'mainwp_maintenance_opt_alert_404' ,
);
foreach ( $options as $option ) {
MainWP_Helper :: fix_option ( $option , 'yes' );
}
if ( ! is_array ( get_option ( 'mainwp_security' ) ) ) {
$securityOptions = array (
'wp_version' => 'mainwp_child_remove_wp_version' ,
'rsd' => 'mainwp_child_remove_rsd' ,
'wlw' => 'mainwp_child_remove_wlw' ,
'core_updates' => 'mainwp_child_remove_core_updates' ,
'plugin_updates' => 'mainwp_child_remove_plugin_updates' ,
'theme_updates' => 'mainwp_child_remove_theme_updates' ,
'php_reporting' => 'mainwp_child_remove_php_reporting' ,
'scripts_version' => 'mainwp_child_remove_scripts_version' ,
'styles_version' => 'mainwp_child_remove_styles_version' ,
'readme' => 'mainwp_child_remove_readme' ,
);
$security = array ();
foreach ( $securityOptions as $option => $old ) {
$value = get_option ( $old );
$security [ $option ] = ( 'T' === $value );
}
MainWP_Helper :: update_option ( 'mainwp_security' , $security , 'yes' );
}
2019-02-14 22:38:14 +07:00
}
2020-03-26 17:03:00 +00:00
if ( ! empty ( $update_version ) && version_compare ( $update_version , '1.4' , '<=' ) ) { // 3.5.4
2019-02-14 22:38:14 +07:00
if ( ! is_array ( get_option ( 'mainwp_child_branding_settings' ) ) ) {
// to fix: reduce number of options
$brandingOptions = array (
2020-03-26 15:29:54 +00:00
'hide' => 'mainwp_branding_child_hide' ,
'extra_settings' => 'mainwp_branding_extra_settings' ,
'branding_disconnected' => 'mainwp_child_branding_disconnected' ,
'preserve_branding' => 'mainwp_branding_preserve_branding' ,
'branding_header' => 'mainwp_branding_plugin_header' ,
'support_email' => 'mainwp_branding_support_email' ,
'support_message' => 'mainwp_branding_support_message' ,
'remove_restore' => 'mainwp_branding_remove_restore' ,
'remove_setting' => 'mainwp_branding_remove_setting' ,
'remove_server_info' => 'mainwp_branding_remove_server_info' ,
'remove_connection_detail' => 'mainwp_branding_remove_connection_detail' ,
'remove_wp_tools' => 'mainwp_branding_remove_wp_tools' ,
'remove_wp_setting' => 'mainwp_branding_remove_wp_setting' ,
'remove_permalink' => 'mainwp_branding_remove_permalink' ,
'contact_label' => 'mainwp_branding_button_contact_label' ,
'email_message' => 'mainwp_branding_send_email_message' ,
'message_return_sender' => 'mainwp_branding_message_return_sender' ,
2019-02-14 22:38:14 +07:00
'submit_button_title' => 'mainwp_branding_submit_button_title' ,
'disable_wp_branding' => 'mainwp_branding_disable_wp_branding' ,
2020-03-26 15:29:54 +00:00
'show_support' => 'mainwp_branding_show_support' ,
'disable_change' => 'mainwp_branding_disable_change' ,
'disable_switching_theme' => 'mainwp_branding_disable_switching_theme' ,
2020-03-26 20:01:04 +00:00
// 'hide_child_reports' => 'mainwp_creport_branding_stream_hide',
2020-03-26 15:29:54 +00:00
'branding_ext_enabled' => 'mainwp_branding_ext_enabled' ,
2019-02-14 22:38:14 +07:00
);
$convertBranding = array ();
foreach ( $brandingOptions as $option => $old ) {
2020-03-26 19:45:07 +00:00
$value = get_option ( $old );
2019-02-14 22:38:14 +07:00
$convertBranding [ $option ] = $value ;
}
MainWP_Helper :: update_option ( 'mainwp_child_branding_settings' , $convertBranding );
}
2015-10-15 22:52:37 +10:00
}
MainWP_Helper :: update_option ( 'mainwp_child_update_version' , $this -> update_version , 'yes' );
}
2016-03-03 20:28:07 +01:00
function cron_active () {
if ( ! defined ( 'DOING_CRON' ) || ! DOING_CRON ) {
return ;
}
2020-03-26 15:29:54 +00:00
if ( empty ( $_GET [ 'mainwp_child_run' ] ) || 'test' !== $_GET [ 'mainwp_child_run' ] ) {
2016-03-03 20:28:07 +01:00
return ;
}
@ session_write_close ();
2020-03-26 14:05:04 +00:00
@ header ( 'Content-Type: text/html; charset=' . get_bloginfo ( 'charset' ), true );
@ header ( 'X-Robots-Tag: noindex, nofollow' , true );
@ header ( 'X-MainWP-Child-Version: ' . self :: $version , true );
2016-03-03 20:28:07 +01:00
nocache_headers ();
2020-03-26 15:29:54 +00:00
if ( $_GET [ 'mainwp_child_run' ] == 'test' ) {
2016-03-03 20:28:07 +01:00
die ( 'MainWP Test' );
}
die ( '' );
}
2015-10-15 22:52:37 +10:00
public function admin_notice () {
2020-03-26 20:01:04 +00:00
// Admin Notice...
2019-02-14 22:38:14 +07:00
if ( ! get_option ( 'mainwp_child_pubkey' ) && MainWP_Helper :: isAdmin () && is_admin () ) {
2020-03-26 19:45:07 +00:00
$branding_opts = MainWP_Child_Branding :: Instance () -> get_branding_options ();
$child_name = ( $branding_opts [ 'branding_preserve_title' ] === '' ) ? 'MainWP Child' : $branding_opts [ 'branding_preserve_title' ];
2019-02-14 22:38:14 +07:00
$dashboard_name = ( $branding_opts [ 'branding_preserve_title' ] === '' ) ? 'MainWP Dashboard' : $branding_opts [ 'branding_preserve_title' ] . ' Dashboard' ;
2020-03-26 19:45:07 +00:00
$msg = '<div class="wrap"><div class="postbox" style="margin-top: 4em;"><p style="background: #a00; color: #fff; font-size: 22px; font-weight: bold; margin: 0; padding: .3em;">' ;
$msg .= __ ( 'Attention!' , 'mainwp-child' );
$msg .= '</p><div style="padding-left: 1em; padding-right: 1em;"><p style="font-size: 16px;">' ;
$msg .= __ ( 'Please add this site to your ' , 'mainwp-child' ) . $dashboard_name . ' ' . __ ( '<b>NOW</b> or deactivate the ' , 'mainwp-child' ) . $child_name . __ ( ' plugin until you are ready to connect this site to your Dashboard in order to avoid unexpected security issues.' , 'mainwp-child' );
$msg .= '</p>' ;
$msg .= '<p style="font-size: 16px;">' ;
$msg .= __ ( 'If you are not sure how to add this site to your Dashboard, <a href="https://mainwp.com/help/docs/set-up-the-mainwp-plugin/add-site-to-your-dashboard/" target="_blank">please review these instructions</a>.' , 'mainwp-child' );
$msg .= '</p>' ;
2019-02-14 22:38:14 +07:00
if ( ! MainWP_Child_Branding :: Instance () -> is_branding () ) {
2020-03-26 19:45:07 +00:00
$msg .= '<p>' ;
$msg .= __ ( 'You can also turn on the unique security ID option in <a href="admin.php?page=mainwp_child_tab">' , 'mainwp-child' ) . $child_name . __ ( ' settings</a> if you would like extra security and additional time to add this site to your Dashboard. <br/>Find out more in this help document <a href="https://mainwp.com/help/docs/set-up-the-mainwp-plugin/set-unique-security-id/" target="_blank">How do I use the child unique security ID?</a>' , 'mainwp-child' );
$msg .= '</p>' ;
2019-02-14 22:38:14 +07:00
}
2020-03-26 19:45:07 +00:00
$msg .= '</div></div></div>' ;
2019-02-14 22:38:14 +07:00
echo wp_kses_post ( $msg );
}
2015-10-15 22:52:37 +10:00
MainWP_Child_Server_Information :: showWarnings ();
}
public function localization () {
load_plugin_textdomain ( 'mainwp-child' , false , dirname ( dirname ( plugin_basename ( __FILE__ ) ) ) . '/languages/' );
}
2019-02-14 22:38:14 +07:00
public function detect_premium_themesplugins_updates () {
2019-03-06 22:45:51 +07:00
2018-11-14 21:33:36 +07:00
if ( isset ( $_GET [ '_detect_plugins_updates' ]) && $_GET [ '_detect_plugins_updates' ] == 'yes' ) {
2018-09-27 19:52:32 +02:00
// to fix some premium plugins update notification
$current = get_site_transient ( 'update_plugins' );
set_site_transient ( 'update_plugins' , $current );
2019-02-14 22:38:14 +07:00
add_filter ( 'pre_site_transient_update_plugins' , $this -> filterFunction , 99 );
$plugins = get_plugin_updates ();
remove_filter ( 'pre_site_transient_update_plugins' , $this -> filterFunction , 99 );
set_site_transient ( 'mainwp_update_plugins_cached' , $plugins , DAY_IN_SECONDS );
2020-03-26 20:01:04 +00:00
// wp_destroy_current_session(); // to fix issue multi user session
2019-02-14 22:38:14 +07:00
}
if ( isset ( $_GET [ '_detect_themes_updates' ]) && $_GET [ '_detect_themes_updates' ] == 'yes' ) {
add_filter ( 'pre_site_transient_update_themes' , $this -> filterFunction , 99 );
$themes = get_theme_updates ();
remove_filter ( 'pre_site_transient_update_themes' , $this -> filterFunction , 99 );
set_site_transient ( 'mainwp_update_themes_cached' , $themes , DAY_IN_SECONDS );
2020-03-26 20:01:04 +00:00
// wp_destroy_current_session(); // to fix issue multi user session
2018-09-27 19:52:32 +02:00
}
2019-03-06 22:45:51 +07:00
$type = isset ( $_GET [ '_request_update_premiums_type' ]) ? $_GET [ '_request_update_premiums_type' ] : '' ;
if ( $type == 'plugin' || $type == 'theme' ) {
$list = isset ( $_GET [ 'list' ] ) ? $_GET [ 'list' ] : '' ;
2020-03-26 17:03:00 +00:00
if ( ! empty ( $list ) ) {
2019-03-06 22:45:51 +07:00
// to call function upgradePluginTheme(),
// will not get the response result
$_POST [ 'type' ] = $type ;
$_POST [ 'list' ] = $list ;
$function = 'upgradeplugintheme' ;
if ( isset ( $this -> callableFunctions [ $function ])) {
call_user_func ( array ( $this , $this -> callableFunctions [ $function ] ) );
}
2020-03-26 20:01:04 +00:00
// wp_destroy_current_session(); // to fix issue multi user session
2019-03-06 22:45:51 +07:00
}
}
2018-09-27 19:52:32 +02:00
}
2016-02-15 22:08:39 +01:00
2015-10-15 22:52:37 +10:00
function checkOtherAuth () {
$auths = get_option ( 'mainwp_child_auth' );
if ( ! $auths ) {
$auths = array ();
}
if ( ! isset ( $auths [ 'last' ] ) || $auths [ 'last' ] < mktime ( 0 , 0 , 0 , date ( 'm' ), date ( 'd' ), date ( 'Y' ) ) ) {
2020-03-26 20:01:04 +00:00
// Generate code for today..
2015-10-15 22:52:37 +10:00
for ( $i = 0 ; $i < $this -> maxHistory ; $i ++ ) {
if ( ! isset ( $auths [ $i + 1 ] ) ) {
continue ;
}
$auths [ $i ] = $auths [ $i + 1 ];
}
$newI = $this -> maxHistory + 1 ;
while ( isset ( $auths [ $newI ] ) ) {
unset ( $auths [ $newI ++ ] );
}
$auths [ $this -> maxHistory ] = md5 ( MainWP_Helper :: randString ( 14 ) );
$auths [ 'last' ] = time ();
MainWP_Helper :: update_option ( 'mainwp_child_auth' , $auths , 'yes' );
}
}
function isValidAuth ( $key ) {
$auths = get_option ( 'mainwp_child_auth' );
if ( ! $auths ) {
return false ;
}
for ( $i = 0 ; $i <= $this -> maxHistory ; $i ++ ) {
if ( isset ( $auths [ $i ] ) && ( $auths [ $i ] === $key ) ) {
return true ;
}
}
return false ;
}
function template_redirect () {
2016-02-17 20:38:44 +01:00
$this -> maintenance_alert_404 ();
2015-10-15 22:52:37 +10:00
}
public function plugin_row_meta ( $plugin_meta , $plugin_file ) {
if ( $this -> plugin_slug !== $plugin_file ) {
return $plugin_meta ;
}
return apply_filters ( 'mainwp_child_plugin_row_meta' , $plugin_meta , $plugin_file , $this -> plugin_slug );
}
function admin_menu () {
2020-03-26 19:45:07 +00:00
$branding_opts = MainWP_Child_Branding :: Instance () -> get_branding_options ();
$is_hide = isset ( $branding_opts [ 'hide' ] ) ? $branding_opts [ 'hide' ] : '' ;
2019-02-14 22:38:14 +07:00
$cancelled_branding = $branding_opts [ 'cancelled_branding' ];
2015-10-15 22:52:37 +10:00
2019-02-14 22:38:14 +07:00
if ( isset ( $branding_opts [ 'remove_wp_tools' ]) && $branding_opts [ 'remove_wp_tools' ] && ! $cancelled_branding ) {
2015-10-15 22:52:37 +10:00
remove_menu_page ( 'tools.php' );
$pos = stripos ( $_SERVER [ 'REQUEST_URI' ], 'tools.php' ) ||
stripos ( $_SERVER [ 'REQUEST_URI' ], 'import.php' ) ||
stripos ( $_SERVER [ 'REQUEST_URI' ], 'export.php' );
if ( false !== $pos ) {
wp_redirect ( get_option ( 'siteurl' ) . '/wp-admin/index.php' );
}
}
// if preserve branding do not remove menus
2019-02-14 22:38:14 +07:00
if ( isset ( $branding_opts [ 'remove_wp_setting' ]) && $branding_opts [ 'remove_wp_setting' ] && ! $cancelled_branding ) {
2015-10-15 22:52:37 +10:00
remove_menu_page ( 'options-general.php' );
$pos = stripos ( $_SERVER [ 'REQUEST_URI' ], 'options-general.php' ) ||
stripos ( $_SERVER [ 'REQUEST_URI' ], 'options-writing.php' ) ||
stripos ( $_SERVER [ 'REQUEST_URI' ], 'options-reading.php' ) ||
stripos ( $_SERVER [ 'REQUEST_URI' ], 'options-discussion.php' ) ||
stripos ( $_SERVER [ 'REQUEST_URI' ], 'options-media.php' ) ||
stripos ( $_SERVER [ 'REQUEST_URI' ], 'options-permalink.php' );
if ( false !== $pos ) {
wp_redirect ( get_option ( 'siteurl' ) . '/wp-admin/index.php' );
exit ();
}
}
2019-02-14 22:38:14 +07:00
if ( isset ( $branding_opts [ 'remove_permalink' ]) && $branding_opts [ 'remove_permalink' ] && ! $cancelled_branding ) {
2015-10-15 22:52:37 +10:00
remove_submenu_page ( 'options-general.php' , 'options-permalink.php' );
$pos = stripos ( $_SERVER [ 'REQUEST_URI' ], 'options-permalink.php' );
if ( false !== $pos ) {
wp_redirect ( get_option ( 'siteurl' ) . '/wp-admin/index.php' );
exit ();
}
}
$remove_all_child_menu = false ;
2020-03-26 17:03:00 +00:00
if ( isset ( $branding_opts [ 'remove_setting' ]) && isset ( $branding_opts [ 'remove_restore' ]) && isset ( $branding_opts [ 'remove_server_info' ]) && $branding_opts [ 'remove_setting' ] && $branding_opts [ 'remove_restore' ] && $branding_opts [ 'remove_server_info' ] ) {
2015-10-15 22:52:37 +10:00
$remove_all_child_menu = true ;
}
2016-04-27 21:54:28 +02:00
// if preserve branding do not hide menus
2019-02-14 22:38:14 +07:00
if ( ( ! $remove_all_child_menu && $is_hide !== 'T' ) || $cancelled_branding ) {
$branding_header = isset ( $branding_opts [ 'branding_header' ] ) ? $branding_opts [ 'branding_header' ] : array ();
2016-04-27 21:54:28 +02:00
if ( ( is_array ( $branding_header ) && ! empty ( $branding_header [ 'name' ] ) ) && ! $cancelled_branding ) {
2020-03-26 19:45:07 +00:00
self :: $brandingTitle = $child_menu_title = stripslashes ( $branding_header [ 'name' ] );
$child_page_title = $child_menu_title . ' Settings' ;
2016-04-27 21:54:28 +02:00
} else {
2020-03-26 19:45:07 +00:00
$child_menu_title = 'MainWP Child' ;
2016-04-27 21:54:28 +02:00
$child_page_title = 'MainWPSettings' ;
}
2015-10-15 22:52:37 +10:00
2016-04-27 21:54:28 +02:00
$settingsPage = add_submenu_page ( 'options-general.php' , $child_menu_title , $child_menu_title , 'manage_options' , 'mainwp_child_tab' , array ( & $this , 'render_pages' ) );
2015-10-15 22:52:37 +10:00
2016-04-27 21:54:28 +02:00
add_action ( 'admin_print_scripts-' . $settingsPage , array ( 'MainWP_Clone' , 'print_scripts' ) );
$subpageargs = array (
2020-03-26 15:29:54 +00:00
'child_slug' => 'options-general.php' , // to backwards compatible
'branding' => ( self :: $brandingTitle === null ) ? 'MainWP' : self :: $brandingTitle ,
2020-03-26 14:05:04 +00:00
'parent_menu' => $settingsPage ,
2016-04-27 21:54:28 +02:00
);
do_action ( 'mainwp-child-subpages' , $subpageargs ); // to compatible
$sub_pages = array ();
2019-02-14 22:38:14 +07:00
2016-04-28 20:22:43 +02:00
$all_subpages = apply_filters ( 'mainwp-child-init-subpages' , array () );
2020-03-26 17:03:00 +00:00
if ( ! is_array ( $all_subpages ) ) {
2016-04-28 20:22:43 +02:00
$all_subpages = array ();
2020-03-26 14:11:33 +00:00
}
2016-04-28 20:22:43 +02:00
2020-03-26 17:03:00 +00:00
if ( ! self :: $subPagesLoaded ) {
foreach ( $all_subpages as $page ) {
2016-04-28 20:22:43 +02:00
$slug = isset ( $page [ 'slug' ] ) ? $page [ 'slug' ] : '' ;
2020-03-26 14:11:33 +00:00
if ( empty ( $slug ) ) {
2016-04-27 21:54:28 +02:00
continue ;
2020-03-26 14:11:33 +00:00
}
2020-03-26 19:45:07 +00:00
$subpage = array ();
$subpage [ 'slug' ] = $slug ;
2016-04-27 21:54:28 +02:00
$subpage [ 'title' ] = $page [ 'title' ];
2020-03-26 14:05:04 +00:00
$subpage [ 'page' ] = 'mainwp-' . str_replace ( ' ' , '-' , strtolower ( str_replace ( '-' , ' ' , $slug ) ) );
2016-04-28 20:22:43 +02:00
if ( isset ( $page [ 'callback' ] ) ) {
2020-03-26 17:03:00 +00:00
$subpage [ 'callback' ] = $page [ 'callback' ];
2020-03-26 19:45:07 +00:00
$created_page = add_submenu_page ( 'options-general.php' , $subpage [ 'title' ], '<div class="mainwp-hidden">' . $subpage [ 'title' ] . '</div>' , 'manage_options' , $subpage [ 'page' ], $subpage [ 'callback' ] );
2016-04-28 20:22:43 +02:00
if ( isset ( $page [ 'load_callback' ] ) ) {
2020-03-26 17:03:00 +00:00
$subpage [ 'load_callback' ] = $page [ 'load_callback' ];
2016-04-27 21:54:28 +02:00
add_action ( 'load-' . $created_page , $subpage [ 'load_callback' ] );
}
}
$sub_pages [] = $subpage ;
}
2020-03-26 19:45:07 +00:00
self :: $subPages = $sub_pages ;
2016-04-27 21:54:28 +02:00
self :: $subPagesLoaded = true ;
2020-03-26 20:01:04 +00:00
// MainWP_Helper::update_option( 'mainwp_child_subpages', self::$subPages ); // to fix error for some case
2016-04-27 21:54:28 +02:00
}
add_action ( 'mainwp-child-pageheader' , array ( __CLASS__ , 'render_header' ) );
add_action ( 'mainwp-child-pagefooter' , array ( __CLASS__ , 'render_footer' ) );
global $submenu ;
if ( isset ( $submenu [ 'options-general.php' ] ) ) {
foreach ( $submenu [ 'options-general.php' ] as $index => $item ) {
if ( 'mainwp-reports-page' === $item [ 2 ] || 'mainwp-reports-settings' === $item [ 2 ]) {
unset ( $submenu [ 'options-general.php' ][ $index ] );
2015-10-15 22:52:37 +10:00
}
}
}
}
2016-04-27 21:54:28 +02:00
}
2015-10-15 22:52:37 +10:00
2020-03-26 14:05:04 +00:00
function render_pages ( $shownPage ) {
2017-05-11 21:07:42 +02:00
$shownPage = '' ;
2016-04-27 21:54:28 +02:00
if ( isset ( $_GET [ 'tab' ]) ) {
$shownPage = $_GET [ 'tab' ];
}
2019-02-14 22:38:14 +07:00
$branding_opts = MainWP_Child_Branding :: Instance () -> get_branding_options ();
2016-04-27 21:54:28 +02:00
2020-03-26 19:45:07 +00:00
$hide_settings = isset ( $branding_opts [ 'remove_setting' ] ) && $branding_opts [ 'remove_setting' ] ? true : false ;
$hide_restore = isset ( $branding_opts [ 'remove_restore' ] ) && $branding_opts [ 'remove_restore' ] ? true : false ;
$hide_server_info = isset ( $branding_opts [ 'remove_server_info' ] ) && $branding_opts [ 'remove_server_info' ] ? true : false ;
2019-03-06 22:45:51 +07:00
$hide_connection_detail = isset ( $branding_opts [ 'remove_connection_detail' ] ) && $branding_opts [ 'remove_connection_detail' ] ? true : false ;
2016-04-27 21:54:28 +02:00
$hide_style = 'style="display:none"' ;
2017-05-11 21:07:42 +02:00
if ( $shownPage == '' ) {
2020-03-26 17:03:00 +00:00
if ( ! $hide_settings ) {
2017-05-11 21:07:42 +02:00
$shownPage = 'settings' ;
2020-03-26 17:03:00 +00:00
} elseif ( ! $hide_restore ) {
2017-05-11 21:07:42 +02:00
$shownPage = 'restore-clone' ;
2020-03-26 17:03:00 +00:00
} elseif ( ! $hide_server_info ) {
2017-05-11 21:07:42 +02:00
$shownPage = 'server-info' ;
2020-03-26 17:03:00 +00:00
} elseif ( ! $hide_connection_detail ) {
2017-05-11 21:07:42 +02:00
$shownPage = 'connection-detail' ;
}
}
2016-04-27 21:54:28 +02:00
self :: render_header ( $shownPage , false );
?>
2020-03-26 17:03:00 +00:00
< ? php if ( ! $hide_settings ) { ?>
< div class = " mainwp-child-setting-tab settings " < ? php echo ( 'settings' !== $shownPage ) ? $hide_style : '' ; ?> >
2016-05-09 19:34:51 +02:00
< ? php $this -> settings (); ?>
</ div >
2016-04-27 21:54:28 +02:00
< ? php } ?>
2020-03-26 17:03:00 +00:00
< ? php if ( ! $hide_restore ) { ?>
2016-04-28 19:06:52 +02:00
< div class = " mainwp-child-setting-tab restore-clone " < ? php echo ( 'restore-clone' !== $shownPage ) ? $hide_style : '' ; ?> >
2016-05-09 19:34:51 +02:00
< ? php
if ( '' === session_id () ) {
@ session_start ();
}
2016-04-28 19:06:52 +02:00
2016-05-09 19:34:51 +02:00
if ( isset ( $_SESSION [ 'file' ] ) ) {
MainWP_Clone :: renderRestore ();
2016-04-28 19:06:52 +02:00
} else {
2016-05-09 19:34:51 +02:00
$sitesToClone = get_option ( 'mainwp_child_clone_sites' );
if ( 0 !== ( int ) $sitesToClone ) {
MainWP_Clone :: render ();
} else {
MainWP_Clone :: renderNormalRestore ();
}
2016-04-28 19:06:52 +02:00
}
2016-05-09 19:34:51 +02:00
?>
</ div >
2016-04-27 21:54:28 +02:00
< ? php } ?>
2020-03-26 17:03:00 +00:00
< ? php if ( ! $hide_server_info ) { ?>
< div class = " mainwp-child-setting-tab server-info " < ? php echo ( 'server-info' !== $shownPage ) ? $hide_style : '' ; ?> >
2016-05-09 19:34:51 +02:00
< ? php MainWP_Child_Server_Information :: renderPage (); ?>
</ div >
2016-04-27 21:54:28 +02:00
< ? php } ?>
2016-10-24 20:33:37 +02:00
2020-03-26 17:03:00 +00:00
< ? php if ( ! $hide_connection_detail ) { ?>
< div class = " mainwp-child-setting-tab connection-detail " < ? php echo ( 'connection-detail' !== $shownPage ) ? $hide_style : '' ; ?> >
2018-09-27 19:52:32 +02:00
< ? php MainWP_Child_Server_Information :: renderConnectionDetails (); ?>
2016-10-24 20:33:37 +02:00
</ div >
< ? php } ?>
2016-04-27 21:54:28 +02:00
< ? php
self :: render_footer ();
}
2020-03-26 14:05:04 +00:00
public static function render_header ( $shownPage , $subpage = true ) {
2016-04-27 21:54:28 +02:00
if ( isset ( $_GET [ 'tab' ]) ) {
$shownPage = $_GET [ 'tab' ];
}
2020-03-26 14:11:33 +00:00
if ( empty ( $shownPage )) {
2016-04-27 21:54:28 +02:00
$shownPage = 'settings' ;
2020-03-26 14:11:33 +00:00
}
2016-04-27 21:54:28 +02:00
2019-02-14 22:38:14 +07:00
$branding_opts = MainWP_Child_Branding :: Instance () -> get_branding_options ();
2020-03-26 19:45:07 +00:00
$hide_settings = isset ( $branding_opts [ 'remove_setting' ] ) && $branding_opts [ 'remove_setting' ] ? true : false ;
$hide_restore = isset ( $branding_opts [ 'remove_restore' ] ) && $branding_opts [ 'remove_restore' ] ? true : false ;
$hide_server_info = isset ( $branding_opts [ 'remove_server_info' ] ) && $branding_opts [ 'remove_server_info' ] ? true : false ;
2019-03-06 22:45:51 +07:00
$hide_connection_detail = isset ( $branding_opts [ 'remove_connection_detail' ] ) && $branding_opts [ 'remove_connection_detail' ] ? true : false ;
2016-04-27 21:54:28 +02:00
$sitesToClone = get_option ( 'mainwp_child_clone_sites' );
?>
< style type = " text/css " >
. mainwp - tabs
{
margin - top : 2 em ;
border - bottom : 1 px solid #e5e5e5;
2015-10-15 22:52:37 +10:00
}
2016-04-27 21:54:28 +02:00
#mainwp-tabs {
clear : both ;
}
#mainwp-tabs .nav-tab-active {
background : #fafafa ;
border - top : 1 px solid #7fb100 !important;
border - left : 1 px solid #e5e5e5;
border - right : 1 px solid #e5e5e5;
border - bottom : 1 px solid #fafafa !important ;
color : #7fb100;
}
2015-10-15 22:52:37 +10:00
2016-04-27 21:54:28 +02:00
#mainwp-tabs .nav-tab {
border - top : 1 px solid #e5e5e5;
border - left : 1 px solid #e5e5e5;
border - right : 1 px solid #e5e5e5;
border - bottom : 1 px solid #e5e5e5;
padding : 10 px 16 px ;
font - size : 14 px ;
text - transform : uppercase ;
2015-10-15 22:52:37 +10:00
}
2016-04-27 21:54:28 +02:00
#mainwp_wrap-inside {
min - height : 80 vh ;
height : 100 % ;
margin - top : 0 em ;
padding : 10 px ;
background : #fafafa ;
border - top : none ;
border - bottom : 1 px solid #e5e5e5;
border - left : 1 px solid #e5e5e5;
border - right : 1 px solid #e5e5e5;
box - shadow : 0 1 px 1 px rgba ( 0 , 0 , 0 , . 04 );
position : relative ;
2015-10-15 22:52:37 +10:00
}
2016-04-27 21:54:28 +02:00
#mainwp_wrap-inside h2.hndle {
font - size : 14 px ;
padding : 8 px 12 px ;
margin : 0 ;
line - height : 1.4 ;
2015-10-15 22:52:37 +10:00
}
2016-04-27 21:54:28 +02:00
. mainwp - hidden {
display : none ;
}
</ style >
< div class = " wrap " >
2020-03-26 17:03:00 +00:00
< h2 >< i class = " fa fa-file " ></ i > < ? php echo ( self :: $brandingTitle === null ? 'MainWP Child' : self :: $brandingTitle ); ?> </h2>
2016-05-09 19:34:51 +02:00
< div style = " clear: both; " ></ div >< br />
< div class = " mainwp-tabs " id = " mainwp-tabs " >
2020-03-26 17:03:00 +00:00
< ? php if ( ! $hide_settings ) { ?>
< a class = " nav-tab pos-nav-tab
< ? php
if ( $shownPage === 'settings' ) {
2020-03-26 19:51:58 +00:00
echo 'nav-tab-active' ; }
?>
2020-03-26 17:03:00 +00:00
" tab-slug= " settings " href= " < ? php echo $subpage ? 'options-general.php?page=mainwp_child_tab&tab=settings' : '#' ; ?> " style="margin-left: 0 !important;"><?php _e( 'Settings', 'mainwp-child' ); ?></a>
2016-05-09 19:34:51 +02:00
< ? php } ?>
2020-03-26 17:03:00 +00:00
< ? php if ( ! $hide_restore ) { ?>
< a class = " nav-tab pos-nav-tab
< ? php
if ( $shownPage === 'restore-clone' ) {
2020-03-26 19:51:58 +00:00
echo 'nav-tab-active' ; }
?>
2020-03-26 17:03:00 +00:00
" tab-slug= " restore - clone " href= " < ? php echo $subpage ? 'options-general.php?page=mainwp_child_tab&tab=restore-clone' : '#' ; ?> "><?php echo ( 0 !== (int) $sitesToClone ) ? __( 'Restore / Clone', 'mainwp-child' ) : __( 'Restore', 'mainwp-child' ); ?></a>
2016-05-09 19:34:51 +02:00
< ? php } ?>
2020-03-26 17:03:00 +00:00
< ? php if ( ! $hide_server_info ) { ?>
< a class = " nav-tab pos-nav-tab
< ? php
if ( $shownPage === 'server-info' ) {
2020-03-26 19:51:58 +00:00
echo 'nav-tab-active' ; }
?>
2020-03-26 17:03:00 +00:00
" tab-slug= " server - info " href= " < ? php echo $subpage ? 'options-general.php?page=mainwp_child_tab&tab=server-info' : '#' ; ?> "><?php _e( 'Server information', 'mainwp-child' ); ?></a>
2016-05-09 19:34:51 +02:00
< ? php } ?>
2020-03-26 17:03:00 +00:00
< ? php if ( ! $hide_connection_detail ) { ?>
< a class = " nav-tab pos-nav-tab
2020-03-26 19:51:58 +00:00
< ? php
if ( $shownPage === 'connection-detail' ) {
echo 'nav-tab-active' ; }
?>
2020-03-26 17:03:00 +00:00
" tab-slug= " connection - detail " href= " < ? php echo $subpage ? 'options-general.php?page=mainwp_child_tab&tab=connection-detail' : '#' ; ?> "><?php _e( 'Connection Details', 'mainwp-child' ); ?></a>
2016-10-24 20:33:37 +02:00
< ? php } ?>
2016-05-09 19:34:51 +02:00
< ? php
if ( isset ( self :: $subPages ) && is_array ( self :: $subPages ) ) {
foreach ( self :: $subPages as $subPage ) {
2016-04-27 21:54:28 +02:00
?>
2020-03-26 17:03:00 +00:00
< a class = " nav-tab pos-nav-tab
< ? php
if ( $shownPage == $subPage [ 'slug' ] ) {
2020-03-26 19:51:58 +00:00
echo 'nav-tab-active' ; }
?>
2020-03-26 17:03:00 +00:00
" tab-slug= " < ? php echo esc_attr ( $subPage [ 'slug' ]); ?> " href="options-general.php?page=<?php echo rawurlencode($subPage['page']); ?>"><?php echo esc_html($subPage['title']); ?></a>
2016-05-09 19:34:51 +02:00
< ? php
}
}
?>
< div style = " clear:both; " ></ div >
</ div >
< div style = " clear:both; " ></ div >
< script type = " text/javascript " >
jQuery ( document ) . ready ( function () {
$hideMenu = jQuery ( '#menu-settings li a .mainwp-hidden' );
$hideMenu . each ( function (){ jQuery ( this ) . closest ( 'li' ) . hide ();})
var $tabs = jQuery ( '.mainwp-tabs' );
$tabs . on ( 'click' , 'a' , function () {
if ( jQuery ( this ) . attr ( 'href' ) !== '#' )
return true ;
jQuery ( '.mainwp-tabs > a' ) . removeClass ( 'nav-tab-active' );
jQuery ( this ) . addClass ( 'nav-tab-active' );
jQuery ( '.mainwp-child-setting-tab' ) . hide ();
var _tab = jQuery ( this ) . attr ( 'tab-slug' );
jQuery ( '.mainwp-child-setting-tab.' + _tab ) . show ();
return false ;
});
})
</ script >
< div id = " mainwp_wrap-inside " >
2016-04-27 21:54:28 +02:00
< ? php
}
public static function render_footer () {
?>
2016-05-09 19:34:51 +02:00
</ div >
2016-04-27 21:54:28 +02:00
</ div >
< ? php
2015-10-15 22:52:37 +10:00
}
function admin_init () {
2016-12-09 08:44:15 +01:00
if ( MainWP_Helper :: isAdmin () && is_admin () ) {
MainWP_Clone :: get () -> init_ajax ();
}
2015-10-15 22:52:37 +10:00
}
2017-01-04 21:03:57 +01:00
function admin_head () {
if ( isset ( $_GET [ 'page' ]) && $_GET [ 'page' ] == 'mainwp_child_tab' ) {
?>
< style type = " text/css " >
. mainwp - postbox - actions - top {
padding : 10 px ;
clear : both ;
border - bottom : 1 px solid #ddd;
background : #f5f5f5;
}
h3 . mainwp_box_title {
font - family : " Open Sans " , sans - serif ;
font - size : 14 px ;
font - weight : 600 ;
line - height : 1.4 ;
margin : 0 ;
padding : 8 px 12 px ;
border - bottom : 1 px solid #eee;
}
. mainwp - child - setting - tab . connection - detail . postbox . inside {
margin : 0 ;
padding : 0 ;
}
</ style >
< ? php
}
2016-10-24 20:33:37 +02:00
}
2015-10-15 22:52:37 +10:00
function settings () {
2015-12-05 17:38:52 +01:00
if ( isset ( $_POST [ 'submit' ] ) && isset ( $_POST [ 'nonce' ] ) && wp_verify_nonce ( $_POST [ 'nonce' ], 'child-settings' ) ) {
2015-10-15 22:52:37 +10:00
if ( isset ( $_POST [ 'requireUniqueSecurityId' ] ) ) {
MainWP_Helper :: update_option ( 'mainwp_child_uniqueId' , MainWP_Helper :: randString ( 8 ) );
} else {
MainWP_Helper :: update_option ( 'mainwp_child_uniqueId' , '' );
}
}
2018-09-27 19:52:32 +02:00
2015-10-15 22:52:37 +10:00
?>
2016-04-27 21:54:28 +02:00
< div class = " postbox " >
2016-10-24 20:33:37 +02:00
< h2 class = " hndle " >< span >< ? php esc_html_e ( 'Connection settings' , 'mainwp-child' ); ?> </span></h2>
2016-04-27 21:54:28 +02:00
< div class = " inside " >
< form method = " post " action = " options-general.php?page=mainwp_child_tab " >
2016-10-24 20:33:37 +02:00
< div class = " howto " >< ? php esc_html_e ( 'The unique security ID adds additional protection between the child plugin and your Dashboard. The unique security ID will need to match when being added to the Dashboard. This is additional security and should not be needed in most situations.' , 'mainwp-child' ); ?> </div>
2016-04-27 21:54:28 +02:00
< div style = " margin: 1em 0 4em 0; " >
< input name = " requireUniqueSecurityId "
2016-05-09 19:34:51 +02:00
type = " checkbox "
2020-03-26 17:03:00 +00:00
id = " requireUniqueSecurityId "
< ? php
2020-03-26 19:51:58 +00:00
if ( '' != get_option ( 'mainwp_child_uniqueId' ) ) {
echo 'checked' ; }
?>
2020-03-26 17:03:00 +00:00
/>
2016-04-27 21:54:28 +02:00
< label for = " requireUniqueSecurityId "
2016-10-24 20:33:37 +02:00
style = " font-size: 15px; " >< ? php esc_html_e ( 'Require unique security ID' , 'mainwp-child' ); ?> </label>
2016-04-27 21:54:28 +02:00
</ div >
< div >
2020-03-26 14:05:04 +00:00
< ? php
if ( '' != get_option ( 'mainwp_child_uniqueId' ) ) {
2016-10-24 20:33:37 +02:00
echo '<span style="border: 1px dashed #e5e5e5; background: #fafafa; font-size: 24px; padding: 1em 2em;">' . esc_html__ ( 'Your unique security ID is:' , 'mainwp-child' ) . ' <span style="font-weight: bold; color: #7fb100;">' . esc_html ( get_option ( 'mainwp_child_uniqueId' ) ) . '</span></span>' ;
2020-03-26 14:05:04 +00:00
}
?>
2016-04-27 21:54:28 +02:00
</ div >
< p class = " submit " style = " margin-top: 4em; " >
< input type = " submit "
2016-05-09 19:34:51 +02:00
name = " submit "
id = " submit "
class = " button button-primary button-hero "
2016-10-24 20:33:37 +02:00
value = " <?php esc_html_e( 'Save changes', 'mainwp-child' ); ?> " >
2016-04-27 21:54:28 +02:00
</ p >
2020-03-26 14:05:04 +00:00
< input type = " hidden " name = " nonce " value = " <?php echo wp_create_nonce( 'child-settings' ); ?> " >
2016-04-27 21:54:28 +02:00
</ form >
2015-10-15 22:52:37 +10:00
</ div >
</ div >
2016-04-27 21:54:28 +02:00
2015-10-15 22:52:37 +10:00
< ? php
2020-03-26 20:01:04 +00:00
// self::render_footer('setting');
2015-10-15 22:52:37 +10:00
}
function mod_rewrite_rules ( $pRules ) {
$home_root = parse_url ( home_url () );
if ( isset ( $home_root [ 'path' ] ) ) {
$home_root = trailingslashit ( $home_root [ 'path' ] );
} else {
$home_root = '/' ;
}
2020-03-26 19:45:07 +00:00
$rules = " <IfModule mod_rewrite.c> \n " ;
2015-10-15 22:52:37 +10:00
$rules .= " RewriteEngine On \n " ;
$rules .= " RewriteBase $home_root\n " ;
2020-03-26 20:01:04 +00:00
// add in the rules that don't redirect to WP's index.php (and thus shouldn't be handled by WP at all)
2015-10-15 22:52:37 +10:00
foreach ( $pRules as $match => $query ) {
// Apache 1.3 does not support the reluctant (non-greedy) modifier.
$match = str_replace ( '.+?' , '.+' , $match );
$rules .= 'RewriteRule ^' . $match . ' ' . $home_root . $query . " [QSA,L] \n " ;
}
$rules .= " </IfModule> \n " ;
return $rules ;
}
function update_htaccess ( $hard = false ) {
2020-03-26 17:03:00 +00:00
if ( ! $hard && defined ( 'DOING_CRON' ) && DOING_CRON ) {
2015-10-15 22:52:37 +10:00
return ;
}
2019-08-26 23:29:16 +07:00
if ( $hard ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/misc.php' ;
2015-10-15 22:52:37 +10:00
$home_path = ABSPATH ;
$htaccess_file = $home_path . '.htaccess' ;
if ( function_exists ( 'save_mod_rewrite_rules' ) ) {
$rules = explode ( " \n " , '' );
2020-03-26 20:01:04 +00:00
// $ch = @fopen($htaccess_file,'w');
// if (@flock($ch, LOCK_EX))
// {
2015-10-15 22:52:37 +10:00
insert_with_markers ( $htaccess_file , 'MainWP' , $rules );
2020-03-26 20:01:04 +00:00
// }
// @flock($ch, LOCK_UN);
// @fclose($ch);
2015-10-15 22:52:37 +10:00
}
}
}
2019-02-14 22:38:14 +07:00
function check_login () {
2020-03-26 19:45:07 +00:00
$file = '' ;
2016-04-28 19:06:52 +02:00
if ( isset ( $_REQUEST [ 'f' ] ) ) {
$file = $_REQUEST [ 'f' ];
2020-03-26 14:11:33 +00:00
} elseif ( isset ( $_REQUEST [ 'file' ] ) ) {
2016-04-28 19:06:52 +02:00
$file = $_REQUEST [ 'file' ];
2020-03-26 14:11:33 +00:00
} elseif ( isset ( $_REQUEST [ 'fdl' ] ) ) {
2016-04-28 19:06:52 +02:00
$file = $_REQUEST [ 'fdl' ];
}
$auth = $this -> auth ( isset ( $_POST [ 'mainwpsignature' ] ) ? rawurldecode ( $_POST [ 'mainwpsignature' ] ) : '' , isset ( $_POST [ 'function' ] ) ? $_POST [ 'function' ] : rawurldecode ( ( isset ( $_REQUEST [ 'where' ] ) ? $_REQUEST [ 'where' ] : $file ) ), isset ( $_POST [ 'nonce' ] ) ? $_POST [ 'nonce' ] : '' , isset ( $_POST [ 'nossl' ] ) ? $_POST [ 'nossl' ] : 0 );
2016-04-27 19:25:53 +02:00
if ( ! $auth && isset ( $_POST [ 'mainwpsignature' ] ) ) {
MainWP_Helper :: error ( __ ( 'Authentication failed! Please deactivate and re-activate the MainWP Child plugin on this site.' , 'mainwp-child' ) );
}
if ( ! $auth && isset ( $_POST [ 'function' ] ) && isset ( $this -> callableFunctions [ $_POST [ 'function' ] ] ) && ! isset ( $this -> callableFunctionsNoAuth [ $_POST [ 'function' ] ] ) ) {
MainWP_Helper :: error ( __ ( 'Authentication failed! Please deactivate and re-activate the MainWP Child plugin on this site.' , 'mainwp-child' ) );
}
2019-02-14 22:38:14 +07:00
$auth_user = false ;
2016-04-27 19:25:53 +02:00
if ( $auth ) {
2020-03-26 20:01:04 +00:00
// disable duo auth for mainwp
2016-08-02 19:23:13 +02:00
remove_action ( 'init' , 'duo_verify_auth' , 10 );
2020-03-26 20:01:04 +00:00
// Check if the user exists & is an administrator
2016-04-27 19:25:53 +02:00
if ( isset ( $_POST [ 'function' ] ) && isset ( $_POST [ 'user' ] ) ) {
2019-02-14 22:38:14 +07:00
$user = null ;
2020-03-26 17:03:00 +00:00
if ( isset ( $_POST [ 'alt_user' ] ) && ! empty ( $_POST [ 'alt_user' ] ) ) {
2019-02-14 22:38:14 +07:00
if ( $this -> check_login_as ( $_POST [ 'alt_user' ] ) ) {
$auth_user = $_POST [ 'alt_user' ];
2020-03-26 19:45:07 +00:00
$user = get_user_by ( 'login' , $auth_user );
2019-02-14 22:38:14 +07:00
}
}
// if not valid alternative admin
if ( ! $user ) {
// check connected admin existed
2020-03-26 19:45:07 +00:00
$user = get_user_by ( 'login' , $_POST [ 'user' ] );
2019-02-14 22:38:14 +07:00
$auth_user = $_POST [ 'user' ];
}
2016-04-27 19:25:53 +02:00
if ( ! $user ) {
2016-10-24 20:33:37 +02:00
MainWP_Helper :: error ( __ ( 'That administrator username was not found on this child site. Please verify that it is an existing administrator.' , 'mainwp-child' ) );
2016-04-27 19:25:53 +02:00
}
if ( 10 != $user -> wp_user_level && ( ! isset ( $user -> user_level ) || 10 != $user -> user_level ) && ! $user -> has_cap ( 'level_10' ) ) {
2016-10-24 20:33:37 +02:00
MainWP_Helper :: error ( __ ( 'That user is not an administrator. Please use an administrator user to establish the connection.' , 'mainwp-child' ) );
2016-04-27 19:25:53 +02:00
}
2019-02-14 22:38:14 +07:00
$this -> login ( $auth_user );
2016-04-27 19:25:53 +02:00
}
if ( isset ( $_POST [ 'function' ] ) && 'visitPermalink' === $_POST [ 'function' ] ) {
2019-02-14 22:38:14 +07:00
if ( empty ( $auth_user )) {
$auth_user = $_POST [ 'user' ];
}
if ( $this -> login ( $auth_user , true ) ) {
2016-04-27 19:25:53 +02:00
return ;
} else {
exit ();
}
}
2020-03-26 20:01:04 +00:00
// Redirect to the admin part if needed
2016-04-27 19:25:53 +02:00
if ( isset ( $_POST [ 'admin' ] ) && '1' === $_POST [ 'admin' ] ) {
wp_redirect ( get_option ( 'siteurl' ) . '/wp-admin/' );
die ();
}
}
}
2015-10-15 22:52:37 +10:00
function parse_init () {
if ( isset ( $_REQUEST [ 'cloneFunc' ] ) ) {
if ( ! isset ( $_REQUEST [ 'key' ] ) ) {
return ;
}
if ( ! isset ( $_REQUEST [ 'f' ] ) || ( '' === $_REQUEST [ 'f' ] ) ) {
return ;
}
if ( ! $this -> isValidAuth ( $_REQUEST [ 'key' ] ) ) {
return ;
}
if ( 'dl' === $_REQUEST [ 'cloneFunc' ] ) {
$this -> uploadFile ( $_REQUEST [ 'f' ] );
exit ;
2020-03-26 14:11:33 +00:00
} elseif ( 'deleteCloneBackup' === $_POST [ 'cloneFunc' ] ) {
2015-10-15 22:52:37 +10:00
$dirs = MainWP_Helper :: getMainWPDir ( 'backup' );
$backupdir = $dirs [ 0 ];
$result = glob ( $backupdir . $_POST [ 'f' ] );
if ( 0 === count ( $result ) ) {
return ;
}
@ unlink ( $result [ 0 ] );
MainWP_Helper :: write ( array ( 'result' => 'ok' ) );
2020-03-26 14:11:33 +00:00
} elseif ( 'createCloneBackupPoll' === $_POST [ 'cloneFunc' ] ) {
2015-10-15 22:52:37 +10:00
$dirs = MainWP_Helper :: getMainWPDir ( 'backup' );
$backupdir = $dirs [ 0 ];
$result = glob ( $backupdir . 'backup-' . $_POST [ 'f' ] . '-*' );
$archiveFile = false ;
foreach ( $result as $file ) {
if ( MainWP_Helper :: isArchive ( $file , 'backup-' . $_POST [ 'f' ] . '-' ) ) {
$archiveFile = $file ;
break ;
}
}
if ( false === $archiveFile ) {
return ;
}
MainWP_Helper :: write ( array ( 'size' => filesize ( $archiveFile ) ) );
2020-03-26 14:11:33 +00:00
} elseif ( 'createCloneBackup' === $_POST [ 'cloneFunc' ] ) {
2015-10-15 22:52:37 +10:00
MainWP_Helper :: endSession ();
2015-12-22 19:18:07 +01:00
$files = glob ( WP_CONTENT_DIR . '/dbBackup*.sql' );
foreach ( $files as $file ) {
@ unlink ( $file );
2015-10-15 22:52:37 +10:00
}
if ( file_exists ( ABSPATH . 'clone/config.txt' ) ) {
@ unlink ( ABSPATH . 'clone/config.txt' );
}
if ( MainWP_Helper :: is_dir_empty ( ABSPATH . 'clone' ) ) {
@ rmdir ( ABSPATH . 'clone' );
}
$wpversion = $_POST [ 'wpversion' ];
global $wp_version ;
$includeCoreFiles = ( $wpversion !== $wp_version );
$excludes = ( isset ( $_POST [ 'exclude' ] ) ? explode ( ',' , $_POST [ 'exclude' ] ) : array () );
$excludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/uploads/mainwp' ;
$uploadDir = MainWP_Helper :: getMainWPDir ();
$uploadDir = $uploadDir [ 0 ];
$excludes [] = str_replace ( ABSPATH , '' , $uploadDir );
$excludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/object-cache.php' ;
2016-08-15 20:03:58 +02:00
if ( version_compare ( phpversion (), '5.3.0' ) >= 0 || ! ini_get ( 'safe_mode' ) ) {
@ set_time_limit ( 6000 );
2015-10-15 22:52:37 +10:00
}
$newExcludes = array ();
foreach ( $excludes as $exclude ) {
$newExcludes [] = rtrim ( $exclude , '/' );
}
$method = ( ! isset ( $_POST [ 'zipmethod' ] ) ? 'tar.gz' : $_POST [ 'zipmethod' ] );
if ( 'tar.gz' === $method && ! function_exists ( 'gzopen' ) ) {
$method = 'zip' ;
}
$res = MainWP_Backup :: get () -> createFullBackup ( $newExcludes , ( isset ( $_POST [ 'f' ] ) ? $_POST [ 'f' ] : $_POST [ 'file' ] ), true , $includeCoreFiles , 0 , false , false , false , false , $method );
if ( ! $res ) {
$information [ 'backup' ] = false ;
} else {
$information [ 'backup' ] = $res [ 'file' ];
$information [ 'size' ] = $res [ 'filesize' ];
}
2020-03-26 20:01:04 +00:00
// todo: RS: Remove this when the .18 is out
2015-10-15 22:52:37 +10:00
$plugins = array ();
$dir = WP_CONTENT_DIR . '/plugins/' ;
$fh = @ opendir ( $dir );
while ( $entry = @ readdir ( $fh ) ) {
if ( ! is_dir ( $dir . $entry ) ) {
continue ;
}
if ( ( '.' === $entry ) || ( '..' === $entry ) ) {
continue ;
}
$plugins [] = $entry ;
}
@ closedir ( $fh );
$information [ 'plugins' ] = $plugins ;
$themes = array ();
$dir = WP_CONTENT_DIR . '/themes/' ;
$fh = @ opendir ( $dir );
while ( $entry = @ readdir ( $fh ) ) {
if ( ! is_dir ( $dir . $entry ) ) {
continue ;
}
if ( ( '.' === $entry ) || ( '..' === $entry ) ) {
continue ;
}
$themes [] = $entry ;
}
@ closedir ( $fh );
$information [ 'themes' ] = $themes ;
MainWP_Helper :: write ( $information );
}
}
global $wp_rewrite ;
$snPluginDir = basename ( $this -> plugin_dir );
if ( isset ( $wp_rewrite -> non_wp_rules [ 'wp-content/plugins/' . $snPluginDir . '/([^js\/]*)$' ] ) ) {
unset ( $wp_rewrite -> non_wp_rules [ 'wp-content/plugins/' . $snPluginDir . '/([^js\/]*)$' ] );
}
if ( isset ( $wp_rewrite -> non_wp_rules [ 'wp-content/plugins/' . $snPluginDir . '/(.*)$' ] ) ) {
unset ( $wp_rewrite -> non_wp_rules [ 'wp-content/plugins/' . $snPluginDir . '/(.*)$' ] );
}
if ( get_option ( 'mainwp_child_fix_htaccess' ) === false ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/misc.php' ;
2015-10-15 22:52:37 +10:00
$wp_rewrite -> flush_rules ();
MainWP_Helper :: update_option ( 'mainwp_child_fix_htaccess' , 'yes' , 'yes' );
}
$this -> update_htaccess ();
2020-03-26 20:01:04 +00:00
global $current_user ; // wp variable
// Login the user
2015-12-06 19:05:27 +01:00
if ( isset ( $_REQUEST [ 'login_required' ] ) && ( '1' === $_REQUEST [ 'login_required' ] ) && isset ( $_REQUEST [ 'user' ] ) ) {
2019-02-14 22:38:14 +07:00
$alter_login_required = false ;
2020-03-26 19:45:07 +00:00
$username = rawurldecode ( $_REQUEST [ 'user' ] );
2019-02-14 22:38:14 +07:00
2020-03-26 17:03:00 +00:00
if ( isset ( $_REQUEST [ 'alt_user' ] ) && ! empty ( $_REQUEST [ 'alt_user' ] ) ) {
2019-02-14 22:38:14 +07:00
$alter_login_required = $this -> check_login_as ( $_REQUEST [ 'alt_user' ] );
if ( $alter_login_required ) {
$username = rawurldecode ( $_REQUEST [ 'alt_user' ] );
}
}
2015-10-15 22:52:37 +10:00
if ( is_user_logged_in () ) {
global $current_user ;
if ( 10 !== $current_user -> wp_user_level && ( ! isset ( $current_user -> user_level ) || 10 !== $current_user -> user_level ) && ! current_user_can ( 'level_10' ) ) {
do_action ( 'wp_logout' );
}
}
$signature = rawurldecode ( isset ( $_REQUEST [ 'mainwpsignature' ] ) ? $_REQUEST [ 'mainwpsignature' ] : '' );
$file = '' ;
if ( isset ( $_REQUEST [ 'f' ] ) ) {
$file = $_REQUEST [ 'f' ];
2020-03-26 14:11:33 +00:00
} elseif ( isset ( $_REQUEST [ 'file' ] ) ) {
2015-10-15 22:52:37 +10:00
$file = $_REQUEST [ 'file' ];
2020-03-26 14:11:33 +00:00
} elseif ( isset ( $_REQUEST [ 'fdl' ] ) ) {
2015-10-15 22:52:37 +10:00
$file = $_REQUEST [ 'fdl' ];
}
$auth = $this -> auth ( $signature , rawurldecode ( ( isset ( $_REQUEST [ 'where' ] ) ? $_REQUEST [ 'where' ] : $file ) ), isset ( $_REQUEST [ 'nonce' ] ) ? $_REQUEST [ 'nonce' ] : '' , isset ( $_REQUEST [ 'nossl' ] ) ? $_REQUEST [ 'nossl' ] : 0 );
if ( ! $auth ) {
return ;
}
if ( ! is_user_logged_in () || $username !== $current_user -> user_login ) {
if ( ! $this -> login ( $username ) ) {
return ;
}
global $current_user ;
if ( 10 !== $current_user -> wp_user_level && ( ! isset ( $current_user -> user_level ) || 10 !== $current_user -> user_level ) && ! current_user_can ( 'level_10' ) ) {
2019-02-14 22:38:14 +07:00
// if is not alternative admin login
// it is connected admin login
if ( ! $alter_login_required ) {
// log out if connected admin is not admin level 10
do_action ( 'wp_logout' );
2015-10-15 22:52:37 +10:00
2019-02-14 22:38:14 +07:00
return ;
}
2015-10-15 22:52:37 +10:00
}
}
if ( isset ( $_REQUEST [ 'fdl' ] ) ) {
if ( stristr ( $_REQUEST [ 'fdl' ], '..' ) ) {
return ;
}
$this -> uploadFile ( $_REQUEST [ 'fdl' ], isset ( $_REQUEST [ 'foffset' ] ) ? $_REQUEST [ 'foffset' ] : 0 );
exit ;
}
$where = isset ( $_REQUEST [ 'where' ] ) ? $_REQUEST [ 'where' ] : '' ;
if ( isset ( $_POST [ 'f' ] ) || isset ( $_POST [ 'file' ] ) ) {
$file = '' ;
if ( isset ( $_POST [ 'f' ] ) ) {
$file = $_POST [ 'f' ];
2020-03-26 14:11:33 +00:00
} elseif ( isset ( $_POST [ 'file' ] ) ) {
2015-10-15 22:52:37 +10:00
$file = $_POST [ 'file' ];
}
2016-04-28 19:06:52 +02:00
$where = 'admin.php?page=mainwp_child_tab&tab=restore-clone' ;
2015-10-15 22:52:37 +10:00
if ( '' === session_id () ) {
session_start ();
}
$_SESSION [ 'file' ] = $file ;
$_SESSION [ 'size' ] = $_POST [ 'size' ];
}
2019-02-14 22:38:14 +07:00
// to support open not wp-admin url
2015-10-15 22:52:37 +10:00
$open_location = isset ( $_REQUEST [ 'open_location' ] ) ? $_REQUEST [ 'open_location' ] : '' ;
if ( ! empty ( $open_location ) ) {
$open_location = base64_decode ( $open_location );
$_vars = MainWP_Helper :: parse_query ( $open_location );
$_path = parse_url ( $open_location , PHP_URL_PATH );
if ( isset ( $_vars [ '_mwpNoneName' ] ) && isset ( $_vars [ '_mwpNoneValue' ] ) ) {
$_vars [ $_vars [ '_mwpNoneName' ] ] = wp_create_nonce ( $_vars [ '_mwpNoneValue' ] );
unset ( $_vars [ '_mwpNoneName' ] );
unset ( $_vars [ '_mwpNoneValue' ] );
$open_url = '' ;
foreach ( $_vars as $key => $value ) {
$open_url .= $key . '=' . $value . '&' ;
}
$open_url = rtrim ( $open_url , '&' );
$open_location = '/wp-admin/' . $_path . '?' . $open_url ;
} else {
if ( strpos ( $open_location , 'nonce=child_temp_nonce' ) !== false ) {
$open_location = str_replace ( 'nonce=child_temp_nonce' , 'nonce=' . wp_create_nonce ( 'wp-ajax' ), $open_location );
}
}
wp_redirect ( site_url () . $open_location );
exit ();
}
wp_redirect ( admin_url ( $where ) );
exit ();
}
/**
* Security
*/
MainWP_Security :: fixAll ();
2016-03-15 20:54:21 +01:00
MainWP_Debug :: process ( $this );
2015-10-15 22:52:37 +10:00
2020-03-26 20:01:04 +00:00
// Register does not require auth, so we register here..
2015-10-15 22:52:37 +10:00
if ( isset ( $_POST [ 'function' ] ) && 'register' === $_POST [ 'function' ] ) {
2016-02-17 20:38:44 +01:00
define ( 'DOING_CRON' , true );
2020-03-26 14:05:04 +00:00
self :: fix_for_custom_themes ();
2015-10-15 22:52:37 +10:00
$this -> registerSite ();
}
$auth = $this -> auth ( isset ( $_POST [ 'mainwpsignature' ] ) ? $_POST [ 'mainwpsignature' ] : '' , isset ( $_POST [ 'function' ] ) ? $_POST [ 'function' ] : '' , isset ( $_POST [ 'nonce' ] ) ? $_POST [ 'nonce' ] : '' , isset ( $_POST [ 'nossl' ] ) ? $_POST [ 'nossl' ] : 0 );
if ( ! $auth && isset ( $_POST [ 'mainwpsignature' ] ) ) {
2019-11-11 23:17:10 +07:00
MainWP_Helper :: error ( __ ( 'Authentication failed! Please deactivate & re-activate the MainWP Child plugin on this site and try again.' , 'mainwp-child' ) );
2015-10-15 22:52:37 +10:00
}
if ( ! $auth && isset ( $_POST [ 'function' ] ) && isset ( $this -> callableFunctions [ $_POST [ 'function' ] ] ) && ! isset ( $this -> callableFunctionsNoAuth [ $_POST [ 'function' ] ] ) ) {
2019-11-11 23:17:10 +07:00
MainWP_Helper :: error ( __ ( 'Authentication failed! Please deactivate & re-activate the MainWP Child plugin on this site and try again.' , 'mainwp-child' ) );
2015-10-15 22:52:37 +10:00
}
2019-02-14 22:38:14 +07:00
$auth_user = false ;
2015-10-15 22:52:37 +10:00
if ( $auth ) {
2020-03-26 20:01:04 +00:00
// Check if the user exists & is an administrator
2015-10-15 22:52:37 +10:00
if ( isset ( $_POST [ 'function' ] ) && isset ( $_POST [ 'user' ] ) ) {
2019-02-14 22:38:14 +07:00
$user = null ;
2020-03-26 17:03:00 +00:00
if ( isset ( $_POST [ 'alt_user' ] ) && ! empty ( $_POST [ 'alt_user' ] ) ) {
2019-02-14 22:38:14 +07:00
if ( $this -> check_login_as ( $_POST [ 'alt_user' ] ) ) {
$auth_user = $_POST [ 'alt_user' ];
2020-03-26 19:45:07 +00:00
$user = get_user_by ( 'login' , $auth_user );
2019-02-14 22:38:14 +07:00
}
}
// if alternative admin not existed
if ( ! $user ) {
// check connected admin existed
2020-03-26 19:45:07 +00:00
$user = get_user_by ( 'login' , $_POST [ 'user' ] );
2019-02-14 22:38:14 +07:00
$auth_user = $_POST [ 'user' ];
}
2015-10-15 22:52:37 +10:00
if ( ! $user ) {
2019-11-11 23:17:10 +07:00
MainWP_Helper :: error ( __ ( 'Unexising administrator username. Please verify that it is an existing administrator.' , 'mainwp-child' ) );
2015-10-15 22:52:37 +10:00
}
2016-04-27 19:25:53 +02:00
if ( 10 != $user -> wp_user_level && ( ! isset ( $user -> user_level ) || 10 != $user -> user_level ) && ! $user -> has_cap ( 'level_10' ) ) {
2019-11-11 23:17:10 +07:00
MainWP_Helper :: error ( __ ( 'Invalid user. Please verify that the user has administrator privileges.' , 'mainwp-child' ) );
2015-10-15 22:52:37 +10:00
}
2019-02-14 22:38:14 +07:00
$this -> login ( $auth_user );
2015-10-15 22:52:37 +10:00
}
if ( isset ( $_POST [ 'function' ] ) && 'visitPermalink' === $_POST [ 'function' ] ) {
2019-02-14 22:38:14 +07:00
if ( empty ( $auth_user )) {
$auth_user = $_POST [ 'user' ];
}
if ( $this -> login ( $auth_user , true ) ) {
2015-10-15 22:52:37 +10:00
return ;
} else {
exit ();
}
}
2020-03-26 20:01:04 +00:00
// Redirect to the admin part if needed
2015-10-15 22:52:37 +10:00
if ( isset ( $_POST [ 'admin' ] ) && '1' === $_POST [ 'admin' ] ) {
wp_redirect ( get_option ( 'siteurl' ) . '/wp-admin/' );
die ();
}
}
2018-06-26 19:52:53 +02:00
// Init extensions
// Handle fatal errors for those init if needed
// OK
MainWP_Child_iThemes_Security :: Instance () -> ithemes_init ();
MainWP_Child_Updraft_Plus_Backups :: Instance () -> updraftplus_init ();
MainWP_Child_Back_Up_Wordpress :: Instance () -> init ();
MainWP_Child_WP_Rocket :: Instance () -> init ();
2018-09-27 19:52:32 +02:00
MainWP_Child_Back_WP_Up :: Instance () -> init ();
2018-06-26 19:52:53 +02:00
MainWP_Child_Back_Up_Buddy :: Instance ();
2018-09-27 19:52:32 +02:00
MainWP_Child_Wordfence :: Instance () -> wordfence_init ();
2018-06-26 19:52:53 +02:00
MainWP_Child_Timecapsule :: Instance () -> init ();
2018-09-27 19:52:32 +02:00
MainWP_Child_Staging :: Instance () -> init ();
2018-06-26 19:52:53 +02:00
MainWP_Child_Branding :: Instance () -> branding_init ();
MainWP_Client_Report :: Instance () -> creport_init ();
MainWP_Child_Pagespeed :: Instance () -> init ();
MainWP_Child_Links_Checker :: Instance () -> init ();
2019-08-26 23:29:16 +07:00
MainWP_Child_WPvivid_BackupRestore :: Instance () -> init ();
2016-10-26 21:30:52 +02:00
global $_wp_submenu_nopriv ;
2020-03-26 14:11:33 +00:00
if ( $_wp_submenu_nopriv === null ) {
2016-10-26 21:30:52 +02:00
$_wp_submenu_nopriv = array (); // fix warning
2020-03-26 14:11:33 +00:00
}
2016-08-02 19:51:22 +02:00
2020-03-26 20:01:04 +00:00
// Call the function required
2015-10-15 22:52:37 +10:00
if ( $auth && isset ( $_POST [ 'function' ] ) && isset ( $this -> callableFunctions [ $_POST [ 'function' ] ] ) ) {
2016-02-17 20:38:44 +01:00
define ( 'DOING_CRON' , true );
2020-03-26 20:01:04 +00:00
// ob_start();
// require_once( ABSPATH . 'wp-admin/admin.php' );
// ob_end_clean();
2018-09-27 19:52:32 +02:00
MainWP_Helper :: handle_fatal_error ();
2020-03-26 14:05:04 +00:00
self :: fix_for_custom_themes ();
2015-10-15 22:52:37 +10:00
call_user_func ( array ( $this , $this -> callableFunctions [ $_POST [ 'function' ] ] ) );
2020-03-26 14:11:33 +00:00
} elseif ( isset ( $_POST [ 'function' ] ) && isset ( $this -> callableFunctionsNoAuth [ $_POST [ 'function' ] ] ) ) {
2016-02-17 20:38:44 +01:00
define ( 'DOING_CRON' , true );
2020-03-26 14:05:04 +00:00
self :: fix_for_custom_themes ();
2015-10-15 22:52:37 +10:00
call_user_func ( array ( $this , $this -> callableFunctionsNoAuth [ $_POST [ 'function' ] ] ) );
2020-03-26 17:03:00 +00:00
} elseif ( isset ( $_POST [ 'function' ] ) && isset ( $_POST [ 'mainwpsignature' ] ) && ! isset ( $this -> callableFunctions [ $_POST [ 'function' ] ]) && ! isset ( $this -> callableFunctionsNoAuth [ $_POST [ 'function' ] ]) ) {
2017-05-11 21:07:42 +02:00
MainWP_Helper :: error ( __ ( 'Required version has not been detected. Please, make sure that you are using the latest version of the MainWP Child plugin on your site.' , 'mainwp-child' ) );
}
2018-09-27 19:52:32 +02:00
2015-10-15 22:52:37 +10:00
if ( 1 === ( int ) get_option ( 'mainwpKeywordLinks' ) ) {
new MainWP_Keyword_Links ();
if ( ! is_admin () ) {
add_filter ( 'the_content' , array ( MainWP_Keyword_Links :: Instance (), 'filter_content' ), 100 );
}
MainWP_Keyword_Links :: Instance () -> update_htaccess (); // if needed
MainWP_Keyword_Links :: Instance () -> redirect_cloak ();
2020-03-26 14:11:33 +00:00
} elseif ( 'yes' === get_option ( 'mainwp_keyword_links_htaccess_set' ) ) {
2015-10-15 22:52:37 +10:00
MainWP_Keyword_Links :: clear_htaccess (); // force clear
}
}
2019-02-14 22:38:14 +07:00
// Check to support login by alternative admin
// return false will login by connected admin user
// return true will try to login as alternative user
function check_login_as ( $alter_login ) {
2020-03-26 17:03:00 +00:00
if ( ! empty ( $alter_login ) ) {
2019-02-14 22:38:14 +07:00
// check alternative admin existed
$user = get_user_by ( 'login' , $alter_login );
if ( ! $user ) {
2020-03-26 20:01:04 +00:00
// That administrator username was not found on this child site
2019-02-14 22:38:14 +07:00
return false ;
}
if ( 10 != $user -> wp_user_level && ( ! isset ( $user -> user_level ) || 10 != $user -> user_level ) && ! $user -> has_cap ( 'level_10' ) ) {
// That user is not an administrator
return false ;
}
return true ; // ok, will try to login by alternative user
}
return false ;
}
2015-10-15 22:52:37 +10:00
function default_option_active_plugins ( $default ) {
if ( ! is_array ( $default ) ) {
$default = array ();
}
if ( ! in_array ( 'managewp/init.php' , $default ) ) {
$default [] = 'managewp/init.php' ;
}
return $default ;
}
function auth ( $signature , $func , $nonce , $pNossl ) {
if ( ! isset ( $signature ) || ! isset ( $func ) || ( ! get_option ( 'mainwp_child_pubkey' ) && ! get_option ( 'mainwp_child_nossl_key' ) ) ) {
$auth = false ;
} else {
$nossl = get_option ( 'mainwp_child_nossl' );
$serverNoSsl = ( isset ( $pNossl ) && 1 === ( int ) $pNossl );
if ( ( 1 === ( int ) $nossl ) || $serverNoSsl ) {
2018-01-22 20:21:06 +01:00
$auth = hash_equals ( md5 ( $func . $nonce . get_option ( 'mainwp_child_nossl_key' ) ), base64_decode ( $signature ) );
2015-10-15 22:52:37 +10:00
} else {
$auth = openssl_verify ( $func . $nonce , base64_decode ( $signature ), base64_decode ( get_option ( 'mainwp_child_pubkey' ) ) );
2018-01-22 20:21:06 +01:00
if ( $auth !== 1 ) {
$auth = false ;
}
2015-10-15 22:52:37 +10:00
}
}
return $auth ;
}
2020-03-26 20:01:04 +00:00
// Login..
2015-10-15 22:52:37 +10:00
function login ( $username , $doAction = false ) {
global $current_user ;
2020-03-26 20:01:04 +00:00
// Logout if required
2015-10-15 22:52:37 +10:00
if ( isset ( $current_user -> user_login ) ) {
if ( $current_user -> user_login === $username ) {
2019-02-14 22:38:14 +07:00
// to fix issue multi user session
$user_id = wp_validate_auth_cookie ();
2020-03-26 17:03:00 +00:00
if ( $user_id && $user_id === $current_user -> ID ) {
2019-02-14 22:38:14 +07:00
return true ;
}
2015-10-15 22:52:37 +10:00
wp_set_auth_cookie ( $current_user -> ID );
return true ;
}
do_action ( 'wp_logout' );
}
$user = get_user_by ( 'login' , $username );
2020-03-26 20:01:04 +00:00
if ( $user ) { // If user exists, login
// wp_set_current_user($user->ID, $user->user_login);
// wp_set_auth_cookie($user->ID);
2015-10-15 22:52:37 +10:00
wp_set_current_user ( $user -> ID );
2019-02-14 22:38:14 +07:00
wp_set_auth_cookie ( $user -> ID );
2015-10-15 22:52:37 +10:00
if ( $doAction ) {
do_action ( 'wp_login' , $user -> user_login );
}
return ( is_user_logged_in () && $current_user -> user_login === $username );
}
return false ;
}
function noSSLFilterFunction ( $r , $url ) {
$r [ 'sslverify' ] = false ;
return $r ;
}
public function http_request_reject_unsafe_urls ( $r , $url ) {
$r [ 'reject_unsafe_urls' ] = false ;
2020-03-26 17:03:00 +00:00
if ( isset ( $_POST [ 'wpadmin_user' ]) && ! empty ( $_POST [ 'wpadmin_user' ]) && isset ( $_POST [ 'wpadmin_passwd' ]) && ! empty ( $_POST [ 'wpadmin_passwd' ]) ) {
2020-03-26 19:45:07 +00:00
$auth = base64_encode ( $_POST [ 'wpadmin_user' ] . ':' . $_POST [ 'wpadmin_passwd' ] );
2019-12-13 20:27:05 +07:00
$r [ 'headers' ][ 'Authorization' ] = " Basic $auth " ;
}
2015-10-15 22:52:37 +10:00
return $r ;
}
/**
* Functions to support core functionality
*/
function installPluginTheme () {
$wp_filesystem = $this -> getWPFilesystem ();
if ( ! isset ( $_POST [ 'type' ] ) || ! isset ( $_POST [ 'url' ] ) || ( 'plugin' !== $_POST [ 'type' ] && 'theme' !== $_POST [ 'type' ] ) || '' === $_POST [ 'url' ] ) {
2016-10-24 20:33:37 +02:00
MainWP_Helper :: error ( __ ( 'Invalid request!' , 'mainwp-child' ) );
2015-10-15 22:52:37 +10:00
}
2020-03-26 20:01:04 +00:00
// if (file_exists(ABSPATH . '/wp-admin/includes/deprecated.php')) include_once(ABSPATH . '/wp-admin/includes/deprecated.php');
2015-10-15 22:52:37 +10:00
if ( file_exists ( ABSPATH . '/wp-admin/includes/screen.php' ) ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/screen.php' ;
2015-10-15 22:52:37 +10:00
}
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/template.php' ;
include_once ABSPATH . '/wp-admin/includes/misc.php' ;
include_once ABSPATH . '/wp-admin/includes/class-wp-upgrader.php' ;
include_once ABSPATH . '/wp-admin/includes/plugin.php' ;
2015-10-15 22:52:37 +10:00
$urlgot = json_decode ( stripslashes ( $_POST [ 'url' ] ) );
$urls = array ();
if ( ! is_array ( $urlgot ) ) {
$urls [] = $urlgot ;
} else {
$urls = $urlgot ;
}
$result = array ();
foreach ( $urls as $url ) {
2020-03-26 19:45:07 +00:00
$installer = new WP_Upgrader ();
2016-01-18 19:40:51 +01:00
$ssl_verify = true ;
2020-03-26 20:01:04 +00:00
// @see wp-admin/includes/class-wp-upgrader.php
2015-10-15 22:52:37 +10:00
if ( isset ( $_POST [ 'sslVerify' ] ) && '0' === $_POST [ 'sslVerify' ] ) {
add_filter ( 'http_request_args' , array ( & $this , 'noSSLFilterFunction' ), 99 , 2 );
2016-01-18 19:40:51 +01:00
$ssl_verify = false ;
2015-10-15 22:52:37 +10:00
}
add_filter ( 'http_request_args' , array ( & $this , 'http_request_reject_unsafe_urls' ), 99 , 2 );
$result = $installer -> run ( array (
'package' => $url ,
'destination' => ( 'plugin' === $_POST [ 'type' ] ? WP_PLUGIN_DIR
: WP_CONTENT_DIR . '/themes' ),
'clear_destination' => ( isset ( $_POST [ 'overwrite' ] ) && $_POST [ 'overwrite' ] ),
2020-03-26 20:01:04 +00:00
// overwrite files?
2015-10-15 22:52:37 +10:00
'clear_working' => true ,
'hook_extra' => array (),
) );
if ( is_wp_error ( $result ) ) {
2016-01-18 19:40:51 +01:00
if ( true == $ssl_verify && strpos ( $url , 'https://' ) === 0 ) {
// retry
add_filter ( 'http_request_args' , array ( & $this , 'noSSLFilterFunction' ), 99 , 2 );
$ssl_verify = false ;
2020-03-26 19:45:07 +00:00
$result = $installer -> run ( array (
2016-01-18 19:40:51 +01:00
'package' => $url ,
'destination' => ( 'plugin' === $_POST [ 'type' ] ? WP_PLUGIN_DIR
: WP_CONTENT_DIR . '/themes' ),
'clear_destination' => ( isset ( $_POST [ 'overwrite' ] ) && $_POST [ 'overwrite' ] ),
2020-03-26 20:01:04 +00:00
// overwrite files?
2016-01-18 19:40:51 +01:00
'clear_working' => true ,
'hook_extra' => array (),
) );
2015-10-15 22:52:37 +10:00
}
2016-01-18 19:40:51 +01:00
if ( is_wp_error ( $result ) ) {
2016-02-15 22:08:39 +01:00
$err_code = $result -> get_error_code ();
2016-01-18 19:40:51 +01:00
if ( $result -> get_error_data () && is_string ( $result -> get_error_data () ) ) {
$error = $result -> get_error_data ();
2016-02-15 22:08:39 +01:00
MainWP_Helper :: error ( $error , $err_code );
2016-01-18 19:40:51 +01:00
} else {
2016-02-15 22:08:39 +01:00
MainWP_Helper :: error ( implode ( ', ' , $error ), $err_code );
2016-01-18 19:40:51 +01:00
}
}
}
remove_filter ( 'http_request_args' , array ( & $this , 'http_request_reject_unsafe_urls' ), 99 , 2 );
if ( false == $ssl_verify ) {
remove_filter ( 'http_request_args' , array ( & $this , 'noSSLFilterFunction' ), 99 );
2015-10-15 22:52:37 +10:00
}
2020-03-26 15:29:54 +00:00
$args = array (
'success' => 1 ,
'action' => 'install' ,
);
2015-10-15 22:52:37 +10:00
if ( 'plugin' === $_POST [ 'type' ] ) {
$path = $result [ 'destination' ];
$fileName = '' ;
$rslt = null ;
wp_cache_set ( 'plugins' , array (), 'plugins' );
foreach ( $result [ 'source_files' ] as $srcFile ) {
if ( is_dir ( $path . $srcFile ) ) {
continue ;
}
$thePlugin = get_plugin_data ( $path . $srcFile );
if ( null !== $thePlugin && '' !== $thePlugin && '' !== $thePlugin [ 'Name' ] ) {
$args [ 'type' ] = 'plugin' ;
$args [ 'Name' ] = $thePlugin [ 'Name' ];
$args [ 'Version' ] = $thePlugin [ 'Version' ];
$args [ 'slug' ] = $result [ 'destination_name' ] . '/' . $srcFile ;
$fileName = $srcFile ;
break ;
}
}
if ( ! empty ( $fileName ) ) {
do_action ( 'mainwp_child_installPluginTheme' , $args );
if ( isset ( $_POST [ 'activatePlugin' ] ) && 'yes' === $_POST [ 'activatePlugin' ] ) {
2017-12-04 21:55:05 +01:00
// to fix activate issue
if ( 'quotes-collection/quotes-collection.php' == $args [ 'slug' ]) {
activate_plugin ( $path . $fileName , '' , false , true );
2018-09-27 19:52:32 +02:00
} else {
2017-12-04 21:55:05 +01:00
activate_plugin ( $path . $fileName , '' /* false, true */ );
}
2020-03-26 20:01:04 +00:00
// do_action( 'activate_plugin', $args['slug'], null );
2015-10-15 22:52:37 +10:00
}
}
} else {
$args [ 'type' ] = 'theme' ;
$args [ 'slug' ] = $result [ 'destination_name' ];
do_action ( 'mainwp_child_installPluginTheme' , $args );
}
2020-03-26 20:01:04 +00:00
// if ($_POST['type'] == 'plugin' && isset($_POST['activatePlugin']) && $_POST['activatePlugin'] == 'yes')
// {
// $path = $result['destination'];
// $rslt = null;
// wp_cache_set('plugins', array(), 'plugins');
// foreach ($result['source_files'] as $srcFile)
// {
// if (is_dir($path . $srcFile)) continue;
2015-10-15 22:52:37 +10:00
//
2020-03-26 20:01:04 +00:00
// $thePlugin = get_plugin_data($path . $srcFile);
// if ($thePlugin != null && $thePlugin != '' && $thePlugin['Name'] != '')
// {
// activate_plugin($path . $srcFile, '', false, true);
2015-10-15 22:52:37 +10:00
//
2020-03-26 20:01:04 +00:00
// }
// }
// }
2015-10-15 22:52:37 +10:00
}
$information [ 'installation' ] = 'SUCCESS' ;
$information [ 'destination_name' ] = $result [ 'destination_name' ];
MainWP_Helper :: write ( $information );
}
2020-03-26 20:01:04 +00:00
// This will upgrade WP
2015-10-15 22:52:37 +10:00
function upgradeWP () {
global $wp_version ;
$wp_filesystem = $this -> getWPFilesystem ();
$information = array ();
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/update.php' ;
include_once ABSPATH . '/wp-admin/includes/class-wp-upgrader.php' ;
2020-03-26 20:01:04 +00:00
// if (file_exists(ABSPATH . '/wp-admin/includes/deprecated.php')) include_once(ABSPATH . '/wp-admin/includes/deprecated.php');
2015-10-15 22:52:37 +10:00
if ( file_exists ( ABSPATH . '/wp-admin/includes/screen.php' ) ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/screen.php' ;
2015-10-15 22:52:37 +10:00
}
if ( file_exists ( ABSPATH . '/wp-admin/includes/template.php' ) ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/template.php' ;
2015-10-15 22:52:37 +10:00
}
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/file.php' ;
include_once ABSPATH . '/wp-admin/includes/misc.php' ;
2015-10-15 22:52:37 +10:00
if ( null !== $this -> filterFunction ) {
add_filter ( 'pre_site_transient_update_core' , $this -> filterFunction , 99 );
}
if ( null !== $this -> filterFunction ) {
add_filter ( 'pre_transient_update_core' , $this -> filterFunction , 99 );
}
2020-03-26 20:01:04 +00:00
// Check for new versions
2015-10-15 22:52:37 +10:00
@ wp_version_check ();
$core_updates = get_core_updates ();
2017-05-11 21:07:42 +02:00
if ( is_array ( $core_updates ) && count ( $core_updates ) > 0 ) {
2015-10-15 22:52:37 +10:00
foreach ( $core_updates as $core_update ) {
if ( 'latest' === $core_update -> response ) {
$information [ 'upgrade' ] = 'SUCCESS' ;
2020-03-26 14:11:33 +00:00
} elseif ( 'upgrade' === $core_update -> response && $core_update -> locale === get_locale () && version_compare ( $wp_version , $core_update -> current , '<=' ) ) {
2020-03-26 20:01:04 +00:00
// Upgrade!
2015-10-15 22:52:37 +10:00
$upgrade = false ;
if ( class_exists ( 'Core_Upgrader' ) ) {
$core = new Core_Upgrader ();
$upgrade = $core -> upgrade ( $core_update );
}
2020-03-26 20:01:04 +00:00
// If this does not work - add code from /wp-admin/includes/class-wp-upgrader.php in the newer versions
// So users can upgrade older versions too.
// 3rd option: 'wp_update_core'
2015-10-15 22:52:37 +10:00
if ( ! is_wp_error ( $upgrade ) ) {
$information [ 'upgrade' ] = 'SUCCESS' ;
} else {
$information [ 'upgrade' ] = 'WPERROR' ;
}
break ;
}
}
if ( ! isset ( $information [ 'upgrade' ] ) ) {
foreach ( $core_updates as $core_update ) {
if ( 'upgrade' === $core_update -> response && version_compare ( $wp_version , $core_update -> current , '<=' ) ) {
2020-03-26 20:01:04 +00:00
// Upgrade!
2015-10-15 22:52:37 +10:00
$upgrade = false ;
if ( class_exists ( 'Core_Upgrader' ) ) {
$core = new Core_Upgrader ();
$upgrade = $core -> upgrade ( $core_update );
}
2020-03-26 20:01:04 +00:00
// If this does not work - add code from /wp-admin/includes/class-wp-upgrader.php in the newer versions
// So users can upgrade older versions too.
// 3rd option: 'wp_update_core'
2015-10-15 22:52:37 +10:00
if ( ! is_wp_error ( $upgrade ) ) {
$information [ 'upgrade' ] = 'SUCCESS' ;
} else {
$information [ 'upgrade' ] = 'WPERROR' ;
}
break ;
}
}
}
} else {
$information [ 'upgrade' ] = 'NORESPONSE' ;
}
if ( null !== $this -> filterFunction ) {
remove_filter ( 'pre_site_transient_update_core' , $this -> filterFunction , 99 );
}
if ( null !== $this -> filterFunction ) {
remove_filter ( 'pre_transient_update_core' , $this -> filterFunction , 99 );
}
MainWP_Helper :: write ( $information );
}
2016-02-15 22:08:39 +01:00
function upgradeTranslation () {
2020-03-26 20:01:04 +00:00
// Prevent disable/re-enable at upgrade
2016-02-15 22:08:39 +01:00
define ( 'DOING_CRON' , true );
MainWP_Helper :: getWPFilesystem ();
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/class-wp-upgrader.php' ;
2016-02-15 22:08:39 +01:00
if ( file_exists ( ABSPATH . '/wp-admin/includes/screen.php' ) ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/screen.php' ;
2016-02-15 22:08:39 +01:00
}
if ( file_exists ( ABSPATH . '/wp-admin/includes/template.php' ) ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/template.php' ;
2016-02-15 22:08:39 +01:00
}
if ( file_exists ( ABSPATH . '/wp-admin/includes/misc.php' ) ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/misc.php' ;
2016-02-15 22:08:39 +01:00
}
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/file.php' ;
2016-02-15 22:08:39 +01:00
2020-03-26 14:11:33 +00:00
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' ;
2016-02-15 22:08:39 +01:00
2018-09-27 19:52:32 +02:00
// to fix
@ wp_version_check ();
@ wp_update_themes ();
@ wp_update_plugins ();
2020-03-26 19:45:07 +00:00
$upgrader = new Language_Pack_Upgrader ( new Language_Pack_Upgrader_Skin ( compact ( 'url' , 'nonce' , 'title' , 'context' ) ) );
$translations = explode ( ',' , urldecode ( $_POST [ 'list' ] ) );
2016-02-15 22:08:39 +01:00
$all_language_updates = wp_get_translation_updates ();
$language_updates = array ();
foreach ( $all_language_updates as $current_language_update ) {
if ( in_array ( $current_language_update -> slug , $translations ) ) {
$language_updates [] = $current_language_update ;
}
}
$result = count ( $language_updates ) == 0 ? false : $upgrader -> bulk_upgrade ( $language_updates );
if ( ! empty ( $result ) ) {
for ( $i = 0 ; $i < count ( $result ); $i ++ ) {
2020-03-26 15:29:54 +00:00
if ( empty ( $result [ $i ] ) || is_wp_error ( $result [ $i ] ) ) {
$information [ 'upgrades' ][ $language_updates [ $i ] -> slug ] = false ;
2016-02-15 22:08:39 +01:00
} else {
2020-03-26 15:29:54 +00:00
$information [ 'upgrades' ][ $language_updates [ $i ] -> slug ] = true ;
2016-02-15 22:08:39 +01:00
}
}
} else {
2020-03-26 20:01:04 +00:00
// MainWP_Helper::error( __( 'Invalid request!', 'mainwp-child' ) );
2019-08-26 23:29:16 +07:00
$information [ 'upgrades' ] = array (); // to fix error message when translations updated
2016-02-15 22:08:39 +01:00
}
$information [ 'sync' ] = $this -> getSiteStats ( array (), false );
MainWP_Helper :: write ( $information );
}
2015-10-15 22:52:37 +10:00
/**
* Expects $_POST [ 'type' ] == plugin / theme
* $_POST [ 'list' ] == 'theme1,theme2' or 'plugin1,plugin2'
*/
function upgradePluginTheme () {
2020-03-26 20:01:04 +00:00
// Prevent disable/re-enable at upgrade
2020-03-26 17:03:00 +00:00
if ( ! defined ( 'DOING_CRON' ) ) {
2017-05-11 21:07:42 +02:00
define ( 'DOING_CRON' , true );
2020-03-26 14:11:33 +00:00
}
2015-10-15 22:52:37 +10:00
MainWP_Helper :: getWPFilesystem ();
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/class-wp-upgrader.php' ;
2020-03-26 20:01:04 +00:00
// if (file_exists(ABSPATH . '/wp-admin/includes/deprecated.php')) include_once(ABSPATH . '/wp-admin/includes/deprecated.php');
2015-10-15 22:52:37 +10:00
if ( file_exists ( ABSPATH . '/wp-admin/includes/screen.php' ) ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/screen.php' ;
2015-10-15 22:52:37 +10:00
}
if ( file_exists ( ABSPATH . '/wp-admin/includes/template.php' ) ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/template.php' ;
2015-10-15 22:52:37 +10:00
}
if ( file_exists ( ABSPATH . '/wp-admin/includes/misc.php' ) ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/misc.php' ;
2015-10-15 22:52:37 +10:00
}
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/file.php' ;
include_once ABSPATH . '/wp-admin/includes/plugin.php' ;
include_once ABSPATH . '/wp-admin/includes/plugin-install.php' ;
2018-09-27 19:52:32 +02:00
2015-10-15 22:52:37 +10:00
$information = array ();
$information [ 'upgrades' ] = array ();
$mwp_premium_updates_todo = array ();
$mwp_premium_updates_todo_slugs = array ();
if ( isset ( $_POST [ 'type' ] ) && 'plugin' === $_POST [ 'type' ] ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/update.php' ;
2015-10-15 22:52:37 +10:00
if ( null !== $this -> filterFunction ) {
2020-03-26 20:01:04 +00:00
// ET_Automatic_Updates
2015-10-15 22:52:37 +10:00
add_filter ( 'pre_site_transient_update_plugins' , $this -> filterFunction , 99 );
}
2018-11-14 21:33:36 +07:00
$plugins = explode ( ',' , urldecode ( $_POST [ 'list' ] ) );
2015-10-15 22:52:37 +10:00
// To fix: backupbuddy update
if ( in_array ( 'backupbuddy/backupbuddy.php' , $plugins ) ) {
if ( isset ( $GLOBALS [ 'ithemes_updater_path' ] ) ) {
if ( ! class_exists ( 'Ithemes_Updater_Settings' ) ) {
2020-03-26 14:11:33 +00:00
require $GLOBALS [ 'ithemes_updater_path' ] . '/settings.php' ;
2015-10-15 22:52:37 +10:00
}
if ( class_exists ( 'Ithemes_Updater_Settings' ) ) {
$ithemes_updater = new Ithemes_Updater_Settings ();
$ithemes_updater -> update ();
}
}
}
2016-03-15 20:54:21 +01:00
// to fix: smart-manager-for-wp-e-commerce update
if ( in_array ( 'smart-manager-for-wp-e-commerce/smart-manager.php' , $plugins )) {
if ( file_exists ( plugin_dir_path ( __FILE__ ) . '../../smart-manager-for-wp-e-commerce/pro/upgrade.php' ) && file_exists ( plugin_dir_path ( __FILE__ ) . '../../smart-manager-for-wp-e-commerce/smart-manager.php' )) {
include_once plugin_dir_path ( __FILE__ ) . '../../smart-manager-for-wp-e-commerce/smart-manager.php' ;
2020-03-26 14:11:33 +00:00
include_once plugin_dir_path ( __FILE__ ) . '../../smart-manager-for-wp-e-commerce/pro/upgrade.php' ;
2016-03-15 20:54:21 +01:00
}
}
2015-10-15 22:52:37 +10:00
global $wp_current_filter ;
$wp_current_filter [] = 'load-plugins.php' ;
@ wp_update_plugins ();
2018-09-27 19:52:32 +02:00
2018-06-26 19:52:53 +02:00
// trick to prevent some premium plugins re-create update info
remove_all_filters ( 'pre_set_site_transient_update_plugins' );
2018-09-27 19:52:32 +02:00
2019-02-14 22:38:14 +07:00
// to support cached premium plugins update info, hooking in the bulk_upgrade()
2018-11-14 21:33:36 +07:00
add_filter ( 'pre_site_transient_update_plugins' , array ( $this , 'set_cached_update_plugins' ) );
2015-10-15 22:52:37 +10:00
$information [ 'plugin_updates' ] = get_plugin_updates ();
$plugins = explode ( ',' , urldecode ( $_POST [ 'list' ] ) );
$premiumPlugins = array ();
$premiumUpdates = get_option ( 'mainwp_premium_updates' );
if ( is_array ( $premiumUpdates ) ) {
$newPlugins = array ();
foreach ( $plugins as $plugin ) {
if ( in_array ( $plugin , $premiumUpdates ) ) {
$premiumPlugins [] = $plugin ;
} else {
$newPlugins [] = $plugin ;
}
}
$plugins = $newPlugins ;
}
if ( count ( $plugins ) > 0 ) {
2020-03-26 20:01:04 +00:00
// @see wp-admin/update.php
2017-05-11 21:07:42 +02:00
$failed = true ;
2018-09-27 19:52:32 +02:00
// to fix update of Yithemes premiums plugins that hooked to upgrader_pre_download
2020-03-26 19:45:07 +00:00
$url = 'update.php?action=update-selected&plugins=' . urlencode ( implode ( ',' , $plugins ));
2018-09-27 19:52:32 +02:00
$nonce = 'bulk-update-plugins' ;
2017-07-11 14:10:22 +02:00
$upgrader = new Plugin_Upgrader ( new Bulk_Plugin_Upgrader_Skin ( compact ( 'nonce' , 'url' ) ) );
$result = $upgrader -> bulk_upgrade ( $plugins );
if ( ! empty ( $result ) ) {
foreach ( $result as $plugin => $info ) {
if ( empty ( $info ) ) {
2018-09-27 19:52:32 +02:00
2017-07-11 14:10:22 +02:00
$information [ 'upgrades' ][ $plugin ] = false ;
2018-09-27 19:52:32 +02:00
// try to fix if that is premiums update
$api = apply_filters ( 'plugins_api' , false , 'plugin_information' , array ( 'slug' => $plugin ) );
2020-03-26 17:03:00 +00:00
if ( ! is_wp_error ( $api ) && ! empty ( $api )) {
2018-09-27 19:52:32 +02:00
if ( isset ( $api -> download_link ) ) {
$res = $upgrader -> install ( $api -> download_link );
2020-03-26 17:03:00 +00:00
if ( ! is_wp_error ( $res ) && ! ( is_null ( $res ) ) ) {
2018-09-27 19:52:32 +02:00
$information [ 'upgrades' ][ $plugin ] = true ;
}
}
}
2017-07-11 14:10:22 +02:00
} else {
$information [ 'upgrades' ][ $plugin ] = true ;
// to fix logging update
2020-03-26 20:01:04 +00:00
// if (isset($information['plugin_updates']) && isset($information['plugin_updates'][$plugin])) {
// $plugin_info = $information['plugin_updates'][$plugin];
// $args = array();
// $args['type'] = 'plugin';
// $args['slug'] = $plugin;
// $args['name'] = $plugin_info->Name;
// $args['version'] = $plugin_info->update->new_version;
// $args['old_version'] = $plugin_info->Version;
// $args['action'] = 'update';
// do_action( 'mainwp_child_upgradePluginTheme', $args );
// }
2017-05-11 21:07:42 +02:00
}
}
2017-07-11 14:10:22 +02:00
$failed = false ;
2017-05-11 21:07:42 +02:00
}
2017-07-11 14:10:22 +02:00
2017-05-11 21:07:42 +02:00
if ( $failed ) {
MainWP_Helper :: error ( __ ( 'Invalid request!' , 'mainwp-child' ) );
}
2015-10-15 22:52:37 +10:00
}
2018-11-14 21:33:36 +07:00
remove_filter ( 'pre_site_transient_update_plugins' , array ( $this , 'set_cached_update_plugins' ), 10 );
delete_site_transient ( 'mainwp_update_plugins_cached' ); // to fix cached update info
2015-10-15 22:52:37 +10:00
if ( count ( $premiumPlugins ) > 0 ) {
$mwp_premium_updates = apply_filters ( 'mwp_premium_perform_update' , array () );
if ( is_array ( $mwp_premium_updates ) && is_array ( $premiumPlugins ) ) {
foreach ( $premiumPlugins as $premiumPlugin ) {
foreach ( $mwp_premium_updates as $key => $update ) {
$slug = ( isset ( $update [ 'slug' ] ) ? $update [ 'slug' ] : $update [ 'Name' ] );
if ( 0 === strcmp ( $slug , $premiumPlugin ) ) {
$mwp_premium_updates_todo [ $key ] = $update ;
$mwp_premium_updates_todo_slugs [] = $premiumPlugin ;
}
}
}
}
unset ( $mwp_premium_updates );
$premiumUpgrader = new Plugin_Upgrader ( new Bulk_Plugin_Upgrader_Skin ( compact ( 'nonce' , 'url' ) ) );
}
if ( count ( $plugins ) <= 0 && count ( $premiumPlugins ) <= 0 ) {
2016-10-24 20:33:37 +02:00
MainWP_Helper :: error ( __ ( 'Invalid request!' , 'mainwp-child' ) );
2015-10-15 22:52:37 +10:00
}
if ( null !== $this -> filterFunction ) {
remove_filter ( 'pre_site_transient_update_plugins' , $this -> filterFunction , 99 );
}
2020-03-26 14:11:33 +00:00
} elseif ( isset ( $_POST [ 'type' ] ) && 'theme' === $_POST [ 'type' ] ) {
2016-02-15 22:08:39 +01:00
$last_update = get_site_transient ( 'update_themes' );
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/update.php' ;
2015-10-15 22:52:37 +10:00
if ( null !== $this -> filterFunction ) {
add_filter ( 'pre_site_transient_update_themes' , $this -> filterFunction , 99 );
}
2016-02-15 22:08:39 +01:00
2020-03-26 20:01:04 +00:00
// $last_update = get_site_transient( 'update_themes' );
// $originalLastChecked = !empty( $last_update ) && property_exists( $last_update, 'last_checked' ) ? $last_update->last_checked : 0;
2016-02-15 22:08:39 +01:00
2015-10-15 22:52:37 +10:00
@ wp_update_themes ();
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/theme.php' ;
2019-02-14 22:38:14 +07:00
// to support cached premium themes update info, hooking in the bulk_upgrade()
add_filter ( 'pre_site_transient_update_themes' , array ( $this , 'set_cached_update_themes' ) );
2015-10-15 22:52:37 +10:00
$information [ 'theme_updates' ] = $this -> upgrade_get_theme_updates ();
$themes = explode ( ',' , $_POST [ 'list' ] );
$premiumThemes = array ();
$premiumUpdates = get_option ( 'mainwp_premium_updates' );
if ( is_array ( $premiumUpdates ) ) {
$newThemes = array ();
foreach ( $themes as $theme ) {
if ( in_array ( $theme , $premiumUpdates ) ) {
$premiumThemes [] = $theme ;
} else {
$newThemes [] = $theme ;
}
}
$themes = $newThemes ;
}
if ( count ( $themes ) > 0 ) {
// To fix: optimizePressTheme update
$addFilterToFixUpdate_optimizePressTheme = false ;
if ( in_array ( 'optimizePressTheme' , $themes ) ) {
$addFilterToFixUpdate_optimizePressTheme = true ;
add_filter ( 'site_transient_update_themes' , array ( $this , 'hookFixOptimizePressThemeUpdate' ), 99 );
}
2020-03-26 20:01:04 +00:00
// @see wp-admin/update.php
2016-02-15 22:08:39 +01:00
if ( null !== $this -> filterFunction ) {
remove_filter ( 'pre_site_transient_update_plugins' , $this -> filterFunction , 99 );
}
$last_update2 = get_site_transient ( 'update_themes' );
set_site_transient ( 'update_themes' , $last_update );
2020-03-26 20:01:04 +00:00
// if ( !empty( $last_update ) && property_exists( $last_update, 'last_checked' ) ) {
// $last_update->last_checked = $originalLastChecked;
// set_site_transient( 'update_themes', $last_update );
// }
2016-02-15 22:08:39 +01:00
2020-03-26 20:01:04 +00:00
// @wp_update_themes();
2020-03-26 19:45:07 +00:00
$failed = true ;
2017-07-11 14:10:22 +02:00
$upgrader = new Theme_Upgrader ( new Bulk_Theme_Upgrader_Skin ( compact ( 'nonce' , 'url' ) ) );
$result = $upgrader -> bulk_upgrade ( $themes );
if ( ! empty ( $result ) ) {
foreach ( $result as $theme => $info ) {
if ( empty ( $info ) ) {
$information [ 'upgrades' ][ $theme ] = false ;
} else {
$information [ 'upgrades' ][ $theme ] = true ;
// to fix logging update
2020-03-26 20:01:04 +00:00
// if (isset($information['theme_updates']) && isset($information['theme_updates'][$theme])) {
// $theme_info = $information['theme_updates'][$theme];
// $args = array();
// $args['type'] = 'theme';
// $args['slug'] = $theme;
// $args['name'] = $theme_info['Name'];
// $args['version'] = $theme_info['update']['new_version'];
// $args['old_version'] = $theme_info['Version'];
// $args['action'] = 'update';
// do_action( 'mainwp_child_upgradePluginTheme', $args );
// }
2017-07-11 14:10:22 +02:00
2017-05-11 21:07:42 +02:00
}
}
2017-07-11 14:10:22 +02:00
$failed = false ;
2017-05-11 21:07:42 +02:00
}
2017-07-11 14:10:22 +02:00
2017-05-11 21:07:42 +02:00
if ( $failed ) {
MainWP_Helper :: error ( __ ( 'Invalid request!' , 'mainwp-child' ) );
}
2016-02-15 22:08:39 +01:00
if ( null !== $this -> filterFunction ) {
add_filter ( 'pre_site_transient_update_themes' , $this -> filterFunction , 99 );
}
set_site_transient ( 'update_themes' , $last_update2 );
2015-10-15 22:52:37 +10:00
if ( $addFilterToFixUpdate_optimizePressTheme ) {
remove_filter ( 'site_transient_update_themes' , array (
$this ,
'hookFixOptimizePressThemeUpdate' ,
), 99 );
}
}
2016-02-15 22:08:39 +01:00
2019-02-14 22:38:14 +07:00
remove_filter ( 'pre_site_transient_update_themes' , array ( $this , 'set_cached_update_themes' ), 10 );
delete_site_transient ( 'mainwp_update_themes_cached' ); // to fix cached update info
2020-03-26 20:01:04 +00:00
// $last_update = get_site_transient( 'update_themes' );
// if ( !empty( $last_update ) && property_exists( $last_update, 'last_checked' ) ) {
// $last_update->last_checked = $originalLastChecked;
// set_site_transient( 'update_themes', $last_update );
// }
2019-02-14 22:38:14 +07:00
2020-03-26 20:01:04 +00:00
// @wp_update_themes();
2016-02-15 22:08:39 +01:00
2015-10-15 22:52:37 +10:00
if ( count ( $premiumThemes ) > 0 ) {
$mwp_premium_updates = apply_filters ( 'mwp_premium_perform_update' , array () );
$mwp_premium_updates_todo = array ();
$mwp_premium_updates_todo_slugs = array ();
if ( is_array ( $premiumThemes ) && is_array ( $mwp_premium_updates ) ) {
foreach ( $premiumThemes as $premiumTheme ) {
foreach ( $mwp_premium_updates as $key => $update ) {
$slug = ( isset ( $update [ 'slug' ] ) ? $update [ 'slug' ] : $update [ 'Name' ] );
if ( 0 === strcmp ( $slug , $premiumTheme ) ) {
$mwp_premium_updates_todo [ $key ] = $update ;
$mwp_premium_updates_todo_slugs [] = $slug ;
}
}
}
}
unset ( $mwp_premium_updates );
$premiumUpgrader = new Theme_Upgrader ( new Bulk_Theme_Upgrader_Skin ( compact ( 'nonce' , 'url' ) ) );
}
if ( count ( $themes ) <= 0 && count ( $premiumThemes ) <= 0 ) {
2016-10-24 20:33:37 +02:00
MainWP_Helper :: error ( __ ( 'Invalid request!' , 'mainwp-child' ) );
2015-10-15 22:52:37 +10:00
}
if ( null !== $this -> filterFunction ) {
remove_filter ( 'pre_site_transient_update_themes' , $this -> filterFunction , 99 );
}
} else {
2016-10-24 20:33:37 +02:00
MainWP_Helper :: error ( __ ( 'Invalid request!' , 'mainwp-child' ) );
2015-10-15 22:52:37 +10:00
}
if ( count ( $mwp_premium_updates_todo ) > 0 ) {
2020-03-26 20:01:04 +00:00
// Upgrade via WP
// @see wp-admin/update.php
2015-10-15 22:52:37 +10:00
$result = $premiumUpgrader -> bulk_upgrade ( $mwp_premium_updates_todo_slugs );
if ( ! empty ( $result ) ) {
foreach ( $result as $plugin => $info ) {
if ( ! empty ( $info ) ) {
$information [ 'upgrades' ][ $plugin ] = true ;
foreach ( $mwp_premium_updates_todo as $key => $update ) {
$slug = ( isset ( $update [ 'slug' ] ) ? $update [ 'slug' ] : $update [ 'Name' ] );
if ( 0 === strcmp ( $slug , $plugin ) ) {
2020-03-26 20:01:04 +00:00
// unset($mwp_premium_updates_todo[$key]);
2015-10-15 22:52:37 +10:00
}
}
}
}
}
2020-03-26 20:01:04 +00:00
// Upgrade via callback
2015-10-15 22:52:37 +10:00
foreach ( $mwp_premium_updates_todo as $update ) {
$slug = ( isset ( $update [ 'slug' ] ) ? $update [ 'slug' ] : $update [ 'Name' ] );
if ( isset ( $update [ 'url' ] ) ) {
$installer = new WP_Upgrader ();
2020-03-26 20:01:04 +00:00
// @see wp-admin/includes/class-wp-upgrader.php
2015-10-15 22:52:37 +10:00
$result = $installer -> run ( array (
'package' => $update [ 'url' ],
'destination' => ( 'plugin' === $update [ 'type' ] ? WP_PLUGIN_DIR : WP_CONTENT_DIR . '/themes' ),
'clear_destination' => true ,
'clear_working' => true ,
'hook_extra' => array (),
) );
$information [ 'upgrades' ][ $slug ] = ( ! is_wp_error ( $result ) && ! empty ( $result ) );
2020-03-26 14:11:33 +00:00
} elseif ( isset ( $update [ 'callback' ] ) ) {
2015-10-15 22:52:37 +10:00
if ( is_array ( $update [ 'callback' ] ) && isset ( $update [ 'callback' ][ 0 ] ) && isset ( $update [ 'callback' ][ 1 ] ) ) {
$update_result = @ call_user_func ( array (
$update [ 'callback' ][ 0 ],
$update [ 'callback' ][ 1 ],
) );
$information [ 'upgrades' ][ $slug ] = $update_result && true ;
2020-03-26 14:11:33 +00:00
} elseif ( is_string ( $update [ 'callback' ] ) ) {
2015-10-15 22:52:37 +10:00
$update_result = @ call_user_func ( $update [ 'callback' ] );
$information [ 'upgrades' ][ $slug ] = $update_result && true ;
} else {
$information [ 'upgrades' ][ $slug ] = false ;
}
} else {
$information [ 'upgrades' ][ $slug ] = false ;
}
}
}
$information [ 'sync' ] = $this -> getSiteStats ( array (), false );
MainWP_Helper :: write ( $information );
}
2018-11-14 21:33:36 +07:00
public function set_cached_update_plugins ( $false = false , $_transient_data = null ) {
if ( ! is_object ( $_transient_data ) ) {
2020-03-26 14:05:04 +00:00
$_transient_data = new stdClass ();
2018-11-14 21:33:36 +07:00
}
2020-03-26 19:45:07 +00:00
$pre = false ;
2018-11-14 21:33:36 +07:00
$cached_update_info = get_site_transient ( 'mainwp_update_plugins_cached' );
if ( is_array ( $cached_update_info ) && count ( $cached_update_info ) > 0 ) {
2020-03-26 17:03:00 +00:00
foreach ( $cached_update_info as $slug => $info ) {
if ( ! isset ( $_transient_data -> response [ $slug ] ) && isset ( $info -> update ) ) {
2019-02-14 22:38:14 +07:00
$_transient_data -> response [ $slug ] = $info -> update ;
2020-03-26 19:45:07 +00:00
$pre = true ;
2019-02-14 22:38:14 +07:00
}
}
}
2020-03-26 14:11:33 +00:00
if ( $pre == false ) {
2019-02-14 22:38:14 +07:00
return $false ;
2020-03-26 14:11:33 +00:00
}
2019-02-14 22:38:14 +07:00
return $_transient_data ;
}
public function set_cached_update_themes ( $false = false , $_transient_data = null ) {
if ( ! is_object ( $_transient_data ) ) {
2020-03-26 14:05:04 +00:00
$_transient_data = new stdClass ();
2019-02-14 22:38:14 +07:00
}
2020-03-26 19:45:07 +00:00
$pre = false ;
2019-02-14 22:38:14 +07:00
$cached_update_info = get_site_transient ( 'mainwp_update_themes_cached' );
if ( is_array ( $cached_update_info ) && count ( $cached_update_info ) > 0 ) {
2020-03-26 17:03:00 +00:00
foreach ( $cached_update_info as $slug => $info ) {
if ( ! isset ( $_transient_data -> response [ $slug ] ) && isset ( $info -> update ) ) {
2019-02-14 22:38:14 +07:00
$_transient_data -> response [ $slug ] = $info -> update ;
2020-03-26 19:45:07 +00:00
$pre = true ;
2018-11-14 21:33:36 +07:00
}
}
}
2020-03-26 14:11:33 +00:00
if ( $pre == false ) {
2018-11-14 21:33:36 +07:00
return $false ;
2020-03-26 14:11:33 +00:00
}
2018-11-14 21:33:36 +07:00
return $_transient_data ;
}
2015-10-15 22:52:37 +10:00
function hookFixOptimizePressThemeUpdate ( $transient ) {
if ( ! defined ( 'OP_FUNC' ) ) {
return $transient ;
}
$theme_slug = 'optimizePressTheme' ;
if ( ! function_exists ( 'op_sl_update' ) ) {
require_once OP_FUNC . 'options.php' ;
require_once OP_FUNC . 'sl_api.php' ;
}
$apiResponse = op_sl_update ( 'theme' );
if ( is_wp_error ( $apiResponse ) ) {
return $transient ;
}
$obj = new stdClass ();
$obj -> slug = $theme_slug ;
$obj -> new_version = $apiResponse -> new_version ;
$obj -> url = $apiResponse -> url ;
$obj -> package = $apiResponse -> s3_package ;
$obj -> sections = array (
'description' => $apiResponse -> section -> description ,
'changelog' => $apiResponse -> section -> changelog ,
);
$transient -> response [ $theme_slug ] = ( array ) $obj ;
return $transient ;
}
2020-03-26 20:01:04 +00:00
// This will register the current wp - thus generating the public key etc..
2015-10-15 22:52:37 +10:00
function registerSite () {
global $current_user ;
$information = array ();
2020-03-26 20:01:04 +00:00
// Check if the user is valid & login
2015-10-15 22:52:37 +10:00
if ( ! isset ( $_POST [ 'user' ] ) || ! isset ( $_POST [ 'pubkey' ] ) ) {
2016-10-24 20:33:37 +02:00
MainWP_Helper :: error ( __ ( 'Invalid request!' , 'mainwp-child' ) );
2015-10-15 22:52:37 +10:00
}
2020-03-26 20:01:04 +00:00
// Already added - can't readd. Deactivate plugin..
2015-10-15 22:52:37 +10:00
if ( get_option ( 'mainwp_child_pubkey' ) ) {
2019-02-14 22:38:14 +07:00
// set disconnect status to yes here, it will empty after reconnected
MainWP_Child_Branding :: Instance () -> save_branding_options ( 'branding_disconnected' , 'yes' );
MainWP_Helper :: update_option ( 'mainwp_child_branding_disconnected' , 'yes' , 'yes' ); // to compatible with old client reports
2019-11-11 23:17:10 +07:00
MainWP_Helper :: error ( __ ( 'Public key already set. Please deactivate & reactivate the MainWP Child plugin and try again.' , 'mainwp-child' ) );
2019-02-14 22:38:14 +07:00
2015-10-15 22:52:37 +10:00
}
2015-12-07 19:49:58 +01:00
if ( '' != get_option ( 'mainwp_child_uniqueId' ) ) {
2015-10-15 22:52:37 +10:00
if ( ! isset ( $_POST [ 'uniqueId' ] ) || ( '' === $_POST [ 'uniqueId' ] ) ) {
2016-10-24 20:33:37 +02:00
MainWP_Helper :: error ( __ ( 'This child site is set to require a unique security ID. Please enter it before the connection can be established.' , 'mainwp-child' ) );
2020-03-26 14:11:33 +00:00
} elseif ( get_option ( 'mainwp_child_uniqueId' ) !== $_POST [ 'uniqueId' ] ) {
2016-10-24 20:33:37 +02:00
MainWP_Helper :: error ( __ ( 'The unique security ID mismatch! Please correct it before the connection can be established.' , 'mainwp-child' ) );
2015-10-15 22:52:37 +10:00
}
}
2020-03-26 20:01:04 +00:00
// Check SSL Requirement
2020-03-26 17:03:00 +00:00
if ( ! MainWP_Helper :: isSSLEnabled () && ( ! defined ( 'MAINWP_ALLOW_NOSSL_CONNECT' ) || ! MAINWP_ALLOW_NOSSL_CONNECT ) ) {
2016-12-25 14:38:20 +01:00
MainWP_Helper :: error ( __ ( 'SSL is required on the child site to set up a secure connection.' , 'mainwp-child' ) );
}
2020-03-26 20:01:04 +00:00
// Login
2015-10-15 22:52:37 +10:00
if ( isset ( $_POST [ 'user' ] ) ) {
if ( ! $this -> login ( $_POST [ 'user' ] ) ) {
2020-03-26 14:05:04 +00:00
$hint = '<br/>' . __ ( 'Hint: Check if the administrator user exists on the child site, if not, you need to use an existing administrator.' , 'mainwp-child' );
MainWP_Helper :: error ( __ ( 'That administrator username was not found on this child site. Please verify that it is an existing administrator.' . $hint , 'mainwp-child' ));
2015-10-15 22:52:37 +10:00
}
2016-04-27 19:25:53 +02:00
if ( 10 !== $current_user -> wp_user_level && ( ! isset ( $current_user -> user_level ) || 10 !== $current_user -> user_level ) && ! $current_user -> has_cap ( 'level_10' ) ) {
2016-10-24 20:33:37 +02:00
MainWP_Helper :: error ( __ ( 'That user is not an administrator. Please use an administrator user to establish the connection.' , 'mainwp-child' ) );
2015-10-15 22:52:37 +10:00
}
}
2020-03-26 20:01:04 +00:00
MainWP_Helper :: update_option ( 'mainwp_child_pubkey' , base64_encode ( $_POST [ 'pubkey' ] ), 'yes' ); // Save the public key
MainWP_Helper :: update_option ( 'mainwp_child_server' , $_POST [ 'server' ] ); // Save the public key
MainWP_Helper :: update_option ( 'mainwp_child_nonce' , 0 ); // Save the nonce
2015-10-15 22:52:37 +10:00
2016-12-25 14:38:20 +01:00
MainWP_Helper :: update_option ( 'mainwp_child_nossl' , ( '-1' === $_POST [ 'pubkey' ] || ! MainWP_Helper :: isSSLEnabled () ? 1 : 0 ), 'yes' );
$information [ 'nossl' ] = ( '-1' === $_POST [ 'pubkey' ] || ! MainWP_Helper :: isSSLEnabled () ? 1 : 0 );
2015-10-15 22:52:37 +10:00
$nossl_key = uniqid ( '' , true );
MainWP_Helper :: update_option ( 'mainwp_child_nossl_key' , $nossl_key , 'yes' );
$information [ 'nosslkey' ] = $nossl_key ;
$information [ 'register' ] = 'OK' ;
$information [ 'uniqueId' ] = get_option ( 'mainwp_child_uniqueId' , '' );
$information [ 'user' ] = $_POST [ 'user' ];
$this -> getSiteStats ( $information );
}
function newPost () {
2020-03-26 20:01:04 +00:00
// Read form data
2015-12-05 17:38:52 +01:00
$new_post = maybe_unserialize ( base64_decode ( $_POST [ 'new_post' ] ) );
$post_custom = maybe_unserialize ( base64_decode ( $_POST [ 'post_custom' ] ) );
2015-10-15 22:52:37 +10:00
$post_category = rawurldecode ( isset ( $_POST [ 'post_category' ] ) ? base64_decode ( $_POST [ 'post_category' ] ) : null );
$post_tags = rawurldecode ( isset ( $new_post [ 'post_tags' ] ) ? $new_post [ 'post_tags' ] : null );
$post_featured_image = base64_decode ( $_POST [ 'post_featured_image' ] );
2015-12-05 17:38:52 +01:00
$upload_dir = maybe_unserialize ( base64_decode ( $_POST [ 'mainwp_upload_dir' ] ) );
2015-10-15 22:52:37 +10:00
if ( isset ( $_POST [ '_ezin_post_category' ] ) ) {
2015-12-05 17:38:52 +01:00
$new_post [ '_ezin_post_category' ] = maybe_unserialize ( base64_decode ( $_POST [ '_ezin_post_category' ] ) );
2015-10-15 22:52:37 +10:00
}
2018-09-27 19:52:32 +02:00
$others = array ();
2020-03-26 17:03:00 +00:00
if ( isset ( $_POST [ 'featured_image_data' ] ) && ! empty ( $_POST [ 'featured_image_data' ])) {
2018-01-22 20:21:06 +01:00
$others [ 'featured_image_data' ] = unserialize ( base64_decode ( $_POST [ 'featured_image_data' ] ));
2018-09-27 19:52:32 +02:00
}
2020-03-26 19:45:07 +00:00
$res = MainWP_Helper :: createPost ( $new_post , $post_custom , $post_category , $post_featured_image , $upload_dir , $post_tags , $others );
2017-08-24 20:41:12 +02:00
if ( is_array ( $res ) && isset ( $res [ 'error' ])) {
MainWP_Helper :: error ( $res [ 'error' ] );
}
2015-10-15 22:52:37 +10:00
$created = $res [ 'success' ];
if ( true !== $created ) {
2017-08-24 20:41:12 +02:00
MainWP_Helper :: error ( 'Undefined error' );
2015-10-15 22:52:37 +10:00
}
$information [ 'added' ] = true ;
$information [ 'added_id' ] = $res [ 'added_id' ];
$information [ 'link' ] = $res [ 'link' ];
2016-09-09 12:33:34 -05:00
do_action ( 'mainwp_child_after_newpost' , $res );
2020-02-25 22:31:13 +07:00
2015-10-15 22:52:37 +10:00
MainWP_Helper :: write ( $information );
}
function post_action () {
2020-03-26 20:01:04 +00:00
// Read form data
2020-03-26 19:45:07 +00:00
$action = $_POST [ 'action' ];
$postId = $_POST [ 'id' ];
2017-01-18 22:33:53 +01:00
$my_post = array ();
2015-10-15 22:52:37 +10:00
if ( 'publish' === $action ) {
2019-02-14 22:38:14 +07:00
$post_current = get_post ( $postId );
if ( empty ( $post_current ) ) {
$information [ 'status' ] = 'FAIL' ;
} else {
if ( 'future' == $post_current -> post_status ) {
wp_publish_post ( $postId ); // to fix: fail when publish future page
2020-03-26 15:29:54 +00:00
wp_update_post ( array (
'ID' => $postId ,
'post_date' => current_time ( 'mysql' , false ),
'post_date_gmt' => current_time ( 'mysql' , true ),
2019-02-14 22:38:14 +07:00
));
} else {
// to fix error post slug
2020-03-26 15:29:54 +00:00
wp_update_post ( array (
'ID' => $postId ,
'post_status' => 'publish' ,
));
2019-02-14 22:38:14 +07:00
}
}
2020-03-26 14:11:33 +00:00
} elseif ( 'update' === $action ) {
2015-10-15 22:52:37 +10:00
$postData = $_POST [ 'post_data' ];
$my_post = is_array ( $postData ) ? $postData : array ();
wp_update_post ( $my_post );
2020-03-26 14:11:33 +00:00
} elseif ( 'unpublish' === $action ) {
2015-10-15 22:52:37 +10:00
$my_post [ 'ID' ] = $postId ;
$my_post [ 'post_status' ] = 'draft' ;
wp_update_post ( $my_post );
2020-03-26 14:11:33 +00:00
} elseif ( 'trash' === $action ) {
2015-10-15 22:52:37 +10:00
add_action ( 'trash_post' , array ( 'MainWP_Child_Links_Checker' , 'hook_post_deleted' ) );
wp_trash_post ( $postId );
2020-03-26 14:11:33 +00:00
} elseif ( 'delete' === $action ) {
2015-10-15 22:52:37 +10:00
add_action ( 'delete_post' , array ( 'MainWP_Child_Links_Checker' , 'hook_post_deleted' ) );
wp_delete_post ( $postId , true );
2020-03-26 14:11:33 +00:00
} elseif ( 'restore' === $action ) {
2015-10-15 22:52:37 +10:00
wp_untrash_post ( $postId );
2020-03-26 14:11:33 +00:00
} elseif ( 'update_meta' === $action ) {
2015-12-05 17:38:52 +01:00
$values = maybe_unserialize ( base64_decode ( $_POST [ 'values' ] ) );
2015-10-15 22:52:37 +10:00
$meta_key = $values [ 'meta_key' ];
$meta_value = $values [ 'meta_value' ];
$check_prev = $values [ 'check_prev' ];
foreach ( $meta_key as $i => $key ) {
if ( 1 === intval ( $check_prev [ $i ] ) ) {
update_post_meta ( $postId , $key , get_post_meta ( $postId , $key , true ) ? get_post_meta ( $postId , $key , true ) : $meta_value [ $i ] );
} else {
update_post_meta ( $postId , $key , $meta_value [ $i ] );
}
}
2020-03-26 14:11:33 +00:00
} elseif ( 'get_edit' === $action ) {
2020-03-26 19:45:07 +00:00
$postId = $_POST [ 'id' ];
2016-11-24 20:46:47 +01:00
$post_type = $_POST [ 'post_type' ];
if ( $post_type == 'post' ) {
$my_post = $this -> get_post_edit ( $postId );
} else {
$my_post = $this -> get_page_edit ( $postId );
}
2015-10-15 22:52:37 +10:00
} else {
$information [ 'status' ] = 'FAIL' ;
}
if ( ! isset ( $information [ 'status' ] ) ) {
$information [ 'status' ] = 'SUCCESS' ;
}
$information [ 'my_post' ] = $my_post ;
MainWP_Helper :: write ( $information );
}
2020-03-26 14:05:04 +00:00
function get_post_edit ( $id ) {
2016-11-24 20:46:47 +01:00
$post = get_post ( $id );
if ( $post ) {
2020-03-26 19:45:07 +00:00
$categoryObjects = get_the_category ( $post -> ID );
$categories = '' ;
2016-11-24 20:46:47 +01:00
foreach ( $categoryObjects as $cat ) {
if ( '' !== $categories ) {
$categories .= ', ' ;
}
$categories .= $cat -> name ;
}
$post_category = $categories ;
$tagObjects = get_the_tags ( $post -> ID );
$tags = '' ;
if ( is_array ( $tagObjects ) ) {
foreach ( $tagObjects as $tag ) {
if ( '' !== $tags ) {
$tags .= ', ' ;
}
$tags .= $tag -> name ;
}
}
$post_tags = $tags ;
$post_custom = get_post_custom ( $id );
2020-03-26 19:45:07 +00:00
$galleries = get_post_gallery ( $id , false );
2016-11-24 20:46:47 +01:00
$post_gallery_images = array ();
if ( is_array ( $galleries ) && isset ( $galleries [ 'ids' ]) ) {
$attached_images = explode ( ',' , $galleries [ 'ids' ] );
2020-03-26 17:03:00 +00:00
foreach ( $attached_images as $attachment_id ) {
2016-11-24 20:46:47 +01:00
$attachment = get_post ( $attachment_id );
if ( $attachment ) {
$post_gallery_images [] = array (
2020-03-26 15:29:54 +00:00
'id' => $attachment_id ,
'alt' => get_post_meta ( $attachment -> ID , '_wp_attachment_image_alt' , true ),
'caption' => $attachment -> post_excerpt ,
2016-11-24 20:46:47 +01:00
'description' => $attachment -> post_content ,
2020-03-26 15:29:54 +00:00
'src' => $attachment -> guid ,
'title' => $attachment -> post_title ,
2016-11-24 20:46:47 +01:00
);
}
}
}
2020-03-26 14:11:33 +00:00
include_once ABSPATH . 'wp-includes' . DIRECTORY_SEPARATOR . 'post-thumbnail-template.php' ;
2016-11-24 20:46:47 +01:00
$post_featured_image = get_post_thumbnail_id ( $id );
2020-03-26 19:45:07 +00:00
$child_upload_dir = wp_upload_dir ();
$new_post = array (
2016-11-24 20:46:47 +01:00
'edit_id' => $id ,
'is_sticky' => is_sticky ( $id ) ? 1 : 0 ,
'post_title' => $post -> post_title ,
'post_content' => $post -> post_content ,
2017-08-24 20:41:12 +02:00
'post_status' => $post -> post_status ,
2016-11-24 20:46:47 +01:00
'post_date' => $post -> post_date ,
'post_date_gmt' => $post -> post_date_gmt ,
'post_tags' => $post_tags ,
'post_name' => $post -> post_name ,
'post_excerpt' => $post -> post_excerpt ,
'comment_status' => $post -> comment_status ,
2020-03-26 14:05:04 +00:00
'ping_status' => $post -> ping_status ,
2016-11-24 20:46:47 +01:00
);
2020-03-26 20:01:04 +00:00
if ( $post_featured_image != null ) { // Featured image is set, retrieve URL
2016-11-24 20:46:47 +01:00
$img = wp_get_attachment_image_src ( $post_featured_image , 'full' );
$post_featured_image = $img [ 0 ];
}
2017-08-24 20:41:12 +02:00
require_once ABSPATH . 'wp-admin/includes/post.php' ;
wp_set_post_lock ( $id );
2016-11-24 20:46:47 +01:00
$post_data = array (
'new_post' => base64_encode ( serialize ( $new_post ) ),
'post_custom' => base64_encode ( serialize ( $post_custom ) ),
'post_category' => base64_encode ( $post_category ),
'post_featured_image' => base64_encode ( $post_featured_image ),
'post_gallery_images' => base64_encode ( serialize ( $post_gallery_images ) ),
2020-03-26 15:29:54 +00:00
'child_upload_dir' => base64_encode ( serialize ( $child_upload_dir ) ),
2016-11-24 20:46:47 +01:00
);
return $post_data ;
}
return false ;
}
2020-03-26 14:05:04 +00:00
function get_page_edit ( $id ) {
2016-11-24 20:46:47 +01:00
$post = get_post ( $id );
if ( $post ) {
$post_custom = get_post_custom ( $id );
2020-03-26 20:01:04 +00:00
// post_slug = base64_decode( get_post_meta( $id, '_slug', true ) );
2020-03-26 14:11:33 +00:00
include_once ABSPATH . 'wp-includes' . DIRECTORY_SEPARATOR . 'post-thumbnail-template.php' ;
2016-11-24 20:46:47 +01:00
$post_featured_image = get_post_thumbnail_id ( $id );
2020-03-26 19:45:07 +00:00
$child_upload_dir = wp_upload_dir ();
2016-11-24 20:46:47 +01:00
$new_post = array (
2020-03-26 14:11:33 +00:00
'edit_id' => $id ,
2020-03-26 15:29:54 +00:00
'post_title' => $post -> post_title ,
'post_content' => $post -> post_content ,
'post_status' => $post -> post_status ,
'post_date' => $post -> post_date ,
'post_date_gmt' => $post -> post_date_gmt ,
'post_type' => 'page' ,
'post_name' => $post -> post_name ,
'post_excerpt' => $post -> post_excerpt ,
2020-03-26 14:11:33 +00:00
'comment_status' => $post -> comment_status ,
2020-03-26 15:29:54 +00:00
'ping_status' => $post -> ping_status ,
2016-11-24 20:46:47 +01:00
);
2020-03-26 20:01:04 +00:00
if ( $post_featured_image != null ) { // Featured image is set, retrieve URL
2020-03-26 19:45:07 +00:00
$img = wp_get_attachment_image_src ( $post_featured_image , 'full' );
2016-11-24 20:46:47 +01:00
$post_featured_image = $img [ 0 ];
}
2020-03-26 19:45:07 +00:00
$galleries = get_post_gallery ( $id , false );
2016-11-24 20:46:47 +01:00
$post_gallery_images = array ();
if ( is_array ( $galleries ) && isset ( $galleries [ 'ids' ]) ) {
$attached_images = explode ( ',' , $galleries [ 'ids' ] );
2020-03-26 19:51:58 +00:00
foreach ( $attached_images as $attachment_id ) {
$attachment = get_post ( $attachment_id );
if ( $attachment ) {
$post_gallery_images [] = array (
'id' => $attachment_id ,
'alt' => get_post_meta ( $attachment -> ID , '_wp_attachment_image_alt' , true ),
'caption' => $attachment -> post_excerpt ,
'description' => $attachment -> post_content ,
'src' => $attachment -> guid ,
'title' => $attachment -> post_title ,
);
}
}
2016-11-24 20:46:47 +01:00
}
2017-08-24 20:41:12 +02:00
require_once ABSPATH . 'wp-admin/includes/post.php' ;
wp_set_post_lock ( $id );
2016-11-24 20:46:47 +01:00
$post_data = array (
2020-03-26 15:29:54 +00:00
'new_post' => base64_encode ( serialize ( $new_post ) ),
'post_custom' => base64_encode ( serialize ( $post_custom ) ),
2020-03-26 14:11:33 +00:00
'post_featured_image' => base64_encode ( $post_featured_image ),
'post_gallery_images' => base64_encode ( serialize ( $post_gallery_images ) ),
2020-03-26 15:29:54 +00:00
'child_upload_dir' => base64_encode ( serialize ( $child_upload_dir ) ),
2016-11-24 20:46:47 +01:00
);
return $post_data ;
}
return false ;
}
2015-10-15 22:52:37 +10:00
function user_action () {
2020-03-26 20:01:04 +00:00
// Read form data
2015-10-15 22:52:37 +10:00
$action = $_POST [ 'action' ];
$extra = $_POST [ 'extra' ];
$userId = $_POST [ 'id' ];
$user_pass = $_POST [ 'user_pass' ];
2020-03-26 19:45:07 +00:00
$failed = false ;
2015-10-15 22:52:37 +10:00
global $current_user ;
$reassign = ( isset ( $current_user ) && isset ( $current_user -> ID ) ) ? $current_user -> ID : 0 ;
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/user.php' ;
2015-10-15 22:52:37 +10:00
if ( 'delete' === $action ) {
wp_delete_user ( $userId , $reassign );
2020-03-26 14:11:33 +00:00
} elseif ( 'changeRole' === $action ) {
2015-10-15 22:52:37 +10:00
$my_user = array ();
$my_user [ 'ID' ] = $userId ;
$my_user [ 'role' ] = $extra ;
wp_update_user ( $my_user );
2020-03-26 14:11:33 +00:00
} elseif ( 'update_password' === $action ) {
2015-10-15 22:52:37 +10:00
$my_user = array ();
$my_user [ 'ID' ] = $userId ;
$my_user [ 'user_pass' ] = $user_pass ;
wp_update_user ( $my_user );
2020-03-26 14:11:33 +00:00
} elseif ( 'edit' === $action ) {
2016-10-24 20:33:37 +02:00
$user_data = $this -> get_user_to_edit ( $userId );
2020-03-26 19:51:58 +00:00
if ( ! empty ( $user_data )) {
$information [ 'user_data' ] = $user_data ;
} else {
$failed = true ;
}
2020-03-26 14:11:33 +00:00
} elseif ( 'update_user' === $action ) {
2020-03-26 17:03:00 +00:00
$my_user = $_POST [ 'extra' ];
2020-03-26 19:51:58 +00:00
if ( is_array ( $my_user )) {
foreach ( $my_user as $idx => $val ) {
if ( $val === 'donotupdate' || ( empty ( $val ) && $idx !== 'role' )) {
unset ( $my_user [ $idx ]);
}
}
$result = $this -> edit_user ( $userId , $my_user );
if ( is_array ( $result ) && isset ( $result [ 'error' ])) {
$information [ 'error' ] = $result [ 'error' ];
}
} else {
$failed = true ;
}
2015-10-15 22:52:37 +10:00
} else {
2016-10-24 20:33:37 +02:00
$failed = true ;
2015-10-15 22:52:37 +10:00
}
2020-03-26 19:51:58 +00:00
if ( $failed ) {
$information [ 'status' ] = 'FAIL' ;
}
2015-10-15 22:52:37 +10:00
2020-03-26 17:03:00 +00:00
if ( ! isset ( $information [ 'status' ] ) && ! isset ( $information [ 'error' ]) ) {
2015-10-15 22:52:37 +10:00
$information [ 'status' ] = 'SUCCESS' ;
2020-03-26 19:51:58 +00:00
if ( 'update_user' === $action && isset ( $_POST [ 'optimize' ]) && ! empty ( $_POST [ 'optimize' ])) {
$information [ 'users' ] = $this -> get_all_users_int ( 500 ); // to fix
}
2018-09-27 19:52:32 +02:00
2015-10-15 22:52:37 +10:00
}
MainWP_Helper :: write ( $information );
}
2020-03-26 19:51:58 +00:00
function edit_user ( $user_id , $data ) {
$wp_roles = wp_roles ();
$user = new stdClass ();
2018-09-27 19:52:32 +02:00
2020-03-26 19:51:58 +00:00
$update = true ;
2018-09-27 19:52:32 +02:00
2020-03-26 19:51:58 +00:00
if ( $user_id ) {
$user -> ID = ( int ) $user_id ;
$userdata = get_userdata ( $user_id );
$user -> user_login = wp_slash ( $userdata -> user_login );
} else {
return array ( 'error' => 'ERROR: Empty user id.' );
}
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
$pass1 = $pass2 = '' ;
if ( isset ( $data [ 'pass1' ] ) ) {
$pass1 = $data [ 'pass1' ];
}
if ( isset ( $data [ 'pass2' ] ) ) {
$pass2 = $data [ 'pass2' ];
}
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
if ( isset ( $data [ 'role' ] ) && current_user_can ( 'edit_users' ) ) {
$new_role = sanitize_text_field ( $data [ 'role' ] );
$potential_role = isset ( $wp_roles -> role_objects [ $new_role ]) ? $wp_roles -> role_objects [ $new_role ] : false ;
// Don't let anyone with 'edit_users' (admins) edit their own role to something without it.
// Multisite super admins can freely edit their blog roles -- they possess all caps.
if ( ( is_multisite () && current_user_can ( 'manage_sites' ) ) || $user_id != get_current_user_id () || ( $potential_role && $potential_role -> has_cap ( 'edit_users' ) ) ) {
$user -> role = $new_role ;
}
2017-01-18 22:33:53 +01:00
2020-03-26 19:51:58 +00:00
// If the new role isn't editable by the logged-in user die with error
$editable_roles = get_editable_roles ();
if ( ! empty ( $new_role ) && empty ( $editable_roles [ $new_role ] ) ) {
return array ( 'error' => 'You can’t give users that role.' );
}
}
2018-09-27 19:52:32 +02:00
2020-03-26 19:51:58 +00:00
$email = '' ;
if ( isset ( $data [ 'email' ] ) ) {
$email = trim ( $data [ 'email' ] );
}
2018-09-27 19:52:32 +02:00
2020-03-26 19:51:58 +00:00
if ( ! empty ( $email ) ) {
$user -> user_email = sanitize_text_field ( wp_unslash ( $email ) );
} else {
$user -> user_email = $userdata -> user_email ;
}
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
if ( isset ( $data [ 'url' ] ) ) {
if ( empty ( $data [ 'url' ] ) || $data [ 'url' ] == 'http://' ) {
$user -> user_url = '' ;
} else {
$user -> user_url = esc_url_raw ( $data [ 'url' ] );
$protocols = implode ( '|' , array_map ( 'preg_quote' , wp_allowed_protocols () ) );
$user -> user_url = preg_match ( '/^(' . $protocols . '):/is' , $user -> user_url ) ? $user -> user_url : 'http://' . $user -> user_url ;
}
}
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
if ( isset ( $data [ 'first_name' ] ) ) {
$user -> first_name = sanitize_text_field ( $data [ 'first_name' ] );
}
if ( isset ( $data [ 'last_name' ] ) ) {
$user -> last_name = sanitize_text_field ( $data [ 'last_name' ] );
}
if ( isset ( $data [ 'nickname' ] ) && ! empty ( $data [ 'nickname' ])) {
$user -> nickname = sanitize_text_field ( $data [ 'nickname' ] );
}
if ( isset ( $data [ 'display_name' ] ) ) {
$user -> display_name = sanitize_text_field ( $data [ 'display_name' ] );
}
if ( isset ( $data [ 'description' ] ) ) {
$user -> description = trim ( $data [ 'description' ] );
}
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
$errors = new WP_Error ();
2018-09-27 19:52:32 +02:00
2020-03-26 19:51:58 +00:00
/* checking that username has been typed */
if ( $user -> user_login == '' ) {
$errors -> add ( 'user_login' , __ ( '<strong>ERROR</strong>: Please enter a username.' ) );
}
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
do_action_ref_array ( 'check_passwords' , array ( $user -> user_login , & $pass1 , & $pass2 ) );
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
if ( ! empty ( $pass1 ) || ! empty ( $pass2 )) {
// Check for blank password when adding a user.
if ( ! $update && empty ( $pass1 ) ) {
$errors -> add ( 'pass' , __ ( '<strong>ERROR</strong>: Please enter a password.' ), array ( 'form-field' => 'pass1' ) );
}
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
// Check for "\" in password.
if ( false !== strpos ( wp_unslash ( $pass1 ), '\\' ) ) {
$errors -> add ( 'pass' , __ ( '<strong>ERROR</strong>: Passwords may not contain the character "\\".' ), array ( 'form-field' => 'pass1' ) );
}
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
// Checking the password has been typed twice the same.
if ( ( $update || ! empty ( $pass1 ) ) && $pass1 != $pass2 ) {
$errors -> add ( 'pass' , __ ( '<strong>ERROR</strong>: Please enter the same password in both password fields.' ), array ( 'form-field' => 'pass1' ) );
}
2018-09-27 19:52:32 +02:00
2020-03-26 19:51:58 +00:00
if ( ! empty ( $pass1 ) ) {
$user -> user_pass = $pass1 ;
}
} else {
$user -> user_pass = $userdata -> user_pass ;
}
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
/** This filter is documented in wp-includes/user.php */
$illegal_logins = ( array ) apply_filters ( 'illegal_user_logins' , array () );
2018-09-27 19:52:32 +02:00
2020-03-26 19:51:58 +00:00
if ( in_array ( strtolower ( $user -> user_login ), array_map ( 'strtolower' , $illegal_logins ) ) ) {
$errors -> add ( 'invalid_username' , __ ( '<strong>ERROR</strong>: Sorry, that username is not allowed.' ) );
}
2018-09-27 19:52:32 +02:00
2020-03-26 19:51:58 +00:00
/* checking email address */
if ( empty ( $user -> user_email ) ) {
$errors -> add ( 'empty_email' , __ ( '<strong>ERROR</strong>: Please enter an email address.' ), array ( 'form-field' => 'email' ) );
} elseif ( ! is_email ( $user -> user_email ) ) {
$errors -> add ( 'invalid_email' , __ ( '<strong>ERROR</strong>: The email address isn’t correct.' ), array ( 'form-field' => 'email' ) );
} elseif ( ( $owner_id = email_exists ( $user -> user_email ) ) && ( ! $update || ( $owner_id != $user -> ID ) ) ) {
$errors -> add ( 'email_exists' , __ ( '<strong>ERROR</strong>: This email is already registered, please choose another one.' ), array ( 'form-field' => 'email' ) );
}
2018-09-27 19:52:32 +02:00
2020-03-26 19:51:58 +00:00
do_action_ref_array ( 'user_profile_update_errors' , array ( & $errors , $update , & $user ) );
2018-09-27 19:52:32 +02:00
2020-03-26 19:51:58 +00:00
if ( $errors -> get_error_codes () ) {
$error_str = '' ;
foreach ( $errors -> get_error_messages () as $message ) {
if ( is_string ( $message ) ) {
$error_str .= ' ' . esc_html ( strip_tags ( $message ) );
}
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
}
return array ( 'error' => $error_str );
}
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
$user_id = wp_update_user ( $user );
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
return $user_id ;
}
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
function get_user_to_edit ( $user_id ) {
require_once ABSPATH . 'wp-admin/includes/user.php' ;
$profileuser = get_user_to_edit ( $user_id );
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
$edit_data = array ();
if ( is_object ( $profileuser )) {
$user_roles = array_intersect ( array_values ( $profileuser -> roles ), array_keys ( get_editable_roles () ) );
$user_role = reset ( $user_roles );
$edit_data [ 'role' ] = $user_role ;
$edit_data [ 'first_name' ] = $profileuser -> first_name ;
$edit_data [ 'last_name' ] = $profileuser -> last_name ;
$edit_data [ 'nickname' ] = $profileuser -> nickname ;
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
$public_display = array ();
$public_display [ 'display_nickname' ] = $profileuser -> nickname ;
$public_display [ 'display_username' ] = $profileuser -> user_login ;
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
if ( ! empty ( $profileuser -> first_name ) ) {
$public_display [ 'display_firstname' ] = $profileuser -> first_name ;
}
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
if ( ! empty ( $profileuser -> last_name ) ) {
$public_display [ 'display_lastname' ] = $profileuser -> last_name ;
}
2016-10-24 20:33:37 +02:00
2020-03-26 19:51:58 +00:00
if ( ! empty ( $profileuser -> first_name ) && ! empty ( $profileuser -> last_name ) ) {
$public_display [ 'display_firstlast' ] = $profileuser -> first_name . ' ' . $profileuser -> last_name ;
$public_display [ 'display_lastfirst' ] = $profileuser -> last_name . ' ' . $profileuser -> first_name ;
}
if ( ! in_array ( $profileuser -> display_name , $public_display ) ) { // Only add this if it isn't duplicated elsewhere
$public_display = array ( 'display_displayname' => $profileuser -> display_name ) + $public_display ;
}
$public_display = array_map ( 'trim' , $public_display );
$public_display = array_unique ( $public_display );
2018-09-27 19:52:32 +02:00
2020-03-26 19:51:58 +00:00
$edit_data [ 'public_display' ] = $public_display ;
$edit_data [ 'display_name' ] = $profileuser -> display_name ;
$edit_data [ 'user_email' ] = $profileuser -> user_email ;
$edit_data [ 'user_url' ] = $profileuser -> user_url ;
foreach ( wp_get_user_contact_methods ( $profileuser ) as $name => $desc ) {
$edit_data [ 'contact_methods' ][ $name ] = $profileuser -> $name ;
}
$edit_data [ 'description' ] = $profileuser -> description ;
}
return $edit_data ;
}
2018-09-27 19:52:32 +02:00
2020-03-26 20:01:04 +00:00
// todo: backwards compatible: wp_set_comment_status ?
2015-10-15 22:52:37 +10:00
function comment_action () {
2020-03-26 20:01:04 +00:00
// Read form data
2015-10-15 22:52:37 +10:00
$action = $_POST [ 'action' ];
$commentId = $_POST [ 'id' ];
if ( 'approve' === $action ) {
wp_set_comment_status ( $commentId , 'approve' );
2020-03-26 14:11:33 +00:00
} elseif ( 'unapprove' === $action ) {
2015-10-15 22:52:37 +10:00
wp_set_comment_status ( $commentId , 'hold' );
2020-03-26 14:11:33 +00:00
} elseif ( 'spam' === $action ) {
2015-10-15 22:52:37 +10:00
wp_spam_comment ( $commentId );
2020-03-26 14:11:33 +00:00
} elseif ( 'unspam' === $action ) {
2015-10-15 22:52:37 +10:00
wp_unspam_comment ( $commentId );
2020-03-26 14:11:33 +00:00
} elseif ( 'trash' === $action ) {
2015-10-15 22:52:37 +10:00
add_action ( 'trashed_comment' , array ( 'MainWP_Child_Links_Checker' , 'hook_trashed_comment' ), 10 , 1 );
wp_trash_comment ( $commentId );
2020-03-26 14:11:33 +00:00
} elseif ( 'restore' === $action ) {
2015-10-15 22:52:37 +10:00
wp_untrash_comment ( $commentId );
2020-03-26 14:11:33 +00:00
} elseif ( 'delete' === $action ) {
2015-10-15 22:52:37 +10:00
wp_delete_comment ( $commentId , true );
} else {
$information [ 'status' ] = 'FAIL' ;
}
if ( ! isset ( $information [ 'status' ] ) ) {
$information [ 'status' ] = 'SUCCESS' ;
}
MainWP_Helper :: write ( $information );
}
2020-03-26 20:01:04 +00:00
// todo: backwards compatible: wp_set_comment_status ?
2015-10-15 22:52:37 +10:00
function comment_bulk_action () {
2020-03-26 20:01:04 +00:00
// Read form data
2015-10-15 22:52:37 +10:00
$action = $_POST [ 'action' ];
$commentIds = explode ( ',' , $_POST [ 'ids' ] );
$information [ 'success' ] = 0 ;
foreach ( $commentIds as $commentId ) {
if ( $commentId ) {
$information [ 'success' ] ++ ;
if ( 'approve' === $action ) {
wp_set_comment_status ( $commentId , 'approve' );
2020-03-26 14:11:33 +00:00
} elseif ( 'unapprove' === $action ) {
2015-10-15 22:52:37 +10:00
wp_set_comment_status ( $commentId , 'hold' );
2020-03-26 14:11:33 +00:00
} elseif ( 'spam' === $action ) {
2015-10-15 22:52:37 +10:00
wp_spam_comment ( $commentId );
2020-03-26 14:11:33 +00:00
} elseif ( 'unspam' === $action ) {
2015-10-15 22:52:37 +10:00
wp_unspam_comment ( $commentId );
2020-03-26 14:11:33 +00:00
} elseif ( 'trash' === $action ) {
2015-10-15 22:52:37 +10:00
wp_trash_comment ( $commentId );
2020-03-26 14:11:33 +00:00
} elseif ( 'restore' === $action ) {
2015-10-15 22:52:37 +10:00
wp_untrash_comment ( $commentId );
2020-03-26 14:11:33 +00:00
} elseif ( 'delete' === $action ) {
2015-10-15 22:52:37 +10:00
wp_delete_comment ( $commentId , true );
} else {
$information [ 'success' ] -- ;
}
}
}
MainWP_Helper :: write ( $information );
}
function newAdminPassword () {
2020-03-26 20:01:04 +00:00
// Read form data
2015-12-05 17:38:52 +01:00
$new_password = maybe_unserialize ( base64_decode ( $_POST [ 'new_password' ] ) );
2015-10-15 22:52:37 +10:00
$user = get_user_by ( 'login' , $_POST [ 'user' ] );
2020-03-26 14:11:33 +00:00
require_once ABSPATH . WPINC . '/registration.php' ;
2015-10-15 22:52:37 +10:00
2020-03-26 15:29:54 +00:00
$id = wp_update_user ( array (
'ID' => $user -> ID ,
'user_pass' => $new_password [ 'user_pass' ],
) );
2015-10-15 22:52:37 +10:00
if ( $id !== $user -> ID ) {
if ( is_wp_error ( $id ) ) {
MainWP_Helper :: error ( $id -> get_error_message () );
} else {
2016-10-24 20:33:37 +02:00
MainWP_Helper :: error ( __ ( 'Administrator password could not be changed.' , 'mainwp-child' ) );
2015-10-15 22:52:37 +10:00
}
}
$information [ 'added' ] = true ;
MainWP_Helper :: write ( $information );
}
function newUser () {
2020-03-26 20:01:04 +00:00
// Read form data
2015-12-05 17:38:52 +01:00
$new_user = maybe_unserialize ( base64_decode ( $_POST [ 'new_user' ] ) );
2015-10-15 22:52:37 +10:00
$send_password = $_POST [ 'send_password' ];
2019-11-11 23:17:10 +07:00
// check role existed
if ( isset ( $new_user [ 'role' ] )) {
2020-03-26 17:03:00 +00:00
if ( ! get_role ( $new_user [ 'role' ] ) ) {
2019-11-11 23:17:10 +07:00
$new_user [ 'role' ] = 'subscriber' ;
}
}
2015-10-15 22:52:37 +10:00
$new_user_id = wp_insert_user ( $new_user );
if ( is_wp_error ( $new_user_id ) ) {
MainWP_Helper :: error ( $new_user_id -> get_error_message () );
}
if ( 0 === $new_user_id ) {
2016-10-24 20:33:37 +02:00
MainWP_Helper :: error ( __ ( 'Undefined error!' , 'mainwp-child' ) );
2015-10-15 22:52:37 +10:00
}
if ( $send_password ) {
$user = new WP_User ( $new_user_id );
$user_login = stripslashes ( $user -> user_login );
$user_email = stripslashes ( $user -> user_email );
// The blogname option is escaped with esc_html on the way into the database in sanitize_option
// we want to reverse this for the plain text arena of emails.
$blogname = wp_specialchars_decode ( get_option ( 'blogname' ), ENT_QUOTES );
2020-03-26 19:45:07 +00:00
$message = sprintf ( __ ( 'Username: %s' ), $user_login ) . " \r \n " ;
2015-10-15 22:52:37 +10:00
$message .= sprintf ( __ ( 'Password: %s' ), $new_user [ 'user_pass' ] ) . " \r \n " ;
$message .= wp_login_url () . " \r \n " ;
2019-02-14 22:38:14 +07:00
@ wp_mail ( $user_email , sprintf ( __ ( '[%s] Your username and password' ), $blogname ), $message , '' );
2015-10-15 22:52:37 +10:00
}
$information [ 'added' ] = true ;
MainWP_Helper :: write ( $information );
}
function cloneinfo () {
global $table_prefix ;
$information [ 'dbCharset' ] = DB_CHARSET ;
$information [ 'dbCollate' ] = DB_COLLATE ;
$information [ 'table_prefix' ] = $table_prefix ;
$information [ 'site_url' ] = get_option ( 'site_url' );
$information [ 'home' ] = get_option ( 'home' );
MainWP_Helper :: write ( $information );
}
function backupPoll () {
$fileNameUID = ( isset ( $_POST [ 'fileNameUID' ] ) ? $_POST [ 'fileNameUID' ] : '' );
$fileName = ( isset ( $_POST [ 'fileName' ] ) ? $_POST [ 'fileName' ] : '' );
if ( 'full' === $_POST [ 'type' ] ) {
if ( '' !== $fileName ) {
$backupFile = $fileName ;
} else {
$backupFile = 'backup-' . $fileNameUID . '-' ;
}
$dirs = MainWP_Helper :: getMainWPDir ( 'backup' );
$backupdir = $dirs [ 0 ];
$result = glob ( $backupdir . $backupFile . '*' );
$archiveFile = false ;
foreach ( $result as $file ) {
if ( MainWP_Helper :: isArchive ( $file , $backupFile , '(.*)' ) ) {
$archiveFile = $file ;
break ;
}
}
if ( false === $archiveFile ) {
MainWP_Helper :: write ( array () );
}
MainWP_Helper :: write ( array ( 'size' => filesize ( $archiveFile ) ) );
} else {
$backupFile = 'dbBackup-' . $fileNameUID . '-*.sql' ;
$dirs = MainWP_Helper :: getMainWPDir ( 'backup' );
$backupdir = $dirs [ 0 ];
$result = glob ( $backupdir . $backupFile . '*' );
if ( 0 === count ( $result ) ) {
MainWP_Helper :: write ( array () );
}
2015-12-22 19:18:07 +01:00
$size = 0 ;
foreach ( $result as $f ) {
$size += filesize ( $f );
}
MainWP_Helper :: write ( array ( 'size' => $size ) );
2015-10-15 22:52:37 +10:00
exit ();
}
}
function backup_checkpid () {
$pid = $_POST [ 'pid' ];
$dirs = MainWP_Helper :: getMainWPDir ( 'backup' );
$backupdir = $dirs [ 0 ];
$information = array ();
/** @var $wp_filesystem WP_Filesystem_Base */
global $wp_filesystem ;
MainWP_Helper :: getWPFilesystem ();
$pidFile = trailingslashit ( $backupdir ) . 'backup-' . $pid . '.pid' ;
$doneFile = trailingslashit ( $backupdir ) . 'backup-' . $pid . '.done' ;
if ( $wp_filesystem -> is_file ( $pidFile ) ) {
$time = $wp_filesystem -> mtime ( $pidFile );
$minutes = date ( 'i' , time () );
$seconds = date ( 's' , time () );
$file_minutes = date ( 'i' , $time );
$file_seconds = date ( 's' , $time );
$minuteDiff = $minutes - $file_minutes ;
if ( 59 === $minuteDiff ) {
$minuteDiff = 1 ;
}
$secondsdiff = ( $minuteDiff * 60 ) + $seconds - $file_seconds ;
$file = $wp_filesystem -> get_contents ( $pidFile );
$information [ 'file' ] = basename ( $file );
if ( $secondsdiff < 80 ) {
$information [ 'status' ] = 'busy' ;
} else {
$information [ 'status' ] = 'stalled' ;
}
2020-03-26 14:11:33 +00:00
} elseif ( $wp_filesystem -> is_file ( $doneFile ) ) {
2015-10-15 22:52:37 +10:00
$file = $wp_filesystem -> get_contents ( $doneFile );
$information [ 'status' ] = 'done' ;
$information [ 'file' ] = basename ( $file );
$information [ 'size' ] = @ filesize ( $file );
} else {
$information [ 'status' ] = 'invalid' ;
}
MainWP_Helper :: write ( $information );
}
function backup ( $pWrite = true ) {
2020-03-26 20:01:04 +00:00
$timeout = 20 * 60 * 60 ; // 20minutes
2015-10-15 22:52:37 +10:00
@ set_time_limit ( $timeout );
@ ini_set ( 'max_execution_time' , $timeout );
MainWP_Helper :: endSession ();
2020-03-26 20:01:04 +00:00
// Cleanup pid files!
2015-10-15 22:52:37 +10:00
$dirs = MainWP_Helper :: getMainWPDir ( 'backup' );
$backupdir = trailingslashit ( $dirs [ 0 ] );
/** @var $wp_filesystem WP_Filesystem_Base */
global $wp_filesystem ;
MainWP_Helper :: getWPFilesystem ();
$files = glob ( $backupdir . '*' );
2020-03-26 20:01:04 +00:00
// Find old files (changes > 3 hr)
2015-10-15 22:52:37 +10:00
foreach ( $files as $file ) {
if ( MainWP_Helper :: endsWith ( $file , '/index.php' ) | MainWP_Helper :: endsWith ( $file , '/.htaccess' ) ) {
continue ;
}
if ( ( time () - filemtime ( $file ) ) > ( 60 * 60 * 3 ) ) {
@ unlink ( $file );
}
}
$fileName = ( isset ( $_POST [ 'fileUID' ] ) ? $_POST [ 'fileUID' ] : '' );
if ( 'full' === $_POST [ 'type' ] ) {
$excludes = ( isset ( $_POST [ 'exclude' ] ) ? explode ( ',' , $_POST [ 'exclude' ] ) : array () );
$excludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/uploads/mainwp' ;
$uploadDir = MainWP_Helper :: getMainWPDir ();
$uploadDir = $uploadDir [ 0 ];
$excludes [] = str_replace ( ABSPATH , '' , $uploadDir );
$excludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/object-cache.php' ;
if ( function_exists ( 'posix_uname' ) ) {
$uname = @ posix_uname ();
if ( is_array ( $uname ) && isset ( $uname [ 'nodename' ] ) ) {
if ( stristr ( $uname [ 'nodename' ], 'hostgator' ) ) {
2015-12-09 20:32:56 +01:00
if ( ! isset ( $_POST [ 'file_descriptors' ] ) || '0' == $_POST [ 'file_descriptors' ] || $_POST [ 'file_descriptors' ] > 1000 ) {
2015-10-15 22:52:37 +10:00
$_POST [ 'file_descriptors' ] = 1000 ;
}
$_POST [ 'file_descriptors_auto' ] = 0 ;
$_POST [ 'loadFilesBeforeZip' ] = false ;
}
}
}
$file_descriptors = ( isset ( $_POST [ 'file_descriptors' ] ) ? $_POST [ 'file_descriptors' ] : 0 );
$file_descriptors_auto = ( isset ( $_POST [ 'file_descriptors_auto' ] ) ? $_POST [ 'file_descriptors_auto' ] : 0 );
if ( 1 === ( int ) $file_descriptors_auto ) {
if ( function_exists ( 'posix_getrlimit' ) ) {
$result = @ posix_getrlimit ();
if ( isset ( $result [ 'soft openfiles' ] ) ) {
$file_descriptors = $result [ 'soft openfiles' ];
}
}
}
$loadFilesBeforeZip = ( isset ( $_POST [ 'loadFilesBeforeZip' ] ) ? $_POST [ 'loadFilesBeforeZip' ] : true );
$newExcludes = array ();
foreach ( $excludes as $exclude ) {
$newExcludes [] = rtrim ( $exclude , '/' );
}
2015-12-09 20:32:56 +01:00
$excludebackup = ( isset ( $_POST [ 'excludebackup' ] ) && '1' == $_POST [ 'excludebackup' ] );
$excludecache = ( isset ( $_POST [ 'excludecache' ] ) && '1' == $_POST [ 'excludecache' ] );
$excludezip = ( isset ( $_POST [ 'excludezip' ] ) && '1' == $_POST [ 'excludezip' ] );
$excludenonwp = ( isset ( $_POST [ 'excludenonwp' ] ) && '1' == $_POST [ 'excludenonwp' ] );
2015-10-15 22:52:37 +10:00
if ( $excludebackup ) {
2020-03-26 20:01:04 +00:00
// Backup buddy
2015-10-15 22:52:37 +10:00
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/uploads/backupbuddy_backups' ;
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/uploads/backupbuddy_temp' ;
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/uploads/pb_backupbuddy' ;
2020-03-26 20:01:04 +00:00
// ManageWP
2015-10-15 22:52:37 +10:00
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/managewp' ;
2020-03-26 20:01:04 +00:00
// InfiniteWP
2015-10-15 22:52:37 +10:00
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/infinitewp' ;
2020-03-26 20:01:04 +00:00
// WordPress Backup to Dropbox
2015-10-15 22:52:37 +10:00
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/backups' ;
2020-03-26 20:01:04 +00:00
// BackUpWordpress
2015-10-15 22:52:37 +10:00
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/backups' ;
2020-03-26 20:01:04 +00:00
// BackWPUp
2015-10-15 22:52:37 +10:00
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/uploads/backwpup*' ;
2020-03-26 20:01:04 +00:00
// WP Complete Backup
2015-10-15 22:52:37 +10:00
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/plugins/wp-complete-backup/storage' ;
2020-03-26 20:01:04 +00:00
// WordPress EZ Backup
// This one may be hard to do since they add random text at the end for example, feel free to skip if you need to
// backup_randomkyfkj where kyfkj is random
2015-10-15 22:52:37 +10:00
2020-03-26 20:01:04 +00:00
// Online Backup for WordPress
2015-10-15 22:52:37 +10:00
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/backups' ;
2020-03-26 20:01:04 +00:00
// XCloner
2015-10-15 22:52:37 +10:00
$newExcludes [] = '/administrator/backups' ;
}
if ( $excludecache ) {
2020-03-26 20:01:04 +00:00
// W3 Total Cache
2015-10-15 22:52:37 +10:00
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/w3tc-cache' ;
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/w3tc' ;
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/cache/config' ;
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/cache/minify' ;
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/cache/page_enhanced' ;
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/cache/tmp' ;
2020-03-26 20:01:04 +00:00
// WP Super Cache
2015-10-15 22:52:37 +10:00
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/cache/supercache' ;
2020-03-26 20:01:04 +00:00
// Quick Cache
2015-10-15 22:52:37 +10:00
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/cache/quick-cache' ;
2020-03-26 20:01:04 +00:00
// Hyper Cache
2015-10-15 22:52:37 +10:00
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/hyper-cache/cache' ;
2020-03-26 20:01:04 +00:00
// WP Fastest Cache
2015-10-15 22:52:37 +10:00
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/cache/all' ;
2020-03-26 20:01:04 +00:00
// WP-Rocket
2015-10-15 22:52:37 +10:00
$newExcludes [] = str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '/cache/wp-rocket' ;
}
$file = false ;
if ( isset ( $_POST [ 'f' ] ) ) {
$file = $_POST [ 'f' ];
2020-03-26 14:11:33 +00:00
} elseif ( isset ( $_POST [ 'file' ] ) ) {
2015-10-15 22:52:37 +10:00
$file = $_POST [ 'file' ];
}
$ext = 'zip' ;
if ( isset ( $_POST [ 'ext' ] ) ) {
$ext = $_POST [ 'ext' ];
}
$pid = false ;
if ( isset ( $_POST [ 'pid' ] ) ) {
$pid = $_POST [ 'pid' ];
}
2015-12-09 20:32:56 +01:00
$append = ( isset ( $_POST [ 'append' ] ) && ( '1' == $_POST [ 'append' ] ) );
2015-10-15 22:52:37 +10:00
$res = MainWP_Backup :: get () -> createFullBackup ( $newExcludes , $fileName , true , true , $file_descriptors , $file , $excludezip , $excludenonwp , $loadFilesBeforeZip , $ext , $pid , $append );
if ( ! $res ) {
$information [ 'full' ] = false ;
} else {
$information [ 'full' ] = $res [ 'file' ];
$information [ 'size' ] = $res [ 'filesize' ];
}
$information [ 'db' ] = false ;
2020-03-26 14:11:33 +00:00
} elseif ( 'db' == $_POST [ 'type' ] ) {
2015-10-15 22:52:37 +10:00
$ext = 'zip' ;
if ( isset ( $_POST [ 'ext' ] ) ) {
$ext = $_POST [ 'ext' ];
}
$res = $this -> backupDB ( $fileName , $ext );
if ( ! $res ) {
$information [ 'db' ] = false ;
} else {
$information [ 'db' ] = $res [ 'file' ];
$information [ 'size' ] = $res [ 'filesize' ];
}
$information [ 'full' ] = false ;
} else {
$information [ 'full' ] = false ;
$information [ 'db' ] = false ;
}
if ( $pWrite ) {
MainWP_Helper :: write ( $information );
}
return $information ;
}
protected function backupDB ( $fileName = '' , $ext = 'zip' ) {
$dirs = MainWP_Helper :: getMainWPDir ( 'backup' );
$dir = $dirs [ 0 ];
$timestamp = time ();
2015-12-22 19:18:07 +01:00
2015-10-15 22:52:37 +10:00
if ( '' !== $fileName ) {
$fileName .= '-' ;
}
2015-12-22 19:18:07 +01:00
$filepath_prefix = $dir . 'dbBackup-' . $fileName . $timestamp ;
2015-10-15 22:52:37 +10:00
if ( $dh = opendir ( $dir ) ) {
while ( ( $file = readdir ( $dh ) ) !== false ) {
2015-12-22 19:18:07 +01:00
if ( '.' !== $file && '..' !== $file && ( preg_match ( '/dbBackup-(.*).sql(\.zip|\.tar|\.tar\.gz|\.tar\.bz2|\.tmp)?$/' , $file ) ) ) {
2015-10-15 22:52:37 +10:00
@ unlink ( $dir . $file );
}
}
closedir ( $dh );
}
2015-12-22 19:18:07 +01:00
$result = MainWP_Backup :: get () -> createBackupDB ( $filepath_prefix , $ext );
2015-10-15 22:52:37 +10:00
MainWP_Helper :: update_option ( 'mainwp_child_last_db_backup_size' , filesize ( $result [ 'filepath' ] ) );
return ( ! $result ) ? false : array (
'timestamp' => $timestamp ,
'file' => basename ( $result [ 'filepath' ] ),
'filesize' => filesize ( $result [ 'filepath' ] ),
);
}
function doSecurityFix () {
$sync = false ;
if ( 'all' === $_POST [ 'feature' ] ) {
2020-03-26 20:01:04 +00:00
// fix all
2015-10-15 22:52:37 +10:00
$sync = true ;
}
$information = array ();
$security = get_option ( 'mainwp_security' );
if ( ! is_array ( $security ) ) {
$security = array ();
}
if ( 'all' === $_POST [ 'feature' ] || 'listing' === $_POST [ 'feature' ] ) {
MainWP_Security :: prevent_listing ();
$information [ 'listing' ] = ( ! MainWP_Security :: prevent_listing_ok () ? 'N' : 'Y' );
}
if ( 'all' === $_POST [ 'feature' ] || 'wp_version' === $_POST [ 'feature' ] ) {
$security [ 'wp_version' ] = true ;
MainWP_Security :: remove_wp_version ( true );
$information [ 'wp_version' ] = ( ! MainWP_Security :: remove_wp_version_ok () ? 'N' : 'Y' );
}
if ( 'all' === $_POST [ 'feature' ] || 'rsd' === $_POST [ 'feature' ] ) {
$security [ 'rsd' ] = true ;
MainWP_Security :: remove_rsd ( true );
$information [ 'rsd' ] = ( ! MainWP_Security :: remove_rsd_ok () ? 'N' : 'Y' );
}
if ( 'all' === $_POST [ 'feature' ] || 'wlw' === $_POST [ 'feature' ] ) {
$security [ 'wlw' ] = true ;
MainWP_Security :: remove_wlw ( true );
$information [ 'wlw' ] = ( ! MainWP_Security :: remove_wlw_ok () ? 'N' : 'Y' );
}
2020-03-26 20:01:04 +00:00
// if ($_POST['feature'] == 'all' || $_POST['feature'] == 'core_updates')
// {
// $security['core_updates'] = true;
// MainWP_Security::remove_core_update(true);
// $information['core_updates'] = (!MainWP_Security::remove_core_update_ok() ? 'N' : 'Y');
// }
// if ($_POST['feature'] == 'all' || $_POST['feature'] == 'plugin_updates')
// {
// $security['plugin_updates'] = true;
// MainWP_Security::remove_plugin_update(true);
// $information['plugin_updates'] = (!MainWP_Security::remove_plugin_update_ok() ? 'N' : 'Y');
// }
// if ($_POST['feature'] == 'all' || $_POST['feature'] == 'theme_updates')
// {
// $security['theme_updates'] = true;
// MainWP_Security::remove_theme_update(true);
// $information['theme_updates'] = (!MainWP_Security::remove_theme_update_ok() ? 'N' : 'Y');
// }
// if ($_POST['feature'] == 'all' || $_POST['feature'] == 'file_perms')
// {
// MainWP_Security::fix_file_permissions();
// $information['file_perms'] = (!MainWP_Security::fix_file_permissions_ok() ? 'N' : 'Y');
// if ($information['file_perms'] == 'N')
// {
// $information['file_perms'] = 'Could not change all the file permissions';
// }
// }
2015-10-15 22:52:37 +10:00
if ( 'all' === $_POST [ 'feature' ] || 'db_reporting' === $_POST [ 'feature' ] ) {
MainWP_Security :: remove_database_reporting ();
$information [ 'db_reporting' ] = ( ! MainWP_Security :: remove_database_reporting_ok () ? 'N' : 'Y' );
}
if ( 'all' === $_POST [ 'feature' ] || 'php_reporting' === $_POST [ 'feature' ] ) {
$security [ 'php_reporting' ] = true ;
MainWP_Security :: remove_php_reporting ( true );
$information [ 'php_reporting' ] = ( ! MainWP_Security :: remove_php_reporting_ok () ? 'N' : 'Y' );
}
if ( 'all' === $_POST [ 'feature' ] || 'versions' === $_POST [ 'feature' ] ) {
2020-03-26 19:45:07 +00:00
$security [ 'scripts_version' ] = true ;
$security [ 'styles_version' ] = true ;
$security [ 'generator_version' ] = true ;
2016-02-15 22:08:39 +01:00
MainWP_Security :: remove_generator_version ( true );
$information [ 'versions' ] = 'Y' ;
2015-10-15 22:52:37 +10:00
}
2018-09-27 19:52:32 +02:00
if ( 'all' === $_POST [ 'feature' ] || 'registered_versions' === $_POST [ 'feature' ] ) {
2020-03-26 19:45:07 +00:00
$security [ 'registered_versions' ] = true ;
2018-09-27 19:52:32 +02:00
$information [ 'registered_versions' ] = 'Y' ;
}
2015-10-15 22:52:37 +10:00
if ( 'all' === $_POST [ 'feature' ] || 'admin' === $_POST [ 'feature' ] ) {
$information [ 'admin' ] = ( ! MainWP_Security :: admin_user_ok () ? 'N' : 'Y' );
}
if ( 'all' === $_POST [ 'feature' ] || 'readme' === $_POST [ 'feature' ] ) {
$security [ 'readme' ] = true ;
MainWP_Security :: remove_readme ( true );
$information [ 'readme' ] = ( MainWP_Security :: remove_readme_ok () ? 'Y' : 'N' );
}
MainWP_Helper :: update_option ( 'mainwp_security' , $security , 'yes' );
if ( $sync ) {
$information [ 'sync' ] = $this -> getSiteStats ( array (), false );
}
MainWP_Helper :: write ( $information );
}
function doSecurityUnFix () {
$information = array ();
$sync = false ;
if ( 'all' === $_POST [ 'feature' ] ) {
$sync = true ;
}
$security = get_option ( 'mainwp_security' );
if ( 'all' === $_POST [ 'feature' ] || 'wp_version' === $_POST [ 'feature' ] ) {
$security [ 'wp_version' ] = false ;
$information [ 'wp_version' ] = 'N' ;
}
if ( 'all' === $_POST [ 'feature' ] || 'rsd' === $_POST [ 'feature' ] ) {
$security [ 'rsd' ] = false ;
$information [ 'rsd' ] = 'N' ;
}
if ( 'all' === $_POST [ 'feature' ] || 'wlw' === $_POST [ 'feature' ] ) {
$security [ 'wlw' ] = false ;
$information [ 'wlw' ] = 'N' ;
}
if ( 'all' === $_POST [ 'feature' ] || 'php_reporting' === $_POST [ 'feature' ] ) {
$security [ 'php_reporting' ] = false ;
$information [ 'php_reporting' ] = 'N' ;
}
if ( 'all' === $_POST [ 'feature' ] || 'versions' === $_POST [ 'feature' ] ) {
2020-03-26 19:45:07 +00:00
$security [ 'scripts_version' ] = false ;
$security [ 'styles_version' ] = false ;
$security [ 'generator_version' ] = false ;
$information [ 'versions' ] = 'N' ;
2015-10-15 22:52:37 +10:00
}
2018-09-27 19:52:32 +02:00
if ( 'all' === $_POST [ 'feature' ] || 'registered_versions' === $_POST [ 'feature' ] ) {
2020-03-26 19:45:07 +00:00
$security [ 'registered_versions' ] = false ;
2018-09-27 19:52:32 +02:00
$information [ 'registered_versions' ] = 'N' ;
}
2015-10-15 22:52:37 +10:00
if ( 'all' === $_POST [ 'feature' ] || 'readme' === $_POST [ 'feature' ] ) {
$security [ 'readme' ] = false ;
$information [ 'readme' ] = MainWP_Security :: remove_readme_ok ();
}
MainWP_Helper :: update_option ( 'mainwp_security' , $security , 'yes' );
if ( $sync ) {
$information [ 'sync' ] = $this -> getSiteStats ( array (), false );
}
MainWP_Helper :: write ( $information );
}
function getSecurityStats () {
$information = array ();
$information [ 'listing' ] = ( ! MainWP_Security :: prevent_listing_ok () ? 'N' : 'Y' );
$information [ 'wp_version' ] = ( ! MainWP_Security :: remove_wp_version_ok () ? 'N' : 'Y' );
$information [ 'rsd' ] = ( ! MainWP_Security :: remove_rsd_ok () ? 'N' : 'Y' );
$information [ 'wlw' ] = ( ! MainWP_Security :: remove_wlw_ok () ? 'N' : 'Y' );
2020-03-26 20:01:04 +00:00
// $information['core_updates'] = (!MainWP_Security::remove_core_update_ok() ? 'N' : 'Y');
// $information['plugin_updates'] = (!MainWP_Security::remove_plugin_update_ok() ? 'N' : 'Y');
// $information['theme_updates'] = (!MainWP_Security::remove_theme_update_ok() ? 'N' : 'Y');
// $information['file_perms'] = (!MainWP_Security::fix_file_permissions_ok() ? 'N' : 'Y');
2020-03-26 19:45:07 +00:00
$information [ 'db_reporting' ] = ( ! MainWP_Security :: remove_database_reporting_ok () ? 'N' : 'Y' );
$information [ 'php_reporting' ] = ( ! MainWP_Security :: remove_php_reporting_ok () ? 'N' : 'Y' );
$information [ 'versions' ] = ( ! MainWP_Security :: remove_scripts_version_ok () || ! MainWP_Security :: remove_styles_version_ok () || ! MainWP_Security :: remove_generator_version_ok ()
2015-10-15 22:52:37 +10:00
? 'N' : 'Y' );
2020-03-26 19:45:07 +00:00
$information [ 'registered_versions' ] = ( MainWP_Security :: remove_registered_versions_ok () ? 'Y' : 'N' );
$information [ 'admin' ] = ( MainWP_Security :: admin_user_ok () ? 'Y' : 'N' );
$information [ 'readme' ] = ( MainWP_Security :: remove_readme_ok () ? 'Y' : 'N' );
2015-10-15 22:52:37 +10:00
MainWP_Helper :: write ( $information );
}
function updateExternalSettings () {
$update_htaccess = false ;
if ( isset ( $_POST [ 'cloneSites' ] ) ) {
if ( '0' !== $_POST [ 'cloneSites' ] ) {
$arr = @ json_decode ( urldecode ( $_POST [ 'cloneSites' ] ), 1 );
MainWP_Helper :: update_option ( 'mainwp_child_clone_sites' , ( ! is_array ( $arr ) ? array () : $arr ) );
} else {
MainWP_Helper :: update_option ( 'mainwp_child_clone_sites' , '0' );
}
}
2020-02-03 22:55:50 +07:00
if ( isset ( $_POST [ 'siteId' ] ) ) {
MainWP_Helper :: update_option ( 'mainwp_child_siteid' , intval ( $_POST [ 'siteId' ]) );
2020-01-17 19:42:57 +07:00
}
2015-10-15 22:52:37 +10:00
if ( isset ( $_POST [ 'pluginDir' ] ) ) {
if ( get_option ( 'mainwp_child_pluginDir' ) !== $_POST [ 'pluginDir' ] ) {
MainWP_Helper :: update_option ( 'mainwp_child_pluginDir' , $_POST [ 'pluginDir' ], 'yes' );
$update_htaccess = true ;
}
2020-03-26 14:11:33 +00:00
} elseif ( false !== get_option ( 'mainwp_child_pluginDir' ) ) {
2015-10-15 22:52:37 +10:00
MainWP_Helper :: update_option ( 'mainwp_child_pluginDir' , false , 'yes' );
$update_htaccess = true ;
}
if ( $update_htaccess ) {
$this -> update_htaccess ( true );
}
}
2020-03-26 20:01:04 +00:00
// Show stats
2015-10-15 22:52:37 +10:00
function getSiteStats ( $information = array (), $exit = true ) {
global $wp_version ;
if ( $exit ) {
$this -> updateExternalSettings ();
}
2019-02-14 22:38:14 +07:00
MainWP_Child_Branding :: Instance () -> save_branding_options ( 'branding_disconnected' , '' );
2015-10-15 22:52:37 +10:00
MainWP_Helper :: update_option ( 'mainwp_child_branding_disconnected' , '' , 'yes' );
if ( isset ( $_POST [ 'server' ] ) ) {
MainWP_Helper :: update_option ( 'mainwp_child_server' , $_POST [ 'server' ] );
}
2019-02-14 22:38:14 +07:00
if ( isset ( $_POST [ 'numberdaysOutdatePluginTheme' ] ) ) {
2015-10-15 22:52:37 +10:00
$days_outdate = get_option ( 'mainwp_child_plugintheme_days_outdate' , 365 );
2019-02-14 22:38:14 +07:00
if ( $days_outdate != $_POST [ 'numberdaysOutdatePluginTheme' ] ) {
$days_outdate = intval ( $_POST [ 'numberdaysOutdatePluginTheme' ]);
2015-10-15 22:52:37 +10:00
MainWP_Helper :: update_option ( 'mainwp_child_plugintheme_days_outdate' , $days_outdate );
MainWP_Child_Plugins_Check :: Instance () -> cleanup_deactivation ( false );
MainWP_Child_Themes_Check :: Instance () -> cleanup_deactivation ( false );
}
}
2015-12-12 18:39:23 +01:00
$information [ 'version' ] = self :: $version ;
2015-10-15 22:52:37 +10:00
$information [ 'wpversion' ] = $wp_version ;
$information [ 'siteurl' ] = get_option ( 'siteurl' );
2020-03-26 19:45:07 +00:00
$information [ 'wpe' ] = MainWP_Helper :: is_wp_engine () ? 1 : 0 ;
$theme_name = wp_get_theme () -> get ( 'Name' );
$information [ 'site_info' ] = array (
2020-03-26 15:29:54 +00:00
'wpversion' => $wp_version ,
'debug_mode' => ( defined ( 'WP_DEBUG' ) && true === WP_DEBUG ) ? true : false ,
'phpversion' => phpversion (),
'child_version' => self :: $version ,
'memory_limit' => MainWP_Child_Server_Information :: getPHPMemoryLimit (),
'mysql_version' => MainWP_Child_Server_Information :: getMySQLVersion (),
2019-12-09 22:02:19 +07:00
'themeactivated' => $theme_name ,
2020-03-26 15:29:54 +00:00
'ip' => $_SERVER [ 'SERVER_ADDR' ],
2017-01-14 13:16:52 +01:00
);
2020-03-26 20:01:04 +00:00
// Try to switch to SSL if SSL is enabled in between!
2016-12-25 14:38:20 +01:00
$pubkey = get_option ( 'mainwp_child_pubkey' );
2020-03-26 19:45:07 +00:00
$nossl = get_option ( 'mainwp_child_nossl' );
2020-03-26 17:03:00 +00:00
if ( 1 == $nossl ) {
2016-12-25 14:38:20 +01:00
if ( isset ( $pubkey ) && MainWP_Helper :: isSSLEnabled () ) {
MainWP_Helper :: update_option ( 'mainwp_child_nossl' , 0 , 'yes' );
$nossl = 0 ;
}
}
2020-03-26 19:45:07 +00:00
$information [ 'nossl' ] = ( 1 == $nossl ? 1 : 0 );
2015-10-15 22:52:37 +10:00
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/update.php' ;
2015-10-15 22:52:37 +10:00
$timeout = 3 * 60 * 60 ; // 3minutes
@ set_time_limit ( $timeout );
@ ini_set ( 'max_execution_time' , $timeout );
2020-03-26 20:01:04 +00:00
// Check for new versions
2015-10-15 22:52:37 +10:00
if ( null !== $this -> filterFunction ) {
add_filter ( 'pre_site_transient_update_core' , $this -> filterFunction , 99 );
}
if ( null !== $this -> filterFunction ) {
add_filter ( 'pre_transient_update_core' , $this -> filterFunction , 99 );
}
@ wp_version_check ();
$core_updates = get_core_updates ();
2017-05-11 21:07:42 +02:00
if ( is_array ( $core_updates ) && count ( $core_updates ) > 0 ) {
2015-10-15 22:52:37 +10:00
foreach ( $core_updates as $core_update ) {
if ( 'latest' === $core_update -> response ) {
break ;
}
if ( 'upgrade' === $core_update -> response && version_compare ( $wp_version , $core_update -> current , '<=' ) ) {
$information [ 'wp_updates' ] = $core_update -> current ;
}
}
}
if ( ! isset ( $information [ 'wp_updates' ] ) ) {
$information [ 'wp_updates' ] = null ;
}
if ( null !== $this -> filterFunction ) {
remove_filter ( 'pre_site_transient_update_core' , $this -> filterFunction , 99 );
}
if ( null !== $this -> filterFunction ) {
remove_filter ( 'pre_transient_update_core' , $this -> filterFunction , 99 );
}
add_filter ( 'default_option_active_plugins' , array ( & $this , 'default_option_active_plugins' ) );
add_filter ( 'option_active_plugins' , array ( & $this , 'default_option_active_plugins' ) );
2020-03-26 20:01:04 +00:00
// First check for new premium updates
2015-10-15 22:52:37 +10:00
$update_check = apply_filters ( 'mwp_premium_update_check' , array () );
if ( ! empty ( $update_check ) ) {
foreach ( $update_check as $updateFeedback ) {
if ( is_array ( $updateFeedback [ 'callback' ] ) && isset ( $updateFeedback [ 'callback' ][ 0 ] ) && isset ( $updateFeedback [ 'callback' ][ 1 ] ) ) {
@ call_user_func ( array ( $updateFeedback [ 'callback' ][ 0 ], $updateFeedback [ 'callback' ][ 1 ] ) );
2020-03-26 14:11:33 +00:00
} elseif ( is_string ( $updateFeedback [ 'callback' ] ) ) {
2015-10-15 22:52:37 +10:00
@ call_user_func ( $updateFeedback [ 'callback' ] );
}
}
}
$informationPremiumUpdates = apply_filters ( 'mwp_premium_update_notification' , array () );
$premiumPlugins = array ();
$premiumThemes = array ();
if ( is_array ( $informationPremiumUpdates ) ) {
2020-03-26 19:45:07 +00:00
$premiumUpdates = array ();
$information [ 'premium_updates' ] = array ();
2015-10-15 22:52:37 +10:00
$informationPremiumUpdatesLength = count ( $informationPremiumUpdates );
for ( $i = 0 ; $i < $informationPremiumUpdatesLength ; $i ++ ) {
if ( ! isset ( $informationPremiumUpdates [ $i ][ 'new_version' ] ) ) {
continue ;
}
$slug = ( isset ( $informationPremiumUpdates [ $i ][ 'slug' ] ) ? $informationPremiumUpdates [ $i ][ 'slug' ] : $informationPremiumUpdates [ $i ][ 'Name' ] );
if ( 'plugin' === $informationPremiumUpdates [ $i ][ 'type' ] ) {
$premiumPlugins [] = $slug ;
2020-03-26 14:11:33 +00:00
} elseif ( 'theme' === $informationPremiumUpdates [ $i ][ 'type' ] ) {
2015-10-15 22:52:37 +10:00
$premiumThemes [] = $slug ;
}
$new_version = $informationPremiumUpdates [ $i ][ 'new_version' ];
unset ( $informationPremiumUpdates [ $i ][ 'old_version' ] );
unset ( $informationPremiumUpdates [ $i ][ 'new_version' ] );
$information [ 'premium_updates' ][ $slug ] = $informationPremiumUpdates [ $i ];
$information [ 'premium_updates' ][ $slug ][ 'update' ] = ( object ) array (
'new_version' => $new_version ,
'premium' => true ,
'slug' => $slug ,
);
if ( ! in_array ( $slug , $premiumUpdates ) ) {
$premiumUpdates [] = $slug ;
}
}
MainWP_Helper :: update_option ( 'mainwp_premium_updates' , $premiumUpdates );
}
remove_filter ( 'default_option_active_plugins' , array ( & $this , 'default_option_active_plugins' ) );
remove_filter ( 'option_active_plugins' , array ( & $this , 'default_option_active_plugins' ) );
if ( null !== $this -> filterFunction ) {
add_filter ( 'pre_site_transient_update_plugins' , $this -> filterFunction , 99 );
}
global $wp_current_filter ;
$wp_current_filter [] = 'load-plugins.php' ;
@ wp_update_plugins ();
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/plugin.php' ;
2018-09-27 19:52:32 +02:00
2015-10-15 22:52:37 +10:00
$plugin_updates = get_plugin_updates ();
if ( is_array ( $plugin_updates ) ) {
$information [ 'plugin_updates' ] = array ();
foreach ( $plugin_updates as $slug => $plugin_update ) {
if ( in_array ( $plugin_update -> Name , $premiumPlugins ) ) {
continue ;
}
2019-03-25 22:11:41 +07:00
// to fix incorrect info
2020-03-26 17:03:00 +00:00
if ( ! property_exists ( $plugin_update , 'update' ) || ! property_exists ( $plugin_update -> update , 'new_version' ) || empty ( $plugin_update -> update -> new_version )) {
2019-03-25 22:11:41 +07:00
continue ;
}
2016-02-15 22:08:39 +01:00
2015-10-15 22:52:37 +10:00
$information [ 'plugin_updates' ][ $slug ] = $plugin_update ;
2016-02-15 22:08:39 +01:00
}
2015-10-15 22:52:37 +10:00
}
2016-02-15 22:08:39 +01:00
2015-10-15 22:52:37 +10:00
if ( null !== $this -> filterFunction ) {
remove_filter ( 'pre_site_transient_update_plugins' , $this -> filterFunction , 99 );
}
2019-02-14 22:38:14 +07:00
// to fix premium plugs update
$cached_plugins_update = get_site_transient ( 'mainwp_update_plugins_cached' );
if ( is_array ( $cached_plugins_update ) && ( count ( $cached_plugins_update ) > 0 ) ) {
2020-03-26 17:03:00 +00:00
if ( ! isset ( $information [ 'plugin_updates' ])) {
2018-09-27 19:52:32 +02:00
$information [ 'plugin_updates' ] = array ();
}
2020-03-26 17:03:00 +00:00
foreach ( $cached_plugins_update as $slug => $plugin_update ) {
2020-02-25 22:31:13 +07:00
2019-03-25 22:11:41 +07:00
// to fix incorrect info
2020-03-26 17:03:00 +00:00
if ( ! property_exists ( $plugin_update , 'new_version' ) || empty ( $plugin_update -> new_version ) ) { // may do not need to check this?
2020-02-25 19:41:28 +07:00
// to fix for some premiums update info
if ( property_exists ( $plugin_update , 'update' ) ) {
2020-03-26 17:03:00 +00:00
if ( ! property_exists ( $plugin_update -> update , 'new_version' ) || empty ( $plugin_update -> update -> new_version ) ) {
2020-03-26 19:51:58 +00:00
continue ;
}
2020-02-25 19:41:28 +07:00
} else {
continue ;
}
2020-02-25 22:31:13 +07:00
2020-02-25 19:41:28 +07:00
}
2020-02-25 22:31:13 +07:00
2020-03-26 17:03:00 +00:00
if ( ! isset ( $information [ 'plugin_updates' ][ $slug ] ) ) {
2018-09-27 19:52:32 +02:00
$information [ 'plugin_updates' ][ $slug ] = $plugin_update ;
}
}
}
2015-10-15 22:52:37 +10:00
if ( null !== $this -> filterFunction ) {
add_filter ( 'pre_site_transient_update_themes' , $this -> filterFunction , 99 );
}
@ wp_update_themes ();
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/theme.php' ;
2015-10-15 22:52:37 +10:00
$theme_updates = $this -> upgrade_get_theme_updates ();
if ( is_array ( $theme_updates ) ) {
$information [ 'theme_updates' ] = array ();
foreach ( $theme_updates as $slug => $theme_update ) {
$name = ( is_array ( $theme_update ) ? $theme_update [ 'Name' ] : $theme_update -> Name );
if ( in_array ( $name , $premiumThemes ) ) {
continue ;
}
$information [ 'theme_updates' ][ $slug ] = $theme_update ;
}
}
if ( null !== $this -> filterFunction ) {
remove_filter ( 'pre_site_transient_update_themes' , $this -> filterFunction , 99 );
}
2016-02-15 22:08:39 +01:00
2019-02-14 22:38:14 +07:00
// to fix premium themes update
$cached_themes_update = get_site_transient ( 'mainwp_update_themes_cached' );
if ( is_array ( $cached_themes_update ) && ( count ( $cached_themes_update ) > 0 ) ) {
2020-03-26 17:03:00 +00:00
if ( ! isset ( $information [ 'theme_updates' ])) {
2019-02-14 22:38:14 +07:00
$information [ 'theme_updates' ] = array ();
}
foreach ( $cached_themes_update as $slug => $theme_update ) {
$name = ( is_array ( $theme_update ) ? $theme_update [ 'Name' ] : $theme_update -> Name );
if ( in_array ( $name , $premiumThemes ) ) {
continue ;
}
if ( isset ( $information [ 'theme_updates' ][ $slug ] ) ) {
continue ;
}
$information [ 'theme_updates' ][ $slug ] = $theme_update ;
}
}
2016-02-15 22:08:39 +01:00
$translation_updates = wp_get_translation_updates ();
2020-03-26 17:03:00 +00:00
if ( ! empty ( $translation_updates ) ) {
2016-02-15 22:08:39 +01:00
$information [ 'translation_updates' ] = array ();
2020-03-26 17:03:00 +00:00
foreach ( $translation_updates as $translation_update ) {
2020-03-26 15:29:54 +00:00
$new_translation_update = array (
'type' => $translation_update -> type ,
'slug' => $translation_update -> slug ,
'language' => $translation_update -> language ,
'version' => $translation_update -> version ,
);
2016-02-15 22:08:39 +01:00
if ( 'plugin' === $translation_update -> type ) {
$all_plugins = get_plugins ();
foreach ( $all_plugins as $file => $plugin ) {
2019-03-25 22:11:41 +07:00
$path = dirname ( $file );
if ( $path == $translation_update -> slug ) {
2016-02-15 22:08:39 +01:00
$new_translation_update [ 'name' ] = $plugin [ 'Name' ];
break ;
}
}
2020-03-26 14:11:33 +00:00
} elseif ( 'theme' === $translation_update -> type ) {
2020-03-26 19:45:07 +00:00
$theme = wp_get_theme ( $translation_update -> slug );
2016-02-15 22:08:39 +01:00
$new_translation_update [ 'name' ] = $theme -> name ;
2020-03-26 14:11:33 +00:00
} elseif ( ( 'core' === $translation_update -> type ) && ( 'default' === $translation_update -> slug ) ) {
2019-03-06 22:45:51 +07:00
$new_translation_update [ 'name' ] = 'WordPress core' ;
2016-02-15 22:08:39 +01:00
}
$information [ 'translation_updates' ][] = $new_translation_update ;
}
}
2015-10-15 22:52:37 +10:00
$information [ 'recent_comments' ] = $this -> get_recent_comments ( array ( 'approve' , 'hold' ), 5 );
2019-08-26 23:29:16 +07:00
$recent_number = 5 ;
if ( isset ( $_POST ) && isset ( $_POST [ 'recent_number' ] )) {
$recent_number = $_POST [ 'recent_number' ];
if ( $recent_number != get_option ( 'mainwp_child_recent_number' , 5 )) {
update_option ( 'mainwp_child_recent_number' , $recent_number );
}
} else {
$recent_number = get_option ( 'mainwp_child_recent_number' , 5 );
}
if ( $recent_number <= 0 || $recent_number > 30 ) {
$recent_number = 5 ;
}
2020-03-26 19:45:07 +00:00
$information [ 'recent_posts' ] = $this -> get_recent_posts ( array ( 'publish' , 'draft' , 'pending' , 'trash' , 'future' ), $recent_number );
$information [ 'recent_pages' ] = $this -> get_recent_posts ( array (
2015-10-15 22:52:37 +10:00
'publish' ,
'draft' ,
'pending' ,
'trash' ,
2020-03-26 14:05:04 +00:00
'future' ,
2019-08-26 23:29:16 +07:00
), $recent_number , 'page' );
2015-10-15 22:52:37 +10:00
$securityIssuess = 0 ;
if ( ! MainWP_Security :: prevent_listing_ok () ) {
$securityIssuess ++ ;
}
if ( ! MainWP_Security :: remove_wp_version_ok () ) {
$securityIssuess ++ ;
}
if ( ! MainWP_Security :: remove_rsd_ok () ) {
$securityIssuess ++ ;
}
if ( ! MainWP_Security :: remove_wlw_ok () ) {
$securityIssuess ++ ;
}
2020-03-26 20:01:04 +00:00
// if (!MainWP_Security::remove_core_update_ok()) $securityIssuess++;
// if (!MainWP_Security::remove_plugin_update_ok()) $securityIssuess++;
// if (!MainWP_Security::remove_theme_update_ok()) $securityIssuess++;
// if (!MainWP_Security::fix_file_permissions_ok()) $securityIssuess++;
2015-10-15 22:52:37 +10:00
if ( ! MainWP_Security :: remove_database_reporting_ok () ) {
$securityIssuess ++ ;
}
if ( ! MainWP_Security :: remove_php_reporting_ok () ) {
$securityIssuess ++ ;
}
2016-02-15 22:08:39 +01:00
if ( ! MainWP_Security :: remove_scripts_version_ok () || ! MainWP_Security :: remove_styles_version_ok () || ! MainWP_Security :: remove_generator_version_ok () ) {
2015-10-15 22:52:37 +10:00
$securityIssuess ++ ;
}
2018-09-27 19:52:32 +02:00
if ( ! MainWP_Security :: remove_registered_versions_ok () ) {
$securityIssuess ++ ;
}
2015-10-15 22:52:37 +10:00
if ( ! MainWP_Security :: admin_user_ok () ) {
$securityIssuess ++ ;
}
if ( ! MainWP_Security :: remove_readme_ok () ) {
$securityIssuess ++ ;
}
$information [ 'securityIssues' ] = $securityIssuess ;
2020-03-26 20:01:04 +00:00
// Directory listings!
2015-10-15 22:52:37 +10:00
$information [ 'directories' ] = $this -> scanDir ( ABSPATH , 3 );
2020-03-26 15:29:54 +00:00
$cats = get_categories ( array (
'hide_empty' => 0 ,
'hierarchical' => true ,
'number' => 300 ,
) );
2015-10-15 22:52:37 +10:00
$categories = array ();
foreach ( $cats as $cat ) {
$categories [] = $cat -> name ;
}
$information [ 'categories' ] = $categories ;
2020-03-26 19:45:07 +00:00
$get_file_size = apply_filters ( 'mainwp-child-get-total-size' , true );
2018-12-19 17:01:08 +07:00
if ( $get_file_size && isset ( $_POST [ 'cloneSites' ] ) && ( '0' !== $_POST [ 'cloneSites' ] ) ) {
2018-09-27 19:52:32 +02:00
$max_exe = ini_get ( 'max_execution_time' ); // to fix issue of some hosts have limit of execution time
if ( $max_exe > 20 ) {
2020-03-26 19:45:07 +00:00
$information [ 'totalsize' ] = $this -> getTotalFileSize ();
2018-09-27 19:52:32 +02:00
}
2017-12-04 21:55:05 +01:00
}
2020-03-26 19:45:07 +00:00
$information [ 'dbsize' ] = MainWP_Child_DB :: get_size ();
2015-10-15 22:52:37 +10:00
$auths = get_option ( 'mainwp_child_auth' );
$information [ 'extauth' ] = ( $auths && isset ( $auths [ $this -> maxHistory ] ) ? $auths [ $this -> maxHistory ] : null );
$plugins = $this -> get_all_plugins_int ( false );
$themes = $this -> get_all_themes_int ( false );
$information [ 'plugins' ] = $plugins ;
$information [ 'themes' ] = $themes ;
if ( isset ( $_POST [ 'optimize' ] ) && ( '1' === $_POST [ 'optimize' ] ) ) {
2018-01-22 20:21:06 +01:00
$information [ 'users' ] = $this -> get_all_users_int ( 500 ); // to fix
2015-10-15 22:52:37 +10:00
}
2020-03-26 17:03:00 +00:00
if ( isset ( $_POST [ 'primaryBackup' ]) && ! empty ( $_POST [ 'primaryBackup' ])) {
2020-03-26 19:45:07 +00:00
$primary_bk = $_POST [ 'primaryBackup' ];
2018-04-17 20:33:10 +02:00
$information [ 'primaryLasttimeBackup' ] = MainWP_Helper :: get_lasttime_backup ( $primary_bk );
}
2015-10-15 22:52:37 +10:00
$last_post = wp_get_recent_posts ( array ( 'numberposts' => absint ( '1' ) ) );
if ( isset ( $last_post [ 0 ] ) ) {
$last_post = $last_post [ 0 ];
}
if ( isset ( $last_post ) && isset ( $last_post [ 'post_modified_gmt' ] ) ) {
$information [ 'last_post_gmt' ] = strtotime ( $last_post [ 'post_modified_gmt' ] );
}
$information [ 'mainwpdir' ] = ( MainWP_Helper :: validateMainWPDir () ? 1 : - 1 );
$information [ 'uniqueId' ] = get_option ( 'mainwp_child_uniqueId' , '' );
$information [ 'plugins_outdate_info' ] = MainWP_Child_Plugins_Check :: Instance () -> get_plugins_outdate_info ();
$information [ 'themes_outdate_info' ] = MainWP_Child_Themes_Check :: Instance () -> get_themes_outdate_info ();
2019-05-06 22:42:18 +07:00
if ( isset ( $_POST [ 'user' ] )) {
$user = get_user_by ( 'login' , $_POST [ 'user' ] );
if ( $user && property_exists ( $user , 'ID' ) && $user -> ID ) {
2020-03-26 17:03:00 +00:00
$information [ 'admin_nicename' ] = $user -> data -> user_nicename ;
$information [ 'admin_useremail' ] = $user -> data -> user_email ;
2019-05-06 22:42:18 +07:00
}
}
2018-06-26 19:52:53 +02:00
try {
do_action ( 'mainwp_child_site_stats' );
2020-03-26 17:03:00 +00:00
} catch ( Exception $e ) {
2018-09-27 19:52:32 +02:00
2018-06-26 19:52:53 +02:00
}
2018-09-27 19:52:32 +02:00
2015-10-15 22:52:37 +10:00
if ( isset ( $_POST [ 'othersData' ] ) ) {
$othersData = json_decode ( stripslashes ( $_POST [ 'othersData' ] ), true );
if ( ! is_array ( $othersData ) ) {
$othersData = array ();
2018-09-27 19:52:32 +02:00
}
2020-02-03 22:55:50 +07:00
2019-10-01 22:38:34 +07:00
if ( isset ( $othersData [ 'wpvulndbToken' ] ) ) {
2020-02-03 22:55:50 +07:00
$wpvulndb_token = get_option ( 'mainwp_child_wpvulndb_token' , '' );
if ( $wpvulndb_token != $othersData [ 'wpvulndbToken' ] ) {
MainWP_Helper :: update_option ( 'mainwp_child_wpvulndb_token' , $othersData [ 'wpvulndbToken' ] );
2019-10-01 22:38:34 +07:00
}
}
2020-02-03 22:55:50 +07:00
2020-03-26 17:03:00 +00:00
try {
2018-09-27 19:52:32 +02:00
$information = apply_filters ( 'mainwp-site-sync-others-data' , $information , $othersData );
2020-03-26 17:03:00 +00:00
} catch ( Exception $e ) {
2018-06-26 19:52:53 +02:00
// do not exit
}
2015-10-15 22:52:37 +10:00
}
2016-03-03 20:28:07 +01:00
2015-10-15 22:52:37 +10:00
if ( $exit ) {
MainWP_Helper :: write ( $information );
}
return $information ;
}
2016-12-29 22:19:20 +01:00
function get_site_icon () {
$information = array ();
2020-03-26 19:45:07 +00:00
$url = $this -> get_favicon ( true );
2020-03-26 17:03:00 +00:00
if ( ! empty ( $url ) ) {
2016-12-29 22:19:20 +01:00
$information [ 'faviIconUrl' ] = $url ;
2020-03-26 14:11:33 +00:00
}
2016-12-29 22:19:20 +01:00
MainWP_Helper :: write ( $information );
}
2015-10-15 22:52:37 +10:00
2016-12-29 22:19:20 +01:00
function get_favicon ( $parse_page = false ) {
$favi_url = '' ;
2020-03-26 19:45:07 +00:00
$favi = '' ; // to compatible
2016-12-29 22:19:20 +01:00
$site_url = get_option ( 'siteurl' );
2020-03-26 19:51:58 +00:00
if ( substr ( $site_url , - 1 ) != '/' ) {
$site_url .= '/' ;
}
2015-10-15 22:52:37 +10:00
2016-10-24 20:33:37 +02:00
if ( function_exists ( 'get_site_icon_url' ) && has_site_icon () ) {
2016-12-29 22:19:20 +01:00
$favi = $favi_url = get_site_icon_url ();
2015-10-15 22:52:37 +10:00
}
2018-09-27 19:52:32 +02:00
if ( empty ( $favi ) ) {
2016-12-29 22:19:20 +01:00
if ( file_exists ( ABSPATH . 'favicon.ico' ) ) {
$favi = 'favicon.ico' ;
2020-03-26 14:11:33 +00:00
} elseif ( file_exists ( ABSPATH . 'favicon.png' ) ) {
2016-12-29 22:19:20 +01:00
$favi = 'favicon.png' ;
}
2020-03-26 17:03:00 +00:00
if ( ! empty ( $favi ) ) {
$favi_url = $site_url . $favi ;
2016-12-29 22:19:20 +01:00
}
2015-10-15 22:52:37 +10:00
}
2016-12-29 22:19:20 +01:00
if ( $parse_page ) {
// try to parse page
if ( empty ( $favi_url )) {
$request = wp_remote_get ( $site_url , array ( 'timeout' => 50 ) );
2020-03-26 19:45:07 +00:00
$favi = '' ;
2016-12-29 22:19:20 +01:00
if ( is_array ( $request ) && isset ( $request [ 'body' ] ) ) {
2020-03-26 19:51:58 +00:00
// to fix bug
$preg_str1 = '/(<link\s+(?:[^\>]*)(?:rel="shortcut\s+icon"\s*)(?:[^>]*)?href="([^"]+)"(?:[^>]*)?>)/is' ;
$preg_str2 = '/(<link\s+(?:[^\>]*)(?:rel="(?:shortcut\s+)?icon"\s*)(?:[^>]*)?href="([^"]+)"(?:[^>]*)?>)/is' ;
if ( preg_match ( $preg_str1 , $request [ 'body' ], $matches ) ) {
$favi = $matches [ 2 ];
} elseif ( preg_match ( $preg_str2 , $request [ 'body' ], $matches ) ) {
$favi = $matches [ 2 ];
}
2016-12-29 22:19:20 +01:00
}
2020-03-26 17:03:00 +00:00
if ( ! empty ( $favi ) ) {
2018-11-27 15:07:40 +07:00
if ( false === strpos ( $favi , 'http' )) {
2020-03-26 19:51:58 +00:00
if ( 0 === strpos ( $favi , '//' )) {
if ( 0 === strpos ( $site_url , 'https' )) {
$favi_url = 'https:' . $favi ;
} else {
$favi_url = 'http:' . $favi ;
}
} else {
2018-11-27 15:07:40 +07:00
$favi_url = $site_url . $favi ;
2020-03-26 19:51:58 +00:00
}
2016-12-29 22:19:20 +01:00
} else {
$favi_url = $favi ;
}
}
}
2020-03-26 17:03:00 +00:00
if ( ! empty ( $favi_url ) ) {
2016-12-29 22:19:20 +01:00
return $favi_url ;
} else {
return false ;
}
} else {
return $favi_url ;
}
2015-10-15 22:52:37 +10:00
}
function scanDir ( $pDir , $pLvl ) {
$output = array ();
if ( file_exists ( $pDir ) && is_dir ( $pDir ) ) {
if ( 'logs' === basename ( $pDir ) ) {
return empty ( $output ) ? null : $output ;
}
if ( 0 === $pLvl ) {
return empty ( $output ) ? null : $output ;
}
if ( $files = $this -> intScanDir ( $pDir ) ) {
foreach ( $files as $file ) {
if ( ( '.' === $file ) || ( '..' === $file ) ) {
continue ;
}
$newDir = $pDir . $file . DIRECTORY_SEPARATOR ;
if ( @ is_dir ( $newDir ) ) {
$output [ $file ] = $this -> scanDir ( $newDir , $pLvl - 1 , false );
}
}
unset ( $files );
$files = null ;
}
}
return empty ( $output ) ? null : $output ;
}
function intScanDir ( $dir ) {
if ( @ is_dir ( $dir ) && ( $dh = @ opendir ( $dir ) ) ) {
$cnt = 0 ;
$out = array ();
while ( ( $file = @ readdir ( $dh ) ) !== false ) {
$newDir = $dir . $file . DIRECTORY_SEPARATOR ;
if ( ! @ is_dir ( $newDir ) ) {
continue ;
}
$out [] = $file ;
if ( $cnt ++ > 10 ) {
return $out ;
}
}
@ closedir ( $dh );
return $out ;
}
return false ;
}
function upgrade_get_theme_updates () {
$themeUpdates = get_theme_updates ();
$newThemeUpdates = array ();
if ( is_array ( $themeUpdates ) ) {
foreach ( $themeUpdates as $slug => $themeUpdate ) {
$newThemeUpdate = array ();
$newThemeUpdate [ 'update' ] = $themeUpdate -> update ;
$newThemeUpdate [ 'Name' ] = MainWP_Helper :: search ( $themeUpdate , 'Name' );
$newThemeUpdate [ 'Version' ] = MainWP_Helper :: search ( $themeUpdate , 'Version' );
$newThemeUpdates [ $slug ] = $newThemeUpdate ;
}
}
return $newThemeUpdates ;
}
function get_recent_posts ( $pAllowedStatuses , $pCount , $type = 'post' , $extra = null ) {
$allPosts = array ();
if ( null !== $pAllowedStatuses ) {
foreach ( $pAllowedStatuses as $status ) {
$this -> get_recent_posts_int ( $status , $pCount , $type , $allPosts , $extra );
}
} else {
$this -> get_recent_posts_int ( 'any' , $pCount , $type , $allPosts , $extra );
}
return $allPosts ;
}
function get_recent_posts_int ( $status , $pCount , $type = 'post' , & $allPosts , $extra = null ) {
$args = array (
'post_status' => $status ,
'suppress_filters' => false ,
'post_type' => $type ,
);
$tokens = array ();
if ( is_array ( $extra ) && isset ( $extra [ 'tokens' ] ) ) {
$tokens = $extra [ 'tokens' ];
2016-08-02 19:51:22 +02:00
if ( 1 == $extra [ 'extract_post_type' ] ) {
2015-10-15 22:52:37 +10:00
$args [ 'post_type' ] = 'post' ;
2020-03-26 14:11:33 +00:00
} elseif ( 2 == $extra [ 'extract_post_type' ] ) {
2015-10-15 22:52:37 +10:00
$args [ 'post_type' ] = 'page' ;
2020-03-26 14:11:33 +00:00
} elseif ( 3 == $extra [ 'extract_post_type' ] ) {
2015-10-15 22:52:37 +10:00
$args [ 'post_type' ] = array ( 'post' , 'page' );
}
}
$tokens = array_flip ( $tokens );
if ( 0 !== $pCount ) {
$args [ 'numberposts' ] = $pCount ;
}
2019-02-19 23:52:21 +07:00
/*
*
* Credits
*
* Plugin - Name : Yoast SEO
* Plugin URI : https :// yoast . com / wordpress / plugins / seo / #utm_source=wpadmin&utm_medium=plugin&utm_campaign=wpseoplugin
* Author : Team Yoast
* Author URI : https :// yoast . com /
* Licence : GPL v3
*
* The code is used for the MainWP WordPress SEO Extension
* Extension URL : https :// mainwp . com / extension / wordpress - seo /
*
2020-03-26 19:51:58 +00:00
*/
2019-02-19 23:52:21 +07:00
2017-08-24 20:41:12 +02:00
$wp_seo_enabled = false ;
if ( isset ( $_POST [ 'WPSEOEnabled' ] ) && $_POST [ 'WPSEOEnabled' ]) {
2020-03-26 19:51:58 +00:00
if ( is_plugin_active ( 'wordpress-seo/wp-seo.php' ) && class_exists ( 'WPSEO_Link_Column_Count' ) && class_exists ( 'WPSEO_Meta' )) {
2017-08-24 20:41:12 +02:00
$wp_seo_enabled = true ;
2020-03-26 19:51:58 +00:00
}
2017-08-24 20:41:12 +02:00
}
2015-10-15 22:52:37 +10:00
$posts = get_posts ( $args );
if ( is_array ( $posts ) ) {
2017-08-24 20:41:12 +02:00
if ( $wp_seo_enabled ) {
$post_ids = array ();
foreach ( $posts as $post ) {
$post_ids [] = $post -> ID ;
}
$link_count = new WPSEO_Link_Column_Count ();
$link_count -> set ( $post_ids );
}
2015-10-15 22:52:37 +10:00
foreach ( $posts as $post ) {
2020-03-26 19:45:07 +00:00
$outPost = array ();
$outPost [ 'id' ] = $post -> ID ;
$outPost [ 'post_type' ] = $post -> post_type ;
$outPost [ 'status' ] = $post -> post_status ;
$outPost [ 'title' ] = $post -> post_title ;
2020-03-26 20:01:04 +00:00
// $outPost['content'] = $post->post_content; // to fix overload memory
2015-10-15 22:52:37 +10:00
$outPost [ 'comment_count' ] = $post -> comment_count ;
2017-12-04 21:55:05 +01:00
// to support extract urls extension
2020-03-26 17:03:00 +00:00
if ( isset ( $extra [ 'where_post_date' ] ) && ! empty ( $extra [ 'where_post_date' ] ) ) {
2015-12-05 17:38:52 +01:00
$outPost [ 'dts' ] = strtotime ( $post -> post_date_gmt );
} else {
$outPost [ 'dts' ] = strtotime ( $post -> post_modified_gmt );
}
2018-09-27 19:52:32 +02:00
2017-12-04 21:55:05 +01:00
if ( $post -> post_status == 'future' ) {
$outPost [ 'dts' ] = strtotime ( $post -> post_date_gmt );
}
2018-09-27 19:52:32 +02:00
2020-03-26 19:45:07 +00:00
$usr = get_user_by ( 'id' , $post -> post_author );
$outPost [ 'author' ] = ! empty ( $usr ) ? $usr -> user_nicename : 'removed' ;
$categoryObjects = get_the_category ( $post -> ID );
$categories = '' ;
2015-10-15 22:52:37 +10:00
foreach ( $categoryObjects as $cat ) {
if ( '' !== $categories ) {
$categories .= ', ' ;
}
$categories .= $cat -> name ;
}
$outPost [ 'categories' ] = $categories ;
$tagObjects = get_the_tags ( $post -> ID );
$tags = '' ;
if ( is_array ( $tagObjects ) ) {
foreach ( $tagObjects as $tag ) {
if ( '' !== $tags ) {
$tags .= ', ' ;
}
$tags .= $tag -> name ;
}
}
$outPost [ 'tags' ] = $tags ;
if ( is_array ( $tokens ) ) {
if ( isset ( $tokens [ '[post.url]' ] ) ) {
$outPost [ '[post.url]' ] = get_permalink ( $post -> ID );
}
if ( isset ( $tokens [ '[post.website.url]' ] ) ) {
$outPost [ '[post.website.url]' ] = get_site_url ();
}
if ( isset ( $tokens [ '[post.website.name]' ] ) ) {
$outPost [ '[post.website.name]' ] = get_bloginfo ( 'name' );
}
}
2017-08-24 20:41:12 +02:00
if ( $wp_seo_enabled ) {
2020-03-26 19:45:07 +00:00
$post_id = $post -> ID ;
2017-08-24 20:41:12 +02:00
$outPost [ 'seo_data' ] = array (
2020-03-26 15:29:54 +00:00
'count_seo_links' => $link_count -> get ( $post_id , 'internal_link_count' ),
'count_seo_linked' => $link_count -> get ( $post_id , 'incoming_link_count' ),
'seo_score' => MainWP_Wordpress_SEO :: Instance () -> parse_column_score ( $post_id ),
2017-08-24 20:41:12 +02:00
'readability_score' => MainWP_Wordpress_SEO :: Instance () -> parse_column_score_readability ( $post_id ),
);
}
2015-10-15 22:52:37 +10:00
$allPosts [] = $outPost ;
}
}
}
function posts_where ( $where ) {
if ( $this -> posts_where_suffix ) {
$where .= ' ' . $this -> posts_where_suffix ;
}
return $where ;
}
function get_all_posts () {
2020-03-26 15:29:54 +00:00
$post_type = ( isset ( $_POST [ 'post_type' ]) ? $_POST [ 'post_type' ] : 'post' );
2016-05-22 17:16:34 +02:00
$this -> get_all_posts_by_type ( $post_type );
2015-10-15 22:52:37 +10:00
}
function get_terms () {
$taxonomy = base64_decode ( $_POST [ 'taxonomy' ] );
$rslt = get_terms ( taxonomy_exists ( $taxonomy ) ? $taxonomy : 'category' , 'hide_empty=0' );
MainWP_Helper :: write ( $rslt );
}
function set_terms () {
$id = base64_decode ( $_POST [ 'id' ] );
$terms = base64_decode ( $_POST [ 'terms' ] );
$taxonomy = base64_decode ( $_POST [ 'taxonomy' ] );
if ( '' !== trim ( $terms ) ) {
$terms = explode ( ',' , $terms );
if ( count ( $terms ) > 0 ) {
wp_set_object_terms ( $id , array_map ( 'intval' , $terms ), taxonomy_exists ( $taxonomy ) ? $taxonomy : 'category' );
}
}
}
function insert_comment () {
$postId = $_POST [ 'id' ];
2015-12-05 17:38:52 +01:00
$comments = maybe_unserialize ( base64_decode ( $_POST [ 'comments' ] ) );
2015-10-15 22:52:37 +10:00
$ids = array ();
foreach ( $comments as $comment ) {
$ids [] = wp_insert_comment ( array (
'comment_post_ID' => $postId ,
'comment_author' => $comment [ 'author' ],
'comment_content' => $comment [ 'content' ],
'comment_date' => $comment [ 'date' ],
) );
}
MainWP_Helper :: write ( $ids );
}
function get_post_meta () {
/** @var $wpdb wpdb */
global $wpdb ;
$postId = $_POST [ 'id' ];
$keys = base64_decode ( unserialize ( $_POST [ 'keys' ] ) );
$meta_value = $_POST [ 'value' ];
$where = '' ;
if ( ! empty ( $postId ) ) {
$where .= " AND `post_id` = $postId " ;
}
if ( ! empty ( $keys ) ) {
$str_keys = '\'' . implode ( '\',\'' , $keys ) . '\'' ;
2020-03-26 19:45:07 +00:00
$where .= " AND `meta_key` IN = $str_keys " ;
2015-10-15 22:52:37 +10:00
}
if ( ! empty ( $meta_value ) ) {
$where .= " AND `meta_value` = $meta_value " ;
}
2015-12-05 17:38:52 +01:00
$results = $wpdb -> get_results ( $wpdb -> prepare ( " SELECT * FROM %s WHERE 1 = 1 $where " , $wpdb -> postmeta ) );
2015-10-15 22:52:37 +10:00
MainWP_Helper :: write ( $results );
}
function get_total_ezine_post () {
/** @var $wpdb wpdb */
global $wpdb ;
$start_date = base64_decode ( $_POST [ 'start_date' ] );
$end_date = base64_decode ( $_POST [ 'end_date' ] );
$keyword_meta = base64_decode ( $_POST [ 'keyword_meta' ] );
$where = ' WHERE ' ;
if ( ! empty ( $start_date ) && ! empty ( $end_date ) ) {
$where .= " p.post_date>=' $start_date ' AND p.post_date<=' $end_date ' AND " ;
2020-03-26 14:11:33 +00:00
} elseif ( ! empty ( $start_date ) && empty ( $end_date ) ) {
2015-10-15 22:52:37 +10:00
$where .= " p.post_date=' $start_date ' AND " ;
}
$where .= " ( p.post_status='publish' OR p.post_status='future' OR p.post_status='draft' )
AND ( pm . meta_key = '_ezine_keyword' AND pm . meta_value = '$keyword_meta' ) " ;
2020-03-26 19:45:07 +00:00
$total = $wpdb -> get_var ( " SELECT COUNT(*)
2015-10-15 22:52:37 +10:00
FROM $wpdb -> posts p JOIN $wpdb -> postmeta pm ON p . ID = pm . post_id
$where " );
MainWP_Helper :: write ( $total );
}
function cancel_scheduled_post () {
global $wpdb ;
$postId = $_POST [ 'post_id' ];
$cancel_all = $_POST [ 'cancel_all' ];
$result = false ;
$information = array ();
if ( $postId > 0 ) {
if ( 'yes' === get_post_meta ( $postId , '_is_auto_generate_content' , true ) ) {
2015-12-05 17:38:52 +01:00
$post = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->posts
WHERE ID = % d
AND post_status = 'future' " , $postId ) );
2015-10-15 22:52:37 +10:00
if ( $post ) {
$result = wp_trash_post ( $postId );
} else {
$result = true ;
}
}
if ( ! $result ) {
$information [ 'status' ] = 'SUCCESS' ;
}
2020-03-26 14:11:33 +00:00
} elseif ( $cancel_all ) {
2015-10-15 22:52:37 +10:00
$post_type = $_POST [ 'post_type' ];
2015-12-05 17:38:52 +01:00
$where = " WHERE p.post_status='future' AND p.post_type = %s AND pm.meta_key = '_is_auto_generate_content' AND pm.meta_value = 'yes' " ;
$posts = $wpdb -> get_results ( $wpdb -> prepare ( " SELECT p.ID FROM $wpdb->posts p JOIN $wpdb->postmeta pm ON p.ID=pm.post_id $where " , $post_type ) );
2015-10-15 22:52:37 +10:00
$count = 0 ;
if ( is_array ( $posts ) ) {
foreach ( $posts as $post ) {
if ( $post ) {
if ( false !== wp_trash_post ( $post -> ID ) ) {
$count ++ ;
}
}
}
} else {
$posts = array ();
}
$information [ 'status' ] = 'SUCCESS' ;
$information [ 'count' ] = $count ;
}
MainWP_Helper :: write ( $information );
}
function get_next_time_to_post () {
$post_type = $_POST [ 'post_type' ];
if ( 'post' !== $post_type && 'page' !== $post_type ) {
MainWP_Helper :: write ( array ( 'error' => 'Data error.' ) );
return ;
}
$information = array ();
try {
global $wpdb ;
$ct = current_time ( 'mysql' );
2015-12-05 17:38:52 +01:00
$next_post = $wpdb -> get_row ( $wpdb -> prepare ( '
2015-10-15 22:52:37 +10:00
SELECT *
FROM ' . $wpdb->posts . ' p JOIN ' . $wpdb -> postmeta . " pm ON p.ID=pm.post_id
WHERE
pm . meta_key = '_is_auto_generate_content' AND
pm . meta_value = 'yes' AND
p . post_status = 'future' AND
2015-12-05 17:38:52 +01:00
p . post_type = % s AND
2015-10-15 22:52:37 +10:00
p . post_date > NOW ()
ORDER BY p . post_date
2015-12-05 17:38:52 +01:00
LIMIT 1 " , $post_type ) );
2015-10-15 22:52:37 +10:00
if ( ! $next_post ) {
2016-10-24 20:33:37 +02:00
$information [ 'error' ] = __ ( 'No scheduled posts.' , 'mainwp-child' );
2015-10-15 22:52:37 +10:00
} else {
$timestamp = strtotime ( $next_post -> post_date );
$timestamp_gmt = $timestamp - get_option ( 'gmt_offset' ) * 60 * 60 ;
$information [ 'next_post_date_timestamp_gmt' ] = $timestamp_gmt ;
$information [ 'next_post_id' ] = $next_post -> ID ;
}
MainWP_Helper :: write ( $information );
} catch ( Exception $e ) {
$information [ 'error' ] = $e -> getMessage ();
MainWP_Helper :: write ( $information );
}
}
function get_all_pages () {
$this -> get_all_posts_by_type ( 'page' );
}
function get_all_pages_int () {
$rslt = $this -> get_recent_posts ( null , - 1 , 'page' );
return $rslt ;
}
function get_all_posts_by_type ( $type ) {
global $wpdb ;
add_filter ( 'posts_where' , array ( & $this , 'posts_where' ) );
2020-03-26 17:03:00 +00:00
$where_post_date = isset ( $_POST [ 'where_post_date' ]) && ! empty ( $_POST [ 'where_post_date' ]) ? true : false ;
2015-10-15 22:52:37 +10:00
if ( isset ( $_POST [ 'postId' ] ) ) {
$this -> posts_where_suffix .= " AND $wpdb->posts .ID = " . $_POST [ 'postId' ];
2020-03-26 14:11:33 +00:00
} elseif ( isset ( $_POST [ 'userId' ] ) ) {
2015-10-15 22:52:37 +10:00
$this -> posts_where_suffix .= " AND $wpdb->posts .post_author = " . $_POST [ 'userId' ];
} else {
if ( isset ( $_POST [ 'keyword' ] ) ) {
2017-12-04 21:55:05 +01:00
$search_on = isset ( $_POST [ 'search_on' ]) ? $_POST [ 'search_on' ] : '' ;
if ( $search_on == 'title' ) {
$this -> posts_where_suffix .= " AND ( $wpdb->posts .post_title LIKE '% " . $_POST [ 'keyword' ] . " %' ) " ;
2020-03-26 14:11:33 +00:00
} elseif ( $search_on == 'content' ) {
2017-12-04 21:55:05 +01:00
$this -> posts_where_suffix .= " AND ( $wpdb->posts .post_content LIKE '% " . $_POST [ 'keyword' ] . " %' ) " ;
} else {
$this -> posts_where_suffix .= " AND ( $wpdb->posts .post_content LIKE '% " . $_POST [ 'keyword' ] . " %' OR $wpdb->posts .post_title LIKE '% " . $_POST [ 'keyword' ] . " %' ) " ;
}
2015-10-15 22:52:37 +10:00
}
if ( isset ( $_POST [ 'dtsstart' ] ) && '' !== $_POST [ 'dtsstart' ] ) {
2015-12-05 17:38:52 +01:00
if ( $where_post_date ) {
$this -> posts_where_suffix .= " AND $wpdb->posts .post_date > ' " . $_POST [ 'dtsstart' ] . " ' " ;
} else {
$this -> posts_where_suffix .= " AND $wpdb->posts .post_modified > ' " . $_POST [ 'dtsstart' ] . " ' " ;
}
2015-10-15 22:52:37 +10:00
}
if ( isset ( $_POST [ 'dtsstop' ] ) && '' !== $_POST [ 'dtsstop' ] ) {
2015-12-05 17:38:52 +01:00
if ( $where_post_date ) {
$this -> posts_where_suffix .= " AND $wpdb->posts .post_date < ' " . $_POST [ 'dtsstop' ] . " ' " ;
} else {
$this -> posts_where_suffix .= " AND $wpdb->posts .post_modified < ' " . $_POST [ 'dtsstop' ] . " ' " ;
}
2015-10-15 22:52:37 +10:00
}
2017-08-24 20:41:12 +02:00
if ( isset ( $_POST [ 'exclude_page_type' ] ) && $_POST [ 'exclude_page_type' ] ) {
$this -> posts_where_suffix .= " AND $wpdb->posts .post_type NOT IN ('page') " ;
}
2015-10-15 22:52:37 +10:00
}
$maxPages = MAINWP_CHILD_NR_OF_PAGES ;
if ( isset ( $_POST [ 'maxRecords' ] ) ) {
$maxPages = $_POST [ 'maxRecords' ];
}
if ( 0 === $maxPages ) {
$maxPages = 99999 ;
}
$extra = array ();
if ( isset ( $_POST [ 'extract_tokens' ] ) ) {
2015-12-05 17:38:52 +01:00
$extra [ 'tokens' ] = maybe_unserialize ( base64_decode ( $_POST [ 'extract_tokens' ] ) );
2015-10-15 22:52:37 +10:00
$extra [ 'extract_post_type' ] = $_POST [ 'extract_post_type' ];
}
2015-12-05 17:38:52 +01:00
$extra [ 'where_post_date' ] = $where_post_date ;
2015-10-15 22:52:37 +10:00
$rslt = $this -> get_recent_posts ( explode ( ',' , $_POST [ 'status' ] ), $maxPages , $type , $extra );
$this -> posts_where_suffix = '' ;
MainWP_Helper :: write ( $rslt );
}
function comments_clauses ( $clauses ) {
if ( $this -> comments_and_clauses ) {
$clauses [ 'where' ] .= ' ' . $this -> comments_and_clauses ;
}
return $clauses ;
}
function get_all_comments () {
global $wpdb ;
add_filter ( 'comments_clauses' , array ( & $this , 'comments_clauses' ) );
if ( isset ( $_POST [ 'postId' ] ) ) {
$this -> comments_and_clauses .= " AND $wpdb->comments .comment_post_ID = " . $_POST [ 'postId' ];
} else {
if ( isset ( $_POST [ 'keyword' ] ) ) {
$this -> comments_and_clauses .= " AND $wpdb->comments .comment_content LIKE '% " . $_POST [ 'keyword' ] . " %' " ;
}
if ( isset ( $_POST [ 'dtsstart' ] ) && '' !== $_POST [ 'dtsstart' ] ) {
$this -> comments_and_clauses .= " AND $wpdb->comments .comment_date > ' " . $_POST [ 'dtsstart' ] . " ' " ;
}
if ( isset ( $_POST [ 'dtsstop' ] ) && '' !== $_POST [ 'dtsstop' ] ) {
$this -> comments_and_clauses .= " AND $wpdb->comments .comment_date < ' " . $_POST [ 'dtsstop' ] . " ' " ;
}
}
$maxComments = MAINWP_CHILD_NR_OF_COMMENTS ;
if ( isset ( $_POST [ 'maxRecords' ] ) ) {
$maxComments = $_POST [ 'maxRecords' ];
}
if ( 0 === $maxComments ) {
$maxComments = 99999 ;
}
$rslt = $this -> get_recent_comments ( explode ( ',' , $_POST [ 'status' ] ), $maxComments );
$this -> comments_and_clauses = '' ;
MainWP_Helper :: write ( $rslt );
}
function get_recent_comments ( $pAllowedStatuses , $pCount ) {
if ( ! function_exists ( 'get_comment_author_url' ) ) {
2020-03-26 14:11:33 +00:00
include_once WPINC . '/comment-template.php' ;
2015-10-15 22:52:37 +10:00
}
$allComments = array ();
foreach ( $pAllowedStatuses as $status ) {
$params = array ( 'status' => $status );
if ( 0 !== $pCount ) {
$params [ 'number' ] = $pCount ;
}
$comments = get_comments ( $params );
if ( is_array ( $comments ) ) {
foreach ( $comments as $comment ) {
$post = get_post ( $comment -> comment_post_ID );
$outComment = array ();
$outComment [ 'id' ] = $comment -> comment_ID ;
$outComment [ 'status' ] = wp_get_comment_status ( $comment -> comment_ID );
$outComment [ 'author' ] = $comment -> comment_author ;
$outComment [ 'author_url' ] = get_comment_author_url ( $comment -> comment_ID );
$outComment [ 'author_ip' ] = get_comment_author_IP ( $comment -> comment_ID );
$outComment [ 'author_email' ] = $email = apply_filters ( 'comment_email' , $comment -> comment_author_email );
2020-03-27 19:18:06 +07:00
// if ( ( ! empty( $outComment['author_email'] ) ) && ( '@' !== $outComment['author_email'] ) ) {
// $outComment['author_email'] = '<a href="mailto:' . $outComment['author_email'] . '">' . $outComment['author_email'] . '</a>';
// }
2015-10-15 22:52:37 +10:00
$outComment [ 'postId' ] = $comment -> comment_post_ID ;
$outComment [ 'postName' ] = $post -> post_title ;
$outComment [ 'comment_count' ] = $post -> comment_count ;
$outComment [ 'content' ] = $comment -> comment_content ;
$outComment [ 'dts' ] = strtotime ( $comment -> comment_date_gmt );
$allComments [] = $outComment ;
}
}
}
return $allComments ;
}
function theme_action () {
2020-03-26 20:01:04 +00:00
// Read form data
2015-10-15 22:52:37 +10:00
$action = $_POST [ 'action' ];
$theme = $_POST [ 'theme' ];
if ( 'activate' === $action ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/theme.php' ;
2018-06-26 19:52:53 +02:00
$theTheme = wp_get_theme ( $theme );
2015-10-15 22:52:37 +10:00
if ( null !== $theTheme && '' !== $theTheme ) {
switch_theme ( $theTheme [ 'Template' ], $theTheme [ 'Stylesheet' ] );
}
2020-03-26 14:11:33 +00:00
} elseif ( 'delete' === $action ) {
include_once ABSPATH . '/wp-admin/includes/theme.php' ;
2020-03-26 20:01:04 +00:00
// if (file_exists(ABSPATH . '/wp-admin/includes/deprecated.php')) include_once(ABSPATH . '/wp-admin/includes/deprecated.php');
2015-10-15 22:52:37 +10:00
if ( file_exists ( ABSPATH . '/wp-admin/includes/screen.php' ) ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/screen.php' ;
2015-10-15 22:52:37 +10:00
}
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/file.php' ;
include_once ABSPATH . '/wp-admin/includes/template.php' ;
include_once ABSPATH . '/wp-admin/includes/misc.php' ;
include_once ABSPATH . '/wp-admin/includes/class-wp-upgrader.php' ;
include_once ABSPATH . '/wp-admin/includes/class-wp-filesystem-base.php' ;
include_once ABSPATH . '/wp-admin/includes/class-wp-filesystem-direct.php' ;
2015-10-15 22:52:37 +10:00
$wp_filesystem = $this -> getWPFilesystem ();
if ( empty ( $wp_filesystem ) ) {
$wp_filesystem = new WP_Filesystem_Direct ( null );
}
$themeUpgrader = new Theme_Upgrader ();
$theme_name = wp_get_theme () -> get ( 'Name' );
$themes = explode ( '||' , $theme );
2017-02-22 21:39:22 +01:00
if ( count ( $themes ) == 1 ) {
$themeToDelete = current ( $themes );
if ( $themeToDelete == $theme_name ) {
$information [ 'error' ] = 'IsActivatedTheme' ;
MainWP_Helper :: write ( $information );
return ;
}
}
2018-09-27 19:52:32 +02:00
2015-10-15 22:52:37 +10:00
foreach ( $themes as $idx => $themeToDelete ) {
if ( $themeToDelete !== $theme_name ) {
2018-06-26 19:52:53 +02:00
$theTheme = wp_get_theme ( $themeToDelete );
2015-10-15 22:52:37 +10:00
if ( null !== $theTheme && '' !== $theTheme ) {
$tmp [ 'theme' ] = $theTheme [ 'Template' ];
if ( true === $themeUpgrader -> delete_old_theme ( null , null , null , $tmp ) ) {
2020-03-26 15:29:54 +00:00
$args = array (
'action' => 'delete' ,
'Name' => $theTheme [ 'Name' ],
);
2015-10-15 22:52:37 +10:00
do_action ( 'mainwp_child_theme_action' , $args );
}
}
}
}
} else {
$information [ 'status' ] = 'FAIL' ;
}
if ( ! isset ( $information [ 'status' ] ) ) {
$information [ 'status' ] = 'SUCCESS' ;
}
$information [ 'sync' ] = $this -> getSiteStats ( array (), false );
MainWP_Helper :: write ( $information );
}
function get_all_themes () {
$keyword = $_POST [ 'keyword' ];
$status = $_POST [ 'status' ];
$filter = isset ( $_POST [ 'filter' ] ) ? $_POST [ 'filter' ] : true ;
$rslt = $this -> get_all_themes_int ( $filter , $keyword , $status );
MainWP_Helper :: write ( $rslt );
}
function get_all_themes_int ( $filter , $keyword = '' , $status = '' ) {
$rslt = array ();
$themes = wp_get_themes ();
if ( is_array ( $themes ) ) {
$theme_name = wp_get_theme () -> get ( 'Name' );
/** @var $theme WP_Theme */
foreach ( $themes as $theme ) {
$out = array ();
$out [ 'name' ] = $theme -> get ( 'Name' );
$out [ 'title' ] = $theme -> display ( 'Name' , true , false );
$out [ 'description' ] = $theme -> display ( 'Description' , true , false );
$out [ 'version' ] = $theme -> display ( 'Version' , true , false );
$out [ 'active' ] = ( $theme -> get ( 'Name' ) === $theme_name ) ? 1 : 0 ;
$out [ 'slug' ] = $theme -> get_stylesheet ();
if ( ! $filter ) {
2016-10-24 20:33:37 +02:00
if ( '' == $keyword || stristr ( $out [ 'title' ], $keyword ) ) {
2015-10-15 22:52:37 +10:00
$rslt [] = $out ;
}
2020-03-26 14:11:33 +00:00
} elseif ( $out [ 'active' ] === ( ( 'active' === $status ) ? 1 : 0 ) ) {
2016-10-24 20:33:37 +02:00
if ( '' == $keyword || stristr ( $out [ 'title' ], $keyword ) ) {
2015-10-15 22:52:37 +10:00
$rslt [] = $out ;
}
}
}
}
return $rslt ;
}
function plugin_action () {
2020-03-26 20:01:04 +00:00
// Read form data
2015-10-15 22:52:37 +10:00
$action = $_POST [ 'action' ];
$plugins = explode ( '||' , $_POST [ 'plugin' ] );
if ( 'activate' === $action ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/plugin.php' ;
2015-10-15 22:52:37 +10:00
foreach ( $plugins as $idx => $plugin ) {
if ( $plugin !== $this -> plugin_slug ) {
$thePlugin = get_plugin_data ( $plugin );
if ( null !== $thePlugin && '' !== $thePlugin ) {
2017-12-04 21:55:05 +01:00
// to fix activate issue
if ( 'quotes-collection/quotes-collection.php' == $plugin ) {
activate_plugin ( $plugin , '' , false , true );
2020-03-26 20:01:04 +00:00
// do_action( 'activate_plugin', $plugin, null );
2018-09-27 19:52:32 +02:00
} else {
2017-12-04 21:55:05 +01:00
activate_plugin ( $plugin );
}
2015-10-15 22:52:37 +10:00
}
}
}
2020-03-26 14:11:33 +00:00
} elseif ( 'deactivate' === $action ) {
include_once ABSPATH . '/wp-admin/includes/plugin.php' ;
2015-10-15 22:52:37 +10:00
foreach ( $plugins as $idx => $plugin ) {
if ( $plugin !== $this -> plugin_slug ) {
$thePlugin = get_plugin_data ( $plugin );
if ( null !== $thePlugin && '' !== $thePlugin ) {
deactivate_plugins ( $plugin );
}
}
}
2020-03-26 14:11:33 +00:00
} elseif ( 'delete' === $action ) {
include_once ABSPATH . '/wp-admin/includes/plugin.php' ;
2020-03-26 20:01:04 +00:00
// if (file_exists(ABSPATH . '/wp-admin/includes/deprecated.php')) include_once(ABSPATH . '/wp-admin/includes/deprecated.php');
2015-10-15 22:52:37 +10:00
if ( file_exists ( ABSPATH . '/wp-admin/includes/screen.php' ) ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/screen.php' ;
2015-10-15 22:52:37 +10:00
}
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/file.php' ;
include_once ABSPATH . '/wp-admin/includes/template.php' ;
include_once ABSPATH . '/wp-admin/includes/misc.php' ;
include_once ABSPATH . '/wp-admin/includes/class-wp-upgrader.php' ;
include_once ABSPATH . '/wp-admin/includes/class-wp-filesystem-base.php' ;
include_once ABSPATH . '/wp-admin/includes/class-wp-filesystem-direct.php' ;
2015-10-15 22:52:37 +10:00
$wp_filesystem = $this -> getWPFilesystem ();
if ( null === $wp_filesystem ) {
$wp_filesystem = new WP_Filesystem_Direct ( null );
}
$pluginUpgrader = new Plugin_Upgrader ();
$all_plugins = get_plugins ();
foreach ( $plugins as $idx => $plugin ) {
if ( $plugin !== $this -> plugin_slug ) {
if ( isset ( $all_plugins [ $plugin ] ) ) {
2017-01-04 21:03:57 +01:00
if ( is_plugin_active ( $plugin )) {
$thePlugin = get_plugin_data ( $plugin );
if ( null !== $thePlugin && '' !== $thePlugin ) {
deactivate_plugins ( $plugin );
}
}
$tmp [ 'plugin' ] = $plugin ;
2015-10-15 22:52:37 +10:00
if ( true === $pluginUpgrader -> delete_old_plugin ( null , null , null , $tmp ) ) {
2020-03-26 15:29:54 +00:00
$args = array (
'action' => 'delete' ,
'Name' => $all_plugins [ $plugin ][ 'Name' ],
);
2015-10-15 22:52:37 +10:00
do_action ( 'mainwp_child_plugin_action' , $args );
}
}
}
}
} else {
$information [ 'status' ] = 'FAIL' ;
}
if ( ! isset ( $information [ 'status' ] ) ) {
$information [ 'status' ] = 'SUCCESS' ;
}
$information [ 'sync' ] = $this -> getSiteStats ( array (), false );
MainWP_Helper :: write ( $information );
}
function get_all_plugins () {
$keyword = $_POST [ 'keyword' ];
$status = $_POST [ 'status' ];
$filter = isset ( $_POST [ 'filter' ] ) ? $_POST [ 'filter' ] : true ;
$rslt = $this -> get_all_plugins_int ( $filter , $keyword , $status );
MainWP_Helper :: write ( $rslt );
}
function get_all_plugins_int ( $filter , $keyword = '' , $status = '' ) {
if ( ! function_exists ( 'get_plugins' ) ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . 'wp-admin/includes/plugin.php' ;
2015-10-15 22:52:37 +10:00
}
$rslt = array ();
$plugins = get_plugins ();
if ( is_array ( $plugins ) ) {
$active_plugins = get_option ( 'active_plugins' );
foreach ( $plugins as $pluginslug => $plugin ) {
$out = array ();
2020-03-26 19:45:07 +00:00
$out [ 'mainwp' ] = ( $pluginslug == $this -> plugin_slug ? 'T' : 'F' );
2015-10-15 22:52:37 +10:00
$out [ 'name' ] = $plugin [ 'Name' ];
$out [ 'slug' ] = $pluginslug ;
$out [ 'description' ] = $plugin [ 'Description' ];
$out [ 'version' ] = $plugin [ 'Version' ];
2017-07-11 14:10:22 +02:00
$out [ 'active' ] = is_plugin_active ( $pluginslug ) ? 1 : 0 ; // ( is_array( $active_plugins ) && in_array( $pluginslug, $active_plugins ) ) ? 1 : 0; // to fix for multisites
2015-10-15 22:52:37 +10:00
if ( ! $filter ) {
2015-12-22 19:18:07 +01:00
if ( '' == $keyword || stristr ( $out [ 'name' ], $keyword ) ) {
2015-10-15 22:52:37 +10:00
$rslt [] = $out ;
}
2020-03-26 14:11:33 +00:00
} elseif ( $out [ 'active' ] == ( ( $status == 'active' ) ? 1 : 0 ) ) {
2015-12-22 19:18:07 +01:00
if ( '' == $keyword || stristr ( $out [ 'name' ], $keyword ) ) {
2015-10-15 22:52:37 +10:00
$rslt [] = $out ;
}
}
}
}
2016-04-27 19:25:53 +02:00
$muplugins = get_mu_plugins ();
if ( is_array ( $muplugins ) ) {
foreach ( $muplugins as $pluginslug => $plugin ) {
$out = array ();
2020-03-26 19:45:07 +00:00
$out [ 'mainwp' ] = ( $pluginslug == $this -> plugin_slug ? 'T' : 'F' );
2016-04-27 19:25:53 +02:00
$out [ 'name' ] = $plugin [ 'Name' ];
$out [ 'slug' ] = $pluginslug ;
$out [ 'description' ] = $plugin [ 'Description' ];
$out [ 'version' ] = $plugin [ 'Version' ];
$out [ 'active' ] = 1 ;
$out [ 'mu' ] = 1 ;
if ( ! $filter ) {
if ( '' == $keyword || stristr ( $out [ 'name' ], $keyword ) ) {
$rslt [] = $out ;
}
2020-03-26 14:11:33 +00:00
} elseif ( $out [ 'active' ] == ( ( $status == 'active' ) ? 1 : 0 ) ) {
2016-04-27 19:25:53 +02:00
if ( '' == $keyword || stristr ( $out [ 'name' ], $keyword ) ) {
$rslt [] = $out ;
}
}
}
}
2015-10-15 22:52:37 +10:00
return $rslt ;
}
2020-03-26 14:05:04 +00:00
function get_all_users ( $return = false ) {
2020-03-26 19:45:07 +00:00
$roles = explode ( ',' , $_POST [ 'role' ] );
2015-10-15 22:52:37 +10:00
$allusers = array ();
if ( is_array ( $roles ) ) {
foreach ( $roles as $role ) {
$new_users = get_users ( 'role=' . $role );
2020-03-26 20:01:04 +00:00
// $allusers[$role] = array();
2015-10-15 22:52:37 +10:00
foreach ( $new_users as $new_user ) {
$usr = array ();
$usr [ 'id' ] = $new_user -> ID ;
$usr [ 'login' ] = $new_user -> user_login ;
$usr [ 'nicename' ] = $new_user -> user_nicename ;
$usr [ 'email' ] = $new_user -> user_email ;
$usr [ 'registered' ] = $new_user -> user_registered ;
$usr [ 'status' ] = $new_user -> user_status ;
$usr [ 'display_name' ] = $new_user -> display_name ;
$usr [ 'role' ] = $role ;
$usr [ 'post_count' ] = count_user_posts ( $new_user -> ID );
$usr [ 'avatar' ] = get_avatar ( $new_user -> ID , 32 );
$allusers [] = $usr ;
}
}
}
2020-03-26 19:51:58 +00:00
if ( $return ) {
return $allusers ;
}
2015-10-15 22:52:37 +10:00
MainWP_Helper :: write ( $allusers );
}
2020-03-26 14:05:04 +00:00
function get_all_users_int ( $number = false ) {
2015-10-15 22:52:37 +10:00
$allusers = array ();
2018-01-22 20:21:06 +01:00
$params = array ();
2020-03-26 14:11:33 +00:00
if ( $number ) {
2018-01-22 20:21:06 +01:00
$params [ 'number' ] = $number ;
2020-03-26 14:11:33 +00:00
}
2018-09-27 19:52:32 +02:00
2018-01-22 20:21:06 +01:00
$new_users = get_users ( $params );
2015-10-15 22:52:37 +10:00
if ( is_array ( $new_users ) ) {
foreach ( $new_users as $new_user ) {
$usr = array ();
$usr [ 'id' ] = $new_user -> ID ;
$usr [ 'login' ] = $new_user -> user_login ;
$usr [ 'nicename' ] = $new_user -> user_nicename ;
$usr [ 'email' ] = $new_user -> user_email ;
$usr [ 'registered' ] = $new_user -> user_registered ;
$usr [ 'status' ] = $new_user -> user_status ;
$usr [ 'display_name' ] = $new_user -> display_name ;
$userdata = get_userdata ( $new_user -> ID );
$user_roles = $userdata -> roles ;
$user_role = array_shift ( $user_roles );
$usr [ 'role' ] = $user_role ;
$usr [ 'post_count' ] = count_user_posts ( $new_user -> ID );
$allusers [] = $usr ;
}
}
return $allusers ;
}
function search_users () {
2018-09-27 19:52:32 +02:00
2019-11-11 23:17:10 +07:00
$search_user_role = array ();
$check_users_role = false ;
2018-09-27 19:52:32 +02:00
2020-03-26 17:03:00 +00:00
if ( isset ( $_POST [ 'role' ]) && ! empty ( $_POST [ 'role' ])) {
2019-11-11 23:17:10 +07:00
$check_users_role = true ;
2020-03-26 19:45:07 +00:00
$all_users_role = $this -> get_all_users ( true );
2020-03-26 17:03:00 +00:00
foreach ( $all_users_role as $user ) {
2019-11-11 23:17:10 +07:00
$search_user_role [] = $user [ 'id' ];
}
unset ( $all_users_role );
}
2018-09-27 19:52:32 +02:00
2015-10-15 22:52:37 +10:00
$columns = explode ( ',' , $_POST [ 'search_columns' ] );
$allusers = array ();
$exclude = array ();
foreach ( $columns as $col ) {
if ( empty ( $col ) ) {
continue ;
}
$user_query = new WP_User_Query ( array (
'search' => $_POST [ 'search' ],
'fields' => 'all_with_meta' ,
'search_columns' => array ( $col ),
'query_orderby' => array ( $col ),
'exclude' => $exclude ,
) );
if ( ! empty ( $user_query -> results ) ) {
foreach ( $user_query -> results as $new_user ) {
2020-03-26 19:51:58 +00:00
if ( $check_users_role ) {
if ( ! in_array ( $new_user -> ID , $search_user_role )) {
continue ;
}
}
2015-10-15 22:52:37 +10:00
$exclude [] = $new_user -> ID ;
$usr = array ();
$usr [ 'id' ] = $new_user -> ID ;
$usr [ 'login' ] = $new_user -> user_login ;
$usr [ 'nicename' ] = $new_user -> user_nicename ;
$usr [ 'email' ] = $new_user -> user_email ;
$usr [ 'registered' ] = $new_user -> user_registered ;
$usr [ 'status' ] = $new_user -> user_status ;
$usr [ 'display_name' ] = $new_user -> display_name ;
$userdata = get_userdata ( $new_user -> ID );
$user_roles = $userdata -> roles ;
$user_role = array_shift ( $user_roles );
$usr [ 'role' ] = $user_role ;
$usr [ 'post_count' ] = count_user_posts ( $new_user -> ID );
$usr [ 'avatar' ] = get_avatar ( $new_user -> ID , 32 );
$allusers [] = $usr ;
}
}
}
MainWP_Helper :: write ( $allusers );
}
2020-03-26 20:01:04 +00:00
// Show stats without login - only allowed while no account is added yet
2015-10-15 22:52:37 +10:00
function getSiteStatsNoAuth ( $information = array () ) {
if ( get_option ( 'mainwp_child_pubkey' ) ) {
2016-02-17 20:38:44 +01:00
$hint = '<br/>' . __ ( 'Hint: Go to the child site, deactivate and reactivate the MainWP Child plugin and try again.' , 'mainwp-child' );
2020-03-26 14:05:04 +00:00
MainWP_Helper :: error ( __ ( 'This site already contains a link. Please deactivate and reactivate the MainWP plugin.' , 'mainwp-child' ) . $hint );
2015-10-15 22:52:37 +10:00
}
global $wp_version ;
2015-12-12 18:39:23 +01:00
$information [ 'version' ] = self :: $version ;
2015-10-15 22:52:37 +10:00
$information [ 'wpversion' ] = $wp_version ;
2020-03-26 19:45:07 +00:00
$information [ 'wpe' ] = MainWP_Helper :: is_wp_engine () ? 1 : 0 ;
2015-10-15 22:52:37 +10:00
MainWP_Helper :: write ( $information );
}
2020-03-26 20:01:04 +00:00
// Deactivating the plugin
2015-10-15 22:52:37 +10:00
function deactivate () {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . 'wp-admin/includes/plugin.php' ;
2015-10-15 22:52:37 +10:00
deactivate_plugins ( $this -> plugin_slug , true );
$information = array ();
if ( is_plugin_active ( $this -> plugin_slug ) ) {
MainWP_Helper :: error ( 'Plugin still active' );
}
$information [ 'deactivated' ] = true ;
MainWP_Helper :: write ( $information );
}
function activation () {
2018-09-27 19:52:32 +02:00
$mu_plugin_enabled = apply_filters ( 'mainwp_child_mu_plugin_enabled' , false );
2020-03-26 14:11:33 +00:00
if ( $mu_plugin_enabled ) {
2018-09-27 19:52:32 +02:00
return ;
2020-03-26 14:11:33 +00:00
}
2018-09-27 19:52:32 +02:00
2015-10-15 22:52:37 +10:00
$to_delete = array (
'mainwp_child_pubkey' ,
'mainwp_child_nonce' ,
'mainwp_child_nossl' ,
'mainwp_child_nossl_key' ,
);
foreach ( $to_delete as $delete ) {
if ( get_option ( $delete ) ) {
delete_option ( $delete );
}
}
MainWP_Helper :: update_option ( 'mainwp_child_activated_once' , true );
// delete bad data if existed
$to_delete = array ( 'mainwp_ext_snippets_enabled' , 'mainwp_ext_code_snippets' );
foreach ( $to_delete as $delete ) {
delete_option ( $delete );
}
}
2018-06-26 19:52:53 +02:00
function deactivation ( $deact = true ) {
2018-09-27 19:52:32 +02:00
$mu_plugin_enabled = apply_filters ( 'mainwp_child_mu_plugin_enabled' , false );
2020-03-26 14:11:33 +00:00
if ( $mu_plugin_enabled ) {
2018-09-27 19:52:32 +02:00
return ;
2020-03-26 14:11:33 +00:00
}
2018-09-27 19:52:32 +02:00
2015-10-15 22:52:37 +10:00
$to_delete = array (
'mainwp_child_pubkey' ,
'mainwp_child_nonce' ,
'mainwp_child_nossl' ,
'mainwp_child_nossl_key' ,
'mainwp_security' ,
'mainwp_child_server' ,
);
$to_delete [] = 'mainwp_ext_snippets_enabled' ;
$to_delete [] = 'mainwp_ext_code_snippets' ;
foreach ( $to_delete as $delete ) {
if ( get_option ( $delete ) ) {
delete_option ( $delete );
2017-07-11 14:10:22 +02:00
wp_cache_delete ( $delete , 'options' );
2015-10-15 22:52:37 +10:00
}
}
2018-09-27 19:52:32 +02:00
2020-03-26 14:11:33 +00:00
if ( $deact ) {
2018-06-26 19:52:53 +02:00
do_action ( 'mainwp_child_deactivation' );
2020-03-26 14:11:33 +00:00
}
2015-10-15 22:52:37 +10:00
}
function getWPFilesystem () {
global $wp_filesystem ;
if ( empty ( $wp_filesystem ) ) {
ob_start ();
2020-03-26 20:01:04 +00:00
// if (file_exists(ABSPATH . '/wp-admin/includes/deprecated.php')) include_once(ABSPATH . '/wp-admin/includes/deprecated.php');
2015-10-15 22:52:37 +10:00
if ( file_exists ( ABSPATH . '/wp-admin/includes/screen.php' ) ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/screen.php' ;
2015-10-15 22:52:37 +10:00
}
if ( file_exists ( ABSPATH . '/wp-admin/includes/template.php' ) ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/template.php' ;
2015-10-15 22:52:37 +10:00
}
$creds = request_filesystem_credentials ( 'test' , '' , false , false , $extra_fields = null );
ob_end_clean ();
if ( empty ( $creds ) ) {
define ( 'FS_METHOD' , 'direct' );
}
WP_Filesystem ( $creds );
}
if ( empty ( $wp_filesystem ) ) {
MainWP_Helper :: error ( $this -> FTP_ERROR );
2020-03-26 14:11:33 +00:00
} elseif ( is_wp_error ( $wp_filesystem -> errors ) ) {
2015-10-15 22:52:37 +10:00
$errorCodes = $wp_filesystem -> errors -> get_error_codes ();
if ( ! empty ( $errorCodes ) ) {
2016-10-24 20:33:37 +02:00
MainWP_Helper :: error ( __ ( 'WordPress Filesystem error: ' , 'mainwp-child' ) . $wp_filesystem -> errors -> get_error_message () );
2015-10-15 22:52:37 +10:00
}
}
return $wp_filesystem ;
}
function getTotalFileSize ( $directory = WP_CONTENT_DIR ) {
try {
2020-03-26 20:01:04 +00:00
// function continueFileSize( $dir, $limit ) {
// $dirs = array( $dir );
// $cnt = 0;
// while ( isset( $dirs[0] ) ) {
// $path = array_shift( $dirs );
// if ( stristr( $path, WP_CONTENT_DIR . '/uploads/mainwp' ) ) {
// continue;
// }
// $uploadDir = MainWP_Helper::getMainWPDir();
// $uploadDir = $uploadDir[0];
// if ( stristr( $path, $uploadDir ) ) {
// continue;
// }
// $res = @glob( $path . '/*' );
// if ( is_array( $res ) ) {
// foreach ( $res as $next ) {
// if ( is_dir( $next ) ) {
// $dirs[] = $next;
// } else {
// if ($cnt++ > $limit) return false;;
// }
// }
// }
// }
// return true;
// }
2020-03-26 19:51:58 +00:00
//
2020-03-26 20:01:04 +00:00
// if ( !continueFilesize( $directory, 20000 ) ) return 0;
2016-02-15 22:08:39 +01:00
2015-10-15 22:52:37 +10:00
if ( MainWP_Helper :: function_exists ( 'popen' ) ) {
$uploadDir = MainWP_Helper :: getMainWPDir ();
$uploadDir = $uploadDir [ 0 ];
$popenHandle = @ popen ( 'du -s ' . $directory . ' --exclude "' . str_replace ( ABSPATH , '' , $uploadDir ) . '"' , 'r' );
if ( 'resource' === gettype ( $popenHandle ) ) {
$size = @ fread ( $popenHandle , 1024 );
@ pclose ( $popenHandle );
$size = substr ( $size , 0 , strpos ( $size , " \t " ) );
2017-12-04 21:55:05 +01:00
if ( $size && MainWP_Helper :: ctype_digit ( $size ) ) {
2015-10-15 22:52:37 +10:00
return $size / 1024 ;
}
}
}
2016-02-15 22:08:39 +01:00
2015-10-15 22:52:37 +10:00
if ( MainWP_Helper :: function_exists ( 'shell_exec' ) ) {
$uploadDir = MainWP_Helper :: getMainWPDir ();
$uploadDir = $uploadDir [ 0 ];
2016-02-15 22:08:39 +01:00
$size = @ shell_exec ( 'du -s ' . $directory . ' --exclude "' . str_replace ( ABSPATH , '' , $uploadDir ) . '"' );
2015-10-15 22:52:37 +10:00
if ( null !== $size ) {
$size = substr ( $size , 0 , strpos ( $size , " \t " ) );
2017-12-04 21:55:05 +01:00
if ( $size && MainWP_Helper :: ctype_digit ( $size ) ) {
2015-10-15 22:52:37 +10:00
return $size / 1024 ;
}
}
}
if ( class_exists ( 'COM' ) ) {
$obj = new COM ( 'scripting.filesystemobject' );
if ( is_object ( $obj ) ) {
$ref = $obj -> getfolder ( $directory );
$size = $ref -> size ;
$obj = null ;
2016-02-15 22:08:39 +01:00
if ( MainWP_Helper :: ctype_digit ( $size ) ) {
2015-10-15 22:52:37 +10:00
return $size / 1024 ;
}
}
}
2018-09-27 19:52:32 +02:00
// to fix for window host, performance not good?
if ( class_exists ( 'RecursiveIteratorIterator' ) ) {
2017-12-04 21:55:05 +01:00
$size = 0 ;
2020-03-26 17:03:00 +00:00
foreach ( new RecursiveIteratorIterator ( new RecursiveDirectoryIterator ( $directory )) as $file ) {
$size += $file -> getSize ();
2018-09-27 19:52:32 +02:00
}
2017-12-04 21:55:05 +01:00
if ( $size && MainWP_Helper :: ctype_digit ( $size ) ) {
return $size / 1024 / 1024 ;
}
}
2015-10-15 22:52:37 +10:00
2020-03-26 20:01:04 +00:00
// function dirsize( $dir ) {
// $dirs = array( $dir );
// $size = 0;
// while ( isset( $dirs[0] ) ) {
// $path = array_shift( $dirs );
// if ( stristr( $path, WP_CONTENT_DIR . '/uploads/mainwp' ) ) {
// continue;
// }
// $uploadDir = MainWP_Helper::getMainWPDir();
// $uploadDir = $uploadDir[0];
// if ( stristr( $path, $uploadDir ) ) {
// continue;
// }
// $res = @glob( $path . '/*' );
// if ( is_array( $res ) ) {
// foreach ( $res as $next ) {
// if ( is_dir( $next ) ) {
// $dirs[] = $next;
// } else {
// $fs = filesize( $next );
// $size += $fs;
// }
// }
// }
// }
2020-03-26 19:51:58 +00:00
//
2020-03-26 20:01:04 +00:00
// return $size / 1024 / 1024;
// }
2020-03-26 19:51:58 +00:00
//
2020-03-26 20:01:04 +00:00
// return dirsize( $directory );
2016-04-27 19:25:53 +02:00
return 0 ;
2015-10-15 22:52:37 +10:00
} catch ( Exception $e ) {
return 0 ;
}
}
function serverInformation () {
@ ob_start ();
MainWP_Child_Server_Information :: render ();
$output [ 'information' ] = @ ob_get_contents ();
@ ob_end_clean ();
@ ob_start ();
MainWP_Child_Server_Information :: renderCron ();
$output [ 'cron' ] = @ ob_get_contents ();
@ ob_end_clean ();
@ ob_start ();
MainWP_Child_Server_Information :: renderErrorLogPage ();
$output [ 'error' ] = @ ob_get_contents ();
@ ob_end_clean ();
@ ob_start ();
MainWP_Child_Server_Information :: renderWPConfig ();
$output [ 'wpconfig' ] = @ ob_get_contents ();
@ ob_end_clean ();
@ ob_start ();
MainWP_Child_Server_Information :: renderhtaccess ();
$output [ 'htaccess' ] = @ ob_get_contents ();
@ ob_end_clean ();
MainWP_Helper :: write ( $output );
}
function maintenance_site () {
global $wpdb ;
$information = array ();
if ( isset ( $_POST [ 'action' ] ) ) {
if ( 'save_settings' === $_POST [ 'action' ] ) {
2015-12-06 19:05:27 +01:00
if ( isset ( $_POST [ 'enable_alert' ] ) && '1' === $_POST [ 'enable_alert' ] ) {
2015-10-15 22:52:37 +10:00
MainWP_Helper :: update_option ( 'mainwp_maintenance_opt_alert_404' , 1 , 'yes' );
} else {
delete_option ( 'mainwp_maintenance_opt_alert_404' );
}
if ( isset ( $_POST [ 'email' ] ) && ! empty ( $_POST [ 'email' ] ) ) {
MainWP_Helper :: update_option ( 'mainwp_maintenance_opt_alert_404_email' , $_POST [ 'email' ], 'yes' );
} else {
delete_option ( 'mainwp_maintenance_opt_alert_404_email' );
}
$information [ 'result' ] = 'SUCCESS' ;
MainWP_Helper :: write ( $information );
return ;
2020-03-26 14:11:33 +00:00
} elseif ( 'clear_settings' === $_POST [ 'action' ] ) {
2015-10-15 22:52:37 +10:00
delete_option ( 'mainwp_maintenance_opt_alert_404' );
delete_option ( 'mainwp_maintenance_opt_alert_404_email' );
$information [ 'result' ] = 'SUCCESS' ;
MainWP_Helper :: write ( $information );
}
MainWP_Helper :: write ( $information );
}
$maint_options = $_POST [ 'options' ];
$max_revisions = isset ( $_POST [ 'revisions' ] ) ? intval ( $_POST [ 'revisions' ] ) : 0 ;
if ( ! is_array ( $maint_options ) ) {
$information [ 'status' ] = 'FAIL' ;
$maint_options = array ();
}
2020-03-26 20:01:04 +00:00
// $this->options = array(
// 'revisions' => __( 'Delete all post revisions', 'mainwp-maintenance-extension' ),
// 'autodraft' => __( 'Delete all auto draft posts', 'mainwp-maintenance-extension' ),
// 'trashpost' => __( 'Delete trash posts', 'mainwp-maintenance-extension' ),
// 'spam' => __( 'Delete spam comments', 'mainwp-maintenance-extension' ),
// 'pending' => __( 'Delete pending comments', 'mainwp-maintenance-extension' ),
// 'trashcomment' => __( 'Delete trash comments', 'mainwp-maintenance-extension' ),
// 'tags' => __( 'Delete tags with 0 posts associated', 'mainwp-maintenance-extension' ),
// 'categories' => __( 'Delete categories with 0 posts associated', 'mainwp-maintenance-extension' ),
// 'optimize' => __( 'Optimize database tables', 'mainwp-maintenance-extension' )
// );
2020-02-03 22:55:50 +07:00
2017-01-14 13:16:52 +01:00
$performed_what = array ();
2015-10-15 22:52:37 +10:00
if ( empty ( $max_revisions ) ) {
$sql_clean = " DELETE FROM $wpdb->posts WHERE post_type = 'revision' " ;
$wpdb -> query ( $sql_clean );
2019-12-09 22:02:19 +07:00
// to fix issue of meta_value short length
2020-03-26 20:01:04 +00:00
$performed_what [] = 'revisions' ; // 'Posts revisions deleted';
2015-10-15 22:52:37 +10:00
} else {
2020-03-26 19:45:07 +00:00
$results = MainWP_Helper :: getRevisions ( $max_revisions );
$count_deleted = MainWP_Helper :: deleteRevisions ( $results , $max_revisions );
2020-03-26 20:01:04 +00:00
$performed_what [] = 'revisions' ; // 'Posts revisions deleted';
2015-10-15 22:52:37 +10:00
}
if ( in_array ( 'autodraft' , $maint_options ) ) {
$sql_clean = " DELETE FROM $wpdb->posts WHERE post_status = 'auto-draft' " ;
$wpdb -> query ( $sql_clean );
2020-03-26 20:01:04 +00:00
$performed_what [] = 'autodraft' ; // 'Auto draft posts deleted';
2015-10-15 22:52:37 +10:00
}
if ( in_array ( 'trashpost' , $maint_options ) ) {
$sql_clean = " DELETE FROM $wpdb->posts WHERE post_status = 'trash' " ;
$wpdb -> query ( $sql_clean );
2020-03-26 20:01:04 +00:00
$performed_what [] = 'trashpost' ; // 'Trash posts deleted';
2015-10-15 22:52:37 +10:00
}
if ( in_array ( 'spam' , $maint_options ) ) {
$sql_clean = " DELETE FROM $wpdb->comments WHERE comment_approved = 'spam' " ;
$wpdb -> query ( $sql_clean );
2020-03-26 20:01:04 +00:00
$performed_what [] = 'spam' ; // 'Spam comments deleted';
2015-10-15 22:52:37 +10:00
}
if ( in_array ( 'pending' , $maint_options ) ) {
$sql_clean = " DELETE FROM $wpdb->comments WHERE comment_approved = '0' " ;
$wpdb -> query ( $sql_clean );
2020-03-26 20:01:04 +00:00
$performed_what [] = 'pending' ; // 'Pending comments deleted';
2015-10-15 22:52:37 +10:00
}
if ( in_array ( 'trashcomment' , $maint_options ) ) {
$sql_clean = " DELETE FROM $wpdb->comments WHERE comment_approved = 'trash' " ;
$wpdb -> query ( $sql_clean );
2020-03-26 20:01:04 +00:00
$performed_what [] = 'trashcomment' ; // 'Trash comments deleted';
2015-10-15 22:52:37 +10:00
}
if ( in_array ( 'tags' , $maint_options ) ) {
$post_tags = get_terms ( 'post_tag' , array ( 'hide_empty' => false ) );
if ( is_array ( $post_tags ) ) {
foreach ( $post_tags as $tag ) {
if ( 0 === $tag -> count ) {
wp_delete_term ( $tag -> term_id , 'post_tag' );
}
}
}
2020-03-26 20:01:04 +00:00
$performed_what [] = 'tags' ; // 'Tags with 0 posts associated deleted';
2015-10-15 22:52:37 +10:00
}
if ( in_array ( 'categories' , $maint_options ) ) {
$post_cats = get_terms ( 'category' , array ( 'hide_empty' => false ) );
if ( is_array ( $post_cats ) ) {
foreach ( $post_cats as $cat ) {
if ( 0 === $cat -> count ) {
wp_delete_term ( $cat -> term_id , 'category' );
}
}
}
2020-03-26 20:01:04 +00:00
$performed_what [] = 'categories' ; // 'Categories with 0 posts associated deleted';
2015-10-15 22:52:37 +10:00
}
if ( in_array ( 'optimize' , $maint_options ) ) {
$this -> maintenance_optimize ();
2020-03-26 20:01:04 +00:00
$performed_what [] = 'optimize' ; // 'Database optimized';
2015-10-15 22:52:37 +10:00
}
if ( ! isset ( $information [ 'status' ] ) ) {
$information [ 'status' ] = 'SUCCESS' ;
}
2017-01-14 13:16:52 +01:00
2020-03-26 17:03:00 +00:00
if ( ! empty ( $performed_what ) && has_action ( 'mainwp_reports_maintenance' ) ) {
2020-03-26 19:45:07 +00:00
$details = implode ( ',' , $performed_what );
2017-01-14 13:16:52 +01:00
$log_time = time ();
2020-03-26 19:45:07 +00:00
$message = $result = 'Maintenance Performed' ;
2017-01-14 13:16:52 +01:00
do_action ( 'mainwp_reports_maintenance' , $message , $log_time , $details , $result );
}
2015-10-15 22:52:37 +10:00
MainWP_Helper :: write ( $information );
}
function maintenance_optimize () {
global $wpdb , $table_prefix ;
$sql = 'SHOW TABLE STATUS FROM `' . DB_NAME . '`' ;
$result = @ MainWP_Child_DB :: _query ( $sql , $wpdb -> dbh );
if ( @ MainWP_Child_DB :: num_rows ( $result ) && @ MainWP_Child_DB :: is_result ( $result ) ) {
while ( $row = MainWP_Child_DB :: fetch_array ( $result ) ) {
if ( strpos ( $row [ 'Name' ], $table_prefix ) !== false ) {
$sql = 'OPTIMIZE TABLE ' . $row [ 'Name' ];
MainWP_Child_DB :: _query ( $sql , $wpdb -> dbh );
}
}
}
}
function maintenance_alert_404 () {
if ( ! is_404 () ) {
return ;
}
2016-02-17 20:38:44 +01:00
if ( 1 !== ( int ) get_option ( 'mainwp_maintenance_opt_alert_404' ) ) {
return ;
}
2015-10-15 22:52:37 +10:00
$email = get_option ( 'mainwp_maintenance_opt_alert_404_email' );
if ( empty ( $email ) || ! preg_match ( '/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/is' , $email ) ) {
return ;
}
// set status
header ( 'HTTP/1.1 404 Not Found' );
header ( 'Status: 404 Not Found' );
// site info
$blog = get_bloginfo ( 'name' );
$site = get_bloginfo ( 'url' ) . '/' ;
$from_email = get_bloginfo ( 'admin_email' );
// referrer
if ( isset ( $_SERVER [ 'HTTP_REFERER' ] ) ) {
$referer = MainWP_Helper :: clean ( $_SERVER [ 'HTTP_REFERER' ] );
} else {
$referer = 'undefined' ;
}
$protocol = isset ( $_SERVER [ 'HTTPS' ] ) && strcasecmp ( $_SERVER [ 'HTTPS' ], 'off' ) ? 'https://' : 'http://' ;
// request URI
if ( isset ( $_SERVER [ 'REQUEST_URI' ] ) && isset ( $_SERVER [ 'HTTP_HOST' ] ) ) {
$request = MainWP_Helper :: clean ( $protocol . $_SERVER [ 'HTTP_HOST' ] . $_SERVER [ 'REQUEST_URI' ] );
} else {
$request = 'undefined' ;
}
// query string
if ( isset ( $_SERVER [ 'QUERY_STRING' ] ) ) {
$string = MainWP_Helper :: clean ( $_SERVER [ 'QUERY_STRING' ] );
} else {
$string = 'undefined' ;
}
// IP address
if ( isset ( $_SERVER [ 'REMOTE_ADDR' ] ) ) {
$address = MainWP_Helper :: clean ( $_SERVER [ 'REMOTE_ADDR' ] );
} else {
$address = 'undefined' ;
}
// user agent
if ( isset ( $_SERVER [ 'HTTP_USER_AGENT' ] ) ) {
$agent = MainWP_Helper :: clean ( $_SERVER [ 'HTTP_USER_AGENT' ] );
} else {
$agent = 'undefined' ;
}
// identity
if ( isset ( $_SERVER [ 'REMOTE_IDENT' ] ) ) {
$remote = MainWP_Helper :: clean ( $_SERVER [ 'REMOTE_IDENT' ] );
} else {
$remote = 'undefined' ;
}
// log time
$time = MainWP_Helper :: clean ( date ( 'F jS Y, h:ia' , time () ) );
$mail = '<div>' . 'TIME: ' . $time . '</div>' .
'<div>' . '*404: ' . $request . '</div>' .
'<div>' . 'SITE: ' . $site . '</div>' .
'<div>' . 'REFERRER: ' . $referer . '</div>' .
'<div>' . 'QUERY STRING: ' . $string . '</div>' .
'<div>' . 'REMOTE ADDRESS: ' . $address . '</div>' .
'<div>' . 'REMOTE IDENTITY: ' . $remote . '</div>' .
'<div>' . 'USER AGENT: ' . $agent . '</div>' ;
$mail = ' < div > 404 alert </ div >
< div ></ div > ' . $mail ;
2019-02-14 22:38:14 +07:00
@ wp_mail ( $email , 'MainWP - 404 Alert: ' . $blog , MainWP_Helper :: formatEmail ( $email , $mail ), array (
2020-03-26 20:01:04 +00:00
// 'From: "' . $from_email . '" <' . $from_email . '>',
2015-10-15 22:52:37 +10:00
'content-type: text/html' ,
) );
}
public function keyword_links_action () {
MainWP_Keyword_Links :: Instance () -> action ();
}
public function branding_child_plugin () {
MainWP_Child_Branding :: Instance () -> action ();
}
public function code_snippet () {
$action = $_POST [ 'action' ];
$information = array ( 'status' => 'FAIL' );
if ( 'run_snippet' === $action || 'save_snippet' === $action ) {
if ( ! isset ( $_POST [ 'code' ] ) ) {
MainWP_Helper :: write ( $information );
}
}
$code = stripslashes ( $_POST [ 'code' ] );
if ( 'run_snippet' === $action ) {
2016-05-09 19:34:51 +02:00
$information = MainWP_Tools :: execute_snippet ( $code );
2020-03-26 14:11:33 +00:00
} elseif ( 'save_snippet' === $action ) {
2015-10-15 22:52:37 +10:00
$type = $_POST [ 'type' ];
$slug = $_POST [ 'slug' ];
$snippets = get_option ( 'mainwp_ext_code_snippets' );
if ( ! is_array ( $snippets ) ) {
$snippets = array ();
}
if ( 'C' === $type ) { // save into wp-config file
if ( false !== $this -> snippetUpdateWPConfig ( 'save' , $slug , $code ) ) {
$information [ 'status' ] = 'SUCCESS' ;
}
} else {
$snippets [ $slug ] = $code ;
if ( MainWP_Helper :: update_option ( 'mainwp_ext_code_snippets' , $snippets ) ) {
$information [ 'status' ] = 'SUCCESS' ;
}
}
MainWP_Helper :: update_option ( 'mainwp_ext_snippets_enabled' , true , 'yes' );
2020-03-26 14:11:33 +00:00
} elseif ( 'delete_snippet' === $action ) {
2015-10-15 22:52:37 +10:00
$type = $_POST [ 'type' ];
$slug = $_POST [ 'slug' ];
$snippets = get_option ( 'mainwp_ext_code_snippets' );
if ( ! is_array ( $snippets ) ) {
$snippets = array ();
}
if ( 'C' === $type ) { // delete in wp-config file
if ( false !== $this -> snippetUpdateWPConfig ( 'delete' , $slug ) ) {
$information [ 'status' ] = 'SUCCESS' ;
}
} else {
if ( isset ( $snippets [ $slug ] ) ) {
unset ( $snippets [ $slug ] );
if ( MainWP_Helper :: update_option ( 'mainwp_ext_code_snippets' , $snippets ) ) {
$information [ 'status' ] = 'SUCCESS' ;
}
} else {
$information [ 'status' ] = 'SUCCESS' ;
}
}
}
MainWP_Helper :: write ( $information );
}
public function snippetUpdateWPConfig ( $action , $slug , $code = '' ) {
2019-02-14 22:38:14 +07:00
$config_file = '' ;
if ( file_exists ( ABSPATH . 'wp-config.php' ) ) {
/** The config file resides in ABSPATH */
2020-03-26 17:03:00 +00:00
$config_file = ABSPATH . 'wp-config.php' ;
2019-02-14 22:38:14 +07:00
} elseif ( @ file_exists ( dirname ( ABSPATH ) . '/wp-config.php' ) && ! @ file_exists ( dirname ( ABSPATH ) . '/wp-settings.php' ) ) {
/** The config file resides one level above ABSPATH but is not part of another install */
2020-03-26 17:03:00 +00:00
$config_file = dirname ( ABSPATH ) . '/wp-config.php' ;
2019-02-14 22:38:14 +07:00
}
2020-03-26 17:03:00 +00:00
if ( ! empty ( $config_file ) ) {
2019-02-14 22:38:14 +07:00
$wpConfig = file_get_contents ( $config_file );
if ( 'delete' === $action ) {
$wpConfig = preg_replace ( '/' . PHP_EOL . '{1,2}\/\*\*\*snippet_' . $slug . '\*\*\*\/(.*)\/\*\*\*end_' . $slug . '\*\*\*\/' . PHP_EOL . '/is' , '' , $wpConfig );
2020-03-26 14:11:33 +00:00
} elseif ( 'save' === $action ) {
2019-02-14 22:38:14 +07:00
$wpConfig = preg_replace ( '/(\$table_prefix *= *[\'"][^\'|^"]*[\'"] *;)/is' , '${1}' . PHP_EOL . PHP_EOL . '/***snippet_' . $slug . '***/' . PHP_EOL . $code . PHP_EOL . '/***end_' . $slug . '***/' . PHP_EOL , $wpConfig );
}
file_put_contents ( $config_file , $wpConfig );
return true ;
}
return false ;
2015-10-15 22:52:37 +10:00
}
function run_saved_snippets () {
$action = null ;
if ( isset ( $_POST [ 'action' ] ) ) {
$action = $_POST [ 'action' ];
}
if ( 'run_snippet' === $action || 'save_snippet' === $action || 'delete_snippet' === $action ) {
return ;
} // do not run saved snippets if in do action snippet
if ( get_option ( 'mainwp_ext_snippets_enabled' ) ) {
$snippets = get_option ( 'mainwp_ext_code_snippets' );
if ( is_array ( $snippets ) && count ( $snippets ) > 0 ) {
foreach ( $snippets as $code ) {
2016-05-09 19:34:51 +02:00
MainWP_Tools :: execute_snippet ( $code );
2015-10-15 22:52:37 +10:00
}
}
}
}
function uploader_action () {
$file_url = base64_decode ( $_POST [ 'url' ] );
$path = $_POST [ 'path' ];
$filename = $_POST [ 'filename' ];
$information = array ();
if ( empty ( $file_url ) || empty ( $path ) ) {
MainWP_Helper :: write ( $information );
return ;
}
if ( strpos ( $path , 'wp-content' ) === 0 ) {
$path = basename ( WP_CONTENT_DIR ) . substr ( $path , 10 );
2020-03-26 14:11:33 +00:00
} elseif ( strpos ( $path , 'wp-includes' ) === 0 ) {
2015-10-15 22:52:37 +10:00
$path = WPINC . substr ( $path , 11 );
}
if ( '/' === $path ) {
$dir = ABSPATH ;
} else {
$path = str_replace ( ' ' , '-' , $path );
$path = str_replace ( '.' , '-' , $path );
$dir = ABSPATH . $path ;
}
if ( ! file_exists ( $dir ) ) {
if ( false === @ mkdir ( $dir , 0777 , true ) ) {
$information [ 'error' ] = 'ERRORCREATEDIR' ;
MainWP_Helper :: write ( $information );
return ;
}
}
try {
$upload = MainWP_Helper :: uploadFile ( $file_url , $dir , $filename );
if ( null !== $upload ) {
$information [ 'success' ] = true ;
}
} catch ( Exception $e ) {
$information [ 'error' ] = $e -> getMessage ();
}
MainWP_Helper :: write ( $information );
}
function wordpress_seo () {
MainWP_Wordpress_SEO :: Instance () -> action ();
}
function client_report () {
MainWP_Client_Report :: Instance () -> action ();
}
function page_speed () {
MainWP_Child_Pagespeed :: Instance () -> action ();
}
function woo_com_status () {
MainWP_Child_WooCommerce_Status :: Instance () -> action ();
}
function links_checker () {
MainWP_Child_Links_Checker :: Instance () -> action ();
}
function wordfence () {
MainWP_Child_Wordfence :: Instance () -> action ();
}
function ithemes () {
MainWP_Child_iThemes_Security :: Instance () -> action ();
}
function updraftplus () {
MainWP_Child_Updraft_Plus_Backups :: Instance () -> action ();
}
2020-03-26 14:05:04 +00:00
function wpvivid_backuprestore () {
2019-08-26 23:29:16 +07:00
MainWP_Child_WPvivid_BackupRestore :: Instance () -> action ();
}
2015-10-15 22:52:37 +10:00
function backup_wp () {
if ( ! version_compare ( phpversion (), '5.3' , '>=' ) ) {
$error = sprintf ( __ ( 'PHP Version %s is unsupported.' , 'mainwp-child' ), phpversion () );
MainWP_Helper :: write ( array ( 'error' => $error ) );
}
MainWP_Child_Back_Up_Wordpress :: Instance () -> action ();
}
function wp_rocket () {
MainWP_Child_WP_Rocket :: Instance () -> action ();
}
function backwpup () {
MainWP_Child_Back_WP_Up :: Instance () -> action ();
}
function delete_backup () {
$dirs = MainWP_Helper :: getMainWPDir ( 'backup' );
$backupdir = $dirs [ 0 ];
$file = $_REQUEST [ 'del' ];
if ( @ file_exists ( $backupdir . $file ) ) {
@ unlink ( $backupdir . $file );
}
MainWP_Helper :: write ( array ( 'result' => 'ok' ) );
}
function update_values () {
$uniId = isset ( $_POST [ 'uniqueId' ] ) ? $_POST [ 'uniqueId' ] : '' ;
MainWP_Helper :: update_option ( 'mainwp_child_uniqueId' , $uniId );
MainWP_Helper :: write ( array ( 'result' => 'ok' ) );
}
function uploadFile ( $file , $offset = 0 ) {
$dirs = MainWP_Helper :: getMainWPDir ( 'backup' );
$backupdir = $dirs [ 0 ];
header ( 'Content-Description: File Transfer' );
header ( 'Content-Description: File Transfer' );
if ( MainWP_Helper :: endsWith ( $file , '.tar.gz' ) ) {
header ( 'Content-Type: application/x-gzip' );
2020-03-26 14:05:04 +00:00
header ( 'Content-Encoding: gzip' );
2015-10-15 22:52:37 +10:00
} else {
header ( 'Content-Type: application/octet-stream' );
}
header ( 'Content-Disposition: attachment; filename="' . basename ( $file ) . '"' );
header ( 'Expires: 0' );
header ( 'Cache-Control: must-revalidate' );
header ( 'Pragma: public' );
header ( 'Content-Length: ' . filesize ( $backupdir . $file ) );
2020-03-26 19:37:47 +00:00
while ( @ ob_end_flush () ) {;
2015-10-15 22:52:37 +10:00
}
$this -> readfile_chunked ( $backupdir . $file , $offset );
}
function readfile_chunked ( $filename , $offset ) {
$chunksize = 1024 ; // how many bytes per chunk
$handle = @ fopen ( $filename , 'rb' );
if ( false === $handle ) {
return false ;
}
@ fseek ( $handle , $offset );
while ( ! @ feof ( $handle ) ) {
$buffer = @ fread ( $handle , $chunksize );
echo $buffer ;
@ ob_flush ();
@ flush ();
$buffer = null ;
}
return @ fclose ( $handle );
}
function settings_tools () {
if ( isset ( $_POST [ 'action' ] ) ) {
switch ( $_POST [ 'action' ] ) {
case 'force_destroy_sessions' ;
if ( 0 === get_current_user_id () ) {
MainWP_Helper :: write ( array ( 'error' => __ ( 'Cannot get user_id' , 'mainwp-child' ) ) );
}
wp_destroy_all_sessions ();
$sessions = wp_get_all_sessions ();
if ( empty ( $sessions ) ) {
MainWP_Helper :: write ( array ( 'success' => 1 ) );
} else {
MainWP_Helper :: write ( array ( 'error' => __ ( 'Cannot destroy sessions' , 'mainwp-child' ) ) );
}
break ;
default :
MainWP_Helper :: write ( array ( 'error' => __ ( 'Invalid action' , 'mainwp-child' ) ) );
}
} else {
MainWP_Helper :: write ( array ( 'error' => __ ( 'Missing action' , 'mainwp-child' ) ) );
}
}
function skeleton_key () {
MainWP_Child_Skeleton_Key :: Instance () -> action ();
}
2016-03-03 19:49:09 +01:00
2016-05-22 17:16:34 +02:00
function custom_post_type () {
MainWP_Custom_Post_Type :: Instance () -> action ();
}
2017-02-22 21:39:22 +01:00
function backup_buddy () {
MainWP_Child_Back_Up_Buddy :: Instance () -> action ();
}
function vulner_checker () {
MainWP_Child_Vulnerability_Checker :: Instance () -> action ();
}
2018-09-27 19:52:32 +02:00
2018-06-26 19:52:53 +02:00
function time_capsule () {
MainWP_Child_Timecapsule :: Instance () -> action ();
}
2018-09-27 19:52:32 +02:00
2017-12-04 21:55:05 +01:00
function wp_staging () {
MainWP_Child_Staging :: Instance () -> action ();
}
2018-09-27 19:52:32 +02:00
function extra_execution () {
2020-03-26 19:45:07 +00:00
$post = $_POST ;
2018-09-27 19:52:32 +02:00
$information = array ();
$information = apply_filters ( 'mainwp_child_extra_execution' , $information , $post );
MainWP_Helper :: write ( $information );
}
2019-02-14 22:38:14 +07:00
function disconnect () {
2018-06-26 19:52:53 +02:00
$this -> deactivation ( false );
2018-09-27 19:52:32 +02:00
MainWP_Helper :: write ( array ( 'result' => 'success' ) );
2018-06-26 19:52:53 +02:00
}
2016-08-18 20:51:19 +02:00
2016-03-03 19:49:09 +01:00
static function fix_for_custom_themes () {
if ( file_exists ( ABSPATH . '/wp-admin/includes/screen.php' ) ) {
2020-03-26 14:11:33 +00:00
include_once ABSPATH . '/wp-admin/includes/screen.php' ;
2016-03-03 19:49:09 +01:00
}
2017-01-04 21:03:57 +01:00
if ( function_exists ( 'et_register_updates_component' ) ) {
et_register_updates_component ();
}
2016-03-03 19:49:09 +01:00
}
2015-10-15 22:52:37 +10:00
}