function getWPFilesystem() { global $wp_filesystem; if (empty($wp_filesystem)) { ob_start(); // if (file_exists(ABSPATH . '/wp-admin/includes/deprecated.php')) include_once(ABSPATH . '/wp-admin/includes/deprecated.php'); if (file_exists(ABSPATH . '/wp-admin/includes/screen.php')) { include_once ABSPATH . '/wp-admin/includes/screen.php'; } if (file_exists(ABSPATH . '/wp-admin/includes/template.php')) { include_once ABSPATH . '/wp-admin/includes/template.php'; } $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); } else { if (is_wp_error($wp_filesystem->errors)) { $errorCodes = $wp_filesystem->errors->get_error_codes(); if (!empty($errorCodes)) { MainWP_Helper::error(__('Wordpress Filesystem error: ', 'mainwp-child') . $wp_filesystem->errors->get_error_message()); } } } return $wp_filesystem; }
public static function installPlugin($url, $activatePlugin = false) { $hasWPFileSystem = MainWP_Utility::getWPFilesystem(); /** @global WP_Filesystem_Base $wp_filesystem */ global $wp_filesystem; if (file_exists(ABSPATH . '/wp-admin/includes/screen.php')) { include_once ABSPATH . '/wp-admin/includes/screen.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/plugin.php'; $installer = new WP_Upgrader(); $ssl_verifyhost = get_option('mainwp_sslVerifyCertificate'); $ssl_api_verifyhost = get_option('mainwp_api_sslVerifyCertificate') === false || get_option('mainwp_api_sslVerifyCertificate') == 1 ? 1 : 0; if ($ssl_verifyhost === '0' || $ssl_api_verifyhost == 0) { add_filter('http_request_args', array(MainWP_Extensions::getClassName(), 'noSSLFilterFunction'), 99, 2); } add_filter('http_request_args', array(MainWP_Extensions::getClassName(), 'http_request_reject_unsafe_urls'), 99, 2); $result = $installer->run(array('package' => $url, 'destination' => WP_PLUGIN_DIR, 'clear_destination' => false, 'clear_working' => true, 'hook_extra' => array())); remove_filter('http_request_args', array(MainWP_Extensions::getClassName(), 'http_request_reject_unsafe_urls'), 99, 2); if ($ssl_verifyhost === '0') { remove_filter('http_request_args', array(MainWP_Extensions::getClassName(), 'noSSLFilterFunction'), 99); } if (is_wp_error($result)) { if ($result->get_error_data() && is_string($result->get_error_data())) { $error = $result->get_error_data(); MainWP_Helper::error($error); } else { $error = $result->get_error_code(); MainWP_Helper::error(implode(', ', $error)); } } $error = $output = $plugin_slug = null; if (is_wp_error($result)) { if ($result->get_error_data() && is_string($result->get_error_data())) { $error = $result->get_error_data(); } else { $error = $result->get_error_code(); } } else { $path = $result['destination']; foreach ($result['source_files'] as $srcFile) { // to fix bug if ($srcFile == 'readme.txt') { continue; } $thePlugin = get_plugin_data($path . $srcFile); if ($thePlugin != null && $thePlugin != '' && $thePlugin['Name'] != '') { $output .= __('Successfully installed the plugin', 'mainwp') . ' ' . $thePlugin['Name'] . ' ' . $thePlugin['Version']; $plugin_slug = $result['destination_name'] . '/' . $srcFile; if ($activatePlugin) { activate_plugin($path . $srcFile, '', false, true); do_action('mainwp_api_extension_activated', $path . $srcFile); } break; } } } if (!empty($error)) { $return['error'] = $error; } else { $return['result'] = 'SUCCESS'; $return['output'] = $output; $return['slug'] = $plugin_slug; } return $return; }
/** * Create full backup */ public function createFullBackup($excludes, $filePrefix = '', $addConfig = false, $includeCoreFiles = false, $file_descriptors = 0, $fileSuffix = false, $excludezip = false, $excludenonwp = false, $loadFilesBeforeZip = true, $ext = 'zip', $pid = false, $append = false) { $this->file_descriptors = $file_descriptors; $this->loadFilesBeforeZip = $loadFilesBeforeZip; $dirs = MainWP_Helper::getMainWPDir('backup'); $backupdir = $dirs[0]; if (!defined('PCLZIP_TEMPORARY_DIR')) { define('PCLZIP_TEMPORARY_DIR', $backupdir); } if (false !== $pid) { $pid = trailingslashit($backupdir) . 'backup-' . $pid . '.pid'; } //Verify if another backup is running, if so, return an error $files = glob($backupdir . '*.pid'); foreach ($files as $file) { if (basename($file) == basename($pid)) { continue; } if (time() - filemtime($file) < 160) { MainWP_Helper::error('Another backup process is running, try again later'); } } $timestamp = time(); if ('' !== $filePrefix) { $filePrefix .= '-'; } if ('zip' == $ext) { $this->archiver = null; $ext = '.zip'; } else { $this->archiver = new Tar_Archiver($this, $ext, $pid); $ext = $this->archiver->getExtension(); } // throw new Exception('Test 1 2 : ' . print_r($append,1)); if (false !== $fileSuffix && !empty($fileSuffix)) { $file = $fileSuffix . (true === $append ? '' : $ext); //Append already contains extension! } else { $file = 'backup-' . $filePrefix . $timestamp . $ext; } $filepath = $backupdir . $file; $fileurl = $file; // if (!$append) // { // if ($dh = opendir($backupdir)) // { // while (($file = readdir($dh)) !== false) // { // if ($file != '.' && $file != '..' && preg_match('/(.*).(zip|tar|tar.gz|tar.bz2|pid|done)$/', $file)) // { // @unlink($backupdir . $file); // } // } // closedir($dh); // } // } if (!$addConfig) { if (!in_array(str_replace(ABSPATH, '', WP_CONTENT_DIR), $excludes) && !in_array('wp-admin', $excludes) && !in_array(WPINC, $excludes)) { $addConfig = true; $includeCoreFiles = true; } } $this->timeout = 20 * 60 * 60; /*20 minutes*/ $mem = '512M'; // @codingStandardsIgnoreStart @ini_set('memory_limit', $mem); @set_time_limit($this->timeout); @ini_set('max_execution_time', $this->timeout); // @codingStandardsIgnoreEnd if (null !== $this->archiver) { $success = $this->archiver->createFullBackup($filepath, $excludes, $addConfig, $includeCoreFiles, $excludezip, $excludenonwp, $append); } else { if ($this->checkZipSupport()) { $success = $this->createZipFullBackup($filepath, $excludes, $addConfig, $includeCoreFiles, $excludezip, $excludenonwp); } else { if ($this->checkZipConsole()) { $success = $this->createZipConsoleFullBackup($filepath, $excludes, $addConfig, $includeCoreFiles, $excludezip, $excludenonwp); } else { $success = $this->createZipPclFullBackup2($filepath, $excludes, $addConfig, $includeCoreFiles, $excludezip, $excludenonwp); } } } return $success ? array('timestamp' => $timestamp, 'file' => $fileurl, 'filesize' => filesize($filepath)) : false; }