public function append_zip(ZipArchive $zip, $root, $local_prefix, FW_Backup_Interface_Feedback $feedback, $exclude = array())
 {
     /**
      * @var FW_Extension_Backup $backup
      */
     $feedback->set_task(__('Scanning file system...', 'fw'));
     $fs = new FW_Backup_Helper_File_System();
     $backup = fw()->extensions->get('backup');
     $exclude[] = $backup->get_backup_dir();
     $upload_dir = wp_upload_dir();
     $exclude[] = $upload_dir['basedir'] . '/fw-style.css';
     if ($backup->get_config('image_recovery')) {
         $image_recovery = new FW_Backup_Image_Recovery();
         $exclude = array_merge($exclude, $image_recovery->remove_attachment_images());
     }
     list($file_list, $file_size) = $fs->file_list_exclude($root, $exclude);
     $feedback->set_task(sprintf(__('%d file(s) found [%s]', 'fw'), count($file_list), $fs->format_bytes(array_sum($file_size))));
     $fs->append_zip($zip, $file_list, $root, $local_prefix, $feedback);
 }
 public function callback_filter_intermediate_image_sizes_advanced($sizes)
 {
     $meta = wp_get_attachment_metadata(FW_Backup_Image_Recovery::$attachment_id);
     $uploadpath = wp_upload_dir();
     $exclude = array();
     $folder = dirname($meta['file']);
     $filtered_meta_sizes = array_intersect_key($meta['sizes'], $sizes);
     $filtered_theme_sizes = array_intersect_key($sizes, $meta['sizes']);
     if (!empty($filtered_meta_sizes)) {
         foreach ($filtered_meta_sizes as $key => $size) {
             $images_file = path_join($uploadpath['basedir'], path_join($folder, $size['file']));
             if (file_exists($images_file)) {
                 $exclude[] = $key;
             }
         }
     }
     $flipped = array_flip($exclude);
     FW_Backup_Image_Recovery::$common_sizes = array_intersect_key($filtered_meta_sizes, $flipped);
     $diff = array_diff_key($filtered_theme_sizes, $flipped);
     $sizes = $diff;
     return $sizes;
 }
 public function run_with_initialized_file_system()
 {
     $fs = new FW_Backup_Helper_File_System();
     $db = new FW_Backup_Helper_Database();
     $auto_install_dir = $this->backup()->get_auto_install_dir();
     $upload_dir = wp_upload_dir();
     $upload_dir = $upload_dir['basedir'];
     try {
         // Do Full Backup before Auto Install
         if (apply_filters('fw_ext_backup_do_backup_on_demo_content_install', true)) {
             @set_time_limit(30 * 60);
             $this->backup()->action()->do_backup_background_cron('cron_full');
         }
         // Replace uploads directory
         $t = $fs->replace($fs->map($upload_dir), $fs->map("{$auto_install_dir}/uploads"));
         // Move backup directory from trashed dir into new upload dir
         if ($t) {
             $fs->move_existing("{$t}/backup", $fs->map("{$upload_dir}/backup"));
             // Remove trashed dir because we made Full Backup of the site
             $fs->rmdir($t);
         }
         if (file_exists("{$auto_install_dir}/database.txt")) {
             $file_with_sql = "{$auto_install_dir}/database.txt";
         } else {
             $file_with_sql = "{$auto_install_dir}/database.sql";
         }
         $db->import($file_with_sql, true, true, true);
     } catch (FW_Backup_Exception $exception) {
         return array('success' => false, 'data' => array('message' => $exception->getMessage()));
     }
     if ($this->backup()->get_config('image_recovery')) {
         $image_recovery = new FW_Backup_Image_Recovery();
         $image_recovery->generate_attachment_images();
     }
     do_action('fw_ext_backup_after_import_demo_content');
     return array('success' => true);
 }