mirror of
https://github.com/LdesignMedia/moodle-availability_ipaddress.git
synced 2026-05-17 05:48:41 +02:00
Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d730ed97fd | ||
|
|
474f91ccbc | ||
|
|
d65fd40621 | ||
|
|
4632008dfb | ||
|
|
c91646df81 | ||
|
|
d2c231e657 | ||
|
|
700820480d | ||
|
|
e91befdf10 | ||
|
|
3f5f4ee6cb | ||
|
|
cccebb6c15 | ||
|
|
af275d1699 | ||
|
|
5dce3ed488 |
2
.github/FUNDING.yml
vendored
2
.github/FUNDING.yml
vendored
@@ -1 +1 @@
|
|||||||
github: [MFreakNL]
|
github: [LdesignMedia]
|
||||||
|
|||||||
0
.gitignore
vendored
Normal file
0
.gitignore
vendored
Normal file
30
CHANGELOG.md
Normal file
30
CHANGELOG.md
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## 5.1.1 (2026031800)
|
||||||
|
* Fixed PHP 7.3 compatibility issue that broke Moodle 4.0.x servers ([#13](https://github.com/LdesignMedia/moodle-availability_ipaddress/issues/13))
|
||||||
|
* Removed typed properties (PHP 7.4+) to support PHP 7.3+
|
||||||
|
* Lowered environment.xml PHP requirement from 7.4 to 7.3
|
||||||
|
|
||||||
|
## 5.1.0 (2026030300)
|
||||||
|
- Tested and verified on Moodle 5.1
|
||||||
|
|
||||||
|
## 5.0.2 (2025080401)
|
||||||
|
- Added support for pre-configuring IP ranges by admins
|
||||||
|
|
||||||
|
## 5.0.1 (2025052200)
|
||||||
|
- Tested on Moodle 5.0
|
||||||
|
|
||||||
|
## 4.5.0 (2025040400)
|
||||||
|
- Tested on Moodle 4.5
|
||||||
|
|
||||||
|
## 4.4.0 (2024072000)
|
||||||
|
- Tested on Moodle 4.4
|
||||||
|
|
||||||
|
## 4.0.3 (2022052801)
|
||||||
|
- Test in Moodle 4.0 @[hamzatamyachte](https://github.com/hamzatamyachte)
|
||||||
|
|
||||||
|
## 4.0.2 (2022052800)
|
||||||
|
- Fixed the [issue 6](https://github.com/ldesignmediaNL/moodle-availability_ipaddress/issues/6) @[hamzatamyachte](https://github.com/hamzatamyachte)
|
||||||
|
|
||||||
|
## 3.9.0 (2022021100)
|
||||||
|
- Thanks for adding ip-range support @[juacas](https://github.com/juacas)
|
||||||
17
README.md
17
README.md
@@ -11,7 +11,7 @@ activity, making it accessible only to users from specified IP addresses.
|
|||||||
* Author: Luuk Verhoeven, [ldesignmedia.nl](https://ldesignmedia.nl/)
|
* Author: Luuk Verhoeven, [ldesignmedia.nl](https://ldesignmedia.nl/)
|
||||||
* Author: Vincent Cornelis, [ldesignmedia.nl](https://ldesignmedia.nl/)
|
* Author: Vincent Cornelis, [ldesignmedia.nl](https://ldesignmedia.nl/)
|
||||||
* Min. required: Moodle 4.0
|
* Min. required: Moodle 4.0
|
||||||
* Supports PHP: 7.4
|
* Supports PHP: 7.3+
|
||||||
|
|
||||||

|

|
||||||

|

|
||||||
@@ -20,7 +20,9 @@ activity, making it accessible only to users from specified IP addresses.
|
|||||||

|

|
||||||

|

|
||||||

|

|
||||||
|

|
||||||
|
|
||||||
|

|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
@@ -47,9 +49,6 @@ activity, making it accessible only to users from specified IP addresses.
|
|||||||
1. The users with matching ip addresses can view the activity.
|
1. The users with matching ip addresses can view the activity.
|
||||||
5. Save the activity
|
5. Save the activity
|
||||||
|
|
||||||
## TODO
|
|
||||||
- Behat tests ip validation
|
|
||||||
|
|
||||||
## Security
|
## Security
|
||||||
|
|
||||||
If you discover any security related issues, please email [luuk@ldesignmedia.nl](mailto:luuk@ldesignmedia.nl) instead of using the issue tracker.
|
If you discover any security related issues, please email [luuk@ldesignmedia.nl](mailto:luuk@ldesignmedia.nl) instead of using the issue tracker.
|
||||||
@@ -62,12 +61,6 @@ The GNU GENERAL PUBLIC LICENSE. Please see [License File](LICENSE) for more info
|
|||||||
|
|
||||||
Contributions are welcome and will be fully credited. We accept contributions via Pull Requests on Github.
|
Contributions are welcome and will be fully credited. We accept contributions via Pull Requests on Github.
|
||||||
|
|
||||||
## Changelog
|
### Changelog
|
||||||
|
|
||||||
- 2024080401 Added support for pre-configuring IP ranges by admins
|
See [CHANGELOG.md](CHANGELOG.md) for a full list of changes.
|
||||||
- 2025052200 Tested on Moodle 5.0
|
|
||||||
- 2025040400 Tested on Moodle 4.5
|
|
||||||
- 2024072000 Tested on Moodle 4.4
|
|
||||||
- 2022021100 Thanks for adding ip-range support @[juacas](https://github.com/juacas)
|
|
||||||
- 2022052800 Fixed the [issue 6](https://github.com/ldesignmediaNL/moodle-availability_ipaddress/issues/6) @[hamzatamyachte](https://github.com/hamzatamyachte)
|
|
||||||
- 2022052801 Test in Moodle 4.0 @[hamzatamyachte](https://github.com/hamzatamyachte)
|
|
||||||
|
|||||||
36
SECURITY.md
Normal file
36
SECURITY.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# Security Policy
|
||||||
|
|
||||||
|
At `Ldesign Media`, we take the security of our software very seriously. This policy outlines the steps we take to ensure the security of our software and how you can help us keep it secure.
|
||||||
|
|
||||||
|
## Supported Versions
|
||||||
|
|
||||||
|
To ensure the best security for our users, we only provide support for the latest version of our software.
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
If you discover a security vulnerability in our software, we kindly ask that you report it to us as soon as possible by sending an email to `security@ldesignmedia.nl`. Please do not use the issue tracker for reporting security vulnerabilities.
|
||||||
|
We will make every effort to investigate and resolve the vulnerability in a timely manner.
|
||||||
|
|
||||||
|
When reporting a vulnerability, please include the following information (as much as you can provide) to help us better understand the nature and scope of the issue:
|
||||||
|
|
||||||
|
- Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
|
||||||
|
- Full paths of source file(s) related to the manifestation of the issue
|
||||||
|
- The location of the affected source code (tag/branch/commit or direct URL)
|
||||||
|
- Any special configuration required to reproduce the issue
|
||||||
|
- Step-by-step instructions to reproduce the issue
|
||||||
|
- Proof-of-concept or exploit code (if possible)
|
||||||
|
- Impact of the issue, including how an attacker might exploit the issue
|
||||||
|
|
||||||
|
This information will help us triage your report more quickly.
|
||||||
|
|
||||||
|
## Rewards
|
||||||
|
|
||||||
|
We do not currently have a bug bounty program, but we are grateful for any responsible disclosures of security vulnerabilities. Your efforts help make our software safer for everyone.
|
||||||
|
|
||||||
|
## Communication
|
||||||
|
|
||||||
|
When a security vulnerability has been discovered and addressed, we will provide updates to the community as soon as possible to keep everyone informed.
|
||||||
|
|
||||||
|
## Acknowledgements
|
||||||
|
|
||||||
|
We would like to extend our gratitude to the security researchers who have helped us improve the security of our software by responsibly reporting security vulnerabilities to us. Your contributions are invaluable to maintaining a safe and secure environment for our users.
|
||||||
@@ -36,20 +36,19 @@ use core_availability\info;
|
|||||||
* @copyright 2019-05-14 Mfreak.nl | LdesignMedia.nl - Luuk Verhoeven
|
* @copyright 2019-05-14 Mfreak.nl | LdesignMedia.nl - Luuk Verhoeven
|
||||||
*/
|
*/
|
||||||
class condition extends \core_availability\condition {
|
class condition extends \core_availability\condition {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manual provided IP addresses.
|
* Manual provided IP addresses.
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected string $ipaddresses = '';
|
protected $ipaddresses = '';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Predefined IP address ranges.
|
* Predefined IP address ranges.
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected array $predefinedranges = [];
|
protected $predefinedranges = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* condition constructor.
|
* condition constructor.
|
||||||
@@ -213,5 +212,4 @@ class condition extends \core_availability\condition {
|
|||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ require_once($CFG->libdir . '/formslib.php');
|
|||||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||||
*/
|
*/
|
||||||
class range_form extends \moodleform {
|
class range_form extends \moodleform {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define the form.
|
* Define the form.
|
||||||
*
|
*
|
||||||
@@ -72,8 +71,12 @@ class range_form extends \moodleform {
|
|||||||
$mform->addHelpButton('ipaddresses', 'ipaddresses_help', 'availability_ipaddress');
|
$mform->addHelpButton('ipaddresses', 'ipaddresses_help', 'availability_ipaddress');
|
||||||
|
|
||||||
// Description field.
|
// Description field.
|
||||||
$mform->addElement('textarea', 'description', get_string('description'),
|
$mform->addElement(
|
||||||
['rows' => 3, 'cols' => 60]);
|
'textarea',
|
||||||
|
'description',
|
||||||
|
get_string('description'),
|
||||||
|
['rows' => 3, 'cols' => 60]
|
||||||
|
);
|
||||||
$mform->setType('description', PARAM_TEXT);
|
$mform->setType('description', PARAM_TEXT);
|
||||||
|
|
||||||
// Enabled field.
|
// Enabled field.
|
||||||
@@ -147,5 +150,4 @@ class range_form extends \moodleform {
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ namespace availability_ipaddress;
|
|||||||
* @copyright 2019-05-14 Mfreak.nl | LdesignMedia.nl - Luuk Verhoeven
|
* @copyright 2019-05-14 Mfreak.nl | LdesignMedia.nl - Luuk Verhoeven
|
||||||
*/
|
*/
|
||||||
class frontend extends \core_availability\frontend {
|
class frontend extends \core_availability\frontend {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get_javascript_strings
|
* get_javascript_strings
|
||||||
*
|
*
|
||||||
@@ -81,5 +80,4 @@ class frontend extends \core_availability\frontend {
|
|||||||
|
|
||||||
return [$rangedata];
|
return [$rangedata];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ namespace availability_ipaddress;
|
|||||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||||
*/
|
*/
|
||||||
class helper {
|
class helper {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if a predefined range is in use.
|
* Check if a predefined range is in use.
|
||||||
*
|
*
|
||||||
@@ -296,7 +295,6 @@ class helper {
|
|||||||
|
|
||||||
// Process nested conditions.
|
// Process nested conditions.
|
||||||
return self::process_nested_conditions($availability, $rangeid) || $modified;
|
return self::process_nested_conditions($availability, $rangeid) || $modified;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -361,5 +359,4 @@ class helper {
|
|||||||
|
|
||||||
return $modified;
|
return $modified;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ namespace availability_ipaddress\privacy;
|
|||||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||||
*/
|
*/
|
||||||
class provider implements \core_privacy\local\metadata\null_provider {
|
class provider implements \core_privacy\local\metadata\null_provider {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the language string identifier with the component's language
|
* Get the language string identifier with the component's language
|
||||||
* file to explain why this plugin stores no data.
|
* file to explain why this plugin stores no data.
|
||||||
@@ -43,5 +42,4 @@ class provider implements \core_privacy\local\metadata\null_provider {
|
|||||||
public static function get_reason(): string {
|
public static function get_reason(): string {
|
||||||
return 'privacy:metadata';
|
return 'privacy:metadata';
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ use confirm_action;
|
|||||||
* @author Vincent Cornelis
|
* @author Vincent Cornelis
|
||||||
*/
|
*/
|
||||||
class ipranges_table extends table_sql {
|
class ipranges_table extends table_sql {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var moodle_url The base URL for the page.
|
* @var moodle_url The base URL for the page.
|
||||||
*/
|
*/
|
||||||
@@ -185,8 +184,10 @@ class ipranges_table extends table_sql {
|
|||||||
|
|
||||||
// Edit action.
|
// Edit action.
|
||||||
$editurl = new moodle_url($this->baseurl, ['action' => 'edit', 'id' => $range->id]);
|
$editurl = new moodle_url($this->baseurl, ['action' => 'edit', 'id' => $range->id]);
|
||||||
$actions[] = $OUTPUT->action_icon($editurl,
|
$actions[] = $OUTPUT->action_icon(
|
||||||
new pix_icon('t/edit', get_string('edit')));
|
$editurl,
|
||||||
|
new pix_icon('t/edit', get_string('edit'))
|
||||||
|
);
|
||||||
|
|
||||||
// Toggle action.
|
// Toggle action.
|
||||||
$toggleurl = new moodle_url($this->baseurl, ['action' => 'toggle', 'id' => $range->id, 'sesskey' => sesskey()]);
|
$toggleurl = new moodle_url($this->baseurl, ['action' => 'toggle', 'id' => $range->id, 'sesskey' => sesskey()]);
|
||||||
@@ -199,10 +200,16 @@ class ipranges_table extends table_sql {
|
|||||||
if ($usage['inuse']) {
|
if ($usage['inuse']) {
|
||||||
// Create confirmation message with usage details.
|
// Create confirmation message with usage details.
|
||||||
$message = \availability_ipaddress\helper::get_range_usage_html($range->id);
|
$message = \availability_ipaddress\helper::get_range_usage_html($range->id);
|
||||||
$message .= \html_writer::tag('p', get_string('confirm_disable_range', 'availability_ipaddress'),
|
$message .= \html_writer::tag(
|
||||||
['class' => 'font-weight-bold']);
|
'p',
|
||||||
$actions[] = $OUTPUT->action_icon($toggleurl, new pix_icon($toggleicon, $togglestring),
|
get_string('confirm_disable_range', 'availability_ipaddress'),
|
||||||
new confirm_action($message));
|
['class' => 'font-weight-bold']
|
||||||
|
);
|
||||||
|
$actions[] = $OUTPUT->action_icon(
|
||||||
|
$toggleurl,
|
||||||
|
new pix_icon($toggleicon, $togglestring),
|
||||||
|
new confirm_action($message)
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
$actions[] = $OUTPUT->action_icon($toggleurl, new pix_icon($toggleicon, $togglestring));
|
$actions[] = $OUTPUT->action_icon($toggleurl, new pix_icon($toggleicon, $togglestring));
|
||||||
}
|
}
|
||||||
@@ -222,17 +229,21 @@ class ipranges_table extends table_sql {
|
|||||||
$usage = \availability_ipaddress\helper::is_range_in_use($range->id);
|
$usage = \availability_ipaddress\helper::is_range_in_use($range->id);
|
||||||
if ($usage['inuse']) {
|
if ($usage['inuse']) {
|
||||||
$message = \availability_ipaddress\helper::get_range_usage_html($range->id);
|
$message = \availability_ipaddress\helper::get_range_usage_html($range->id);
|
||||||
$message .= \html_writer::tag('p', get_string('confirm_delete_range', 'availability_ipaddress'),
|
$message .= \html_writer::tag(
|
||||||
['class' => 'font-weight-bold']);
|
'p',
|
||||||
|
get_string('confirm_delete_range', 'availability_ipaddress'),
|
||||||
|
['class' => 'font-weight-bold']
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
$message = get_string('confirm_delete_range', 'availability_ipaddress');
|
$message = get_string('confirm_delete_range', 'availability_ipaddress');
|
||||||
}
|
}
|
||||||
|
|
||||||
$actions[] = $OUTPUT->action_icon($deleteurl,
|
$actions[] = $OUTPUT->action_icon(
|
||||||
|
$deleteurl,
|
||||||
new pix_icon('t/delete', get_string('delete')),
|
new pix_icon('t/delete', get_string('delete')),
|
||||||
new confirm_action($message));
|
new confirm_action($message)
|
||||||
|
);
|
||||||
|
|
||||||
return implode(' ', $actions);
|
return implode(' ', $actions);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
<COMPATIBILITY_MATRIX>
|
<COMPATIBILITY_MATRIX>
|
||||||
<PLUGIN name="availability_ipaddress">
|
<PLUGIN name="availability_ipaddress">
|
||||||
<PHP version="7.4" level="required"/>
|
<PHP version="7.3" level="required"/>
|
||||||
</PLUGIN>
|
</PLUGIN>
|
||||||
</COMPATIBILITY_MATRIX>
|
</COMPATIBILITY_MATRIX>
|
||||||
|
|||||||
@@ -44,11 +44,19 @@ if ($action === 'delete' && confirm_sesskey()) {
|
|||||||
$DB->delete_records('availability_ipaddress_pre', ['id' => $id]);
|
$DB->delete_records('availability_ipaddress_pre', ['id' => $id]);
|
||||||
|
|
||||||
if ($removed > 0) {
|
if ($removed > 0) {
|
||||||
redirect($PAGE->url, get_string('range_deleted_and_removed', 'availability_ipaddress', $removed),
|
redirect(
|
||||||
null, \core\output\notification::NOTIFY_SUCCESS);
|
$PAGE->url,
|
||||||
|
get_string('range_deleted_and_removed', 'availability_ipaddress', $removed),
|
||||||
|
null,
|
||||||
|
\core\output\notification::NOTIFY_SUCCESS
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
redirect($PAGE->url, get_string('range_deleted', 'availability_ipaddress'), null,
|
redirect(
|
||||||
\core\output\notification::NOTIFY_SUCCESS);
|
$PAGE->url,
|
||||||
|
get_string('range_deleted', 'availability_ipaddress'),
|
||||||
|
null,
|
||||||
|
\core\output\notification::NOTIFY_SUCCESS
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,8 +71,12 @@ if ($action === 'toggle' && confirm_sesskey()) {
|
|||||||
if (!$record->enabled) {
|
if (!$record->enabled) {
|
||||||
$removed = \availability_ipaddress\helper::remove_range_from_restrictions($id);
|
$removed = \availability_ipaddress\helper::remove_range_from_restrictions($id);
|
||||||
if ($removed > 0) {
|
if ($removed > 0) {
|
||||||
redirect($PAGE->url, get_string('range_disabled_and_removed', 'availability_ipaddress', $removed),
|
redirect(
|
||||||
null, \core\output\notification::NOTIFY_SUCCESS);
|
$PAGE->url,
|
||||||
|
get_string('range_disabled_and_removed', 'availability_ipaddress', $removed),
|
||||||
|
null,
|
||||||
|
\core\output\notification::NOTIFY_SUCCESS
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,15 +97,23 @@ if ($action === 'add' || $action === 'edit') {
|
|||||||
// Update existing.
|
// Update existing.
|
||||||
$data->timemodified = time();
|
$data->timemodified = time();
|
||||||
$DB->update_record('availability_ipaddress_pre', $data);
|
$DB->update_record('availability_ipaddress_pre', $data);
|
||||||
redirect($PAGE->url, get_string('range_updated', 'availability_ipaddress'), null,
|
redirect(
|
||||||
\core\output\notification::NOTIFY_SUCCESS);
|
$PAGE->url,
|
||||||
|
get_string('range_updated', 'availability_ipaddress'),
|
||||||
|
null,
|
||||||
|
\core\output\notification::NOTIFY_SUCCESS
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
// Create new.
|
// Create new.
|
||||||
$data->timecreated = time();
|
$data->timecreated = time();
|
||||||
$data->timemodified = time();
|
$data->timemodified = time();
|
||||||
$DB->insert_record('availability_ipaddress_pre', $data);
|
$DB->insert_record('availability_ipaddress_pre', $data);
|
||||||
redirect($PAGE->url, get_string('range_created', 'availability_ipaddress'), null,
|
redirect(
|
||||||
\core\output\notification::NOTIFY_SUCCESS);
|
$PAGE->url,
|
||||||
|
get_string('range_created', 'availability_ipaddress'),
|
||||||
|
null,
|
||||||
|
\core\output\notification::NOTIFY_SUCCESS
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ defined('MOODLE_INTERNAL') || die();
|
|||||||
global $ADMIN;
|
global $ADMIN;
|
||||||
|
|
||||||
if ($hassiteconfig) {
|
if ($hassiteconfig) {
|
||||||
|
|
||||||
// Add external page for managing IP ranges.
|
// Add external page for managing IP ranges.
|
||||||
$ADMIN->add(
|
$ADMIN->add(
|
||||||
'availabilitysettings',
|
'availabilitysettings',
|
||||||
@@ -38,7 +37,8 @@ if ($hassiteconfig) {
|
|||||||
get_string('setting:manage_predefined_ranges', 'availability_ipaddress'),
|
get_string('setting:manage_predefined_ranges', 'availability_ipaddress'),
|
||||||
new moodle_url('/availability/condition/ipaddress/manage_ranges.php'),
|
new moodle_url('/availability/condition/ipaddress/manage_ranges.php'),
|
||||||
'moodle/site:config'
|
'moodle/site:config'
|
||||||
));
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the visible name of auto generated settings page to empty string,
|
// Set the visible name of auto generated settings page to empty string,
|
||||||
|
|||||||
@@ -27,8 +27,8 @@
|
|||||||
defined('MOODLE_INTERNAL') || die();
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
$plugin->component = 'availability_ipaddress';
|
$plugin->component = 'availability_ipaddress';
|
||||||
$plugin->version = 2025080401;
|
$plugin->version = 2026031800;
|
||||||
$plugin->release = '5.0.2';
|
$plugin->release = '5.1.1';
|
||||||
$plugin->requires = 2016120500;
|
$plugin->requires = 2016120500;
|
||||||
$plugin->maturity = MATURITY_STABLE;
|
$plugin->maturity = MATURITY_STABLE;
|
||||||
$plugin->supported = [400, 500];
|
$plugin->supported = [400, 501];
|
||||||
|
|||||||
Reference in New Issue
Block a user