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;
 }