MDL-39087 Use progress_trace class to display uninstallation progress
authorDavid Mudrák <david@moodle.com>
Fri, 12 Apr 2013 02:02:28 +0000 (04:02 +0200)
committerDavid Mudrák <david@moodle.com>
Fri, 12 Apr 2013 02:02:28 +0000 (04:02 +0200)
This is much better API than using the array passed by reference. At the
moment, it is pretty hacky as it abuses text_progress_trace to output
raw HTML echoed by uninstall_plugin() but that will be improved later
while moving the logic out of that function into the plugin_manager.

admin/plugins.php
admin/renderer.php
lib/pluginlib.php

index 73e34d4..972bf51 100644 (file)
@@ -78,16 +78,17 @@ if ($uninstall) {
         exit();
 
     } else {
-        $messages = array(); // Collect uninstall process messages here.
-        $pluginman->uninstall_plugin($pluginfo->component, $messages);
+        $progress = new progress_trace_buffer(new text_progress_trace(), false);
+        $pluginman->uninstall_plugin($pluginfo->component, $progress);
+        $progress->finished();
 
         if ($pluginman->is_plugin_folder_removable($pluginfo->component)) {
             $continueurl = new moodle_url($PAGE->url, array('delete' => $pluginfo->component, 'sesskey' => sesskey(), 'confirm' => 1));
-            echo $output->plugin_uninstall_results_removable_page($pluginman, $pluginfo, $messages, $continueurl);
+            echo $output->plugin_uninstall_results_removable_page($pluginman, $pluginfo, $progress, $continueurl);
             exit();
 
         } else {
-            echo $output->plugin_uninstall_results_page($pluginman, $pluginfo, $messages);
+            echo $output->plugin_uninstall_results_page($pluginman, $pluginfo, $progress);
             exit();
         }
     }
index ba3b65a..5f96325 100644 (file)
@@ -398,12 +398,12 @@ class core_admin_renderer extends plugin_renderer_base {
      *
      * @param plugin_manager $pluginman
      * @param plugin_info $pluginfo
-     * @param array $messages list of strings, the log of the process
+     * @param progress_trace_buffer $progress
      * @param moodle_url $continueurl URL to continue to remove the plugin folder
      * @return string
      */
     public function plugin_uninstall_results_removable_page(plugin_manager $pluginman, plugininfo_base $pluginfo,
-                                                            array $messages = array(), moodle_url $continueurl) {
+                                                            progress_trace_buffer $progress, moodle_url $continueurl) {
         $output = '';
 
         $pluginname = $pluginman->plugin_name($pluginfo->component);
@@ -411,9 +411,7 @@ class core_admin_renderer extends plugin_renderer_base {
         $output .= $this->output->header();
         $output .= $this->output->heading(get_string('uninstalling', 'core_plugin', array('name' => $pluginname)));
 
-        foreach ($messages as $message) {
-            $output .= $this->output->box($message, 'generalbox uninstallresultmessage');
-        }
+        $output .= $this->output->box($progress->get_buffer(), 'generalbox uninstallresultmessage');
 
         $confirm = $this->output->container(get_string('uninstalldeleteconfirm', 'core_plugin',
             array('name' => $pluginname, 'rootdir' => $pluginfo->rootdir)), 'uninstalldeleteconfirm');
@@ -434,10 +432,10 @@ class core_admin_renderer extends plugin_renderer_base {
      *
      * @param plugin_manager $pluginman
      * @param plugin_info $pluginfo
-     * @param array $messages list of strings, the log of the process
+     * @param progress_trace_buffer $progress
      * @return string
      */
-    public function plugin_uninstall_results_page(plugin_manager $pluginman, plugininfo_base $pluginfo, array $messages = array()) {
+    public function plugin_uninstall_results_page(plugin_manager $pluginman, plugininfo_base $pluginfo, progress_trace_buffer $progress) {
         $output = '';
 
         $pluginname = $pluginman->plugin_name($pluginfo->component);
@@ -445,9 +443,7 @@ class core_admin_renderer extends plugin_renderer_base {
         $output .= $this->output->header();
         $output .= $this->output->heading(get_string('uninstalling', 'core_plugin', array('name' => $pluginname)));
 
-        foreach ($messages as $message) {
-            $output .= $this->output->box($message, 'generalbox uninstallresultmessage');
-        }
+        $output .= $this->output->box($progress->get_buffer(), 'generalbox uninstallresultmessage');
 
         $output .= $this->output->box(get_string('uninstalldelete', 'core_plugin',
             array('name' => $pluginname, 'rootdir' => $pluginfo->rootdir)), 'generalbox uninstalldelete');
index 6c09a9d..c35d2ea 100644 (file)
@@ -531,10 +531,10 @@ class plugin_manager {
      * mimic this future behaviour by wrapping that function call.
      *
      * @param string $component
-     * @param array $messages log of the process is returned via this array
+     * @param progress_trace $progress traces the process
      * @return bool true on success, false on errors/problems
      */
-    public function uninstall_plugin($component, array &$messages) {
+    public function uninstall_plugin($component, progress_trace $progress) {
 
         $pluginfo = $this->get_plugin_info($component);
 
@@ -542,8 +542,8 @@ class plugin_manager {
             return false;
         }
 
-        // Give the pluginfo class a perform some steps.
-        $result = $pluginfo->uninstall($messages);
+        // Give the pluginfo class a chance to execute some steps.
+        $result = $pluginfo->uninstall($progress);
         if (!$result) {
             return false;
         }
@@ -551,7 +551,7 @@ class plugin_manager {
         // Call the legacy core function to uninstall the plugin.
         ob_start();
         uninstall_plugin($pluginfo->type, $pluginfo->name);
-        $messages[] = ob_get_clean();
+        $progress->output(ob_get_clean());
 
         return true;
     }
@@ -2859,10 +2859,10 @@ abstract class plugininfo_base {
      * it is basically usable only for those plugin types that use the default
      * uninstall tool provided by {@link self::get_default_uninstall_url()}.
      *
-     * @param array $messages list of uninstall log messages
+     * @param progress_trace $progress traces the process
      * @return bool true on success, false on failure
      */
-    public function uninstall(array &$messages) {
+    public function uninstall(progress_trace $progress) {
         return true;
     }