MDL-67795 contentbank: clean all the content when uninstalling plugin
authorSara Arjona <sara@moodle.com>
Thu, 16 Apr 2020 10:59:24 +0000 (12:59 +0200)
committerSara Arjona <sara@moodle.com>
Thu, 23 Apr 2020 11:09:40 +0000 (13:09 +0200)
h5p/classes/api.php
lib/classes/plugininfo/contenttype.php

index 691731c..b86acad 100644 (file)
@@ -393,53 +393,55 @@ class api {
             throw new \moodle_exception('h5pprivatefile', 'core_h5p');
         }
 
-        // For CONTEXT_COURSECAT No login necessary - unless login forced everywhere.
-        if ($context->contextlevel == CONTEXT_COURSECAT) {
-            if ($CFG->forcelogin) {
-                require_login(null, true, null, false, true);
+        if (!is_siteadmin($USER)) {
+            // For CONTEXT_COURSECAT No login necessary - unless login forced everywhere.
+            if ($context->contextlevel == CONTEXT_COURSECAT) {
+                if ($CFG->forcelogin) {
+                    require_login(null, true, null, false, true);
+                }
             }
-        }
 
-        // For CONTEXT_BLOCK.
-        if ($context->contextlevel == CONTEXT_BLOCK) {
-            if ($context->get_course_context(false)) {
-                // If block is in course context, then check if user has capability to access course.
-                require_course_login($course, true, null, false, true);
-            } else if ($CFG->forcelogin) {
-                // No login necessary - unless login forced everywhere.
-                require_login(null, true, null, false, true);
-            } else {
-                // Get parent context and see if user have proper permission.
-                $parentcontext = $context->get_parent_context();
-                if ($parentcontext->contextlevel === CONTEXT_COURSECAT) {
-                    // Check if category is visible and user can view this category.
-                    if (!core_course_category::get($parentcontext->instanceid, IGNORE_MISSING)) {
+            // For CONTEXT_BLOCK.
+            if ($context->contextlevel == CONTEXT_BLOCK) {
+                if ($context->get_course_context(false)) {
+                    // If block is in course context, then check if user has capability to access course.
+                    require_course_login($course, true, null, false, true);
+                } else if ($CFG->forcelogin) {
+                    // No login necessary - unless login forced everywhere.
+                    require_login(null, true, null, false, true);
+                } else {
+                    // Get parent context and see if user have proper permission.
+                    $parentcontext = $context->get_parent_context();
+                    if ($parentcontext->contextlevel === CONTEXT_COURSECAT) {
+                        // Check if category is visible and user can view this category.
+                        if (!core_course_category::get($parentcontext->instanceid, IGNORE_MISSING)) {
+                            send_file_not_found();
+                        }
+                    } else if ($parentcontext->contextlevel === CONTEXT_USER && $parentcontext->instanceid != $USER->id) {
+                        // The block is in the context of a user, it is only visible to the user who it belongs to.
+                        send_file_not_found();
+                    }
+                    if ($filearea !== 'content') {
                         send_file_not_found();
                     }
-                } else if ($parentcontext->contextlevel === CONTEXT_USER && $parentcontext->instanceid != $USER->id) {
-                    // The block is in the context of a user, it is only visible to the user who it belongs to.
-                    send_file_not_found();
-                }
-                if ($filearea !== 'content') {
-                    send_file_not_found();
                 }
             }
-        }
 
-        // For CONTEXT_MODULE and CONTEXT_COURSE check if the user is enrolled in the course.
-        // And for CONTEXT_MODULE has permissions view this .h5p file.
-        if ($context->contextlevel == CONTEXT_MODULE ||
-                $context->contextlevel == CONTEXT_COURSE) {
-            // Require login to the course first (without login to the module).
-            require_course_login($course, true, null, !$preventredirect, $preventredirect);
-
-            // Now check if module is available OR it is restricted but the intro is shown on the course page.
-            if ($context->contextlevel == CONTEXT_MODULE) {
-                $cminfo = \cm_info::create($cm);
-                if (!$cminfo->uservisible) {
-                    if (!$cm->showdescription || !$cminfo->is_visible_on_course_page()) {
-                        // Module intro is not visible on the course page and module is not available, show access error.
-                        require_course_login($course, true, $cminfo, !$preventredirect, $preventredirect);
+            // For CONTEXT_MODULE and CONTEXT_COURSE check if the user is enrolled in the course.
+            // And for CONTEXT_MODULE has permissions view this .h5p file.
+            if ($context->contextlevel == CONTEXT_MODULE ||
+                    $context->contextlevel == CONTEXT_COURSE) {
+                // Require login to the course first (without login to the module).
+                require_course_login($course, true, null, !$preventredirect, $preventredirect);
+
+                // Now check if module is available OR it is restricted but the intro is shown on the course page.
+                if ($context->contextlevel == CONTEXT_MODULE) {
+                    $cminfo = \cm_info::create($cm);
+                    if (!$cminfo->uservisible) {
+                        if (!$cm->showdescription || !$cminfo->is_visible_on_course_page()) {
+                            // Module intro is not visible on the course page and module is not available, show access error.
+                            require_course_login($course, true, $cminfo, !$preventredirect, $preventredirect);
+                        }
                     }
                 }
             }
index a92de76..9224d49 100644 (file)
@@ -187,12 +187,16 @@ class contenttype extends base {
     public function uninstall_cleanup() {
         global $DB;
 
-        $contents = $DB->get_records('contentbank_content', ['contenttype' => 'contenttype_'.$this->name]);
-        foreach ($contents as $content) {
-            $fs = get_file_storage();
-            $fs->delete_area_files($content->contextid, 'contentbank', false, $content->id);
+        $records = $DB->get_records('contentbank_content', ['contenttype' => 'contenttype_'.$this->name]);
+        $contenttypename = 'contenttype_'.$this->name;
+        $contenttypeclass = "\\$contenttypename\\contenttype";
+        foreach ($records as $record) {
+            $context = \context::instance_by_id($record->contextid, MUST_EXIST);
+            $contenttype = new $contenttypeclass($context);
+            $contentclass = "\\$contenttypename\\content";
+            $content = new $contentclass($record);
+            $contenttype->delete_content($content);
         }
-        $DB->delete_records('contentbank_content', ['contenttype' => 'contenttype_'.$this->name]);
 
         parent::uninstall_cleanup();
     }