diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 961467d..0000000 --- a/.eslintrc +++ /dev/null @@ -1,214 +0,0 @@ -{ - 'plugins': [ - 'promise', - ], - 'env': { - 'browser': true, - 'amd': true - }, - 'globals': { - 'M': true, - 'Y': true - }, - 'rules': { - // See http://eslint.org/docs/rules/ for all rules and explanations of all - // rules. - - // === Possible Errors === - 'comma-dangle': 'off', - 'no-compare-neg-zero': 'error', - 'no-cond-assign': 'error', - 'no-console': 'error', - 'no-constant-condition': 'error', - 'no-control-regex': 'error', - 'no-debugger': 'error', - 'no-dupe-args': 'error', - 'no-dupe-keys': 'error', - 'no-duplicate-case': 'error', - 'no-empty': 'warn', - 'no-empty-character-class': 'error', - 'no-ex-assign': 'error', - 'no-extra-boolean-cast': 'error', - 'no-extra-parens': 'off', - 'no-extra-semi': 'error', - 'no-func-assign': 'error', - 'no-inner-declarations': 'error', - 'no-invalid-regexp': 'error', - 'no-irregular-whitespace': 'error', - 'no-obj-calls': 'error', - 'no-prototype-builtins': 'off', - 'no-regex-spaces': 'error', - 'no-sparse-arrays': 'error', - 'no-unexpected-multiline': 'error', - 'no-unreachable': 'warn', - 'no-unsafe-finally': 'error', - 'no-unsafe-negation': 'error', - 'use-isnan': 'error', - 'valid-jsdoc': ['warn', { 'requireReturn': false, 'requireParamDescription': false, 'requireReturnDescription': false }], - 'valid-typeof': 'error', - - // === Best Practices === - // (these mostly match our jshint config) - 'array-callback-return': 'warn', - 'block-scoped-var': 'warn', - 'complexity': 'warn', - 'consistent-return': 'warn', - 'curly': 'error', - 'dot-notation': 'warn', - 'no-alert': 'warn', - 'no-caller': 'error', - 'no-case-declarations': 'error', - 'no-div-regex': 'error', - 'no-empty-pattern': 'error', - 'no-empty-function': 'warn', - 'no-eq-null': 'error', - 'no-eval': 'error', - 'no-extend-native': 'error', - 'no-extra-bind': 'warn', - 'no-fallthrough': 'error', - 'no-floating-decimal': 'warn', - 'no-global-assign': 'warn', - 'no-implied-eval': 'error', - 'no-invalid-this': 'error', - 'no-iterator': 'error', - 'no-labels': 'error', - 'no-loop-func': 'error', - 'no-multi-spaces': 'warn', - 'no-multi-str': 'error', - 'no-new-func': 'error', - 'no-new-wrappers': 'error', - 'no-octal': 'error', - 'no-octal-escape': 'error', - 'no-proto': 'error', - 'no-redeclare': 'warn', - 'no-return-assign': 'error', - 'no-script-url': 'error', - 'no-self-assign': 'error', - 'no-self-compare': 'error', - 'no-sequences': 'warn', - 'no-throw-literal': 'warn', - 'no-unmodified-loop-condition': 'error', - 'no-unused-expressions': 'error', - 'no-unused-labels': 'error', - 'no-useless-call': 'warn', - 'no-useless-escape': 'warn', - 'no-with': 'error', - 'wrap-iife': ['error', 'any'], - - // === Variables === - 'no-delete-var': 'error', - 'no-undef': 'error', - 'no-undef-init': 'error', - 'no-unused-vars': ['error', { 'caughtErrors': 'none' }], - - // === Stylistic Issues === - 'array-bracket-spacing': 'warn', - 'block-spacing': 'warn', - 'brace-style': ['warn', '1tbs'], - 'camelcase': 'warn', - 'capitalized-comments': ['warn', 'always', { 'ignoreConsecutiveComments': true }], - 'comma-spacing': ['warn', { 'before': false, 'after': true }], - 'comma-style': ['warn', 'last'], - 'computed-property-spacing': 'error', - 'consistent-this': 'off', - 'eol-last': 'off', - 'func-call-spacing': ['warn', 'never'], - 'func-names': 'off', - 'func-style': 'off', - // indent currently not doing well with our wrapping style, so disabled. - 'indent': ['off', 4, { 'SwitchCase': 1 }], - 'key-spacing': ['warn', { 'beforeColon': false, 'afterColon': true, 'mode': minimum }], - 'keyword-spacing': 'warn', - 'linebreak-style': ['error', 'unix'], - 'lines-around-comment': 'off', - 'max-len': ['error', 132], - 'max-lines': 'off', - 'max-depth': 'warn', - 'max-nested-callbacks': ['warn', 5], - 'max-params': 'off', - 'max-statements': 'off', - 'max-statements-per-line': ['warn', { max: 2 }], - 'new-cap': ['warn', { 'properties': false }], - 'new-parens': 'warn', - 'newline-after-var': 'off', - 'newline-before-return': 'off', - 'newline-per-chained-call': 'off', - 'no-array-constructor': 'off', - 'no-bitwise': 'error', - 'no-continue': 'off', - 'no-inline-comments': 'off', - 'no-lonely-if': 'off', - 'no-mixed-operators': 'off', - 'no-mixed-spaces-and-tabs': 'error', - 'no-multiple-empty-lines': 'warn', - 'no-negated-condition': 'off', - 'no-nested-ternary': 'warn', - 'no-new-object': 'off', - 'no-plusplus': 'off', - 'no-tabs': 'error', - 'no-ternary': 'off', - 'no-trailing-spaces': 'error', - 'no-underscore-dangle': 'off', - 'no-unneeded-ternary': 'off', - 'no-whitespace-before-property': 'warn', - 'object-curly-newline': 'off', - 'object-curly-spacing': 'warn', - 'object-property-newline': 'off', - 'one-var': 'off', - 'one-var-declaration-per-line': ['warn', 'initializations'], - 'operator-assignment': 'off', - 'operator-linebreak': 'off', - 'padded-blocks': 'off', - 'quote-props': ['warn', 'as-needed', {'unnecessary': false, 'keywords': true, 'numbers': true}], - 'quotes': 'off', - 'require-jsdoc': 'warn', - 'semi': 'error', - 'semi-spacing': ['warn', {'before': false, 'after': true}], - 'sort-vars': 'off', - 'space-before-blocks': 'warn', - 'space-before-function-paren': ['warn', 'never'], - 'space-in-parens': 'warn', - 'space-infix-ops': 'warn', - 'space-unary-ops': 'warn', - 'spaced-comment': 'warn', - 'unicode-bom': 'error', - 'wrap-regex': 'off', - - // === Promises === - 'promise/always-return': 'warn', - 'promise/no-return-wrap': 'warn', - 'promise/param-names': 'warn', - 'promise/catch-or-return': ['warn', {terminationMethod: ['catch', 'fail']}], - 'promise/no-native': 'warn', - 'promise/no-promise-in-callback': 'warn', - 'promise/no-callback-in-promise': 'warn', - 'promise/avoid-new': 'warn', - - // === Deprecations === - "no-restricted-properties": ['warn', { - 'object': 'M', - 'property': 'str', - 'message': 'Use AMD module "core/str" or M.util.get_string()' - }], - - }, - overrides: [ - { - files: ["**/yui/src/**/*.js"], - // Disable some rules which we can't safely define for YUI rollups. - rules: { - 'no-undef': 'off', - 'no-unused-vars': 'off', - 'no-unused-expressions': 'off' - } - }, - { - files: ["**/amd/src/*.js"], - // Check AMD with some slightly stricter rules. - rules: { - 'no-unused-vars': 'error', - 'no-implicit-globals': 'error' - } - } - ] -} diff --git a/.travis.yml b/.travis.yml index b6a404a..7f7b817 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,62 +1,50 @@ language: php -sudo: required -dist: trusty addons: - hosts: - - moodle.test - firefox: "35.0.1" - postgresql: "9.4" - apt: - packages: - - oracle-java9-installer - - oracle-java9-set-default - - redis-server + postgresql: "9.6" services: - - redis-server + - mysql + - postgresql + - docker cache: directories: - $HOME/.composer/cache - $HOME/.npm +php: + - 7.2 + - 7.4 + env: global: - - IGNORE_PATHS=vendor,source - - IGNORE_NAMES=*.txt,*.md - -# Alternate tests with MySQL and PostgreSQL -matrix: - include: - # PHP 7.0 - - php: 7.0 - env: DB=mysqli MOODLE_BRANCH=MOODLE_35_STABLE - - php: 7.2 - env: DB=pgsql MOODLE_BRANCH=MOODLE_37_STABLE - - php: 7.2 - env: DB=pgsql MOODLE_BRANCH=master + - MOODLE_BRANCH=MOODLE_310_STABLE + matrix: + - DB=pgsql + - DB=mysqli before_install: - phpenv config-rm xdebug.ini + - nvm install 14 # moodle-plugin-ci still uses 8.9, but Moodle core switched to 14 in MDL-66109. + - nvm use 14 - cd ../.. - - nvm install 8.9; - nvm use 8.9; - composer create-project -n --no-dev --prefer-dist moodlerooms/moodle-plugin-ci ci ^2; + - composer create-project -n --no-dev --prefer-dist blackboard-open-source/moodle-plugin-ci ci dev-master - export PATH="$(cd ci/bin; pwd):$(cd ci/vendor/bin; pwd):$PATH" + #- docker run -d -p 127.0.0.1:4444:4444 --net=host -v /dev/shm:/dev/shm selenium/standalone-chrome:3 install: - - moodle-plugin-ci install -vvv - - echo '$CFG->cookiesecure = false;' >> moodle/config.php + - moodle-plugin-ci install script: - - moodle-plugin-ci validate - moodle-plugin-ci phplint - moodle-plugin-ci phpcpd - moodle-plugin-ci phpmd - moodle-plugin-ci codechecker + - moodle-plugin-ci validate - moodle-plugin-ci savepoints - moodle-plugin-ci mustache - - moodle-plugin-ci grunt || false + - moodle-plugin-ci grunt + - moodle-plugin-ci phpdoc - moodle-plugin-ci phpunit - - moodle-plugin-ci behat \ No newline at end of file + #- moodle-plugin-ci behat --profile chrome --dump \ No newline at end of file diff --git a/README.md b/README.md index c420c0e..b9e44e9 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,17 @@ Restrict access to any activity by ip-address. Most activities don't support thi ![MFreak.nl](http://MFreak.nl/logo_small.png) * Author: Luuk Verhoeven, [MFreak.nl](https://MFreak.nl/) -* Min. required: Moodle 3.2.x -* Supports PHP: 7.0 | 7.1 +* Min. required: Moodle 3.5.x +* Supports PHP: 7.2 [![Build Status](https://travis-ci.org/MFreakNL/moodle-availability_ipaddress.svg?branch=master)](https://travis-ci.org/MFreakNL/moodle-availability_ipaddress) +![Moodle35](https://img.shields.io/badge/moodle-3.5-brightgreen.svg) +![Moodle36](https://img.shields.io/badge/moodle-3.6-brightgreen.svg) +![Moodle37](https://img.shields.io/badge/moodle-3.7-brightgreen.svg) +![Moodle38](https://img.shields.io/badge/moodle-3.8-brightgreen.svg) +![Moodle39](https://img.shields.io/badge/moodle-3.9-brightgreen.svg) +![Moodle310](https://img.shields.io/badge/moodle-3.10-brightgreen.svg) +![PHP7.2](https://img.shields.io/badge/PHP-7.2-brightgreen.svg) ![Screenshot](https://moodle.org/pluginfile.php/50/local_plugins/plugin_screenshots/2292/2019-05-15_11-01-39.png) diff --git a/classes/condition.php b/classes/condition.php index c01b02f..42a7f3a 100644 --- a/classes/condition.php +++ b/classes/condition.php @@ -79,7 +79,7 @@ class condition extends \core_availability\condition { * * @return bool True if available */ - public function is_available($not, info $info, $grabthelot, $userid) { + public function is_available($not, info $info, $grabthelot, $userid) : bool { if (empty($this->ipaddresses)) { return true; @@ -118,7 +118,7 @@ class condition extends \core_availability\condition { * this item * @throws \coding_exception */ - public function get_description($full, $not, info $info) { + public function get_description($full, $not, info $info) : string { return get_string('require_condition', 'availability_ipaddress'); } @@ -128,7 +128,7 @@ class condition extends \core_availability\condition { * * @return string Text representation of parameters */ - protected function get_debug_string() { + protected function get_debug_string() : string { return !empty($this->ipaddresses) ? 'ipaddresses ON' : 'ipaddresses OFF'; } @@ -142,7 +142,7 @@ class condition extends \core_availability\condition { * * @return \stdClass Object representing condition */ - public static function get_json($ipaddresses) { + public static function get_json($ipaddresses) : \stdClass { return (object)[ 'type' => 'ipaddress', 'ipaddresses' => $ipaddresses, @@ -156,7 +156,7 @@ class condition extends \core_availability\condition { * * @return bool */ - public static function is_valid_ipaddresses($ipaddresses) { + public static function is_valid_ipaddresses($ipaddresses) : bool { $ipaddresses = implode(',', $ipaddresses); foreach ($ipaddresses as $ipaddress) { if (!filter_var($ipaddress, FILTER_VALIDATE_IP)) { @@ -173,7 +173,7 @@ class condition extends \core_availability\condition { * * @return \stdClass Structure object (ready to be made into JSON format) */ - public function save() { + public function save() : \stdClass { return (object)[ 'type' => 'ipaddress', 'ipaddresses' => $this->ipaddresses, diff --git a/classes/frontend.php b/classes/frontend.php index 3978eb6..923814f 100644 --- a/classes/frontend.php +++ b/classes/frontend.php @@ -41,24 +41,10 @@ class frontend extends \core_availability\frontend { * * @return array */ - protected function get_javascript_strings() { + protected function get_javascript_strings() : array { return [ 'js:ipaddress', 'error_ipaddress', ]; } - - /** - * Decides whether this plugin should be available in a given course. The - * plugin can do this depending on course or system settings. - * - * @param \stdClass $course Course object - * @param \cm_info $cm Course-module currently being edited (null if none) - * @param \section_info $section Section currently being edited (null if none) - * - * @return bool True if there are completion criteria - */ - protected function allow_add($course, \cm_info $cm = null, \section_info $section = null) { - return true; - } } \ No newline at end of file diff --git a/version.php b/version.php index f385f29..e03b1d8 100644 --- a/version.php +++ b/version.php @@ -27,7 +27,7 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'availability_ipaddress'; -$plugin->version = 2020061500; -$plugin->release = '3.9.0'; +$plugin->version = 2020111800; +$plugin->release = '3.10.0'; $plugin->requires = 2016120500; -$plugin->maturity = MATURITY_BETA; \ No newline at end of file +$plugin->maturity = MATURITY_STABLE; \ No newline at end of file diff --git a/yui/build/moodle-availability_ipaddress-form/moodle-availability_ipaddress-form-min.js b/yui/build/moodle-availability_ipaddress-form/moodle-availability_ipaddress-form-min.js index 37ed986..1c39065 100644 --- a/yui/build/moodle-availability_ipaddress-form/moodle-availability_ipaddress-form-min.js +++ b/yui/build/moodle-availability_ipaddress-form/moodle-availability_ipaddress-form-min.js @@ -1 +1 @@ -YUI.add("moodle-availability_ipaddress-form",function(e,t){M.availability_ipaddress=M.availability_ipaddress||{},M.availability_ipaddress.v4="(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(?:\\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])){3}",M.availability_ipaddress.v6="^((?:[a-fA-F\\d]{1,4}:){7}(?:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(:[a-fA-F\\d]{1,4}){1,2}|:)|(?:[a-fA-F\\d]{1,4}:){4}(?:(:[a-fA-F\\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(:[a-fA-F\\d]{1,4}){1,3}|:)|(?:[a-fA-F\\d]{1,4}:){3}(?:(:[a-fA-F\\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(:[a-fA-F\\d]{1,4}){1,4}|:)|(?:[a-fA-F\\d]{1,4}:){2}(?:(:[a-fA-F\\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(:[a-fA-F\\d]{1,4}){1,5}|:)|(?:[a-fA-F\\d]{1,4}:){1}(?:(:[a-fA-F\\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(:[a-fA-F\\d]{1,4}){1,6}|:)|(?::((?::[a-fA-F\\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,7}|:)))(%[0-9a-zA-Z]{1,})?",M.availability_ipaddress.form=e.Object(M.core_availability.plugin),M.availability_ipaddress.form.initInner=function(){"use strict";},M.availability_ipaddress.form.getValue=function(e,t){"use strict";var n=t.one("input[name="+e+"]").get("value");return M.availability_ipaddress.validateIpaddress(n)?n:n},M.availability_ipaddress.form.getNode=function(t){"use strict";var n,r,i,s;return s="ipaddresses"+M.availability_ipaddress.form.instId,M.availability_ipaddress.form.instId+=1,n="",n+='",n+='',r=e.Node.create(''+n+""),t.ipaddresses!==undefined&&r.one("input[name=ipaddresses]").set("value",t.ipaddresses),M.availability_ipaddress.form.addedEvents||(M.availability_ipaddress.form.addedEvents=!0,i=e.one(".availability-field"),i.delegate("valuechange",function(){M.core_availability.form.update()},".availability_ipaddress input[name=ipaddresses]")),r},M.availability_ipaddress.validateIpaddress=function(e){"use strict";e=e.split(",");for(var t in e){if((new RegExp(/^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$/gm)).test(e[t]))continue;if((new RegExp(M.availability_ipaddress.v6)).test(e[t]))continue;if((new RegExp("^(?:".concat(M.availability_ipaddress.v4+"\\/(3[0-2]|[12]?[0-9])|(1\\*)",")|(?:").concat(M.availability_ipaddress.v6+"\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])",")?\\/gm"))).test(e[t]))continue;return!1}return!0},M.availability_ipaddress.form.fillValue=function(e,t){e.ipaddresses=this.getValue("ipaddresses",t)},M.availability_ipaddress.form.fillErrors=function(e,t){"use strict";var n={};this.fillValue(n,t),M.availability_ipaddress.validateIpaddress(n.ipaddresses)===!1&&e.push("availability_ipaddress:error_ipaddress")}},"@VERSION@",{requires:["base","node","event","moodle-core_availability-form"]}); +YUI.add("moodle-availability_ipaddress-form",function(s,d){M.availability_ipaddress=M.availability_ipaddress||{},M.availability_ipaddress.v4="(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(?:\\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])){3}",M.availability_ipaddress.v6="^((?:[a-fA-F\\d]{1,4}:){7}(?:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(:[a-fA-F\\d]{1,4}){1,2}|:)|(?:[a-fA-F\\d]{1,4}:){4}(?:(:[a-fA-F\\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(:[a-fA-F\\d]{1,4}){1,3}|:)|(?:[a-fA-F\\d]{1,4}:){3}(?:(:[a-fA-F\\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(:[a-fA-F\\d]{1,4}){1,4}|:)|(?:[a-fA-F\\d]{1,4}:){2}(?:(:[a-fA-F\\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(:[a-fA-F\\d]{1,4}){1,5}|:)|(?:[a-fA-F\\d]{1,4}:){1}(?:(:[a-fA-F\\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(:[a-fA-F\\d]{1,4}){1,6}|:)|(?::((?::[a-fA-F\\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,7}|:)))(%[0-9a-zA-Z]{1,})?",M.availability_ipaddress.form=s.Object(M.core_availability.plugin),M.availability_ipaddress.form.initInner=function(){},M.availability_ipaddress.form.getValue=function(d,a){"use strict";var i=a.one("input[name="+d+"]").get("value");return M.availability_ipaddress.validateIpaddress(i),i},M.availability_ipaddress.form.getNode=function(d){"use strict";var a,i,e;return e="ipaddresses"+M.availability_ipaddress.form.instId,M.availability_ipaddress.form.instId+=1,a="",a+='",a+='',i=s.Node.create(''+a+""),d.ipaddresses!==undefined&&i.one("input[name=ipaddresses]").set("value",d.ipaddresses),M.availability_ipaddress.form.addedEvents||(M.availability_ipaddress.form.addedEvents=!0,s.one(".availability-field").delegate("valuechange",function(){M.core_availability.form.update()},".availability_ipaddress input[name=ipaddresses]")),i},M.availability_ipaddress.validateIpaddress=function(d){"use strict";for(var a in d=d.split(","))if(!new RegExp(/^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$/gm).test(d[a])&&!new RegExp(M.availability_ipaddress.v6).test(d[a])&&!new RegExp("^(?:".concat(M.availability_ipaddress.v4+"\\/(3[0-2]|[12]?[0-9])|(1\\*)",")|(?:").concat(M.availability_ipaddress.v6+"\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])",")?\\/gm")).test(d[a]))return!1;return!0},M.availability_ipaddress.form.fillValue=function(d,a){d.ipaddresses=this.getValue("ipaddresses",a)},M.availability_ipaddress.form.fillErrors=function(d,a){"use strict";var i={};this.fillValue(i,a),!1===M.availability_ipaddress.validateIpaddress(i.ipaddresses)&&d.push("availability_ipaddress:error_ipaddress")}},"@VERSION@",{requires:["base","node","event","moodle-core_availability-form"]}); \ No newline at end of file