MDL-73339 completionstatus: Add block only if main feature is enabled

The Course completion status block should be added only if the
completion advanced feature is enabled.
This commit is contained in:
Sara Arjona 2021-12-15 10:46:37 +01:00
parent 8e932d6fd9
commit 5f7b53980b
2 changed files with 81 additions and 10 deletions

View file

@ -15,25 +15,21 @@
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Block for displayed logged in user's course completion status
* Block for displayed logged in user's course completion status.
* Displays overall, and individual criteria status for logged in user.
*
* @package block_completionstatus
* @copyright 2009-2012 Catalyst IT Ltd
* @author Aaron Barnes <aaronb@catalyst.net.nz>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
require_once("{$CFG->libdir}/completionlib.php");
/**
* Course completion status.
* Displays overall, and individual criteria status for logged in user.
*/
class block_completionstatus extends block_base {
public function init() {
global $CFG;
require_once("{$CFG->libdir}/completionlib.php");
$this->title = get_string('pluginname', 'block_completionstatus');
}
@ -253,4 +249,16 @@ class block_completionstatus extends block_base {
return $this->content;
}
/**
* This block shouldn't be added to a page if the completion tracking advanced feature is disabled.
*
* @param moodle_page $page
* @return bool
*/
public function can_block_be_added(moodle_page $page): bool {
global $CFG;
return $CFG->enablecompletion;
}
}

View file

@ -0,0 +1,63 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace block_completionstatus\tests;
use advanced_testcase;
use block_completionstatus;
use context_course;
/**
* PHPUnit block_completionstatus tests
*
* @package block_completionstatus
* @category test
* @copyright 2021 Sara Arjona (sara@moodle.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @coversDefaultClass \block_completionstatus
*/
class completionstatus_test extends advanced_testcase {
public static function setUpBeforeClass(): void {
require_once(__DIR__ . '/../../moodleblock.class.php');
require_once(__DIR__ . '/../block_completionstatus.php');
}
/**
* Test the behaviour of can_block_be_added() method.
*
* @covers ::can_block_be_added
*/
public function test_can_block_be_added(): void {
$this->resetAfterTest();
$this->setAdminUser();
// Create a course and prepare the page where the block will be added.
$course = $this->getDataGenerator()->create_course();
$page = new \moodle_page();
$page->set_context(context_course::instance($course->id));
$page->set_pagelayout('course');
$block = new block_completionstatus();
// If blogs advanced feature is enabled, the method should return true.
set_config('enablecompletion', true);
$this->assertTrue($block->can_block_be_added($page));
// However, if the blogs advanced feature is disabled, the method should return false.
set_config('enablecompletion', false);
$this->assertFalse($block->can_block_be_added($page));
}
}