public function run()
 {
     // Obtaining list of backups...
     $walker = new FW_Backup_Walker_Local_Backup_File();
     $this->backup()->post_type()->foreach_post(array($walker, 'walk'), array('post_status' => true));
     $backup_file_from_db = array();
     $backup_file_from_dir = array();
     // fix for Windows
     foreach ($walker->get_result() as $path) {
         $backup_file_from_db[] = str_replace('\\', '/', $path);
     }
     // fix for Windows
     $d = $this->backup()->get_backup_dir();
     $d = str_replace('\\', '/', $d);
     // Scanning local backup directory...
     $a = array();
     if (is_dir($d)) {
         foreach (array_diff(scandir($d), array('.', '..', 'index.php')) as $filename) {
             $a[] = "{$d}/{$filename}";
         }
         $a = array_filter($a, 'is_file');
         $a = array_filter($a, 'is_readable');
     }
     // Looking for backup archives...
     $r = new FW_Backup_Reflection_Backup_Archive();
     foreach ($a as $file) {
         $file_contents = $r->inspect_file($file);
         if ($file_contents['db'] || $file_contents['fs']) {
             $backup_file_from_dir[$file] = $file_contents;
         }
     }
     // Registering backup archives...
     $storage_id = 'backup-storage-local';
     $backup_file_new = array_diff_key($backup_file_from_dir, array_flip($backup_file_from_db));
     foreach ($backup_file_new as $file => $file_contents) {
         if ($file_contents['db'] && $file_contents['fs']) {
             $cron_job = $this->backup()->cron()->get_cron_job('cron_full');
         } else {
             $cron_job = $this->backup()->cron()->get_cron_job('cron_database');
         }
         if (preg_match('/(\\d\\d\\d\\d)_(\\d\\d)_(\\d\\d)-(\\d\\d)_(\\d\\d)_(\\d\\d)/', basename(realpath($file)), $m)) {
             $file_time = strtotime($m[1] . '-' . $m[2] . '-' . $m[3] . ' ' . $m[4] . ':' . $m[5] . ':' . $m[6]);
         } else {
             $file_time = filemtime($file);
         }
         $post_id = $this->backup()->post_type()->insert();
         $backup_info = new FW_Backup_Info();
         $backup_info->set_cron_job($cron_job->get_id());
         $backup_info->set_storage($storage_id);
         $backup_info->set_storage_file(new FW_Backup_Storage_File_Local(realpath($file)));
         $backup_info->set_storage_file_time($file_time);
         $backup_info->set_storage_file_contents($file_contents);
         $backup_info->set_imported_at(time());
         $backup_info->set_completed_at(time());
         $backup_info->set_finished_at(time());
         $this->backup()->update_backup_info($post_id, $backup_info);
         $post = get_post($post_id);
         $post->post_title = $cron_job->get_title();
         $post->post_status = 'publish';
         wp_update_post($post);
     }
     if (empty($backup_file_new)) {
         return false;
     }
     wp_cache_flush();
     return sprintf(__('%d new backups was found', 'fw'), count($backup_file_new));
 }
 public function do_backup_background_cron($cron_id)
 {
     $cron = $this->backup()->cron()->get_cron_job($cron_id);
     $post_id = $this->backup()->post_type()->insert();
     $backup_info = new FW_Backup_Info();
     $backup_info->set_cron_job($cron_id);
     $backup_info->set_storage($cron->get_storage());
     $this->backup()->update_backup_info($post_id, $backup_info);
     // Without it Feedback page won't be opened
     $feedback = new FW_Backup_Feedback();
     $feedback->set_task(__('Initialization...', 'fw'));
     $this->backup()->update_feedback($post_id, $feedback);
     $this->do_backup_background_run($post_id);
 }