/** * Perform a Backup. * * ## OPTIONS * * [--files_only] * : Backup files only, default to off * * [--database_only] * : Backup database only, defaults to off * * [--destination] * : dir that the backup should be save in, defaults to your existing backups directory * * [--root] * : dir that should be backed up, defaults to site root. * * [--archive_filename] * : filename for the resulting zip file * * [--excludes] * : list of paths you'd like to exclude * * ## Usage * * wp backupwordpress backup [--files_only] [--database_only] [--path<dir>] [--root<dir>] [--zip_command_path=<path>] [--mysqldump_command_path=<path>] * * @todo errors should be bubbled from Backup, Scheduled_Backup and the like instead of being repeated. */ public function backup($args, $assoc_args) { add_action('hmbkp_mysqldump_started', function () { \WP_CLI::line(__('Backup: Dumping database...', 'backupwordpress')); }); add_action('hmbkp_archive_started', function () { \WP_CLI::line(__('Backup: Zipping everything up...', 'backupwordpress')); }); if (!empty($assoc_args['destination'])) { Path::get_instance()->set_path($assoc_args['destination']); } Path::get_instance()->cleanup(); if (!empty($assoc_args['root'])) { Path::get_instance()->set_root($assoc_args['root']); } if (!is_dir(Path::get_path())) { \WP_CLI::error(__('Invalid backup path', 'backupwordpress')); return false; } if (!is_dir(Path::get_root()) || !is_readable(Path::get_root())) { \WP_CLI::error(__('Invalid root path', 'backupwordpress')); return false; } $filename = 'backup.zip'; if (isset($assoc_args['archive_filename'])) { $filename = $assoc_args['archive_filename']; } $hm_backup = new Backup($filename); if (!empty($assoc_args['files_only'])) { $hm_backup->set_type('file'); } if (!empty($assoc_args['database_only'])) { $hm_backup->set_type('database'); } if (!empty($assoc_args['excludes'])) { $hm_backup->set_excludes($assoc_args['excludes']); } $hm_backup->run(); if (file_exists($hm_backup->get_backup_filepath())) { \WP_CLI::success(__('Backup Complete: ', 'backupwordpress') . $hm_backup->get_backup_filepath()); } else { \WP_CLI::error(__('Backup Failed', 'backupwordpress')); } }
/** * Run the backup * */ public function run() { // Don't run if this schedule is already running if ($this->status->is_started()) { return; } // Setup our Site Backup Object $backup = new Backup($this->get_backup_filename(), $this->get_database_dump_filename()); $backup->set_type($this->get_type()); $backup->set_excludes($this->get_excludes()); $backup->set_status($this->status); $this->do_action('hmbkp_backup_started', $backup); $this->status->start($this->get_backup_filename(), __('Starting backup...', 'backupwordpress')); $this->status->set_status(__('Deleting old backups...', 'backupwordpress')); // Delete old backups now in-case we fatal error during the backup process $this->delete_old_backups(); $backup->run(); $errors = array_merge($backup->errors, $backup->warnings); $notices = array(); foreach ($errors as $key => $error) { $key = str_replace(array(__NAMESPACE__ . '\\', '_File_Backup_Engine', '_Database_Backup_Engine'), array('', '', ''), $key); $notices[] = $key . ': ' . implode(', ', $error); } Notices::get_instance()->set_notices('backup_errors', $notices); $this->status->set_status(__('Deleting old backups...', 'backupwordpress')); // Delete old backups again $this->delete_old_backups(); $this->do_action('hmbkp_backup_complete', $backup); $this->status->finish(); $this->update_average_schedule_run_time($this->status->get_start_time(), time()); }