: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
if (!defined('ABSPATH')) exit;
if (!class_exists('BVManageCallback')) :
class BVManageCallback extends BVCallbackBase {
const MANAGE_WING_VERSION = 1.6;
public function __construct($callback_handler) {
$this->settings = $callback_handler->settings;
$this->bvinfo = new BVInfo($this->settings);
function getError($err) {
return $this->objectToArray($err);
return (!empty($_ENV['PANTHEON_ENVIRONMENT']) && $_ENV['PANTHEON_ENVIRONMENT'] !== 'dev');
function isServerWritable() {
if ($this->is_pantheon()) {
if ((!defined('FTP_HOST') || !defined('FTP_USER')) && (get_filesystem_method(array(), false) != 'direct')) {
function include_files() {
@include_once ABSPATH.'wp-admin/includes/file.php';
@include_once ABSPATH.'wp-admin/includes/plugin.php';
@include_once ABSPATH.'wp-admin/includes/theme.php';
@include_once ABSPATH.'wp-admin/includes/misc.php';
@include_once ABSPATH.'wp-admin/includes/template.php';
@include_once ABSPATH.'wp-includes/pluggable.php';
@include_once ABSPATH.'wp-admin/includes/class-wp-upgrader.php';
@include_once ABSPATH.'wp-admin/includes/class-theme-upgrader.php';
@include_once ABSPATH.'wp-admin/includes/class-plugin-upgrader.php';
@include_once ABSPATH.'wp-admin/includes/user.php';
@include_once ABSPATH.'wp-admin/includes/upgrade.php';
@include_once ABSPATH.'wp-admin/includes/update.php';
@require_once ABSPATH.'wp-admin/includes/update-core.php';
if ($args['type'] == 'plugins') {
$result['plugins'] = $this->editPlugins($args);
} elseif ($args['type'] == 'themes') {
$result['themes'] = $this->editThemes($args);
} elseif ($args['type'] == 'users') {
$result['users'] = $this->editWpusers($args);
function editPlugins($args) {
$plugins = $args['items'];
foreach ($plugins as $plugin) {
if (array_key_exists('network', $plugin)) {
$networkwide = $plugin['network'];
switch ($args['action']) {
$res = activate_plugin($plugin['file'], '', $networkwide);
$res = deactivate_plugins(array($plugin['file']), false, $networkwide);
$res = delete_plugins(array($plugin['file']));
case 'deactivate_delete':
$res = deactivate_plugins(array($plugin['file']), false, $networkwide);
if ($res || is_wp_error($res))
$res = delete_plugins(array($plugin['file']));
$res = array('status' => "Error", 'message' => $res->get_error_message());
} elseif ($res === false) {
$res = array('status' => "Error", 'message' => "Failed to perform action.");
$res = array('status' => "Done");
$result[$plugin['file']] = $res;
function editThemes($args) {
$themes = $args['items'];
foreach ($themes as $theme) {
switch ($args['action']) {
$res = switch_theme($theme['template'], $theme['stylesheet']);
$res = delete_theme($theme['stylesheet']);
$res = array('status' => "Error", 'message' => $res->get_error_message());
} elseif ($res === false) {
$res = array('status' => "Error", 'message' => "Failed to perform action.");
$res = array( 'status' => "Done");
$result[$theme['template']] = $res;
function editWpusers($args) {
foreach ($items as $item) {
$user = get_user_by('id', $item['id']);
switch ($args['action']) {
$data['role'] = $item['newrole'];
$res = wp_update_user($data);
$data['user_pass'] = $item['newpass'];
$res = wp_update_user($data);
if (array_key_exists('reassign', $args)) {
$user_to = get_user_by('id', $args['reassign']);
$res = wp_delete_user($user->ID, $user_to->ID);
$res = array('status' => "Error", 'message' => 'Reassigned user doesnot exists');
$res = wp_delete_user($user->ID);
$res = array('status' => "Error", 'message' => $res->get_error_message());
$res = array( 'status' => "Done");
$res = array('status' => "Error", 'message' => "Unable to find user");
$result[$item['id']] = $res;
function addUser($args) {
if (username_exists($args['user_login'])) {
return array('status' => "Error", 'message' => "Username already exists");
if (email_exists($args['user_email'])) {
return array('status' => "Error", 'message' => "Email already exists");
$result = wp_insert_user($args);
if ( !is_wp_error( $result ) ) {
return array('status' => "Done", 'user_id' => $result);
return array('status' => "Error", 'message' => $this->getError($result));
function upgrade($params = null, $has_bv_skin = false, $bv_bulk_upgrade = false) {
$premium_upgrades = array();
if (array_key_exists('clear_filters', $params)) {
$filters = $params['clear_filters'];
foreach ($filters as $filter)
remove_all_filters($filter);
if (array_key_exists('core', $params) && !empty($params['core'])) {
$result['core'] = $this->upgradeCore($params['core']);
if (array_key_exists('translations', $params) && !empty($params['translations'])) {
$result['translations'] = $this->upgradeTranslations($params['translations'], $has_bv_skin);
if (array_key_exists('plugins', $params) && !empty($params['plugins'])) {
$result['plugins'] = $this->upgradePlugins($params['plugins'], $has_bv_skin, $bv_bulk_upgrade);
if (array_key_exists('themes', $params) && !empty($params['themes'])) {
$result['themes'] = $this->upgradeThemes($params['themes'], $has_bv_skin, $bv_bulk_upgrade);
function get_translation_updates() {
$transients = array( 'update_core' => 'core', 'update_plugins' => 'plugin', 'update_themes' => 'theme' );
foreach ( $transients as $transient => $type ) {
$transient = $this->settings->getTransient( $transient );
if ( empty( $transient->translations ) )
foreach ( $transient->translations as $translation ) {
$updates[] = (object) $translation;
function upgradeTranslations($translations, $has_bv_skin = false) {
$language_updates = $this->get_translation_updates();
$valid_updates = array();
if (!empty($language_updates)) {
foreach($language_updates as $update) {
if ($update && in_array($update->package, $translations)) {
$valid_updates[] = $update;
if (!empty($valid_updates)) {
if (class_exists('Language_Pack_Upgrader')) {
require_once( "bv_upgrader_skin.php" );
$skin = new BVUpgraderSkin("upgrade_translations");
$skin = new Language_Pack_Upgrader_Skin(array());
$upgrader = new Language_Pack_Upgrader($skin);
$result = $upgrader->bulk_upgrade($valid_updates);
if (is_array($result) && !empty($result)) {
foreach ($result as $translate_tmp => $translate_info) {
if (is_wp_error($translate_info) || empty($translate_info)) {
$error = (!empty($translate_info)) ? is_wp_error($translate_info) : "Upgrade failed";
return array('status' => "Error", 'message' => $error);
return array('status' => "Done");
return array('status' => "Error", 'message' => "Upgrade failed");
function upgradeCore($args) {
global $wp_filesystem, $wp_version;
$core = $this->settings->getTransient('update_core');
$core_update_index = intval($args['coreupdateindex']);
if (isset($core->updates) && !empty($core->updates)) {
$to_update = $core->updates[$core_update_index];
return array('status' => "Error", "message" => "Updates not available");
$resp = array("Core_Upgrader", class_exists('Core_Upgrader'));
if (version_compare($wp_version, '3.1.9', '>')) {
$core = new Core_Upgrader();
$result = $core->upgrade($to_update);
if (is_wp_error($result)) {
return array('status' => "Error", "message" => $this->getError($result));
return array('status' => 'Done');
$resp = array("wp_update_core", function_exists('wp_update_core'));
if (function_exists('wp_update_core')) {
$result = wp_update_core($to_update);
if (is_wp_error($result)) {
return array('status' => "Error", "message" => $this->getError($result));
return array('status' => 'Done');
$resp = array("WP_Upgrader", class_exists('WP_Upgrader'));
if (class_exists('WP_Upgrader')) {
$upgrader = new WP_Upgrader();
$res = $upgrader->fs_connect(
return array('status' => "Error", "message" => $this->getError($res));
$wp_dir = trailingslashit($wp_filesystem->abspath());
if (isset($to_update->package) && !empty($to_update->package)) {
$core_package = $to_update->package;
} elseif (isset($to_update->packages->full) && !empty($to_update->packages->full)) {
$core_package = $to_update->packages->full;
$download = $upgrader->download_package($core_package);
if (is_wp_error($download)) {
return array('status' => "Error", "message" => $this->getError($download));
$working_dir = $upgrader->unpack_package($download);
if (is_wp_error($working_dir)) {
return array('status' => "Error", "message" => $this->getError($working_dir));
if (!$wp_filesystem->copy($working_dir.'/wordpress/wp-admin/includes/update-core.php', $wp_dir.'wp-admin/includes/update-core.php', true)) {
$wp_filesystem->delete($working_dir, true);
return array('status' => "Error", "message" => "Unable to move files.");
$wp_filesystem->chmod($wp_dir.'wp-admin/includes/update-core.php', FS_CHMOD_FILE);
$result = update_core($working_dir, $wp_dir);
if (is_wp_error($result)) {
return array('status' => "Error", "message" => $this->getError($result));
return array('status' => 'Done');
function bv_plugin_bulk_upgrade($upgrader, $_plugins) {
$plugins = array_keys($_plugins);
'clear_update_cache' => true,
$parsed_args = wp_parse_args($args, $defaults);
$upgrader->upgrade_strings();
add_filter('upgrader_clear_destination', array($upgrader, 'delete_old_plugin'), 10, 4);
$upgrader->skin->header();
$res = $upgrader->fs_connect(array(WP_CONTENT_DIR, WP_PLUGIN_DIR));
$upgrader->skin->footer();
$upgrader->skin->bulk_header();
$maintenance = (is_multisite() && ! empty($plugins));
foreach ($plugins as $plugin) {
$maintenance = $maintenance || (is_plugin_active($plugin));
$upgrader->maintenance_mode(true);
$upgrader->update_count = count($plugins);
$upgrader->update_current = 0;
foreach($plugins as $plugin) {
$upgrader->update_current++;
$upgrader->skin->plugin_info = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin, false, true);
$upgrader->skin->plugin_active = is_plugin_active($plugin);
$result = $upgrader->run(
'package' => $_plugins[$plugin],
'destination' => WP_PLUGIN_DIR,
'clear_destination' => true,
$results[$plugin] = $result;
$upgrader->maintenance_mode(false);
wp_clean_plugins_cache($parsed_args['clear_update_cache']);
'upgrader_process_complete',
$upgrader->skin->bulk_footer();
$upgrader->skin->footer();
remove_filter('upgrader_clear_destination', array($upgrader, 'delete_old_plugin'));
$past_failure_emails = get_option('auto_plugin_theme_update_emails', array());
foreach ($results as $plugin => $result) {
if (!$result || is_wp_error($result) || !isset($past_failure_emails[$plugin])) {
unset($past_failure_emails[$plugin]);
update_option('auto_plugin_theme_update_emails', $past_failure_emails);
function upgradePlugins($plugins, $has_bv_skin = false, $bv_bulk_upgrade = false) {
$plugins_by_name = array();
foreach ($plugins as $plugin) {
$_plugins[$plugin['file']] = $plugin['package'];
$plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin['file'], false, true);
$plugins_by_name[$plugin_data['Name']] = $plugin['file'];
if (empty(array_keys($_plugins))) {
if (class_exists('Plugin_Upgrader')) {
require_once( "bv_upgrader_skin.php" );
$skin = new BVUpgraderSkin("plugin_upgrade", $plugins_by_name);
$skin = new Bulk_Plugin_Upgrader_Skin();
$upgrader = new Plugin_Upgrader($skin);
$result = $this->bv_plugin_bulk_upgrade($upgrader, $_plugins);
$result = $upgrader->bulk_upgrade(array_keys($_plugins));
foreach (array_keys($_plugins) as $file) {
if (!array_key_exists($file, $result)) {
$result[$file] = array('status' => "Error");
if (!$res || is_wp_error($res)) {
$result[$file] = array('status' => "Error");
$result[$file] = array('status' => "Done");
function bv_theme_bulk_upgrade($upgrader, $_themes) {
$themes = array_keys($_themes);
'clear_update_cache' => true,
$parsed_args = wp_parse_args($args, $defaults);
$upgrader->upgrade_strings();
add_filter('upgrader_pre_install', array($upgrader, 'current_before'), 10, 2);
add_filter('upgrader_post_install', array( $upgrader, 'current_after'), 10, 2);
add_filter('upgrader_clear_destination', array($upgrader, 'delete_old_theme'), 10, 4);
$upgrader->skin->header();
$res = $upgrader->fs_connect(array(WP_CONTENT_DIR));
$upgrader->skin->footer();
$upgrader->skin->bulk_header();
$maintenance = (is_multisite() && !empty($themes));
foreach ($themes as $theme) {
$maintenance = $maintenance || get_stylesheet() === $theme || get_template() === $theme;
$upgrader->maintenance_mode(true);
$upgrader->update_count = count($themes);
$upgrader->update_current = 0;
foreach ($themes as $theme) {
$upgrader->update_current++;
$upgrader->skin->theme_info = $upgrader->theme_info($theme);
$result = $upgrader->run(
'package' => $_themes[$theme],
'destination' => get_theme_root($theme),
'clear_destination' => true,