public static function execute($params) { self::validate(); $error = $_FILES['upload-file']['error']; $upload = $_FILES['upload-file']['tmp_name']; $archive = ai1wm_archive_path($params); switch ($error) { case UPLOAD_ERR_OK: try { ai1wm_copy($upload, $archive); ai1wm_unlink($upload); } catch (Exception $exception) { throw new Ai1wm_Import_Retry_Exception(sprintf(__('Unable to upload the file because %s', AI1WM_PLUGIN_NAME), $exception->getMessage()), 400); } break; case UPLOAD_ERR_INI_SIZE: case UPLOAD_ERR_FORM_SIZE: case UPLOAD_ERR_PARTIAL: case UPLOAD_ERR_NO_FILE: // File is too large, reduce the size and try again throw new Ai1wm_Import_Retry_Exception(__('The file is too large, retrying with smaller size.', AI1WM_PLUGIN_NAME), 413); case UPLOAD_ERR_NO_TMP_DIR: throw new Ai1wm_Import_Retry_Exception(__('Missing a temporary folder.', AI1WM_PLUGIN_NAME), 400); case UPLOAD_ERR_CANT_WRITE: throw new Ai1wm_Import_Retry_Exception(__('Failed to write file to disk.', AI1WM_PLUGIN_NAME), 400); case UPLOAD_ERR_EXTENSION: throw new Ai1wm_Import_Retry_Exception(__('A PHP extension stopped the file upload.', AI1WM_PLUGIN_NAME), 400); default: throw new Ai1wm_Import_Retry_Exception(sprintf(__('Unrecognized error %s during upload.', AI1WM_PLUGIN_NAME), $error), 400); } exit; }
public static function execute( $params ) { // Set progress Ai1wm_Status::info( __( 'Connecting to Google Drive...', AI1WMGE_PLUGIN_NAME ) ); // Open achive file $archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) ); // Append EOF block $archive->close( true ); // Set Gdrive client $gdrive = new ServMaskGdriveClient( get_option( 'ai1wmge_gdrive_token' ), get_option( 'ai1wmge_gdrive_ssl', true ) ); // Get or Create folder $folder = $gdrive->listFolder( ai1wm_archive_folder() ); if ( isset( $folder['items'] ) && ( $item = array_shift( $folder['items'] ) ) ) { $folder = $item; } else { $folder = $gdrive->createFolder( ai1wm_archive_folder() ); } // Upload resumable $params['uploadUrl'] = $gdrive->uploadResumable( ai1wm_archive_name( $params ), ai1wm_archive_bytes( $params ), $folder['id'] ); return $params; }
public static function execute($params) { // Set progress Ai1wm_Status::info(__('Connecting to Dropbox...', AI1WMDE_PLUGIN_NAME)); // Open archive file $archive = new Ai1wm_Compressor(ai1wm_archive_path($params)); // Append EOF block $archive->close(true); return $params; }
public static function execute($params) { // Set progress Ai1wm_Status::info(__('Creating an empty archive...', AI1WMDE_PLUGIN_NAME)); // Create empty archive file $archive = new Ai1wm_Compressor(ai1wm_archive_path($params)); $archive->close(); // Set progress Ai1wm_Status::info(__('Done creating an empty archive.', AI1WMDE_PLUGIN_NAME)); return $params; }
public static function execute($params) { $completed = false; // Set startBytes if (!isset($params['startBytes'])) { $params['startBytes'] = 0; } // Set endBytes if (!isset($params['endBytes'])) { $params['endBytes'] = ServMaskDropboxClient::CHUNK_SIZE; } // Set retry if (!isset($params['retry'])) { $params['retry'] = 0; } // Set Dropbox client $dropbox = new ServMaskDropboxClient(get_option('ai1wmde_dropbox_token'), get_option('ai1wmde_dropbox_ssl', true)); // Get archive file $archive = fopen(ai1wm_archive_path($params), 'ab'); try { // Increase number of retries $params['retry'] += 1; // Download file chunk $dropbox->getFile($params['filePath'], $archive, $params); } catch (Exception $e) { // Retry 3 times if ($params['retry'] <= 3) { return $params; } throw $e; } // Reset retry counter $params['retry'] = 0; // Close the archive file fclose($archive); // Calculate percent $percent = (int) ($params['startBytes'] / $params['totalBytes'] * 100); // Set progress Ai1wm_Status::progress($percent); // Next file chunk if (empty($params['totalBytes'])) { throw new Ai1wm_Import_Exception('Unable to import the archive! Please check file size parameter. '); } else { if ($params['totalBytes'] == $params['startBytes']) { $completed = true; } } // Set completed flag $params['completed'] = $completed; return $params; }
public static function execute( $params ) { // Get upload file if ( ! isset( $_FILES['upload-file'] ) ) { return $params; } // Set chunk if ( isset( $params['chunk'] ) ) { $chunk = (int) $params['chunk']; } else { $chunk = 0; } // Set chunks if ( isset( $params['chunks'] ) ) { $chunks = (int) $params['chunks']; } else { $chunks = 1; } // Has any upload error? if ( empty( $_FILES['upload-file']['error'] ) ) { // Open partial file $out = fopen( ai1wm_archive_path( $params ), $chunk === 0 ? 'wb' : 'ab' ); if ( $out ) { // Read binary input stream and append it to temp file $in = fopen( $_FILES['upload-file']['tmp_name'], 'rb' ); if ( $in ) { while ( $buff = fread( $in, 4096 ) ) { fwrite( $out, $buff ); } } fclose( $in ); fclose( $out ); // Remove temporary uploaded file unlink( $_FILES['upload-file']['tmp_name'] ); } else { status_header( 500 ); } } else { status_header( 500 ); } exit; }
public static function execute( $params ) { global $wp_version; // Set progress Ai1wm_Status::info( __( 'Adding configuration to archive...', AI1WM_PLUGIN_NAME ) ); // Initialize empty WP cache wp_cache_init(); // Get options $options = wp_load_alloptions(); // Set config $config = new Ai1wm_Config; // Set Site URL if ( isset( $options['siteurl'] ) ) { $config->SiteURL = untrailingslashit( $options['siteurl'] ); } else { $config->SiteURL = site_url(); } // Set Home URL if ( isset( $options['home'] ) ) { $config->HomeURL = untrailingslashit( $options['home'] ); } else { $config->HomeURL = home_url(); } // Set Plugin Version $config->Plugin = (object) array( 'Version' => AI1WM_VERSION ); // Set WordPress Version and Content $config->WordPress = (object) array( 'Version' => $wp_version, 'Content' => WP_CONTENT_DIR ); // Save package.json file $handle = fopen( ai1wm_package_path( $params ), 'w' ); fwrite( $handle, json_encode( $config ) ); fclose( $handle ); // Add package.json file $archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) ); $archive->add_file( ai1wm_package_path( $params ), AI1WM_PACKAGE_NAME ); $archive->close(); // Set progress Ai1wm_Status::info( __( 'Done adding configuration to archive.', AI1WM_PLUGIN_NAME ) ); return $params; }
public static function execute( $params ) { // Set shutdown handler @register_shutdown_function( 'Ai1wm_Import_Done::shutdown' ); // Check multisite.json file if ( true === is_file( ai1wm_multisite_path( $params ) ) ) { // Read multisite.json file $handle = fopen( ai1wm_multisite_path( $params ), 'r' ); if ( $handle === false ) { throw new Ai1wm_Import_Exception( __( 'Unable to read multisite.json file', AI1WM_PLUGIN_NAME ) ); } // Parse multisite.json file $multisite = fread( $handle, filesize( ai1wm_multisite_path( $params ) ) ); $multisite = json_decode( $multisite ); // Close handle fclose( $handle ); // Activate plugins if ( isset( $multisite->Plugins ) && ( $active_sitewide_plugins = $multisite->Plugins ) ) { activate_plugins( $active_sitewide_plugins, null, is_multisite() ); } } // Set the new MS files rewriting if ( get_site_option( AI1WM_MS_FILES_REWRITING ) ) { update_site_option( AI1WM_MS_FILES_REWRITING, 0 ); } // Open the archive file for reading $archive = new Ai1wm_Extractor( ai1wm_archive_path( $params ) ); // Unpack must-use plugins $archive->extract_by_files_array( WP_CONTENT_DIR, array( AI1WM_MUPLUGINS_NAME ) ); // Close the archive file $archive->close(); // Load must-use plugins foreach ( wp_get_mu_plugins() as $mu_plugin ) { include_once( $mu_plugin ); } return $params; }
public static function execute($params) { // Set progress Ai1wm_Status::info(__('Activating plugins...', AI1WM_PLUGIN_NAME)); // Open the archive file for reading $archive = new Ai1wm_Extractor(ai1wm_archive_path($params)); // Include WordPress files $include_files = array_keys(_get_dropins()); // Include mu-plugins files $include_files = array_merge($include_files, array(AI1WM_MUPLUGINS_NAME)); // Unpack WordPress files and mu-plugins files $archive->extract_by_files_array(WP_CONTENT_DIR, $include_files); // Close the archive file $archive->close(); // Set progress Ai1wm_Status::info(__('Done activating plugins...', AI1WM_PLUGIN_NAME)); return $params; }
public static function execute($params) { global $wp_version; // Set progress Ai1wm_Status::info(__('Adding configuration to archive...', AI1WM_PLUGIN_NAME)); // Flush WP cache ai1wm_cache_flush(); // Get options $options = wp_load_alloptions(); // Set config $config = array(); // Set Site URL if (isset($options['siteurl'])) { $config['SiteURL'] = untrailingslashit($options['siteurl']); } else { $config['SiteURL'] = site_url(); } // Set Home URL if (isset($options['home'])) { $config['HomeURL'] = untrailingslashit($options['home']); } else { $config['HomeURL'] = home_url(); } // Set Plugin Version $config['Plugin'] = array('Version' => AI1WM_VERSION); // Set WordPress Version and Content $config['WordPress'] = array('Version' => $wp_version, 'Content' => WP_CONTENT_DIR); // Set No Replace Email if (isset($params['options']['no_email_replace'])) { $config['NoEmailReplace'] = true; } // Save package.json file $handle = fopen(ai1wm_package_path($params), 'w'); fwrite($handle, json_encode($config)); fclose($handle); // Add package.json file $archive = new Ai1wm_Compressor(ai1wm_archive_path($params)); $archive->add_file(ai1wm_package_path($params), AI1WM_PACKAGE_NAME); $archive->close(); // Set progress Ai1wm_Status::info(__('Done adding configuration to archive.', AI1WM_PLUGIN_NAME)); return $params; }
public static function execute( $params ) { // Set progress Ai1wm_Status::info( __( 'Retrieving a list of all WordPress files...', AI1WM_PLUGIN_NAME ) ); // Open the archive file for reading $archive = new Ai1wm_Extractor( ai1wm_archive_path( $params ) ); // Get total files $params['total_files'] = $archive->get_total_files(); // Get total size $params['total_size'] = $archive->get_total_size(); // Close the archive file $archive->close(); // Set progress Ai1wm_Status::info( __( 'Done retrieving a list of all WordPress files.', AI1WM_PLUGIN_NAME ) ); return $params; }
public static function execute( $params ) { // Set progress Ai1wm_Status::info( __( 'Renaming exported file...', AI1WM_PLUGIN_NAME ) ); // Close achive file $archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) ); // Append EOF block $archive->close( true ); // Rename archive file if ( rename( ai1wm_archive_path( $params ), ai1wm_download_path( $params ) ) ) { // Set archive details $link = ai1wm_backups_url( $params ); $size = ai1wm_download_size( $params ); $name = ai1wm_site_name(); // Set progress Ai1wm_Status::download( sprintf( __( '<a href="%s" class="ai1wm-button-green ai1wm-emphasize">' . '<span>Download %s</span>' . '<em>Size: %s</em>' . '</a>', AI1WM_PLUGIN_NAME ), $link, $name, $size ) ); } return $params; }
public static function execute( $params ) { $completed = false; // File ID if ( ! isset( $params['fileId'] ) ) { throw new Ai1wm_Import_Exception( __( 'Google Drive File ID is not specified. ', AI1WMGE_PLUGIN_NAME ) ); } // Set startBytes if ( ! isset( $params['startBytes'] ) ) { $params['startBytes'] = 0; } // Set endBytes if ( ! isset( $params['endBytes'] ) ) { $params['endBytes'] = ServMaskGdriveClient::CHUNK_SIZE; } // Set retry if ( ! isset( $params['retry'] ) ) { $params['retry'] = 0; } // Set Google Drive client $gdrive = new ServMaskGdriveClient( get_option( 'ai1wmge_gdrive_token' ), get_option( 'ai1wmge_gdrive_ssl', true ) ); // Get archive file $archive = fopen( ai1wm_archive_path( $params ), 'ab' ); try { // Increase number of retries $params['retry'] += 1; // Download file chunk $gdrive->getFile( $params['fileId'], $archive, $params ); } catch ( Exception $e ) { // Retry 3 times if ( $params['retry'] <= 3 ) { return $params; } throw $e; } // Reset retry counter $params['retry'] = 0; // Close the archive file fclose( $archive ); // Calculate percent $percent = (int) ( ( $params['startBytes'] / $params['totalBytes'] ) * 100 ); // Set progress Ai1wm_Status::progress( $percent ); // Next file chunk if ( empty( $params['totalBytes'] ) ) { throw new Ai1wm_Import_Exception( 'Unable to import the archive! Please check file size parameter. '); } else if ( $params['totalBytes'] == $params['startBytes'] ) { $completed = true; } // Set completed flag $params['completed'] = $completed; return $params; }
public static function execute( $params ) { $completed = false; // Set offset if ( ! isset( $params['offset'] ) ) { $params['offset'] = 0; } // Set retry if ( ! isset( $params['retry'] ) ) { $params['retry'] = 0; } // Set Gdrive client $gdrive = new ServMaskGdriveClient( get_option( 'ai1wmge_gdrive_token' ), get_option( 'ai1wmge_gdrive_ssl', true ) ); // Get archive file $archive = fopen( ai1wm_archive_path( $params ), 'rb' ); // Read file chunk if ( ( fseek( $archive, $params['offset'] ) !== -1 ) && ( $chunk = fread( $archive, ServMaskGdriveClient::CHUNK_SIZE ) ) ) { // Set chunk size $params['chunkSize'] = ftell( $archive ) - $params['offset']; // Set file size $params['fileSize'] = ai1wm_archive_bytes( $params ); try { // Increase number of retries $params['retry'] += 1; // Upload file chunk $gdrive->uploadFileChunk( $chunk, $params ); } catch ( Exception $e ) { // Retry 3 times if ( $params['retry'] <= 3 ) { return $params; } throw $e; } // Reset retry counter $params['retry'] = 0; // Set archive details $name = ai1wm_archive_name( $params ); $bytes = ai1wm_archive_bytes( $params ); $size = ai1wm_archive_size( $params ); // Get progress if ( isset( $params['offset'] ) ) { $progress = (int) ( ( $params['offset'] / $bytes ) * 100 ); } else { $progress = 100; } // Set progress Ai1wm_Status::info( __( "<i class=\"ai1wm-icon-gdrive\"></i> " . "Uploading <strong>{$name}</strong> ({$size})<br />{$progress}% complete", AI1WMGE_PLUGIN_NAME ) ); } else { // Set last backup date update_option( 'ai1wmge_gdrive_timestamp', current_time( 'timestamp' ) ); // Set progress Ai1wm_Status::done( __( 'Your WordPress archive has been uploaded to Google Drive.', AI1WMGE_PLUGIN_NAME ), __( 'Google Drive', AI1WMGE_PLUGIN_NAME ) ); // Upload completed $completed = true; self::notify_admin_of_new_backup( $params ); } // Close the archive file fclose( $archive ); // Set completed flag $params['completed'] = $completed; return $params; }
public static function execute( $params ) { // Set content offset if ( isset( $params['content_offset'] ) ) { $content_offset = (int) $params['content_offset']; } else { $content_offset = 0; } // Set filemap offset if ( isset( $params['filemap_offset'] ) ) { $filemap_offset = (int) $params['filemap_offset']; } else { $filemap_offset = 0; } // Get total files if ( isset( $params['total_files'] ) ) { $total_files = (int) $params['total_files']; } else { $total_files = 1; } // Get total size if ( isset( $params['total_size'] ) ) { $total_size = (int) $params['total_size']; } else { $total_size = 1; } // Get processed files if ( isset( $params['processed'] ) ) { $processed = (int) $params['processed']; } else { $processed = 0; } // What percent of files have we processed? $progress = (int) ( ( $processed / $total_size ) * 100 ); // Set progress if ( empty( $content_offset ) ) { Ai1wm_Status::info( sprintf( __( 'Archiving %d files...<br />%d%% complete', AI1WM_PLUGIN_NAME ), $total_files, $progress ) ); } // Get map file $filemap = fopen( ai1wm_filemap_path( $params ), 'r' ); // Start time $start = microtime( true ); // Flag to hold if all files have been processed $completed = true; // Set filemap pointer at the current index if ( fseek( $filemap, $filemap_offset ) !== -1 ) { // Get archive $archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) ); while ( $path = trim( fgets( $filemap ) ) ) { try { // Add file to archive if ( ( $content_offset = $archive->add_file( WP_CONTENT_DIR . DIRECTORY_SEPARATOR . $path, $path, $content_offset, 10 ) ) ) { // Set progress if ( ( $processed += $content_offset ) ) { $progress = (int) ( ( $processed / $total_size ) * 100 ); } // Set progress Ai1wm_Status::info( sprintf( __( 'Archiving %d files...<br />%d%% complete', AI1WM_PLUGIN_NAME ), $total_files, $progress ) ); // Set content offset $params['content_offset'] = $content_offset; // Set filemap offset $params['filemap_offset'] = $filemap_offset; // Set completed flag $params['completed'] = false; // Close the filemap file fclose( $filemap ); return $params; } // Set content offset $content_offset = 0; // Set filemap offset $filemap_offset = ftell( $filemap ); } catch ( Exception $e ) { // Skip bad file permissions } // Increment processed files $processed += $archive->get_current_filesize(); // More than 10 seconds have passed, break and do another request if ( ( microtime( true ) - $start ) > 10 ) { $completed = false; break; } } $archive->close(); } // Set content offset $params['content_offset'] = $content_offset; // Set filemap offset $params['filemap_offset'] = $filemap_offset; // Set processed files $params['processed'] = $processed; // Set completed flag $params['completed'] = $completed; // Close the filemap file fclose( $filemap ); return $params; }
public static function execute( $params ) { // Read blogs.json file $handle = fopen( ai1wm_blogs_path( $params ), 'r' ); if ( $handle === false ) { throw new Ai1wm_Import_Exception( 'Unable to read blogs.json file' ); } // Parse blogs.json file $blogs = fread( $handle, filesize( ai1wm_blogs_path( $params ) ) ); $blogs = json_decode( $blogs ); // Close handle fclose( $handle ); // Set content offset if ( isset( $params['content_offset'] ) ) { $content_offset = (int) $params['content_offset']; } else { $content_offset = 0; } // Set archive offset if ( isset( $params['archive_offset']) ) { $archive_offset = (int) $params['archive_offset']; } else { $archive_offset = 0; } // Get total files if ( isset( $params['total_files'] ) ) { $total_files = (int) $params['total_files']; } else { $total_files = 1; } // Get total size if ( isset( $params['total_size'] ) ) { $total_size = (int) $params['total_size']; } else { $total_size = 1; } // Get processed files if ( isset( $params['processed'] ) ) { $processed = (int) $params['processed']; } else { $processed = 0; } // What percent of files have we processed? $progress = (int) ( ( $processed / $total_size ) * 100 ); // Set progress if ( empty( $content_offset ) ) { Ai1wm_Status::info( sprintf( __( 'Restoring %d files...<br />%d%% complete', AI1WM_PLUGIN_NAME ), $total_files, $progress ) ); } // Start time $start = microtime( true ); // Flag to hold if all files have been processed $completed = true; // Open the archive file for reading $archive = new Ai1wm_Extractor( ai1wm_archive_path( $params ) ); // Set the file pointer to the one that we have saved $archive->set_file_pointer( null, $archive_offset ); $old_paths = array(); $new_paths = array(); // Set extract paths foreach ( $blogs as $blog ) { $old_paths[] = ai1wm_sites_path( $blog->Old->Id ); $new_paths[] = ai1wm_sites_path( $blog->New->Id ); } while ( $archive->has_not_reached_eof() ) { try { // Extract a file from archive to WP_CONTENT_DIR if ( ( $content_offset = $archive->extract_one_file_to( WP_CONTENT_DIR, array( AI1WM_PACKAGE_NAME, AI1WM_MULTISITE_NAME, AI1WM_DATABASE_NAME, AI1WM_MUPLUGINS_NAME ), $old_paths, $new_paths, $content_offset, 10 ) ) ) { // Set progress if ( ( $processed += $content_offset ) ) { $progress = (int) ( ( $processed / $total_size ) * 100 ); } // Set progress Ai1wm_Status::info( sprintf( __( 'Restoring %d files...<br />%d%% complete', AI1WM_PLUGIN_NAME ), $total_files, $progress ) ); // Set content offset $params['content_offset'] = $content_offset; // Set archive offset $params['archive_offset'] = $archive_offset; // Set completed flag $params['completed'] = false; // Close the archive file $archive->close(); return $params; } // Set content offset $content_offset = 0; // Set archive offset $archive_offset = $archive->get_file_pointer(); } catch ( Exception $e ) { // Skip bad file permissions } // Increment processed files $processed += $archive->get_current_filesize(); // More than 10 seconds have passed, break and do another request if ( ( microtime( true ) - $start ) > 10 ) { $completed = false; break; } } // Set content offset $params['content_offset'] = $content_offset; // Set archive offset $params['archive_offset'] = $archive_offset; // Set processed files $params['processed'] = $processed; // Set completed flag $params['completed'] = $completed; // Close the archive file $archive->close(); return $params; }
/** * Get archive size as text * * @param array $params Request parameters * @return string */ function ai1wm_archive_size($params) { return size_format(filesize(ai1wm_archive_path($params))); }
public static function execute( $params ) { // Set progress Ai1wm_Status::info( __( 'Unpacking archive...', AI1WM_PLUGIN_NAME ) ); // Open the archive file for reading $archive = new Ai1wm_Extractor( ai1wm_archive_path( $params ) ); // Validate the archive file consistency if ( ! $archive->is_valid() ) { throw new Ai1wm_Import_Exception( __( 'The archive file is corrupted. Follow this article to resolve the problem: ' . '<a href="https://help.servmask.com/knowledgebase/corrupted-archive/" target="_blank">https://help.servmask.com/knowledgebase/corrupted-archive/</a>', AI1WM_PLUGIN_NAME ) ); } // Obtain the name of the archive $name = ai1wm_archive_name( $params ); // Obtain the size of the archive $size = ai1wm_archive_bytes( $params ); // Check file size of the archive if ( false === $size ) { throw new Ai1wm_Not_Accesible_Exception( sprintf( __( 'Unable to get the file size of <strong>%s</strong>', AI1WM_PLUGIN_NAME ), $name ) ); } $allowed_size = apply_filters( 'ai1wm_max_file_size', AI1WM_MAX_FILE_SIZE ); // Let's check the size of the file to make sure it is less than the maximum allowed if ( ( $allowed_size > 0 ) && ( $size > $allowed_size ) ) { throw new Ai1wm_Import_Exception( sprintf( __( 'The file that you are trying to import is over the maximum upload file size limit of <strong>%s</strong>.<br />' . 'You can remove this restriction by purchasing our ' . '<a href="https://servmask.com/products/unlimited-extension" target="_blank">Unlimited Extension</a>.', AI1WM_PLUGIN_NAME ), size_format( $allowed_size ) ) ); } // Unpack package.json, multisite.json and database.sql files $archive->extract_by_files_array( ai1wm_storage_path( $params ), array( AI1WM_PACKAGE_NAME, AI1WM_MULTISITE_NAME, AI1WM_DATABASE_NAME, ) ); // Close the archive file $archive->close(); // Check package.json file if ( false === is_file( ai1wm_package_path( $params ) ) ) { throw new Ai1wm_Import_Exception( __( 'Invalid archive file. It should contain <strong>package.json</strong> file.', AI1WM_PLUGIN_NAME ) ); } return $params; }
public static function execute($params) { global $wpdb; // Set exclude database if (isset($params['options']['no_database'])) { return $params; } // Set progress Ai1wm_Status::info(__('Exporting database...', AI1WM_PLUGIN_NAME)); // Get database client if (empty($wpdb->use_mysqli)) { $client = new Ai1wm_Database_Mysql($wpdb); } else { $client = new Ai1wm_Database_Mysqli($wpdb); } // Spam comments if (isset($params['options']['no_spam_comments'])) { $client->set_table_query_clauses(ai1wm_table_prefix() . 'comments', " WHERE comment_approved != 'spam' "); $client->set_table_query_clauses(ai1wm_table_prefix() . 'commentmeta', sprintf(" WHERE comment_id IN ( SELECT comment_ID FROM `%s` WHERE comment_approved != 'spam' ) ", ai1wm_table_prefix() . 'comments')); } // Post revisions if (isset($params['options']['no_revisions'])) { $client->set_table_query_clauses(ai1wm_table_prefix() . 'posts', " WHERE post_type != 'revision' "); } $old_table_values = array(); $new_table_values = array(); // Find and replace if (isset($params['options']['replace']) && ($replace = $params['options']['replace'])) { for ($i = 0; $i < count($replace['old_value']); $i++) { if (!empty($replace['old_value'][$i]) && !empty($replace['new_value'][$i])) { $old_table_values[] = $replace['old_value'][$i]; $new_table_values[] = $replace['new_value'][$i]; } } } $old_table_prefixes = array(); $new_table_prefixes = array(); // Set table prefixes if (ai1wm_table_prefix()) { $old_table_prefixes[] = ai1wm_table_prefix(); $new_table_prefixes[] = ai1wm_servmask_prefix(); } else { // Set table prefixes based on table name foreach ($client->get_tables() as $table_name) { $old_table_prefixes[] = $table_name; $new_table_prefixes[] = ai1wm_servmask_prefix() . $table_name; } // Set table prefixes based on user meta foreach (array('capabilities', 'user_level', 'user_roles') as $user_meta) { $old_table_prefixes[] = $user_meta; $new_table_prefixes[] = ai1wm_servmask_prefix() . $user_meta; } } $include_table_prefixes = array(); // Include table prefixes if (ai1wm_table_prefix()) { $include_table_prefixes[] = ai1wm_table_prefix(); } else { foreach ($client->get_tables() as $table_name) { $include_table_prefixes[] = $table_name; } } // Set database options $client->set_old_table_prefixes($old_table_prefixes)->set_new_table_prefixes($new_table_prefixes)->set_old_replace_values($old_table_values)->set_new_replace_values($new_table_values)->set_include_table_prefixes($include_table_prefixes)->set_table_prefix_columns(ai1wm_table_prefix() . 'options', array('option_name'))->set_table_prefix_columns(ai1wm_table_prefix() . 'usermeta', array('meta_key')); // Status options $client->set_table_query_clauses(ai1wm_table_prefix() . 'options', sprintf(" WHERE option_name != '%s' ", AI1WM_STATUS)); // Set current table index if (isset($params['current_table_index'])) { $current_table_index = (int) $params['current_table_index']; } else { $current_table_index = 0; } // Export database $completed = $client->export(ai1wm_database_path($params), $current_table_index, 10); // Export completed if ($completed) { // Get archive file $archive = new Ai1wm_Compressor(ai1wm_archive_path($params)); // Add database to archive $archive->add_file(ai1wm_database_path($params), AI1WM_DATABASE_NAME); $archive->close(); // Set progress Ai1wm_Status::info(__('Done exporting database.', AI1WM_PLUGIN_NAME)); } // Set current table index $params['current_table_index'] = $current_table_index; // Set completed flag $params['completed'] = $completed; return $params; }
public static function execute($params) { $completed = false; // Set offset if (!isset($params['offset'])) { $params['offset'] = 0; } // Set retry if (!isset($params['retry'])) { $params['retry'] = 0; } // Set Dropbox client $dropbox = new ServMaskDropboxClient(get_option('ai1wmde_dropbox_token'), get_option('ai1wmde_dropbox_ssl', true)); // Get archive file $archive = fopen(ai1wm_archive_path($params), 'rb'); // Read file chunk if (fseek($archive, $params['offset']) !== -1 && ($chunk = fread($archive, ServMaskDropboxClient::CHUNK_SIZE))) { try { // Increase number of retries $params['retry'] += 1; // Upload file chunk $dropbox->uploadFileChunk($chunk, $params); } catch (Exception $e) { // Retry 3 times if ($params['retry'] <= 3) { return $params; } throw $e; } // Reset retry counter $params['retry'] = 0; // Set archive details $name = ai1wm_archive_name($params); $bytes = ai1wm_archive_bytes($params); $size = ai1wm_archive_size($params); // Get progress if (isset($params['offset'])) { $progress = (int) ($params['offset'] / $bytes * 100); } else { $progress = 100; } // Set progress Ai1wm_Status::info(__("<i class=\"ai1wm-icon-dropbox\"></i> " . "Uploading <strong>{$name}</strong> ({$size})<br />{$progress}% complete", AI1WMDE_PLUGIN_NAME)); } else { // Set archive details $name = ai1wm_archive_name($params); $folder = ai1wm_archive_folder(); // Commit upload file chunk $dropbox->uploadFileChunkCommit(sprintf('%s/%s', $folder, $name), $params); // Set last backup date update_option('ai1wmde_dropbox_timestamp', current_time('timestamp')); // Set progress Ai1wm_Status::done(__('Your WordPress archive has been uploaded to Dropbox.', AI1WMDE_PLUGIN_NAME), __('Dropbox', AI1WMDE_PLUGIN_NAME)); // Upload completed $completed = true; self::notify_admin_of_new_backup($params); } // Close the archive file fclose($archive); // Set completed flag $params['completed'] = $completed; return $params; }