Ejemplo n.º 1
0
 /**
  * Reorders plugin types into a sequence to be displayed
  *
  * For technical reasons, plugin types returned by {@link core_component::get_plugin_types()} are
  * in a certain order that does not need to fit the expected order for the display.
  * Particularly, activity modules should be displayed first as they represent the
  * real heart of Moodle. They should be followed by other plugin types that are
  * used to build the courses (as that is what one expects from LMS). After that,
  * other supportive plugin types follow.
  *
  * @param array $types associative array
  * @return array same array with altered order of items
  */
 protected function reorder_plugin_types(array $types)
 {
     $fix = array('mod' => $types['mod']);
     foreach (core_component::get_plugin_list('mod') as $plugin => $fulldir) {
         if (!($subtypes = core_component::get_subplugins('mod_' . $plugin))) {
             continue;
         }
         foreach ($subtypes as $subtype => $ignored) {
             $fix[$subtype] = $types[$subtype];
         }
     }
     $fix['mod'] = $types['mod'];
     $fix['block'] = $types['block'];
     $fix['qtype'] = $types['qtype'];
     $fix['qbehaviour'] = $types['qbehaviour'];
     $fix['qformat'] = $types['qformat'];
     $fix['filter'] = $types['filter'];
     $fix['editor'] = $types['editor'];
     foreach (core_component::get_plugin_list('editor') as $plugin => $fulldir) {
         if (!($subtypes = core_component::get_subplugins('editor_' . $plugin))) {
             continue;
         }
         foreach ($subtypes as $subtype => $ignored) {
             $fix[$subtype] = $types[$subtype];
         }
     }
     $fix['enrol'] = $types['enrol'];
     $fix['auth'] = $types['auth'];
     $fix['tool'] = $types['tool'];
     foreach (core_component::get_plugin_list('tool') as $plugin => $fulldir) {
         if (!($subtypes = core_component::get_subplugins('tool_' . $plugin))) {
             continue;
         }
         foreach ($subtypes as $subtype => $ignored) {
             $fix[$subtype] = $types[$subtype];
         }
     }
     foreach ($types as $type => $path) {
         if (!isset($fix[$type])) {
             $fix[$type] = $path;
         }
     }
     return $fix;
 }
Ejemplo n.º 2
0
 public function test_get_subplugins()
 {
     global $CFG;
     // Any plugin with more subtypes is ok here.
     $this->assertFileExists("{$CFG->dirroot}/mod/assign/db/subplugins.php");
     $subplugins = core_component::get_subplugins('mod_assign');
     $this->assertSame(array('assignsubmission', 'assignfeedback'), array_keys($subplugins));
     $subs = core_component::get_plugin_list('assignsubmission');
     $feeds = core_component::get_plugin_list('assignfeedback');
     $this->assertSame(array_keys($subs), $subplugins['assignsubmission']);
     $this->assertSame(array_keys($feeds), $subplugins['assignfeedback']);
     // Any plugin without subtypes is ok here.
     $this->assertFileExists("{$CFG->dirroot}/mod/choice");
     $this->assertFileNotExists("{$CFG->dirroot}/mod/choice/db/subplugins.php");
     $this->assertNull(core_component::get_subplugins('mod_choice'));
     $this->assertNull(core_component::get_subplugins('xxxx_yyyy'));
 }