mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 16:36:37 +02:00
Changing the way that applicable formats for each block are defined:
The format for each page is now the same as the id attribute of the BODY tag, which in turn is a simple function of the script's relative path: The format for e.g. a quiz view page is "mod-quiz-view". The format for the site index is "site-index". Exception: the format for courses is not just "course-view", but "course-view-weeks" etc. Obviously the applicable_formats() override for each block should now take this into account. The matching rules now are: * You can specify the full format, e.g. "mod-quiz-view" => true will allow the block to be added in quizzes * Prefixes match the full page format, e.g. "mod" matches ALL activities * You can use "*" as a wildcard, e.g. "mod-*-view" matches just the view.php page of all activities * These rules interoperate, thus "mod-*" is the same as "mod" * "all" remains as a catch-all situation
This commit is contained in:
parent
bb64b51aa3
commit
8a47e075b3
5 changed files with 38 additions and 23 deletions
|
@ -354,7 +354,7 @@ class block_base {
|
||||||
|
|
||||||
$formats = $this->applicable_formats();
|
$formats = $this->applicable_formats();
|
||||||
if (empty($formats) || array_sum($formats) === 0) {
|
if (empty($formats) || array_sum($formats) === 0) {
|
||||||
$errors[] = 'no_course_formats';
|
$errors[] = 'no_formats';
|
||||||
$correct = false;
|
$correct = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -418,8 +418,8 @@ class block_base {
|
||||||
* @todo finish documenting this function
|
* @todo finish documenting this function
|
||||||
*/
|
*/
|
||||||
function applicable_formats() {
|
function applicable_formats() {
|
||||||
// Default case: the block can be used in all course types and not in quizzes
|
// Default case: the block can be used in all course types but not in activities
|
||||||
return array('all' => true, 'quiz' => false);
|
return array('all' => true, 'mod' => false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ class block_section_links extends block_base {
|
||||||
}
|
}
|
||||||
|
|
||||||
function applicable_formats() {
|
function applicable_formats() {
|
||||||
return (array('weeks' => true, 'topics' => true));
|
return (array('course-view-weeks' => true, 'course-view-topics' => true));
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_content() {
|
function get_content() {
|
||||||
|
|
|
@ -8,7 +8,7 @@ class block_social_activities extends block_base {
|
||||||
}
|
}
|
||||||
|
|
||||||
function applicable_formats() {
|
function applicable_formats() {
|
||||||
return array('social' => true);
|
return array('course-view-social' => true);
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_content() {
|
function get_content() {
|
||||||
|
|
|
@ -103,8 +103,20 @@ function blocks_get_missing(&$page, &$pageblocks) {
|
||||||
if($block->visible && (!blocks_find_block($block->id, $pageblocks) || $block->multiple)) {
|
if($block->visible && (!blocks_find_block($block->id, $pageblocks) || $block->multiple)) {
|
||||||
// And if it's applicable for display in this format...
|
// And if it's applicable for display in this format...
|
||||||
$formats = block_method_result($block->name, 'applicable_formats');
|
$formats = block_method_result($block->name, 'applicable_formats');
|
||||||
if(isset($formats[$pageformat]) ? $formats[$pageformat] : !empty($formats['all'])) {
|
$accept = NULL;
|
||||||
// Add it to the missing blocks
|
foreach($formats as $format => $allowed) {
|
||||||
|
$thisformat = '^'.str_replace('*', '[^-]*', $format).'.*$';
|
||||||
|
if(ereg($thisformat, $pageformat)) {
|
||||||
|
$accept = $allowed;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($accept === NULL) {
|
||||||
|
// ...or in all pages...
|
||||||
|
$accept = !empty($formats['all']);
|
||||||
|
}
|
||||||
|
if(!empty($accept)) {
|
||||||
|
// ...add it to the missing blocks
|
||||||
$missingblocks[] = $block->id;
|
$missingblocks[] = $block->id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -128,12 +140,19 @@ function blocks_remove_inappropriate($page) {
|
||||||
foreach($position as $instance) {
|
foreach($position as $instance) {
|
||||||
$block = blocks_get_record($instance->blockid);
|
$block = blocks_get_record($instance->blockid);
|
||||||
$formats = block_method_result($block->name, 'applicable_formats');
|
$formats = block_method_result($block->name, 'applicable_formats');
|
||||||
if(! (isset($formats[$pageformat]) ? $formats[$pageformat] : !empty($formats['all']))) {
|
$accept = NULL;
|
||||||
// Translation: if the course format is explicitly accepted/rejected, use
|
foreach($formats as $format => $allowed) {
|
||||||
// that setting. Otherwise, fallback to the 'all' format. The empty() test
|
$thisformat = '^'.str_replace('*', '[^-]*', $format).'.*$';
|
||||||
// uses the trick that empty() fails if 'all' is either !isset() or false.
|
if(ereg($thisformat, $pageformat)) {
|
||||||
|
$accept = $allowed;
|
||||||
blocks_delete_instance($instance);
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($accept === NULL) {
|
||||||
|
$accept = !empty($formats['all']);
|
||||||
|
}
|
||||||
|
if(empty($accept)) {
|
||||||
|
blocks_delete_instance($instance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -249,9 +249,9 @@ class page_base {
|
||||||
return $this->id;
|
return $this->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
// "Sensible default" case here. Don't trigger any error.
|
// "Sensible default" case here. Take it from the body id.
|
||||||
function get_format_name() {
|
function get_format_name() {
|
||||||
return NULL;
|
return $this->body_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns $this->body_class
|
// Returns $this->body_class
|
||||||
|
@ -388,7 +388,10 @@ class page_course extends page_base {
|
||||||
// the format_name might be that activity's name etc.
|
// the format_name might be that activity's name etc.
|
||||||
function get_format_name() {
|
function get_format_name() {
|
||||||
$this->init_full();
|
$this->init_full();
|
||||||
return $this->courserecord->format;
|
if($this->id == SITEID) {
|
||||||
|
return parent::get_format_name();
|
||||||
|
}
|
||||||
|
return $this->body_id.'-'.$this->courserecord->format;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This should return a fully qualified path to the URL which is responsible for displaying us.
|
// This should return a fully qualified path to the URL which is responsible for displaying us.
|
||||||
|
@ -610,13 +613,6 @@ class page_quiz extends page_base {
|
||||||
return PAGE_QUIZ_VIEW;
|
return PAGE_QUIZ_VIEW;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is like the "category" of a page of this "type". For example, if the type is PAGE_COURSE_VIEW
|
|
||||||
// the format_name is the actual name of the course format. If the type were PAGE_ACTIVITY_VIEW, then
|
|
||||||
// the format_name might be that activity's name etc.
|
|
||||||
function get_format_name() {
|
|
||||||
return 'quiz';
|
|
||||||
}
|
|
||||||
|
|
||||||
// This should return a fully qualified path to the URL which is responsible for displaying us.
|
// This should return a fully qualified path to the URL which is responsible for displaying us.
|
||||||
function url_get_path() {
|
function url_get_path() {
|
||||||
global $CFG;
|
global $CFG;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue