name = 'Manage Multiple Blogs'; $this->slug = 'manage-multiple-blogs'; $this->action_call = null; $this->action_params = null; $this->settings = get_option($this->slug); if (!$this->settings) { $this->settings = array( 'blogs' => array(), 'current_blog' => array( 'type' => null ) ); $this->save_options(); } if ( function_exists('is_multisite') ) { if ( is_multisite() ) { $this->iwp_mmb_multisite = $blog_id; $this->network_admin_install = get_option('iwp_client_network_admin_install'); add_action('wp_initialize_site', array(&$this, 'updateKeys')); } } else if (!empty($wpmu_version)) { $this->iwp_mmb_multisite = $blog_id; $this->network_admin_install = get_option('iwp_client_network_admin_install'); } else { $this->iwp_mmb_multisite = false; $this->network_admin_install = null; } // admin notices if ( !get_option('iwp_client_public_key') ){ if( $this->iwp_mmb_multisite ){ if( is_network_admin() && $this->network_admin_install == '1'){ //add_action('network_admin_notices', array( &$this, 'network_admin_notice' ));// We implemented network activation so no need to show this notification add_action('network_admin_notices', array( &$this, 'admin_notice' )); } else if( $this->network_admin_install != '1' ){ //$parent_key = $this->get_parent_blog_option('iwp_client_public_key');//IWP commented to show notice to all subsites of network //if(empty($parent_key))//IWP commented to show notice to all subsites of network $parent_key = $this->get_parent_blog_option('iwp_client_public_key'); if (empty($parent_key)) { add_action('admin_notices', array(&$this, 'admin_notice')); } } } else { add_action('admin_notices', array( &$this, 'admin_notice' )); } } // default filters //$this->iwp_mmb_pre_init_filters['get_stats']['iwp_mmb_stats_filter'][] = array('IWP_MMB_Stats', 'pre_init_stats'); // called with class name, use global $iwp_mmb_core inside the function instead of $this $this->iwp_mmb_pre_init_filters['get_stats']['iwp_mmb_stats_filter'][] = 'iwp_mmb_pre_init_stats'; $_iwp_mmb_item_filter['pre_init_stats'] = array( 'core_update', 'hit_counter', 'comments', 'backups', 'posts', 'drafts', 'scheduled' ); $_iwp_mmb_item_filter['get'] = array( 'updates', 'errors','plugins_status','themes_status' ); $this->iwp_mmb_pre_init_actions = array( 'backup_req' => 'iwp_mmb_get_backup_req', ); $this->iwp_mmb_init_actions = array( 'do_upgrade' => 'iwp_mmb_do_upgrade', 'get_stats' => 'iwp_mmb_stats_get', 'remove_site' => 'iwp_mmb_remove_site', 'backup_clone' => 'iwp_mmb_backup_now', 'restore' => 'iwp_mmb_restore_now', 'optimize_tables' => 'iwp_mmb_optimize_tables', 'check_wp_version' => 'iwp_mmb_wp_checkversion', 'create_post' => 'iwp_mmb_post_create', 'update_client' => 'iwp_mmb_update_client_plugin', 'change_comment_status' => 'iwp_mmb_change_comment_status', 'change_post_status' => 'iwp_mmb_change_post_status', 'get_comment_stats' => 'iwp_mmb_comment_stats_get', 'get_links' => 'iwp_mmb_get_links', 'add_link' => 'iwp_mmb_add_link', 'delete_link' => 'iwp_mmb_delete_link', 'delete_links' => 'iwp_mmb_delete_links', 'create_post' => 'iwp_mmb_post_create', 'get_posts' => 'iwp_mmb_get_posts', 'delete_post' => 'iwp_mmb_delete_post', 'delete_posts' => 'iwp_mmb_delete_posts', 'get_pages' => 'iwp_mmb_get_pages', 'delete_page' => 'iwp_mmb_delete_page', 'install_addon' => 'iwp_mmb_install_addon', 'add_user' => 'iwp_mmb_add_user', 'email_backup' => 'iwp_mmb_email_backup', 'check_backup_compat' => 'iwp_mmb_check_backup_compat', 'scheduled_backup' => 'iwp_mmb_scheduled_backup', 'new_scheduled_backup' => 'iwp_mmb_new_scheduled_backup', 'run_task' => 'iwp_mmb_run_task_now', 'new_run_task' => 'iwp_mmb_new_run_task_now', 'delete_schedule_task' => 'iwp_mmb_delete_task_now', 'execute_php_code' => 'iwp_mmb_execute_php_code', 'delete_backup' => 'iwp_mmb_delete_backup', 'delete_backup_new' => 'iwp_mmb_delete_backup_new', 'kill_new_backup' => 'iwp_mmb_kill_new_backup', 'remote_backup_now' => 'iwp_mmb_remote_backup_now', 'set_notifications' => 'iwp_mmb_set_notifications', 'clean_orphan_backups' => 'iwp_mmb_clean_orphan_backups', 'get_users' => 'iwp_mmb_get_users', 'edit_users' => 'iwp_mmb_edit_users', 'get_plugins_themes' => 'iwp_mmb_get_plugins_themes', 'edit_plugins_themes' => 'iwp_mmb_edit_plugins_themes', 'get_comments' => 'iwp_mmb_get_comments', 'action_comment' => 'iwp_mmb_action_comment', 'bulk_action_comments' => 'iwp_mmb_bulk_action_comments', 'replyto_comment' => 'iwp_mmb_reply_comment', 'client_brand' => 'iwp_mmb_client_brand', 'set_alerts' => 'iwp_mmb_set_alerts', 'maintenance' => 'iwp_mmb_maintenance_mode', 'wp_optimize' => 'iwp_mmb_wp_optimize', 'wp_purge_cache' => 'iwp_mmb_wp_purge_cache', 'backup_repository' => 'iwp_mmb_backup_repository', 'trigger_backup_multi' => 'iwp_mmb_trigger_check', 'trigger_backup_multi_new' => 'iwp_mmb_trigger_check_new', 'get_all_links' => 'iwp_mmb_get_all_links', 'update_broken_link' => 'iwp_mmb_update_broken_link', 'unlink_broken_link' => 'iwp_mmb_unlink_broken_link', 'markasnot_broken_link' => 'iwp_mmb_markasnot_broken_link', 'dismiss_broken_link' => 'iwp_mmb_dismiss_broken_link', 'undismiss_broken_link' => 'iwp_mmb_undismiss_broken_link', 'bulk_actions_processor' => 'iwp_mmb_bulk_actions_processor', 'file_editor_upload' => 'iwp_mmb_file_editor_upload', 'put_redirect_url' => 'iwp_mmb_gwmt_redirect_url', 'put_redirect_url_again'=> 'iwp_mmb_gwmt_redirect_url_again', 'wordfence_scan' => 'iwp_mmb_wordfence_scan', 'wordfence_load' => 'iwp_mmb_wordfence_load', 'sucuri_fetch_result' => 'iwp_mmb_sucuri_fetch_result', 'backup_test_site' => 'iwp_mmb_backup_test_site', 'ithemes_security_check' => 'iwp_phx_ithemes_security_check', 'get_seo_info' => 'iwp_mmb_yoast_get_seo_info', 'save_seo_info' => 'iwp_mmb_yoast_save_seo_info', 'fetch_activities_log' => 'iwp_mmb_fetch_activities_log', 'sucuri_scan' => 'iwp_mmb_sucuri_scan', 'sucuri_change_alert' => 'iwp_mmb_sucuri_change_alert', 'backup_downlaod' => 'iwp_mmb_backup_downlaod', 'cronDoAction' => 'iwp_pheonix_backup_cron_do_action', 'get_additional_stats' => 'iwp_get_additional_stats', 'get_db_details' => 'iwp_get_db_details', 'client_report_delete_log' => 'iwp_client_report_delete_log', 'changelog_plugin' => 'iwp_get_changelog_plugin', ); add_action('rightnow_end', array( &$this, 'add_right_now_info' )); if( $this->iwp_mmb_multisite ){ add_action('network_admin_menu', array($this,'iwp_admin_menu_actions'), 10, 1); }else{ add_action('admin_menu', array($this,'iwp_admin_menu_actions'), 10, 1); } add_action('init', array($this,'iwp_cpb_hide_updates'), 10, 1); add_action('admin_init', array(&$this,'admin_actions')); add_action('admin_init', array(&$this,'enqueueConnectionModalOpenScripts')); add_action('admin_init', array(&$this,'enqueueConnectionModalOpenStyles')); add_filter('deprecated_function_trigger_error', '__return_false'); add_filter('plugin_row_meta', array($this, 'addConnectionKeyLink'), 10, 2); add_action('admin_head', array($this, 'printConnectionModalOpenScript')); add_action('admin_footer', array($this, 'printConnectionModalDialog')); // add_action('wp_loaded', array( &$this, 'iwp_mmb_remote_action'), 2147483650); add_action('setup_theme', 'iwp_mmb_set_request'); add_action('setup_theme', 'iwp_mmb_add_readd_request'); add_action('set_auth_cookie', array( &$this, 'iwp_mmb_set_auth_cookie')); add_action('wp_loaded', array( &$this, 'load_mu_loader_error')); add_action('set_logged_in_cookie', array( &$this, 'iwp_mmb_set_logged_in_cookie')); } function admin_wp_loaded_iwp(){ if (!defined('WP_ADMIN')) { define('WP_ADMIN', true); } if (is_multisite() && !defined('WP_NETWORK_ADMIN')) { define('WP_NETWORK_ADMIN', true); } if (!defined('WP_BLOG_ADMIN')) { define('WP_BLOG_ADMIN', true); } require_once ABSPATH.'wp-admin/includes/admin.php'; // define('DOING_AJAX', true); do_action('admin_init'); if (function_exists('wp_clean_update_cache')) { /** @handled function */ wp_clean_update_cache(); } /** @handled function */ wp_update_plugins(); /** @handled function */ set_current_screen(); do_action('load-update-core.php'); /** @handled function */ wp_version_check(); /** @handled function */ wp_version_check(array(), true); } function iwp_mmb_remote_action(){ global $iwp_mmb_core; if (!empty($iwp_mmb_core->request_params)) { $params = $iwp_mmb_core->request_params; $action = $iwp_mmb_core->request_params['iwp_action']; if( isset($this->iwp_mmb_pre_init_filters[$action]) && !empty($this->iwp_mmb_pre_init_filters[$action])){ global $iwp_mmb_filters; foreach($this->iwp_mmb_pre_init_filters[$action] as $_name => $_functions){ if(!empty($_functions)){ $data = array(); foreach($_functions as $_k => $_callback){ if(is_array($_callback) && method_exists($_callback[0], $_callback[1]) ){ $data = call_user_func( $_callback, $params ); } elseif (is_string($_callback) && function_exists( $_callback )){ $data = call_user_func( $_callback, $params ); } $iwp_mmb_filters[$_name] = isset($iwp_mmb_filters[$_name]) && !empty($iwp_mmb_filters[$_name]) ? array_merge($iwp_mmb_filters[$_name], $data) : $data; add_filter( $_name, function($a) use ($_name){ global $iwp_mmb_filters; return array_merge($a,$iwp_mmb_filters[$_name]); }); // $_name closure variable, $a is an arg } } } } } if($this->action_call != null){ $params = isset($this->action_params) && $this->action_params != null ? $this->action_params : array(); call_user_func($this->action_call, $params); } } function iwp_mmb_manual_wp_upgrade(){ /* in case database upgrade required, do database backup and perform upgrade ( wordpress wp_upgrade() function ) */ global $wp_db_version, $wpmu_version; if( strlen(trim($wp_db_version)) && !defined('ACX_PLUGIN_DIR') ){ if ( get_option('db_version') != $wp_db_version ) { /* in multisite network, please update database manualy */ if (empty($wpmu_version) || (function_exists('is_multisite') && !is_multisite())){ if( ! function_exists('wp_upgrade')) include_once(ABSPATH.'wp-admin/includes/upgrade.php'); ob_clean(); @wp_upgrade(); @do_action('after_db_upgrade'); ob_end_clean(); } } } } function register_action_params( $action = false, $params = array() ){ if ($action == 'get_stats' || $action == 'do_upgrade' || $action == 'changelog_plugin') { add_action('wp_loaded', array( &$this, 'iwp_mmb_remote_action'), 2147483650); add_action('wp_loaded', array( &$this, 'admin_wp_loaded_iwp'), 2147483649); if($action == 'get_stats' && !isset( $_GET['step'])){ add_action('wp_loaded', array( &$this, 'iwp_mmb_manual_wp_upgrade'),2147483648); } }elseif ($action == 'install_addon') { add_action('wp_loaded', array( &$this, 'iwp_mmb_remote_action')); }elseif ($action == 'new_run_task' || $action == 'new_scheduled_backup') { add_action('after_setup_theme', array( &$this, 'iwp_mmb_remote_action'), 9999); }else{ add_action('init', array( &$this, 'iwp_mmb_remote_action'), 9999); } if(isset($this->iwp_mmb_pre_init_actions[$action]) && function_exists($this->iwp_mmb_pre_init_actions[$action])){ call_user_func($this->iwp_mmb_pre_init_actions[$action], $params); } if(isset($this->iwp_mmb_init_actions[$action]) && function_exists($this->iwp_mmb_init_actions[$action])){ $this->action_call = $this->iwp_mmb_init_actions[$action]; $this->action_params = $params; return true; } return false; } /** * Add notice to network admin dashboard for security reasons * */ function network_admin_notice() { echo '
Attention !
The InfiniteWP client plugin has to be activated on individual sites. Kindly deactivate the plugin from the network admin dashboard and activate them from the individual dashboards.
Add this site to IWP Admin panel
| WP-ADMIN URL: | '.$notice_display_URL.' |
| WEBSITE URL: | '.$website_URL.' |
| ADMIN USERNAME: | '.$username.' (or any admin id) |
| ACTIVATION KEY: | '.$iwp_client_activate_key.' |
| To quick add, copy this | |
Copy details | |
| Please deactivate and then activate InfiniteWP Client plugin. |
This site can be managed remotely.
Attention !
Unable to write InfiniteWP Client loader: '.$error_notice.'
'; } function load_mu_loader_error(){ $error_notice = get_transient( 'iwp_mu_plugin_loader' ); if( !empty($error_notice) ){ add_action('admin_notices', array( &$this, 'error_notices' )); } } /** * Plugin install callback function * Check PHP version */ function install() { global $wpdb, $_wp_using_ext_object_cache, $current_user, $iwp_mmb_activities_log; $_wp_using_ext_object_cache = false; try { $this->registerMustUse('mu-iwp-client.php', $this->buildLoaderContent('iwp-client/init.php')); } catch (Exception $e) { set_transient( 'iwp_mu_plugin_loader', $e->getMessage(), 30 ); } //delete plugin options, just in case if ($this->iwp_mmb_multisite != false) { $network_blogs = $wpdb->get_results("select `blog_id`, `site_id` from `{$wpdb->blogs}`"); if(!empty($network_blogs)){ if( is_network_admin() ){ update_option('iwp_client_network_admin_install', 1); $mainBlogId = defined('BLOG_ID_CURRENT_SITE') ? BLOG_ID_CURRENT_SITE : false; foreach($network_blogs as $details){ if (($mainBlogId !== false && $details->blog_id == $mainBlogId) || ($mainBlogId === false && $details->site_id == $details->blog_id)) { update_blog_option($details->blog_id, 'iwp_client_network_admin_install', 1); } else { update_blog_option($details->blog_id, 'iwp_client_network_admin_install', -1); } delete_blog_option($details->blog_id, 'iwp_client_nossl_key', ''); delete_blog_option($details->blog_id, 'iwp_client_public_key', ''); delete_blog_option($details->blog_id, 'iwp_client_action_message_id'); } } else { update_option('iwp_client_network_admin_install', -1); delete_option('iwp_client_nossl_key'); delete_option('iwp_client_public_key'); delete_option('iwp_client_action_message_id'); } } } else { delete_option('iwp_client_nossl_key'); delete_option('iwp_client_public_key'); delete_option('iwp_client_action_message_id'); } //delete_option('iwp_client_backup_tasks'); delete_option('iwp_client_notifications'); delete_option('iwp_client_brand'); delete_option('iwp_client_public_key'); delete_option('iwp_client_pageview_alerts'); $this->update_option('iwp_client_activate_key', sha1( rand(1, 99999). uniqid('', true) . get_option('siteurl') ) ); $iwp_mmb_activities_log->iwp_mmb_save_options_for_activity_log('install'); } /** * Saves the (modified) options into the database * */ function save_options() { if (get_option($this->slug)) { update_option($this->slug, $this->settings); } else { add_option($this->slug, $this->settings); } } /** * Deletes options for communication with IWP Admin panel * */ function uninstall( $deactivate = false ) { global $current_user, $wpdb, $_wp_using_ext_object_cache; $_wp_using_ext_object_cache = false; if ($this->iwp_mmb_multisite != false) { $network_blogs = $wpdb->get_col("select `blog_id` from `{$wpdb->blogs}`"); if(!empty($network_blogs)){ if( is_network_admin() ){ if( $deactivate ) { delete_option('iwp_client_network_admin_install'); foreach($network_blogs as $blog_id){ delete_blog_option($blog_id, 'iwp_client_network_admin_install'); delete_blog_option($blog_id, 'iwp_client_nossl_key'); delete_blog_option($blog_id, 'iwp_client_public_key'); delete_blog_option($blog_id, 'iwp_client_action_message_id'); delete_blog_option($blog_id, 'iwp_client_maintenace_mode'); } } } else { if( $deactivate ) delete_option('iwp_client_network_admin_install'); delete_option('iwp_client_nossl_key'); delete_option('iwp_client_public_key'); delete_option('iwp_client_action_message_id'); } } } else { delete_option('iwp_client_nossl_key'); delete_option('iwp_client_public_key'); delete_option('iwp_client_action_message_id'); } //Delete options delete_option('iwp_client_maintenace_mode'); //delete_option('iwp_client_backup_tasks'); wp_clear_scheduled_hook('iwp_client_backup_tasks'); delete_option('iwp_client_notifications'); wp_clear_scheduled_hook('iwp_client_notifications'); delete_option('iwp_client_brand'); delete_option('iwp_client_pageview_alerts'); delete_option('iwp_client_activate_key'); delete_option('iwp_client_all_themes_history'); delete_option('iwp_client_all_plugins_history'); delete_option('iwp_client_wp_version_old'); delete_option('is_save_activity_log'); $loaderName = 'mu-iwp-client.php'; try { $mustUsePluginDir = rtrim(WPMU_PLUGIN_DIR, '/'); $loaderPath = $mustUsePluginDir.'/'.$loaderName; if (!file_exists($loaderPath)) { return; } $removed = @unlink($loaderPath); if (!$removed) { $error = error_get_last(); throw new Exception(sprintf('Unable to remove loader: %s', $error['message'])); } } catch (Exception $e) { mwp_logger()->error('Unable to remove loader', array('exception' => $e)); } } /** * Constructs a url (for ajax purpose) * * @param mixed $base_page */ function construct_url($params = array(), $base_page = 'index.php') { $url = "$base_page?_wpnonce=" . wp_create_nonce($this->slug); foreach ($params as $key => $value) { $url .= "&$key=$value"; } return $url; } /** * Client update * */ function update_client_plugin($params) { global $iwp_mmb_activities_log; extract($params); if ($download_url) { @include_once ABSPATH . 'wp-admin/includes/file.php'; @include_once ABSPATH . 'wp-admin/includes/plugin.php'; @include_once ABSPATH . 'wp-admin/includes/misc.php'; @include_once ABSPATH . 'wp-admin/includes/template.php'; @include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; @include_once ABSPATH . 'wp-admin/includes/screen.php'; if (!$this->define_ftp_constants($params)) { return array( 'error' => 'FTP constant define failed', 'error_code' => 'ftp constant define failed' ); } if (!$this->is_server_writable()) { return array( 'error' => 'Failed, please add FTP details', 'error_code' => 'automatic_upgrade_failed_add_ftp_details' ); } ob_start(); @unlink(dirname(__FILE__)); $upgrader = new Plugin_Upgrader(); $result = $upgrader->run(array( 'package' => $download_url, 'destination' => WP_PLUGIN_DIR, 'clear_destination' => true, 'clear_working' => true, 'hook_extra' => array( 'plugin' => 'iwp-client/init.php' ) )); ob_end_clean(); @wp_update_plugins(); if (is_wp_error($result) || !$result) { return array( 'error' => 'InfiniteWP Client plugin could not be updated.', 'error_code' => 'client_plugin_could_not_be_updated' ); } else { $iwp_mmb_activities_log->iwp_mmb_save_options_for_activity_log('update_client_plugin'); return array( 'success' => 'InfiniteWP Client plugin successfully updated.' ); } } return array( 'error' => 'Bad download path for client installation file.', 'error_code' => 'client_plugin_bad_download_path' ); } /** * Automatically logs in when called from IWP Admin panel * */ function automatic_login() { $where = isset($_GET['iwp_goto']) ? $_GET['iwp_goto'] : false; $username = isset($_GET['username']) ? $_GET['username'] : ''; $auto_login = isset($_GET['auto_login']) ? $_GET['auto_login'] : 0; $page = isset($_GET['page']) ? '?page='.$_GET['page'] : ''; $action = isset($_GET['action']) ? '?action='.$_GET['action'] : ''; $post = isset($_GET['post']) ? '&post='.$_GET['post'] : ''; $message_id = trim($_GET['message_id']); $_SERVER['HTTP_REFERER']=''; if( !function_exists('is_user_logged_in') ) include_once( ABSPATH.'wp-includes/pluggable.php' ); if (( $auto_login && strlen(trim($username)) && !is_user_logged_in() ) || (isset($this->iwp_mmb_multisite) && $this->iwp_mmb_multisite )) { $signature = base64_decode($_GET['signature']); $signature_new = ''; if (!empty($_GET['signature_new'])) { $signature_new = base64_decode($_GET['signature_new']); } $message_id = trim($_GET['message_id']); $auth = $this->authenticate_message($where . $message_id, $signature, $signature_new , $message_id); if ($auth === true) { if (!headers_sent()) header('P3P: CP="CAO PSA OUR"'); if(!defined('IWP_MMB_USER_LOGIN')) define('IWP_MMB_USER_LOGIN', true); $siteurl = function_exists('get_site_option') ? get_site_option( 'siteurl' ) : get_option('siteurl'); $user = $this->iwp_mmb_get_user_info($username); wp_set_current_user($user->ID); if(!defined('COOKIEHASH') || (isset($this->iwp_mmb_multisite) && $this->iwp_mmb_multisite) ) wp_cookie_constants(); wp_set_auth_cookie($user->ID); @iwp_mmb_client_header(); //if((isset($this->iwp_mmb_multisite) && $this->iwp_mmb_multisite ) || isset($_REQUEST['iwpredirect'])){//comment makes force redirect, which fix bug https dashboard if(function_exists('wp_safe_redirect') && function_exists('admin_url')){ wp_safe_redirect(admin_url($where.$page.$action.$post)); exit(); } //} } else { wp_die($auth['error']); } } elseif( is_user_logged_in() ) { @iwp_mmb_client_header(); //if(isset($_REQUEST['iwpredirect'])){ $this->set_client_message_id($message_id); if(function_exists('wp_safe_redirect') && function_exists('admin_url')){ wp_safe_redirect(admin_url($where.$page.$action.$post)); exit(); } //} } } function iwp_mmb_set_auth_cookie( $auth_cookie ){ if(!defined('IWP_MMB_USER_LOGIN')) return false; if( !defined('COOKIEHASH') ) wp_cookie_constants(); $_COOKIE['wordpress_'.COOKIEHASH] = $auth_cookie; } function iwp_mmb_set_logged_in_cookie( $logged_in_cookie ){ if(!defined('IWP_MMB_USER_LOGIN')) return false; if( !defined('COOKIEHASH') ) wp_cookie_constants(); $_COOKIE['wordpress_logged_in_'.COOKIEHASH] = $logged_in_cookie; } function admin_actions(){ $replace = get_option("iwp_client_brand"); if(!empty($replace)){ if(!empty($replace['hideUpdatesCPB'])){ //define('DISALLOW_FILE_MODS',true); //for hiding updates old method } if(!empty($replace['hideFWPCPB'])){ //define('DISALLOW_FILE_EDIT',true); //for hiding file writing permissions old method } if(!empty($replace['doChangesCPB']) || ( !isset($replace['doChangesCPB']) && (!empty($replace['name']) || !empty($replace['desc']) || !empty($replace['author']) || !empty($replace['author_url'])))){ add_filter('plugin_row_meta', array($this, 'iwp_client_replace_row_meta'), 10, 2); //for hiding the view details alone. add_filter('site_transient_update_plugins', array($this, 'iwp_site_transient_update_plugins'), 10, 2); //for hiding the infiniteWP update details. add_filter('admin_url', array($this, 'iwp_user_admin_url'), 10, 2); //for modifying the link available in plugin's view version details link. } add_filter('all_plugins', array($this, 'client_replace')); //for replacing name and all. add_filter('show_advanced_plugins', array($this, 'muPluginListFilter'), 10, 2); //for replacing name and all. } } function iwp_remove_core_updates($value){ if(isset($value->response)){ $old_response = $value->response; unset($value->response); } if(isset($value->updates)){ unset($value->updates); } return $value; } function iwp_admin_menu_actions($args){ //to hide all updates global $iwp_mmb_core; $replace = get_option("iwp_client_brand"); if(empty($iwp_mmb_core->request_params) && !empty($replace)){ if(!empty($replace['hideUpdatesCPB'])){ //add_filter('wp_get_update_data', array($this, 'iwp_wp_get_update_data'), 10, 2); $page = remove_submenu_page( 'index.php', 'update-core.php' ); add_filter('transient_update_plugins', array($this, 'iwp_remove_core_updates'), 999999, 1); add_filter('site_transient_update_core', array($this, 'iwp_remove_core_updates'), 999999, 1); add_filter('site_transient_update_plugins', array($this, 'iwp_remove_core_updates'), 999999, 1); add_filter('site_transient_update_themes', array($this, 'iwp_remove_core_updates'), 999999, 1); } if(!empty($replace['hideFWPCPB'])){ // remove_submenu_page('themes.php','theme-editor.php'); // remove_submenu_page('plugins.php','plugin-editor.php'); // this is old method this allows editor in direct URL if (!defined('DISALLOW_FILE_EDIT')) { define('DISALLOW_FILE_EDIT', true); } add_filter('plugin_action_links', array($this, 'iwp_client_replace_action_links'), 10, 2); } } } function iwp_cpb_hide_updates($args){ global $iwp_mmb_core; $replace = get_option("iwp_client_brand"); if(empty($iwp_mmb_core->request_params) && !empty($replace)){ if(!empty($replace['hideUpdatesCPB'])){ add_filter('transient_update_plugins', array($this, 'iwp_remove_core_updates'), 999999, 1); add_filter('site_transient_update_core', array($this, 'iwp_remove_core_updates'), 999999, 1); add_filter('site_transient_update_plugins', array($this, 'iwp_remove_core_updates'), 999999, 1); add_filter('site_transient_update_themes', array($this, 'iwp_remove_core_updates'), 999999, 1); } } } function iwp_user_admin_url($args, $args2){ //for modifying the link available in plugin's view version details link. if(strpos($args2, 'plugin-install.php?tab=plugin-information&plugin') !== false){ $replace = get_option("iwp_client_brand"); if(!empty($replace) && is_array($replace)){ if(!empty($replace['name'])){ $search_str = 'plugin-install.php?tab=plugin-information&plugin='.$replace['name'].'§ion=changelog'; if(strpos($args2, $search_str) !== false){ $return_var = plugins_url( '/iwp-client/readme.txt' ) . 'TB_iframe=true&width=600&height=550'; return $return_var; } } } } return $args; } function iwp_site_transient_update_plugins($value){ if(!empty($value->response['iwp-client/init.php'])){ $replace = get_option("iwp_client_brand"); if(!empty($replace) && is_array($replace)){ if(!empty($replace['name'])){ $file_traces = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); $called_by_file = array_pop($file_traces); $called_by_file = basename($called_by_file['file']); if($called_by_file == "update-core.php"){ unset($value->response['iwp-client/init.php']); //for hiding the updates available in updates dashboard section } else if($called_by_file == "plugins.php"){ $value->response['iwp-client/init.php']->slug = $replace['name']; ////for hiding the updates available in plugins section $value->response['iwp-client/init.php']->Name = $replace['name']; unset($value->response['iwp-client/init.php']); } } } } return $value; } function iwp_client_replace_action_links($links, $file){ //for hiding edit on plugins page. if(!empty($links['edit'])){ unset($links['edit']); } return $links; } function iwp_client_replace_row_meta($links, $file) { //for hiding the view details alone. if($file == 'iwp-client/init.php'){ if(!empty($links[2])){ unset($links[2]); } } return $links; } function client_replace($all_plugins){ $replace = get_option("iwp_client_brand"); if(is_array($replace)){ if(!empty($replace['doChangesCPB']) || (!isset($replace['doChangesCPB']) && (!empty($replace['name']) || !empty($replace['desc']) || !empty($replace['author']) || !empty($replace['author_url'])))){ $plugin_status = isset($_GET['plugin_status']) ? $_GET['plugin_status'] : ''; if ( 'incompatible_with_feature' !== $plugin_status ) { $all_plugins['iwp-client/init.php']['Name'] = $replace['name']; $all_plugins['iwp-client/init.php']['Title'] = $replace['name']; $all_plugins['iwp-client/init.php']['Description'] = $replace['desc']; $all_plugins['iwp-client/init.php']['AuthorURI'] = $replace['author_url']; $all_plugins['iwp-client/init.php']['Author'] = $replace['author']; $all_plugins['iwp-client/init.php']['AuthorName'] = $replace['author']; $all_plugins['iwp-client/init.php']['PluginURI'] = ''; } } if(!empty($replace['hide'])){ if (!function_exists('get_plugins')){ include_once(ABSPATH . 'wp-admin/includes/plugin.php'); } if( $this->iwp_mmb_multisite ){ if(is_plugin_active_for_network('iwp-client/init.php')){ unset($all_plugins['iwp-client/init.php']); } }else{ $activated_plugins = get_option('active_plugins'); if (!$activated_plugins){ $activated_plugins = array(); } if(in_array('iwp-client/init.php',$activated_plugins)){ unset($all_plugins['iwp-client/init.php']); } } } } return $all_plugins; } function add_login_action(){ add_action('plugins_loaded', array( &$this, 'automatic_login'), 10); } function muPluginListFilter($previousValue, $type) { // Drop-in's are filtered after MU plugins. if ($type !== 'dropins') { return $previousValue; } if (!empty($previousValue['iwp-client/init.php'])) { return $previousValue; } $replace = get_option("iwp_client_brand"); if (!empty($replace['hide'])) { unset($GLOBALS['plugins']['mustuse']['mu-iwp-client.php']); } elseif(!empty($replace['doChangesCPB']) || (!isset($replace['doChangesCPB']) && (!empty($replace['name']) || !empty($replace['desc']) || !empty($replace['author']) || !empty($replace['author_url'])))){ $GLOBALS['plugins']['mustuse']['mu-iwp-client.php']['Name'] = $replace['name']; $GLOBALS['plugins']['mustuse']['mu-iwp-client.php']['Title'] = $replace['name']; $GLOBALS['plugins']['mustuse']['mu-iwp-client.php']['Description'] = $replace['desc']; $GLOBALS['plugins']['mustuse']['mu-iwp-client.php']['AuthorURI'] = $replace['author_url']; $GLOBALS['plugins']['mustuse']['mu-iwp-client.php']['Author'] = $replace['author']; $GLOBALS['plugins']['mustuse']['mu-iwp-client.php']['AuthorName'] = $replace['author']; $GLOBALS['plugins']['mustuse']['mu-iwp-client.php']['PluginURI'] = ''; } return $previousValue; } function updateKeys() { if (!$this->iwp_mmb_multisite) { return; } global $wpdb; $publicKey = $this->get_parent_blog_option('iwp_client_public_key'); if (empty($publicKey)) { return; } $networkBlogs = $wpdb->get_results("select `blog_id` from `{$wpdb->blogs}`"); if (empty($networkBlogs)) { return; } foreach ($networkBlogs as $details) { update_blog_option($details->blog_id, 'iwp_client_public_key', $publicKey); } return; } function addConnectionKeyLink($meta, $slug) { if (is_multisite() && !is_network_admin()) { return $meta; } if ($slug !== 'iwp-client/init.php') { return $meta; } if (!current_user_can('activate_plugins')) { return $meta; } $meta[] = 'View activation key'; return $meta; } function printConnectionModalOpenScript() { if (!current_user_can('activate_plugins')) { return; } ob_start() ?> get_col("SELECT blog_id FROM $wpdb->blogs"); foreach ($blogIDs as $blogID) { update_blog_option($blogID, $option, $option_value); } return true; } else { update_option($option, $option_value); return true; } return false; } function enqueueConnectionModalOpenScripts(){ wp_enqueue_script('jquery'); wp_enqueue_script('jquery-ui-core'); wp_enqueue_script('jquery-ui-dialog'); } function enqueueConnectionModalOpenStyles(){ wp_enqueue_style('wp-jquery-ui'); wp_enqueue_style('wp-jquery-ui-dialog'); } function get_db_details($params){ global $wpdb; $result = array(); if (defined('DB_HOST')) { $result['dbHost'] = DB_HOST; $result['dbName'] = DB_NAME; $result['dbUser'] = DB_USER; $result['dbPassword'] = DB_PASSWORD; $result['db_table_prefix'] = $wpdb->base_prefix; $result['site_url'] = site_url(); $result['home_url'] = home_url(); } return $result; } function flush_redis_cache(){ @include_once( ABSPATH . 'wp-admin/includes/plugin.php' ); if ( is_plugin_active( 'redis-cache/redis-cache.php' ) ) { @include_once(WP_PLUGIN_DIR . '/redis-cache/redis-cache.php'); if(method_exists( $GLOBALS[ 'wp_object_cache' ], 'redis_status' )) { wp_cache_flush(); } } } function iwp_delete_option($option_name){ if(!empty($option_name)){ global $wpdb; $delete_query = "DELETE FROM $wpdb->options WHERE option_name = '".$option_name."'"; $affected = $wpdb->query($delete_query); if(!$affected){ global $iwp_backup_core; $iwp_backup_core->log("Failed to delete $option_name option"); $bt = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); $log = $bt[0]['file'].'-- line--'.$bt[0]['line'].'--function--'.$bt[0]['function']; $iwp_backup_core->log("$log"); $iwp_backup_core->log("Retry delete $option_name option"); // retry operation $query = "SELECT * FROM $wpdb->options WHERE option_name = '".$option_name."'"; $temp_row = $wpdb->get_row($query); if(!empty($temp_row)){ $wpdb->query($delete_query); } } } } function iwp_update_option($option_name,$option_value){ if(!empty($option_name)){ global $wpdb; $sql = "INSERT INTO `$wpdb->options` (option_name,option_value) VALUES (%s,%s) ON DUPLICATE KEY UPDATE option_value = %s"; $sql = $wpdb->prepare($sql,$option_name,$option_value,$option_value); $affected = $wpdb->query($sql); if($affected === false){ global $iwp_backup_core; $iwp_backup_core->log("Failed to update $option_name option and value $option_value"); $bt = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); $log = $bt[0]['file'].'-- line--'.$bt[0]['line'].'--function--'.$bt[0]['function']; $iwp_backup_core->log("$log"); // retry operation $affected = $wpdb->query($sql); } } } function get_max_allowed_packet(){ global $wpdb; $query = "SHOW VARIABLES LIKE 'max_allowed_packet'"; $temp_row = $wpdb->get_row($query); if(!empty($temp_row)){ return $temp_row->Value; //1048576 // $temp_row->Value/(1024*1024); // 1M }else{ return '128M'; //Default 8M, so we tried with increase max_allowed_packet size } } } ?>