Update #86c46bd0u - Add support for predefined IP addresses/ranges

This commit is contained in:
Vincent Cornelis
2025-08-04 17:38:30 +02:00
parent 26669e73f1
commit fe3a5b2302
16 changed files with 1435 additions and 52 deletions

25
db/install.xml Normal file
View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" ?>
<XMLDB PATH="availability/condition/ipaddress/db" VERSION="20240104" COMMENT="XMLDB file for availability_ipaddress plugin"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../../lib/xmldb/xmldb.xsd"
>
<TABLES>
<TABLE NAME="availability_ipaddress_pre" COMMENT="Stores predefined IP address ranges for availability_ipaddress">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
<FIELD NAME="name" TYPE="char" LENGTH="255" NOTNULL="true" COMMENT="Display name for the IP range"/>
<FIELD NAME="ipaddresses" TYPE="text" NOTNULL="true" COMMENT="Comma-separated list of IP addresses/ranges"/>
<FIELD NAME="description" TYPE="text" NOTNULL="false" COMMENT="Optional description of this IP range"/>
<FIELD NAME="enabled" TYPE="int" LENGTH="1" NOTNULL="true" DEFAULT="1" COMMENT="Whether this range is available for selection"/>
<FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0"/>
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
<INDEXES>
<INDEX NAME="enabled" UNIQUE="false" FIELDS="enabled"/>
</INDEXES>
</TABLE>
</TABLES>
</XMLDB>

94
db/upgrade.php Normal file
View File

@@ -0,0 +1,94 @@
<?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/>.
/**
* Upgrade script for availability_ipaddress.
*
* @package availability_ipaddress
* @copyright 04/08/2025 LdesignMedia.nl - Luuk Verhoeven
* @author Vincent Cornelis
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/**
* Upgrade function.
*
* @param int $oldversion The old version of the plugin
*
* @return bool
*/
function xmldb_availability_ipaddress_upgrade(int $oldversion): bool {
global $DB;
$dbman = $DB->get_manager();
if ($oldversion < 2025070400) {
// Define table availability_ipaddress_pre to be created.
$table = new xmldb_table('availability_ipaddress_pre');
// Adding fields to table availability_ipaddress_pre.
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$table->add_field('name', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null);
$table->add_field('ipaddresses', XMLDB_TYPE_TEXT, null, null, XMLDB_NOTNULL, null, null);
$table->add_field('description', XMLDB_TYPE_TEXT, null, null, null, null, null);
$table->add_field('enabled', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '1');
$table->add_field('sortorder', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
$table->add_field('timecreated', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
$table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
// Adding keys to table availability_ipaddress_pre.
$table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);
// Adding indexes to table availability_ipaddress_pre.
$table->add_index('enabled_sortorder', XMLDB_INDEX_NOTUNIQUE, ['enabled', 'sortorder']);
// Conditionally launch create table for availability_ipaddress_pre.
if (!$dbman->table_exists($table)) {
$dbman->create_table($table);
}
// Availability_ipaddress savepoint reached.
upgrade_plugin_savepoint(true, 2025070400, 'availability', 'ipaddress');
}
if ($oldversion < 2025080401) {
// Remove sortorder field from availability_ipaddress_pre table.
$table = new xmldb_table('availability_ipaddress_pre');
// Drop the index that includes sortorder.
$index = new xmldb_index('enabled_sortorder', XMLDB_INDEX_NOTUNIQUE, ['enabled', 'sortorder']);
if ($dbman->index_exists($table, $index)) {
$dbman->drop_index($table, $index);
}
// Drop the sortorder field.
$field = new xmldb_field('sortorder');
if ($dbman->field_exists($table, $field)) {
$dbman->drop_field($table, $field);
}
// Add a new index for enabled only.
$index = new xmldb_index('enabled', XMLDB_INDEX_NOTUNIQUE, ['enabled']);
if (!$dbman->index_exists($table, $index)) {
$dbman->add_index($table, $index);
}
// Availability_ipaddress savepoint reached.
upgrade_plugin_savepoint(true, 2025080401, 'availability', 'ipaddress');
}
return true;
}