MDL-82322 core_course: Update namespace of \course_request

This commit is contained in:
Andrew Nicols
2025-08-25 14:49:58 +08:00
parent 9da5af5c5f
commit bc79083506
8 changed files with 148 additions and 122 deletions
@@ -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
+1 -3
View File
@@ -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());
}
+18 -1
View File
@@ -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;
+2
View File
@@ -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');
+2
View File
@@ -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
}
@@ -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());
}
}
-107
View File
@@ -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.
*/