public function _action_tasks_fail(FW_Ext_Backups_Task_Collection $collection)
 {
     $error = __('Error', 'fw');
     foreach ($collection->get_tasks() as $task) {
         if ($task->result_is_fail()) {
             if (is_wp_error($task->get_result())) {
                 $error = $task->get_result()->get_error_message();
             }
             break;
         }
     }
     $this->set_active_demo(array('result' => $error));
 }
 /**
  * @param FW_Ext_Backups_Task_Collection|null $collection
  *
  * @return FW_Ext_Backups_Task_Collection|null
  */
 private function check_and_fix_tasks($collection)
 {
     if ($collection instanceof FW_Ext_Backups_Task_Collection) {
     } else {
         return null;
     }
     $finished = true;
     foreach ($collection->get_tasks() as $task) {
         if (!$task->get_last_execution_start_time()) {
             // check only started tasks
             $finished = false;
             break;
         }
         // Check for problems and maybe finish (set failed)
         if (!$task->result_is_finished()) {
             if (!$this->_get_task_type($task->get_type(), self::get_access_key())) {
                 $task->set_result(new WP_Error('type_not_registered', __('Task type not registered', 'fw')));
             }
             if ($task->get_last_execution_end_time()) {
                 // step finished and should continue
                 if ($task->get_last_execution_end_time() + self::backups()->get_timeout() + 5 < time()) {
                     $task->set_result(new WP_Error('execution_stopped', __('Execution stopped (next step did not started)', 'fw')));
                 }
             } else {
                 if (($task_type = $this->_get_task_type($task->get_type(), self::get_access_key())) && ($custom_timeout = $task_type->get_custom_timeout($task->get_args(), is_array($task->get_result()) ? $task->get_result() : array()))) {
                     $timeout = abs($custom_timeout);
                 } else {
                     $timeout = self::backups()->get_timeout();
                 }
                 if ($task->get_last_execution_start_time() + $timeout + 1 < time()) {
                     $task->set_result(new WP_Error('timeout', __('Timed out', 'fw')));
                 }
             }
             if ($task->result_is_fail()) {
                 $task->set_last_execution_end_time(microtime(true));
                 $this->set_active_task_collection($collection);
                 $this->do_task_fail_action($task);
             }
         }
         if ($task->result_is_finished()) {
             if ($task->result_is_fail()) {
                 do_action('fw:ext:backups:tasks:fail:id:' . $collection->get_id(), $collection);
                 do_action('fw:ext:backups:tasks:fail', $collection);
                 break;
             }
         } else {
             // Stop on first executing (not finished) task
             $finished = false;
             break;
         }
     }
     if ($finished) {
         $this->set_active_task_collection(null);
         if (isset($task) && $task->result_is_fail()) {
             // if last task is fail, then the collection was failed and foreach stopped
         } else {
             do_action('fw:ext:backups:tasks:success:id:' . $collection->get_id(), $collection);
             do_action('fw:ext:backups:tasks:success', $collection);
         }
         do_action('fw:ext:backups:tasks:finish:id:' . $collection->get_id(), $collection);
         do_action('fw:ext:backups:tasks:finish', $collection);
         return null;
     }
     return $collection;
 }