MDL-82322 core_course: Update namespace of \course_request
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
issueNumber: MDL-82322
|
||||
notes:
|
||||
core_course:
|
||||
- message: |
|
||||
The following classes have been renamed and now support autoloading.
|
||||
Existing classes are currently unaffected.
|
||||
|
||||
| Old class name | New class name |
|
||||
| --- | --- |
|
||||
| `\course_request` | `\core_course\course_request` |
|
||||
type: improved
|
||||
@@ -24,6 +24,7 @@
|
||||
*/
|
||||
|
||||
use core\exception\moodle_exception;
|
||||
use core_course\course_request;
|
||||
|
||||
/**
|
||||
* Class to store, cache, render and manage course category
|
||||
@@ -3117,9 +3118,6 @@ class core_course_category implements renderable, cacheable_object, IteratorAggr
|
||||
* @return bool
|
||||
*/
|
||||
public function can_request_course() {
|
||||
global $CFG;
|
||||
require_once($CFG->dirroot . '/course/lib.php');
|
||||
|
||||
return course_request::can_request($this->get_context());
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,18 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
namespace core_course;
|
||||
|
||||
use core\context;
|
||||
use core\context\course as context_course;
|
||||
use core\context\coursecat as context_coursecat;
|
||||
use core\context\system as context_system;
|
||||
use core\exception\coding_exception;
|
||||
use core\exception\moodle_exception;
|
||||
use core_course_category;
|
||||
use restore_dbops;
|
||||
use stdClass;
|
||||
|
||||
/**
|
||||
* This class pertains to course requests and contains methods associated with
|
||||
* create, approving, and removing course requests.
|
||||
@@ -152,7 +164,7 @@ class course_request {
|
||||
}
|
||||
if (empty($properties->requester)) {
|
||||
if (!($this->properties = $DB->get_record('course_request', array('id' => $properties->id)))) {
|
||||
throw new \moodle_exception('unknowncourserequest');
|
||||
throw new moodle_exception('unknowncourserequest');
|
||||
}
|
||||
} else {
|
||||
$this->properties = $properties;
|
||||
@@ -431,3 +443,8 @@ class course_request {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Alias this class to the old name.
|
||||
// This file will be autoloaded by the legacyclasses autoload system.
|
||||
// In future all uses of this class will be corrected and the legacy references will be removed.
|
||||
class_alias(course_request::class, \course_request::class);
|
||||
|
||||
@@ -20,7 +20,7 @@ use action_menu;
|
||||
use action_menu_link_secondary;
|
||||
use context_coursecat;
|
||||
use core_course_category;
|
||||
use course_request;
|
||||
use core_course\course_request;
|
||||
use moodle_page;
|
||||
use moodle_url;
|
||||
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
* @package course
|
||||
*/
|
||||
|
||||
use core_course\course_request;
|
||||
|
||||
require_once(__DIR__ . '/../config.php');
|
||||
require_once($CFG->dirroot . '/course/lib.php');
|
||||
require_once($CFG->dirroot . '/course/request_form.php');
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
* @package course
|
||||
*/
|
||||
|
||||
use core_course\course_request;
|
||||
|
||||
if (!defined('MOODLE_INTERNAL')) {
|
||||
die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page
|
||||
}
|
||||
|
||||
+113
-10
@@ -16,23 +16,20 @@
|
||||
|
||||
namespace core_course;
|
||||
|
||||
use course_request;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
global $CFG;
|
||||
require_once($CFG->dirroot.'/course/lib.php');
|
||||
use core\context\system as context_system;
|
||||
use core\context\coursecat as context_coursecat;
|
||||
use core_course_category;
|
||||
|
||||
/**
|
||||
* Course request related unit tests
|
||||
* Tests for course_request class.
|
||||
*
|
||||
* @package core_course
|
||||
* @category test
|
||||
* @copyright 2012 Frédéric Massart
|
||||
* @copyright Frédéric Massart
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
final class courserequest_test extends \advanced_testcase {
|
||||
|
||||
#[\PHPUnit\Framework\Attributes\CoversClass(course_request::class)]
|
||||
final class course_request_test extends \advanced_testcase {
|
||||
public function test_create_request(): void {
|
||||
global $DB, $USER;
|
||||
$this->resetAfterTest(true);
|
||||
@@ -175,4 +172,110 @@ final class courserequest_test extends \advanced_testcase {
|
||||
$this->assertCount(1, $sink->get_messages());
|
||||
$sink->close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for the course_request::can_request
|
||||
*/
|
||||
public function test_can_request_course(): void {
|
||||
global $CFG, $DB;
|
||||
$this->resetAfterTest();
|
||||
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$cat1 = $CFG->defaultrequestcategory;
|
||||
$cat2 = $this->getDataGenerator()->create_category()->id;
|
||||
$cat3 = $this->getDataGenerator()->create_category()->id;
|
||||
$context1 = context_coursecat::instance($cat1);
|
||||
$context2 = context_coursecat::instance($cat2);
|
||||
$context3 = context_coursecat::instance($cat3);
|
||||
$this->setUser($user);
|
||||
|
||||
// By default users don't have capability to request courses.
|
||||
$this->assertFalse(course_request::can_request(context_system::instance()));
|
||||
$this->assertFalse(course_request::can_request($context1));
|
||||
$this->assertFalse(course_request::can_request($context2));
|
||||
$this->assertFalse(course_request::can_request($context3));
|
||||
|
||||
// Allow for the 'user' role the capability to request courses.
|
||||
$userroleid = $DB->get_field('role', 'id', ['shortname' => 'user']);
|
||||
assign_capability('moodle/course:request', CAP_ALLOW, $userroleid,
|
||||
context_system::instance()->id);
|
||||
accesslib_clear_all_caches_for_unit_testing();
|
||||
|
||||
// Lock category selection.
|
||||
$CFG->lockrequestcategory = 1;
|
||||
|
||||
// Now user can only request course in the default category or in system context.
|
||||
$this->assertTrue(course_request::can_request(context_system::instance()));
|
||||
$this->assertTrue(course_request::can_request($context1));
|
||||
$this->assertFalse(course_request::can_request($context2));
|
||||
$this->assertFalse(course_request::can_request($context3));
|
||||
|
||||
// Enable category selection. User can request course anywhere.
|
||||
$CFG->lockrequestcategory = 0;
|
||||
$this->assertTrue(course_request::can_request(context_system::instance()));
|
||||
$this->assertTrue(course_request::can_request($context1));
|
||||
$this->assertTrue(course_request::can_request($context2));
|
||||
$this->assertTrue(course_request::can_request($context3));
|
||||
|
||||
// Remove cap from cat2.
|
||||
$roleid = create_role('Test role', 'testrole', 'Test role description');
|
||||
assign_capability('moodle/course:request', CAP_PROHIBIT, $roleid,
|
||||
$context2->id, true);
|
||||
role_assign($roleid, $user->id, $context2->id);
|
||||
accesslib_clear_all_caches_for_unit_testing();
|
||||
|
||||
$this->assertTrue(course_request::can_request(context_system::instance()));
|
||||
$this->assertTrue(course_request::can_request($context1));
|
||||
$this->assertFalse(course_request::can_request($context2));
|
||||
$this->assertTrue(course_request::can_request($context3));
|
||||
|
||||
// Disable course request functionality.
|
||||
$CFG->enablecourserequests = false;
|
||||
$this->assertFalse(course_request::can_request(context_system::instance()));
|
||||
$this->assertFalse(course_request::can_request($context1));
|
||||
$this->assertFalse(course_request::can_request($context2));
|
||||
$this->assertFalse(course_request::can_request($context3));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for the course_request::can_approve
|
||||
*/
|
||||
public function test_can_approve_course_request(): void {
|
||||
global $CFG;
|
||||
$this->resetAfterTest();
|
||||
|
||||
$requestor = $this->getDataGenerator()->create_user();
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$cat1 = $CFG->defaultrequestcategory;
|
||||
$cat2 = $this->getDataGenerator()->create_category()->id;
|
||||
$cat3 = $this->getDataGenerator()->create_category()->id;
|
||||
|
||||
// Enable course requests. Default 'user' role has capability to request courses.
|
||||
$CFG->enablecourserequests = true;
|
||||
$CFG->lockrequestcategory = 0;
|
||||
$this->setUser($requestor);
|
||||
$requestdata = ['summary_editor' => ['text' => '', 'format' => 0], 'name' => 'Req', 'reason' => 'test'];
|
||||
$request1 = course_request::create((object)($requestdata));
|
||||
$request2 = course_request::create((object)($requestdata + ['category' => $cat2]));
|
||||
$request3 = course_request::create((object)($requestdata + ['category' => $cat3]));
|
||||
|
||||
$this->setUser($user);
|
||||
// Add capability to approve courses.
|
||||
$roleid = create_role('Test role', 'testrole', 'Test role description');
|
||||
assign_capability('moodle/site:approvecourse', CAP_ALLOW, $roleid,
|
||||
context_system::instance()->id, true);
|
||||
role_assign($roleid, $user->id, context_coursecat::instance($cat2)->id);
|
||||
accesslib_clear_all_caches_for_unit_testing();
|
||||
|
||||
$this->assertFalse($request1->can_approve());
|
||||
$this->assertTrue($request2->can_approve());
|
||||
$this->assertFalse($request3->can_approve());
|
||||
|
||||
// Delete category where course was requested. Now only site-wide manager can approve it.
|
||||
core_course_category::get($cat2, MUST_EXIST, true)->delete_full(false);
|
||||
$this->assertFalse($request2->can_approve());
|
||||
|
||||
$this->setAdminUser();
|
||||
$this->assertTrue($request2->can_approve());
|
||||
}
|
||||
}
|
||||
@@ -35,7 +35,6 @@ use core_external;
|
||||
use core_tag_index_builder;
|
||||
use core_tag_tag;
|
||||
use course_capability_assignment;
|
||||
use course_request;
|
||||
use core_course_category;
|
||||
use enrol_imsenterprise\imsenterprise_test;
|
||||
use core_external\external_api;
|
||||
@@ -7275,112 +7274,6 @@ final class courselib_test extends advanced_testcase {
|
||||
$this->assertEquals($expected, course_modules_pending_deletion($course->id, $gradable));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for the course_request::can_request
|
||||
*/
|
||||
public function test_can_request_course(): void {
|
||||
global $CFG, $DB;
|
||||
$this->resetAfterTest();
|
||||
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$cat1 = $CFG->defaultrequestcategory;
|
||||
$cat2 = $this->getDataGenerator()->create_category()->id;
|
||||
$cat3 = $this->getDataGenerator()->create_category()->id;
|
||||
$context1 = context_coursecat::instance($cat1);
|
||||
$context2 = context_coursecat::instance($cat2);
|
||||
$context3 = context_coursecat::instance($cat3);
|
||||
$this->setUser($user);
|
||||
|
||||
// By default users don't have capability to request courses.
|
||||
$this->assertFalse(course_request::can_request(context_system::instance()));
|
||||
$this->assertFalse(course_request::can_request($context1));
|
||||
$this->assertFalse(course_request::can_request($context2));
|
||||
$this->assertFalse(course_request::can_request($context3));
|
||||
|
||||
// Allow for the 'user' role the capability to request courses.
|
||||
$userroleid = $DB->get_field('role', 'id', ['shortname' => 'user']);
|
||||
assign_capability('moodle/course:request', CAP_ALLOW, $userroleid,
|
||||
context_system::instance()->id);
|
||||
accesslib_clear_all_caches_for_unit_testing();
|
||||
|
||||
// Lock category selection.
|
||||
$CFG->lockrequestcategory = 1;
|
||||
|
||||
// Now user can only request course in the default category or in system context.
|
||||
$this->assertTrue(course_request::can_request(context_system::instance()));
|
||||
$this->assertTrue(course_request::can_request($context1));
|
||||
$this->assertFalse(course_request::can_request($context2));
|
||||
$this->assertFalse(course_request::can_request($context3));
|
||||
|
||||
// Enable category selection. User can request course anywhere.
|
||||
$CFG->lockrequestcategory = 0;
|
||||
$this->assertTrue(course_request::can_request(context_system::instance()));
|
||||
$this->assertTrue(course_request::can_request($context1));
|
||||
$this->assertTrue(course_request::can_request($context2));
|
||||
$this->assertTrue(course_request::can_request($context3));
|
||||
|
||||
// Remove cap from cat2.
|
||||
$roleid = create_role('Test role', 'testrole', 'Test role description');
|
||||
assign_capability('moodle/course:request', CAP_PROHIBIT, $roleid,
|
||||
$context2->id, true);
|
||||
role_assign($roleid, $user->id, $context2->id);
|
||||
accesslib_clear_all_caches_for_unit_testing();
|
||||
|
||||
$this->assertTrue(course_request::can_request(context_system::instance()));
|
||||
$this->assertTrue(course_request::can_request($context1));
|
||||
$this->assertFalse(course_request::can_request($context2));
|
||||
$this->assertTrue(course_request::can_request($context3));
|
||||
|
||||
// Disable course request functionality.
|
||||
$CFG->enablecourserequests = false;
|
||||
$this->assertFalse(course_request::can_request(context_system::instance()));
|
||||
$this->assertFalse(course_request::can_request($context1));
|
||||
$this->assertFalse(course_request::can_request($context2));
|
||||
$this->assertFalse(course_request::can_request($context3));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for the course_request::can_approve
|
||||
*/
|
||||
public function test_can_approve_course_request(): void {
|
||||
global $CFG;
|
||||
$this->resetAfterTest();
|
||||
|
||||
$requestor = $this->getDataGenerator()->create_user();
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$cat1 = $CFG->defaultrequestcategory;
|
||||
$cat2 = $this->getDataGenerator()->create_category()->id;
|
||||
$cat3 = $this->getDataGenerator()->create_category()->id;
|
||||
|
||||
// Enable course requests. Default 'user' role has capability to request courses.
|
||||
$CFG->enablecourserequests = true;
|
||||
$CFG->lockrequestcategory = 0;
|
||||
$this->setUser($requestor);
|
||||
$requestdata = ['summary_editor' => ['text' => '', 'format' => 0], 'name' => 'Req', 'reason' => 'test'];
|
||||
$request1 = course_request::create((object)($requestdata));
|
||||
$request2 = course_request::create((object)($requestdata + ['category' => $cat2]));
|
||||
$request3 = course_request::create((object)($requestdata + ['category' => $cat3]));
|
||||
|
||||
$this->setUser($user);
|
||||
// Add capability to approve courses.
|
||||
$roleid = create_role('Test role', 'testrole', 'Test role description');
|
||||
assign_capability('moodle/site:approvecourse', CAP_ALLOW, $roleid,
|
||||
context_system::instance()->id, true);
|
||||
role_assign($roleid, $user->id, context_coursecat::instance($cat2)->id);
|
||||
accesslib_clear_all_caches_for_unit_testing();
|
||||
|
||||
$this->assertFalse($request1->can_approve());
|
||||
$this->assertTrue($request2->can_approve());
|
||||
$this->assertFalse($request3->can_approve());
|
||||
|
||||
// Delete category where course was requested. Now only site-wide manager can approve it.
|
||||
core_course_category::get($cat2, MUST_EXIST, true)->delete_full(false);
|
||||
$this->assertFalse($request2->can_approve());
|
||||
|
||||
$this->setAdminUser();
|
||||
$this->assertTrue($request2->can_approve());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the course allowed module method.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user