MDL-35238 Reorganise the worker::execute() flow
authorDavid Mudrák <david@moodle.com>
Tue, 9 Oct 2012 22:44:39 +0000 (00:44 +0200)
committerDavid Mudrák <david@moodle.com>
Thu, 8 Nov 2012 21:33:07 +0000 (22:33 +0100)
mdeploy.php

index 689f726..0b5fdaa 100644 (file)
@@ -572,6 +572,10 @@ class output_http_provider extends output_provider {
  */
 class worker extends singleton_pattern {
 
+    const EXIT_OK                       = 0;    // Success exit code.
+    const EXIT_HELP                     = 1;    // Explicit help required.
+    const EXIT_UNKNOWN_ACTION           = 127;  // Neither -i nor -u provided.
+
     /** @var input_manager */
     protected $input = null;
 
@@ -583,21 +587,34 @@ class worker extends singleton_pattern {
      */
     public function execute() {
 
+        // Authorize access. None in CLI. Passphrase in HTTP.
+        $this->authorize();
+
+        // Asking for help in the CLI mode.
         if ($this->input->get_option('help')) {
             $this->output->help();
-            exit(1);
+            $this->done(self::EXIT_HELP);
         }
 
-        // Authorize access. None in CLI. Passphrase in HTTP.
-        $this->authorize();
+        if ($this->input->get_option('upgrade')) {
+            // Fetch the ZIP file into a temporary location.
+
+            // Compare MD5 checksum of the ZIP file.
 
-        // Fetch the ZIP file into a temporary location.
+            // If the target location exists, backup it.
 
-        // If the target location exists, backup it.
+            // Unzip the ZIP file into the target location.
 
-        // Unzip the ZIP file into the target location.
+            // Redirect to the given URL (in HTTP) or exit (in CLI).
+            $this->done();
 
-        // Redirect to the given URL (in HTTP) or exit (in CLI).
+        } else if ($this->input->get_option('install')) {
+            // Installing a new plugin not implemented yet.
+        }
+
+        // Print help in CLI by default.
+        $this->output->help();
+        $this->done(self::EXIT_UNKNOWN_ACTION);
     }
 
     /**
@@ -610,6 +627,23 @@ class worker extends singleton_pattern {
 
     // End of external API
 
+    /**
+     * Finish this script execution.
+     *
+     * @param int $exitcode
+     */
+    protected function done($exitcode = self::EXIT_OK) {
+
+        if (PHP_SAPI === 'cli') {
+            exit($exitcode);
+
+        } else {
+            $returnurl = $this->input->get_option('returnurl');
+            redirect($returnurl);
+            exit($exitcode);
+        }
+    }
+
     /**
      * Authorize access to the script.
      *