MDL-35339 Deprecate get_all_mods() add get_module_types_names()

- added function get_module_types_names() returning the list of localised strings used for module names;
- added function cm_info::get_used_module_names();
- added magic properties cm_info:: and cm_info:: returning human readable module name;
- replaced usage of function get_all_mods() with get_fast_modinfo() and get_module_types_names();
- function print_section_add_menus() may now retrieve the modules names list itself;
- deprecated function get_all_mods()
This commit is contained in:
Marina Glancy 2012-09-25 10:34:18 +08:00
parent 722e6ba947
commit d57aa283f7
10 changed files with 151 additions and 127 deletions

View File

@ -63,7 +63,6 @@ class block_site_main_menu extends block_list {
$ismoving = ismoving($course->id);
$section = get_course_section(0, $course->id);
$modinfo = get_fast_modinfo($course);
get_all_mods($course->id, $mods, $modnames, $modnamesplural, $modnamesused);
$groupbuttons = $course->groupmode;
$groupbuttonslink = (!$course->groupmodeforce);
@ -134,11 +133,7 @@ class block_site_main_menu extends block_list {
$this->content->icons[] = '';
}
if (!empty($modnames)) {
$this->content->footer = print_section_add_menus($course, 0, $modnames, true, true);
} else {
$this->content->footer = '';
}
$this->content->footer = print_section_add_menus($course, 0, null, true, true);
return $this->content;
}

View File

@ -67,10 +67,6 @@ class block_social_activities extends block_list {
$modinfo = get_fast_modinfo($course);
$section = $modinfo->get_section_info(0);
if (!empty($section)) {
get_all_mods($course->id, $mods, $modnames, $modnamesplural, $modnamesused);
}
$groupbuttons = $course->groupmode;
$groupbuttonslink = (!$course->groupmodeforce);
@ -141,11 +137,7 @@ class block_social_activities extends block_list {
$this->content->icons[] = '';
}
if ($modnames) {
$this->content->footer = print_section_add_menus($course, 0, $modnames, true, true);
} else {
$this->content->footer = '';
}
$this->content->footer = print_section_add_menus($course, 0, null, true, true);
return $this->content;
}

View File

