Merge branch 'MDL-62572-master' of git://github.com/damyon/moodle
[moodle.git] / backup / controller / backup_controller.class.php
index a4fe864..9ac5f5b 100644 (file)
@@ -58,7 +58,11 @@ class backup_controller extends base_controller {
     protected $plan;   // Backup execution plan
     protected $includefiles; // Whether this backup includes files or not.
 
-    protected $execution;     // inmediate/delayed
+    /**
+     * Immediate/delayed execution type.
+     * @var integer
+     */
+    protected $execution;
     protected $executiontime; // epoch time when we want the backup to be executed (requires cron to run)
 
     protected $destination; // Destination chain object (fs_moodle, fs_os, db, email...)
@@ -85,11 +89,17 @@ class backup_controller extends base_controller {
         $this->userid = $userid;
 
         // Apply some defaults
-        $this->execution = backup::EXECUTION_INMEDIATE;
         $this->operation = backup::OPERATION_BACKUP;
         $this->executiontime = 0;
         $this->checksum = '';
 
+        // Set execution based on backup mode.
+        if ($mode == backup::MODE_ASYNC) {
+            $this->execution = backup::EXECUTION_DELAYED;
+        } else {
+            $this->execution = backup::EXECUTION_INMEDIATE;
+        }
+
         // Apply current backup version and release if necessary
         backup_controller_dbops::apply_version_and_release();
 
@@ -112,7 +122,7 @@ class backup_controller extends base_controller {
         // display progress must set it.
         $this->progress = new \core\progress\none();
 
-        // Instantiate the output_controller singleton and active it if interactive and inmediate
+        // Instantiate the output_controller singleton and active it if interactive and immediate.
         $oc = output_controller::get_instance();
         if ($this->interactive == backup::INTERACTIVE_YES && $this->execution == backup::EXECUTION_INMEDIATE) {
             $oc->set_active(true);
@@ -182,7 +192,8 @@ class backup_controller extends base_controller {
         // TODO: Check it's a correct status.
         $this->status = $status;
         // Ensure that, once set to backup::STATUS_AWAITING, controller is stored in DB.
-        if ($status == backup::STATUS_AWAITING) {
+        // Also save if executing so we can better track progress.
+        if ($status == backup::STATUS_AWAITING || $status == backup::STATUS_EXECUTING) {
             $this->save_controller();
             $tbc = self::load_controller($this->backupid);
             $this->logger = $tbc->logger; // wakeup loggers
@@ -192,14 +203,18 @@ class backup_controller extends base_controller {
             // If the operation has ended without error (backup::STATUS_FINISHED_OK)
             // proceed by cleaning the object from database. MDL-29262.
             $this->save_controller(false, true);
+        } else if ($status == backup::STATUS_FINISHED_ERR) {
+            // If the operation has ended with an error save the controller
+            // preserving the object in the database. We may want it for debugging.
+            $this->save_controller();
         }
     }
 
     public function set_execution($execution, $executiontime = 0) {
         $this->log('setting controller execution', backup::LOG_DEBUG);
-        // TODO: Check valid execution mode
-        // TODO: Check time in future
-        // TODO: Check time = 0 if inmediate
+        // TODO: Check valid execution mode.
+        // TODO: Check time in future.
+        // TODO: Check time = 0 if immediate.
         $this->execution = $execution;
         $this->executiontime = $executiontime;
 
@@ -333,8 +348,8 @@ class backup_controller extends base_controller {
      * @param bool $cleanobj to decide if the object itself must be cleaned (true) or no (false)
      */
     public function save_controller($includeobj = true, $cleanobj = false) {
-        // Going to save controller to persistent storage, calculate checksum for later checks and save it
-        // TODO: flag the controller as NA. Any operation on it should be forbidden util loaded back
+        // Going to save controller to persistent storage, calculate checksum for later checks and save it.
+        // TODO: flag the controller as NA. Any operation on it should be forbidden until loaded back.
         $this->log('saving controller to db', backup::LOG_DEBUG);
         if ($includeobj ) {  // Only calculate checksum if we are going to include the object.
             $this->checksum = $this->calculate_checksum();
@@ -399,6 +414,7 @@ class backup_controller extends base_controller {
         $this->log("setting file inclusion to {$this->includefiles}", backup::LOG_DEBUG);
         return $this->includefiles;
     }
+
 }
 
 /*