@ -271,7 +271,7 @@ abstract class format_section_renderer_base extends plugin_renderer_base {
*
* @param stdClass $section The course_section entry from DB
* @param stdClass $course The course entry from DB
* @param array $mods course modules indexed by id (from get_all_mods)
* @param array $mods course modules indexed by id (from get_fast_modinfo()->get_cms())
* @return string HTML to output.
*/
protected function section_summary($section, $course, $mods) {
@ -318,7 +318,7 @@ abstract class format_section_renderer_base extends plugin_renderer_base {
*
* @param stdClass $section The course_section entry from DB
* @param stdClass $course the course record from DB
* @param array $mods course modules indexed by id (from get_all_mods)
* @param array $mods course modules indexed by id (from get_fast_modinfo()->get_cms())
* @return string HTML to output.
*/
private function section_activity_summary($section, $course, $mods) {

View File

@ -1209,56 +1209,30 @@ function get_array_of_activities($courseid) {
return $mod;
}
/**
* Returns a number of useful structures for course displays
* Returns the localised human-readable names of all used modules
*
* @param bool $plural if true returns the plural forms of the names
* @return array where key is the module name (component name without 'mod_') and
* the value is the human-readable string. Array sorted alphabetically by value
*/
function get_all_mods($courseid, &$mods, &$modnames, &$modnamesplural, &$modnamesused) {
global $CFG, $DB, $COURSE;
$mods = array(); // course modules indexed by id
$modnames = array(); // all course module names (except resource!)
$modnamesplural= array(); // all course module names (plural form)
$modnamesused = array(); // course module names used
if ($allmods = $DB->get_records("modules")) {
foreach ($allmods as $mod) {
if (!file_exists("$CFG->dirroot/mod/$mod->name/lib.php")) {
continue;
function get_module_types_names($plural = false) {
static $modnames = null;
global $DB, $CFG;
if ($modnames === null) {
$modnames = array(0 => array(), 1 => array());
if ($allmods = $DB->get_records("modules")) {
foreach ($allmods as $mod) {
if (file_exists("$CFG->dirroot/mod/$mod->name/lib.php") && $mod->visible) {
$modnames[0][$mod->name] = get_string("modulename", "$mod->name");
$modnames[1][$mod->name] = get_string("modulenameplural", "$mod->name");
}
}
if ($mod->visible) {
$modnames[$mod->name] = get_string("modulename", "$mod->name");
$modnamesplural[$mod->name] = get_string("modulenameplural", "$mod->name");
}
}
collatorlib::asort($modnames);
} else {
print_error("nomodules", 'debug');
}
$course = ($courseid==$COURSE->id) ? $COURSE : $DB->get_record('course',array('id'=>$courseid));
$modinfo = get_fast_modinfo($course);
if ($rawmods=$modinfo->cms) {
foreach($rawmods as $mod) { // Index the mods
if (empty($modnames[$mod->modname])) {
continue;
}
$mods[$mod->id] = $mod;
$mods[$mod->id]->modfullname = $modnames[$mod->modname];
if (!$mod->visible and !has_capability('moodle/course:viewhiddenactivities', context_course::instance($courseid))) {
continue;
}
// Check groupings
if (!groups_course_module_visible($mod)) {
continue;
}
$modnamesused[$mod->modname] = $modnames[$mod->modname];
}
if ($modnamesused) {
collatorlib::asort($modnamesused);
collatorlib::asort($modnames[0]);
collatorlib::asort($modnames[1]);
}
}
return $modnames[(int)$plural];
}
/**
@ -1746,18 +1720,28 @@ function print_section($course, $section, $mods, $modnamesused, $absolute=false,
*
* @param stdClass $course The course
* @param int $section relative section number (field course_sections.section)
* @param array $modnames An array containing the list of modules and their names
* @param null|array $modnames An array containing the list of modules and their names
* if omitted will be taken from get_module_types_names()
* @param bool $vertical Vertical orientation
* @param bool $return Return the menus or send them to output
* @param int $sectionreturn The section to link back to
* @return void|string depending on $return
*/
function print_section_add_menus($course, $section, $modnames, $vertical=false, $return=false, $sectionreturn=null) {
function print_section_add_menus($course, $section, $modnames = null, $vertical=false, $return=false, $sectionreturn=null) {
global $CFG, $OUTPUT;
// check to see if user can add menus
if (!has_capability('moodle/course:manageactivities', context_course::instance($course->id))) {
return false;
if ($modnames === null) {
$modnames = get_module_types_names();
}
// check to see if user can add menus and there are modules to add
if (!has_capability('moodle/course:manageactivities', context_course::instance($course->id))
|| empty($modnames)) {
if ($return) {
return '';
} else {
return false;
}
}
// Retrieve all modules with associated metadata

View File

@ -83,7 +83,7 @@ echo $OUTPUT->heading(format_string($course->fullname) . ": $userinfo", 2);
$mform->display();
$modinfo = get_fast_modinfo($course);
get_all_mods($course->id, $mods, $modnames, $modnamesplural, $modnamesused);
$modnames = get_module_types_names();
if (has_capability('moodle/course:viewhiddensections', $context)) {
$hiddenfilter = "";

View File

@ -242,30 +242,17 @@
// Course wrapper start.
echo html_writer::start_tag('div', array('class'=>'course-content'));
$modinfo = get_fast_modinfo($COURSE);
get_all_mods($course->id, $mods, $modnames, $modnamesplural, $modnamesused);
foreach($mods as $modid=>$unused) {
if (!isset($modinfo->cms[$modid])) {
rebuild_course_cache($course->id);
$modinfo = get_fast_modinfo($COURSE);
debugging('Rebuilding course cache', DEBUG_DEVELOPER);
break;
}
}
// make sure that section 0 exists (this function will create one if it is missing)
$section0 = get_course_section(0, $course->id);
if (!$sections = $modinfo->get_section_info_all()) { // No sections found
$section = new stdClass;
$section->course = $course->id; // Create a default section.
$section->section = 0;
$section->visible = 1;
$section->summaryformat = FORMAT_HTML;
$section->id = $DB->insert_record('course_sections', $section);
rebuild_course_cache($course->id);
$modinfo = get_fast_modinfo($COURSE);
if (!$sections = $modinfo->get_section_info_all()) { // Try again
print_error('cannotcreateorfindstructs', 'error');
}
}
// get information about course modules and existing module types
// format.php in course formats may rely on presence of these variables
$modinfo = get_fast_modinfo($course);
$modnames = get_module_types_names();
$modnamesplural = get_module_types_names(true);
$modnamesused = $modinfo->get_used_module_names();
$mods = $modinfo->get_cms();
$sections = $modinfo->get_section_info_all();
// CAUTION, hacky fundamental variable defintion to follow!
// Note that because of the way course fromats are constructed though

View File

@ -98,26 +98,24 @@
echo $OUTPUT->header();
/// Print Section or custom info
get_all_mods($SITE->id, $mods, $modnames, $modnamesplural, $modnamesused);
$modinfo = get_fast_modinfo($SITE);
$modnames = get_module_types_names();
$modnamesplural = get_module_types_names(true);
$modnamesused = $modinfo->get_used_module_names();
$mods = $modinfo->get_cms();
if (!empty($CFG->customfrontpageinclude)) {
include($CFG->customfrontpageinclude);
} else if ($SITE->numsections > 0) {
if (!$section = $DB->get_record('course_sections', array('course'=>$SITE->id, 'section'=>1))) {
$DB->delete_records('course_sections', array('course'=>$SITE->id, 'section'=>1)); // Just in case
$section = new stdClass();
$section->course = $SITE->id;
$section->section = 1;
$section->summary = '';
$section->summaryformat = FORMAT_HTML;
$section->sequence = '';
$section->visible = 1;
$section->id = $DB->insert_record('course_sections', $section);
rebuild_course_cache($SITE->id, true);
} else {
if ($editing) {
// make sure section with number 1 exists, this function will create section
get_course_section(1, $SITE->id);
// re-request modinfo in case section was created
$modinfo = get_fast_modinfo($SITE);
}
if (!empty($section->sequence) or !empty($section->summary) or $editing) {
$section = $modinfo->get_section_info(1);
if (($section && (!empty($modinfo->sections[1]) or !empty($section->summary))) or $editing) {
echo $OUTPUT->box_start('generalbox sitetopic');
/// If currently moving a file then show the current clipboard

View File

@ -2977,3 +2977,39 @@ function add_mod_to_section($mod, $beforemod=NULL) {
$course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
return course_add_cm_to_section($course, $mod->coursemodule, $mod->section, $beforemod);
}
/**
* Returns a number of useful structures for course displays
*
* Function get_all_mods() is deprecated in 2.4
* Instead of:
* <code>
* get_all_mods($course->id, $mods, $modnames, $modnamesplural, $modnamesused);
* </code>
* please use:
* <code>
* $mods = get_fast_modinfo($course)->get_cms();
* $modnames = get_module_types_names();
* $modnamesplural = get_module_types_names(true);
* $modnamesused = get_fast_modinfo($course)->get_used_module_names();
* </code>
*
* @deprecated since 2.4
*
* @param int $courseid id of the course to get info about
* @param array $mods (return) list of course modules
* @param array $modnames (return) list of names of all module types installed and available
* @param array $modnamesplural (return) list of names of all module types installed and available in the plural form
* @param array $modnamesused (return) list of names of all module types used in the course
*/
function get_all_mods($courseid, &$mods, &$modnames, &$modnamesplural, &$modnamesused) {
debugging('Function get_all_mods() is deprecated. Use get_fast_modinfo() and get_module_types_names() instead. See phpdocs for details', DEBUG_DEVELOPER);
global $COURSE;
$modnames = get_module_types_names();
$modnamesplural= get_module_types_names(true);
$course = ($courseid==$COURSE->id) ? $COURSE : $DB->get_record('course',array('id'=>$courseid));
$modinfo = get_fast_modinfo($course);
$mods = $modinfo->get_cms();
$modnamesused = $modinfo->get_used_module_names();
}

View File

@ -158,6 +158,24 @@ class course_modinfo extends stdClass {
return $this->instances;
}
/**
* Returns array of localised human-readable module names used in this course
*
* @param bool $plural if true returns the plural form of modules names
* @return array
*/
public function get_used_module_names($plural = false) {
$modnames = get_module_types_names($plural);
$modnamesused = array();
foreach ($this->get_cms() as $cmid => $mod) {
if (isset($modnames[$mod->modname]) && $mod->uservisible) {
$modnamesused[$mod->modname] = $modnames[$mod->modname];
}
}
collatorlib::asort($modnamesused);
return $modnamesused;
}
/**
* Obtains all instances of a particular module on this course.
* @param $modname Name of module (not full frankenstyle) e.g. 'label'
@ -610,14 +628,6 @@ class cm_info extends stdClass {
*/
public $conditionsfield;
/**
* Plural name of module type, e.g. 'Forums' - from lang file
* @deprecated Do not use this value (you can obtain it by calling get_string instead); it
* will be removed in a future version (see later TODO in this file)
* @var string
*/
public $modplural;
/**
* True if this course-module is available to students i.e. if all availability conditions
* are met - obtained dynamically
@ -692,6 +702,24 @@ class cm_info extends stdClass {
*/
private $afterediticons;
/**
* Magic method getter
*
* @param string $name
* @return mixed
*/
public function __get($name) {
switch ($name) {
case 'modplural':
return $this->get_module_type_name(true);
case 'modfullname':
return $this->get_module_type_name();
default:
debugging('Invalid cm_info property accessed: '.$name);
return null;
}
}
/**
* @return bool True if this module has a 'view' page that should be linked to in navigation
* etc (note: modules may still have a view.php file, but return false if this is not
@ -793,6 +821,21 @@ class cm_info extends stdClass {
return $icon;
}
/**
* Returns a localised human-readable name of the module type
*
* @param bool $plural return plural form
* @return string
*/
public function get_module_type_name($plural = false) {
$modnames = get_module_types_names($plural);
if (isset($modnames[$this->modname])) {
return $modnames[$this->modname];
} else {
return null;
}
}
/**
* @return course_modinfo Modinfo object that this came from
*/
@ -1013,16 +1056,6 @@ class cm_info extends stdClass {
$this->conditionsfield = isset($mod->conditionsfield)
? $mod->conditionsfield : array();
// Get module plural name.
// TODO This was a very old performance hack and should now be removed as the information
// certainly doesn't belong in modinfo. On a 'normal' page this is only used in the
// activity_modules block, so if it needs caching, it should be cached there.
static $modplurals;
if (!isset($modplurals[$this->modname])) {
$modplurals[$this->modname] = get_string('modulenameplural', $this->modname);
}
$this->modplural = $modplurals[$this->modname];
static $modviews;
if (!isset($modviews[$this->modname])) {
$modviews[$this->modname] = !plugin_supports('mod', $this->modname,

View File

@ -3427,10 +3427,9 @@ class settings_navigation extends navigation_node {
*/
protected function get_course_modules($course) {
global $CFG;
$mods = $modnames = $modnamesplural = $modnamesused = array();
// This function is included when we include course/lib.php at the top
// of this file
get_all_mods($course->id, $mods, $modnames, $modnamesplural, $modnamesused);
$modnames = get_module_types_names();
$resources = array();
$activities = array();
foreach($modnames as $modname=>$modnamestr) {