mirror of
https://github.com/catalyst/moodle-auth_outage.git
synced 2026-05-17 05:48:43 +02:00
Compare commits
1 Commits
supports-m
...
wr334284-p
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5589bb77e2 |
10
.github/workflows/ci.yml
vendored
10
.github/workflows/ci.yml
vendored
@@ -1,10 +0,0 @@
|
||||
# .github/workflows/ci.yml
|
||||
name: ci
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
ci:
|
||||
uses: catalyst/catalyst-moodle-workflows/.github/workflows/ci.yml@main
|
||||
with:
|
||||
disable_behat: true
|
||||
21
.github/workflows/moodle-release.yml
vendored
21
.github/workflows/moodle-release.yml
vendored
@@ -1,21 +0,0 @@
|
||||
#
|
||||
# Whenever version.php is changed, add the latest version
|
||||
# to the Moodle Plugins directory at https://moodle.org/plugins
|
||||
#
|
||||
name: Releasing in the Plugins directory
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- MOODLE_39_STABLE
|
||||
paths:
|
||||
- 'version.php'
|
||||
|
||||
jobs:
|
||||
workflow_group_39_plus_release:
|
||||
uses: catalyst/catalyst-moodle-workflows/.github/workflows/group-39-plus-release.yml@main
|
||||
with:
|
||||
plugin_name: auth_outage
|
||||
disable_behat: true
|
||||
secrets:
|
||||
moodle_org_token: ${{ secrets.MOODLE_ORG_TOKEN }}
|
||||
75
.travis.yml
Normal file
75
.travis.yml
Normal file
@@ -0,0 +1,75 @@
|
||||
language: php
|
||||
|
||||
services:
|
||||
- mysql
|
||||
|
||||
addons:
|
||||
firefox: "47.0.1"
|
||||
postgresql: "9.6"
|
||||
apt:
|
||||
packages:
|
||||
- openjdk-8-jre
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.composer/cache
|
||||
- $HOME/.npm
|
||||
|
||||
php:
|
||||
- 7.2
|
||||
|
||||
env:
|
||||
- DB=pgsql MOODLE_BRANCH=MOODLE_36_STABLE NODEJS=8
|
||||
- DB=mysqli MOODLE_BRANCH=MOODLE_36_STABLE NODEJS=8
|
||||
- DB=pgsql MOODLE_BRANCH=MOODLE_37_STABLE
|
||||
- DB=pgsql MOODLE_BRANCH=MOODLE_38_STABLE
|
||||
- DB=pgsql MOODLE_BRANCH=MOODLE_39_STABLE
|
||||
- DB=mysqli MOODLE_BRANCH=MOODLE_39_STABLE
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- php: 7.0
|
||||
env: DB=pgsql MOODLE_BRANCH=MOODLE_35_STABLE
|
||||
- php: 7.0
|
||||
env: DB=mysqli MOODLE_BRANCH=MOODLE_36_STABLE NODEJS=8
|
||||
- php: 7.2
|
||||
env: DB=pgsql MOODLE_BRANCH=MOODLE_37_STABLE
|
||||
- php: 7.2
|
||||
env: DB=pgsql MOODLE_BRANCH=MOODLE_38_STABLE
|
||||
- php: 7.4
|
||||
env: DB=pgsql MOODLE_BRANCH=MOODLE_39_STABLE
|
||||
- php: 7.2
|
||||
env: DB=mysqli MOODLE_BRANCH=MOODLE_39_STABLE
|
||||
|
||||
before_install:
|
||||
- export MOODLE_VERSION=$(echo "$MOODLE_BRANCH" | cut -d'_' -f 2)
|
||||
- phpenv config-rm xdebug.ini
|
||||
- if [ "$NODEJS" = 8 ]; then
|
||||
nvm install 8.9;
|
||||
nvm use 8.9;
|
||||
else
|
||||
nvm install 14.0.0;
|
||||
nvm use 14.0.0;
|
||||
fi
|
||||
- cd ../..
|
||||
- composer selfupdate
|
||||
- composer create-project -n --no-dev --prefer-dist moodlehq/moodle-plugin-ci ci ^3;
|
||||
- export PATH="$(cd ci/bin; pwd):$(cd ci/vendor/bin; pwd):$PATH"
|
||||
|
||||
install:
|
||||
- moodle-plugin-ci install
|
||||
|
||||
script:
|
||||
- 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
|
||||
- moodle-plugin-ci phpunit
|
||||
# Behat tests are failing due to issue:
|
||||
# https://github.com/blackboard-open-source/moodle-plugin-ci/issues/70
|
||||
# Commenting it out until the issue is fixed.
|
||||
# - moodle-plugin-ci behat
|
||||
@@ -59,9 +59,6 @@ Basic Usage
|
||||
|
||||
_Anyone who tries to use Moodle now will receive a maintenance message._
|
||||
|
||||
**Note:** If the outage starts with the option `Auto start maintenance mode` checked, the maint mode won't exit automatically.
|
||||
It will need to be disabled through command line.
|
||||
|
||||
1) Perform the maintenance activities.
|
||||
|
||||
At this point it is safe to perform the required maintenance as no one can use the system, not even admins.
|
||||
|
||||
63
README.md
63
README.md
@@ -1,4 +1,6 @@
|
||||

|
||||
<a href="https://travis-ci.org/catalyst/moodle-auth_outage">
|
||||
<img src="https://travis-ci.org/catalyst/moodle-auth_outage.svg?branch=master">
|
||||
</a>
|
||||
|
||||
# Moodle Outage manager plugin
|
||||
* [Version Support](#version-support)
|
||||
@@ -24,7 +26,10 @@ this plugin creates the concept of graduated outages where at predefined times b
|
||||
an outage and after, different levels of warning and access can be provided to students
|
||||
and testers letting them know what is about to happen and why.
|
||||
|
||||

|
||||
<img alt="Default" src="https://cdn.rawgit.com/catalyst/moodle-auth_outage/master/docs/default.svg" width="520">
|
||||
|
||||
<img alt="Manager" src="https://cdn.rawgit.com/catalyst/moodle-auth_outage/master/docs/outage.svg" width="520">
|
||||
|
||||
|
||||
Moodle Requirements
|
||||
-------------------
|
||||
@@ -37,12 +42,12 @@ need to manually add one extra plugin, please check:
|
||||
|
||||
Branches
|
||||
--------
|
||||
| Moodle version | Totara | Branch | PHP |
|
||||
| ------------------ | --------------- | ---------------- | ---- |
|
||||
| Moodle 3.9+ | Totara 13+ | MOODLE_39_STABLE | 7.2+ |
|
||||
| Moodle 3.3 to 3.8 | Totara 11 to 12 | MOODLE_38_STABLE | 7.1+ |
|
||||
| Moodle 2.7 to 3.2 | | MOODLE_32_STABLE | 5.5+ |
|
||||
| | Totara up to 10 | TOTARA_10 | 5.5+ |
|
||||
| Moodle version | Branch | PHP |
|
||||
| ----------------- | ----------- | ---- |
|
||||
| Moodle 2.7 to 3.2 | MOODLE_32_STABLE | 5.5+ |
|
||||
| Totara up to 10 | TOTARA_10 | 5.5+ |
|
||||
| Moodle 3.3+ | master | 7.0+ |
|
||||
| Totara 11+ | master | 7.0+ |
|
||||
|
||||
Screenshots
|
||||
-----------
|
||||
@@ -100,48 +105,6 @@ This can be found at:
|
||||
|
||||
|
||||
|
||||
Custom Theme Additional SCSS
|
||||
-------------------
|
||||
|
||||
Custom themes generally do not have the same `$navbar-height` variable set to 80px (MOODLE), therefore custom themes will not calculate the change in navbar height with page elements that calculate the navbar total height.
|
||||
|
||||
Add the following SCSS For Moodle 3.11+
|
||||
|
||||
```
|
||||
body.auth_outage {
|
||||
#page-wrapper {
|
||||
#nav-drawer {
|
||||
top: $navbar-height + 100px;
|
||||
height: calc(100% - (#{$navbar-height} + 100px));
|
||||
}
|
||||
#page {
|
||||
margin-top: $navbar-height + 100px;
|
||||
}
|
||||
}
|
||||
[data-region=right-hand-drawer].drawer {
|
||||
top: $navbar-height + 100px;
|
||||
height: calc(100% - (#{$navbar-height} + 100px));
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Totara is a little different with version 13+ and no variables are used to set the `totaraNav` height
|
||||
|
||||
Add the following CSS For Totara 13+
|
||||
|
||||
```
|
||||
.totaraNav {
|
||||
margin-top: 100px;
|
||||
}
|
||||
.local_envbar .totaraNav {
|
||||
margin-top: 50px;
|
||||
}
|
||||
body.auth_outage #page {
|
||||
margin-top: 0;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
How to use
|
||||
----------
|
||||
|
||||
10
auth.php
10
auth.php
@@ -58,6 +58,7 @@ class auth_plugin_outage extends auth_plugin_base {
|
||||
/**
|
||||
* Always returns false (password wrong or user does not exist).
|
||||
*
|
||||
* @inheritdoc PHPMD will not warn about unused parameters if overriding.
|
||||
* @param string $username Not used in this plugin.
|
||||
* @param string $password Not used in this plugin.
|
||||
* @return bool False
|
||||
@@ -65,13 +66,4 @@ class auth_plugin_outage extends auth_plugin_base {
|
||||
public function user_login($username, $password) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the plugin supports the new login flow for MFA.
|
||||
*
|
||||
* @return bool True
|
||||
*/
|
||||
public static function supports_mfa(): bool {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,16 +29,16 @@
|
||||
* @var stdClass $CFG
|
||||
*/
|
||||
|
||||
define('MOODLE_INTERNAL', true);
|
||||
defined('MOODLE_INTERNAL') || die(); // Make sniffer happy.
|
||||
//
|
||||
// This call is required by Moodle, but this script should have been called by config.php anyway.
|
||||
require_once(__DIR__.'/../../config.php');
|
||||
|
||||
// We need the CFG->dataroot, if not set yet this script is called too early in config.php file.
|
||||
if (!isset($CFG->dataroot)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 1) Make sure we replace the configurations for behat as we have not ran 'lib/setup.php' yet.
|
||||
if (!empty($CFG->behat_wwwroot) || !empty($CFG->behat_dataroot) || !empty($CFG->behat_prefix)) {
|
||||
if (!empty($CFG->behat_wwwroot) or !empty($CFG->behat_dataroot) or !empty($CFG->behat_prefix)) {
|
||||
require_once(__DIR__.'/../../lib/behat/lib.php');
|
||||
behat_update_vars_for_process();
|
||||
if (behat_is_test_site()) {
|
||||
@@ -71,7 +71,7 @@ if (!empty($_SERVER['REQUEST_URI'])) {
|
||||
$rooturl = parse_url($CFG->wwwroot);
|
||||
$path = '';
|
||||
if (array_key_exists('path', $rooturl) && !empty($rooturl['path'])) {
|
||||
$path = $rooturl['path'];
|
||||
$path = $rooturl['url'];
|
||||
}
|
||||
$url = $path.'/auth/outage/info.php';
|
||||
$outageinfo = strpos($_SERVER['REQUEST_URI'], $url) === 0 ? true : false;
|
||||
@@ -79,8 +79,7 @@ if (!empty($_SERVER['REQUEST_URI'])) {
|
||||
$allowed = !file_exists($CFG->dataroot.'/climaintenance.php') // Not in maintenance mode.
|
||||
|| (defined('ABORT_AFTER_CONFIG') && ABORT_AFTER_CONFIG) // Only config requested.
|
||||
|| (defined('CLI_SCRIPT') && CLI_SCRIPT) // Allow CLI scripts.
|
||||
|| $outageinfo // Allow outage info requests.
|
||||
|| (defined('NO_AUTH_OUTAGE') && NO_AUTH_OUTAGE); // Allow any page should not be blocked by maintenance mode.
|
||||
|| $outageinfo; // Allow outage info requests.
|
||||
if (!$allowed) {
|
||||
// Call the climaintenance.php which will check for allowed IPs.
|
||||
$CFG->dirroot = dirname(dirname(dirname(__FILE__))); // It is not defined yet but the script below needs it.
|
||||
|
||||
@@ -26,10 +26,7 @@
|
||||
use auth_outage\dml\outagedb;
|
||||
|
||||
define('NO_MOODLE_COOKIES', true);
|
||||
// @codingStandardsIgnoreStart
|
||||
header('Cache-Control: public, max-age=10,s-maxage=10');
|
||||
// @codingStandardsIgnoreEnd
|
||||
define('NO_AUTH_OUTAGE', true);
|
||||
|
||||
require_once(__DIR__.'/../../config.php');
|
||||
|
||||
|
||||
@@ -211,20 +211,21 @@ class outagedb {
|
||||
throw new coding_exception('$time must be null or a positive int.', $time);
|
||||
}
|
||||
|
||||
// Get cached outage, or null.
|
||||
$outageinfo = get_config('moodle', 'auth_outage_active_outage');
|
||||
$select = ':datetime2 <= stoptime AND (finished IS NULL OR :datetime3 <= finished)'; // End condition.
|
||||
$select = "(warntime <= :datetime1 AND (${select}))"; // Full select part.
|
||||
$data = $DB->get_records_select(
|
||||
'auth_outage',
|
||||
$select,
|
||||
['datetime1' => $time, 'datetime2' => $time, 'datetime3' => $time],
|
||||
'starttime ASC, stoptime DESC, title ASC',
|
||||
'*',
|
||||
0,
|
||||
1
|
||||
);
|
||||
|
||||
if (!$outageinfo) {
|
||||
return null;
|
||||
} else {
|
||||
$outagecache = new outage(json_decode($outageinfo));
|
||||
}
|
||||
|
||||
if ($outagecache && $outagecache->warntime <= $time && $outagecache->stoptime >= $time
|
||||
&& (!$outagecache->finished || $outagecache->finished >= $time)) {
|
||||
return $outagecache;
|
||||
}
|
||||
return null;
|
||||
// Not using $DB->get_record_select instead because there is no 'limit' parameter.
|
||||
// Allowing multiple records still raises an internal error.
|
||||
return (count($data) == 0) ? null : new outage(array_shift($data));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -28,6 +28,8 @@ namespace auth_outage\event;
|
||||
use core\event\base;
|
||||
use moodle_url;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* outage_created class.
|
||||
*
|
||||
|
||||
@@ -27,6 +27,8 @@ namespace auth_outage\event;
|
||||
use core\event\base;
|
||||
use moodle_url;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* outage_deleted class.
|
||||
*
|
||||
|
||||
@@ -28,6 +28,8 @@ namespace auth_outage\event;
|
||||
use core\event\base;
|
||||
use moodle_url;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* outage_updated class.
|
||||
*
|
||||
|
||||
@@ -147,7 +147,7 @@ class edit extends moodleform {
|
||||
* @throws coding_exception
|
||||
*/
|
||||
public function set_data($outage) {
|
||||
global $OUTPUT, $CFG;
|
||||
global $OUTPUT;
|
||||
$mform = $this->_form;
|
||||
|
||||
// Cannot change method signature, check type.
|
||||
@@ -162,15 +162,6 @@ class edit extends moodleform {
|
||||
'description' => ['text' => $outage->description, 'format' => '1'],
|
||||
]);
|
||||
|
||||
// If the default_autostart is configured in config, then force autostart to be the default value.
|
||||
if (array_key_exists('auth_outage', $CFG->forced_plugin_settings)
|
||||
&& array_key_exists('default_autostart', $CFG->forced_plugin_settings['auth_outage'])) {
|
||||
$this->_form->setDefaults([
|
||||
'autostart' => $CFG->forced_plugin_settings['auth_outage']['default_autostart']
|
||||
]);
|
||||
$mform->freeze('autostart');
|
||||
}
|
||||
|
||||
if (!empty($outage->id) && $outage->autostart && $outage->starttime < time() && $outage->stoptime > time()) {
|
||||
$warning = $mform->getElement('warningreenablemaintenancemode');
|
||||
$warning->setValue($OUTPUT->notification(get_string('warningreenablemaintenancemode', 'auth_outage'),
|
||||
|
||||
@@ -27,6 +27,8 @@ namespace auth_outage\local\cli;
|
||||
|
||||
use Exception;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* cli_exception class.
|
||||
*
|
||||
|
||||
@@ -29,6 +29,8 @@ use auth_outage\local\outagelib;
|
||||
use coding_exception;
|
||||
use core\session\manager;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* clibase class.
|
||||
*
|
||||
@@ -100,29 +102,38 @@ abstract class clibase {
|
||||
$this->time = $time;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the reference time for creating outages.
|
||||
*/
|
||||
public function get_referencetime()
|
||||
{
|
||||
return $this->time;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Generates all options (parameters) available for the CLI command.
|
||||
* @return mixed[] Options.
|
||||
*/
|
||||
abstract public function generate_options();
|
||||
public abstract function generate_options();
|
||||
|
||||
/**
|
||||
* Generate all short forms for the available options.
|
||||
* @return string[] Short form options.
|
||||
*/
|
||||
abstract public function generate_shortcuts();
|
||||
public abstract function generate_shortcuts();
|
||||
|
||||
/**
|
||||
* Executes the CLI script.
|
||||
*/
|
||||
abstract public function execute();
|
||||
public abstract function execute();
|
||||
|
||||
/**
|
||||
* Change session to admin user.
|
||||
*/
|
||||
protected function become_admin_user() {
|
||||
global $DB;
|
||||
$user = get_admin();
|
||||
$user = $DB->get_record('user', ['id' => 2]);
|
||||
unset($user->description);
|
||||
unset($user->access);
|
||||
unset($user->preference);
|
||||
|
||||
@@ -29,6 +29,8 @@ use auth_outage\dml\outagedb;
|
||||
use auth_outage\local\outage;
|
||||
use coding_exception;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* create class.
|
||||
*
|
||||
|
||||
@@ -28,6 +28,8 @@ namespace auth_outage\local\cli;
|
||||
use auth_outage\dml\outagedb;
|
||||
use auth_outage\local\outage;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* finish class.
|
||||
*
|
||||
|
||||
@@ -28,6 +28,8 @@ namespace auth_outage\local\cli;
|
||||
use auth_outage\dml\outagedb;
|
||||
use auth_outage\local\outage;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* waitforit class.
|
||||
*
|
||||
@@ -129,7 +131,7 @@ class waitforit extends clibase {
|
||||
return;
|
||||
}
|
||||
|
||||
$time = date('Y-m-d H:i:s T', time());
|
||||
$time = strftime('%F %T %Z');
|
||||
printf("[%s] %s\n", $time, $message);
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,8 @@ use coding_exception;
|
||||
use context_system;
|
||||
use moodle_url;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* infopage class.
|
||||
*
|
||||
@@ -46,11 +48,6 @@ class infopage {
|
||||
*/
|
||||
private $outage;
|
||||
|
||||
/**
|
||||
* @var bool|null Defines if the page is generated for a static outage page.
|
||||
*/
|
||||
private $static;
|
||||
|
||||
/**
|
||||
* infopage_controller constructor.
|
||||
* @param array $params Parameters to use or null to get from Moodle API (request).
|
||||
@@ -65,13 +62,11 @@ class infopage {
|
||||
$params = [
|
||||
'id' => optional_param('id', null, PARAM_INT),
|
||||
'outage' => null,
|
||||
'static' => optional_param('static', false, PARAM_BOOL),
|
||||
];
|
||||
} else {
|
||||
$defaults = [
|
||||
'id' => null,
|
||||
'outage' => null,
|
||||
'static' => false,
|
||||
];
|
||||
$params = array_merge($defaults, $params);
|
||||
}
|
||||
@@ -98,6 +93,7 @@ class infopage {
|
||||
/**
|
||||
* Generates and outputs the HTML for the info page.
|
||||
* @uses redirect
|
||||
* @SuppressWarnings(PHPMD.UnusedLocalVariable) $viewbag is used inside 'require'.
|
||||
*/
|
||||
public function output() {
|
||||
global $PAGE, $CFG, $OUTPUT;
|
||||
@@ -106,10 +102,6 @@ class infopage {
|
||||
redirect(new moodle_url('/'));
|
||||
}
|
||||
|
||||
// If it's not static outage page, then check access, then redirect if not allowed.
|
||||
if (!$this->static && !has_capability('auth/outage:viewinfo', context_system::instance())) {
|
||||
redirect(new moodle_url('/'));
|
||||
}
|
||||
$PAGE->set_context(context_system::instance());
|
||||
$PAGE->set_title($this->outage->get_title());
|
||||
$PAGE->set_heading($this->outage->get_title());
|
||||
@@ -152,6 +144,5 @@ class infopage {
|
||||
}
|
||||
|
||||
$this->outage = $params['outage'];
|
||||
$this->static = $params['static'];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,8 @@ use auth_outage\local\outage;
|
||||
use coding_exception;
|
||||
use DOMDocument;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* maintenance_static_page class.
|
||||
*
|
||||
@@ -59,7 +61,7 @@ class maintenance_static_page {
|
||||
$html = '<html></html>';
|
||||
} else {
|
||||
$data = maintenance_static_page_io::file_get_data(
|
||||
$CFG->wwwroot.'/auth/outage/info.php?auth_outage_hide_warning=1&static=1&id='.$outage->id);
|
||||
$CFG->wwwroot.'/auth/outage/info.php?auth_outage_hide_warning=1&id='.$outage->id);
|
||||
$html = $data['contents'];
|
||||
}
|
||||
|
||||
@@ -120,7 +122,6 @@ class maintenance_static_page {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets generator io.
|
||||
* @return maintenance_static_page_io
|
||||
*/
|
||||
public function get_io() {
|
||||
|
||||
@@ -27,12 +27,13 @@ namespace auth_outage\local\controllers;
|
||||
|
||||
use auth_outage\local\outagelib;
|
||||
use coding_exception;
|
||||
use core_php_time_limit;
|
||||
use DOMDocument;
|
||||
use DOMElement;
|
||||
use invalid_state_exception;
|
||||
use moodle_url;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* maintenance_static_page_generator class.
|
||||
*
|
||||
@@ -42,15 +43,6 @@ use moodle_url;
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class maintenance_static_page_generator {
|
||||
/** PATTERN
|
||||
* The pattern should match the attribute values that
|
||||
* go as 'url(xxxxx)', but make sure 'url(data:xxxxx)' is not
|
||||
* rewritten. Must be case insensitive to match 'URL(xxxxx)'.
|
||||
* It should be possible to specify other background attributes as
|
||||
* 'background: color url(xxxxx) no-repeat'.
|
||||
*/
|
||||
protected const PATTERN = '/url\s*\(\s*[\'"]?(?![\'"]?data:)([^\s\'"]+)[\'"]?\s*\)/i';
|
||||
|
||||
/** @var DOMDocument */
|
||||
protected $dom;
|
||||
|
||||
@@ -83,10 +75,6 @@ class maintenance_static_page_generator {
|
||||
$this->io->cleanup();
|
||||
|
||||
if (!is_null($this->dom)) {
|
||||
|
||||
// This can take a while to process using repeated curls.
|
||||
core_php_time_limit::raise();
|
||||
|
||||
$this->io->create_resources_path();
|
||||
|
||||
$this->remove_script_tags();
|
||||
@@ -95,7 +83,6 @@ class maintenance_static_page_generator {
|
||||
$this->update_link_favicon();
|
||||
$this->update_images();
|
||||
$this->remove_configured_css_selectors();
|
||||
$this->update_inline_background_images();
|
||||
|
||||
$html = $this->dom->saveHTML();
|
||||
if (trim($html) == '') {
|
||||
@@ -108,7 +95,6 @@ class maintenance_static_page_generator {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets maintenance_static_page_io.
|
||||
* @return maintenance_static_page_io
|
||||
*/
|
||||
public function get_io() {
|
||||
@@ -163,18 +149,6 @@ class maintenance_static_page_generator {
|
||||
return $matches;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a URL from inline style using regular expressions.
|
||||
*
|
||||
* @param string $style Content of the style attribute
|
||||
* @return array Array containing match
|
||||
*/
|
||||
public function get_url_from_inline_style($style) {
|
||||
preg_match(self::PATTERN, $style, $match);
|
||||
return $match;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks for urls inside filename.
|
||||
*
|
||||
@@ -243,31 +217,6 @@ class maintenance_static_page_generator {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch and fixes all inline background images.
|
||||
*/
|
||||
private function update_inline_background_images() {
|
||||
global $CFG;
|
||||
$xpath = new \DOMXPath($this->dom);
|
||||
$elements = $xpath->query("//*[contains(@style,'background')]");
|
||||
|
||||
foreach ($elements as $element) {
|
||||
$style = $element->getAttribute("style");
|
||||
$matches = $this->get_url_from_inline_style($style);
|
||||
if (isset($matches[1])) {
|
||||
// Allow incomplete URLs in style, assume it is from moodle root.
|
||||
if (maintenance_static_page_io::is_url($matches[1])) {
|
||||
$fullurl = $matches[1];
|
||||
} else {
|
||||
$fullurl = (string) new moodle_url($matches[1]);
|
||||
}
|
||||
$newurl = $this->io->generate_file_url($fullurl);
|
||||
$updated = preg_replace(self::PATTERN, ' url('.$newurl.') ', $style);
|
||||
$element->setAttribute('style', $updated);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove from DOM the CSS selectores defined in the plugin settings.
|
||||
*/
|
||||
@@ -303,7 +252,7 @@ class maintenance_static_page_generator {
|
||||
/**
|
||||
* Fetches all elements based on the given selector.
|
||||
*
|
||||
* @param string $selector element selector
|
||||
* @param $selector
|
||||
*
|
||||
* @return DOMElement[]
|
||||
*/
|
||||
@@ -321,7 +270,7 @@ class maintenance_static_page_generator {
|
||||
/**
|
||||
* Fetch all elements which contains the given class.
|
||||
*
|
||||
* @param string $class element class
|
||||
* @param $class
|
||||
*
|
||||
* @return DOMElement[]
|
||||
*/
|
||||
@@ -337,9 +286,6 @@ class maintenance_static_page_generator {
|
||||
return $matches;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds meta refresh to head element.
|
||||
*/
|
||||
private function add_meta_refresh() {
|
||||
$meta = $this->dom->createElement('meta');
|
||||
$meta->setAttribute('http-equiv', 'refresh');
|
||||
@@ -352,7 +298,6 @@ class maintenance_static_page_generator {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets refresh time.
|
||||
* @return int
|
||||
*/
|
||||
public function get_refresh_time() {
|
||||
@@ -360,7 +305,6 @@ class maintenance_static_page_generator {
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets refresh time.
|
||||
* @param int $refreshtime
|
||||
*/
|
||||
public function set_refresh_time($refreshtime) {
|
||||
|
||||
@@ -31,6 +31,8 @@ use finfo;
|
||||
use invalid_parameter_exception;
|
||||
use moodle_url;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* maintenance_static_page_io class.
|
||||
*
|
||||
@@ -44,7 +46,7 @@ class maintenance_static_page_io {
|
||||
* Checks if the given string starts with "http://" or "https://".
|
||||
* Also checks for "//" at the start of image, which setting_file_url still uses.
|
||||
*
|
||||
* @param string $url url string for check
|
||||
* @param $url
|
||||
* @return bool
|
||||
*/
|
||||
public static function is_url($url) {
|
||||
@@ -80,7 +82,6 @@ class maintenance_static_page_io {
|
||||
protected $preview = false;
|
||||
|
||||
/**
|
||||
* Sets preview
|
||||
* @param boolean $preview
|
||||
*/
|
||||
public function set_preview($preview) {
|
||||
|
||||
@@ -28,6 +28,8 @@ namespace auth_outage\local;
|
||||
use coding_exception;
|
||||
use stdClass;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* outage class.
|
||||
*
|
||||
@@ -297,12 +299,4 @@ class outage {
|
||||
// Adjust bool fields.
|
||||
$this->autostart = ($this->autostart === null) ? null : (bool)$this->autostart;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return json encoded outage.
|
||||
* @return string Json string.
|
||||
*/
|
||||
public function __toString() {
|
||||
return json_encode(get_object_vars($this));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,10 +49,8 @@ require_once(__DIR__.'/../../lib.php');
|
||||
*/
|
||||
class outagelib {
|
||||
|
||||
/** Outage start. */
|
||||
const OUTAGE_START = '<!-- OUTAGESTART -->';
|
||||
|
||||
/** Outage end. */
|
||||
const OUTAGE_END = '<!-- OUTAGEEND -->';
|
||||
|
||||
/**
|
||||
@@ -60,14 +58,7 @@ class outagelib {
|
||||
*/
|
||||
private static $injectcalled = false;
|
||||
|
||||
/**
|
||||
* Fetches page.
|
||||
* @param string $file file to be fetched
|
||||
*/
|
||||
public static function fetch_page($file) {
|
||||
global $CFG;
|
||||
require_once($CFG->libdir . '/filelib.php');
|
||||
|
||||
$curl = new curl();
|
||||
$contents = $curl->get($file);
|
||||
$info = $curl->get_info();
|
||||
@@ -88,7 +79,6 @@ class outagelib {
|
||||
|
||||
/**
|
||||
* Given a time, usually now, when is the next outage window?
|
||||
* @param int $time time for next window
|
||||
*/
|
||||
public static function get_next_window($time = null) {
|
||||
|
||||
@@ -168,12 +158,7 @@ class outagelib {
|
||||
}
|
||||
}
|
||||
|
||||
$config = array_merge(self::get_config_defaults(), $config);
|
||||
// Combine allowed IPs config values together.
|
||||
if (isset($config['allowedips_forced'])) {
|
||||
$config['allowedips'] = trim($config['allowedips'] . "\n" . $config['allowedips_forced']);
|
||||
}
|
||||
return (object)$config;
|
||||
return (object)array_merge(self::get_config_defaults(), $config);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -210,10 +195,6 @@ class outagelib {
|
||||
} else {
|
||||
$ongoingoutage = true;
|
||||
}
|
||||
|
||||
// Set json formatted outage string to cache.
|
||||
set_config('auth_outage_active_outage', (string)$outage);
|
||||
|
||||
maintenance_static_page::create_from_outage($outage)->generate();
|
||||
self::update_climaintenance_code($outage);
|
||||
if (!$ongoingoutage || $reenablemaint || is_null($outage)) {
|
||||
@@ -221,9 +202,6 @@ class outagelib {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if wwwroot accessible.
|
||||
*/
|
||||
private static function check_wwwroot_accessible() {
|
||||
global $CFG;
|
||||
$result = self::fetch_page($CFG->wwwroot);
|
||||
@@ -246,7 +224,6 @@ class outagelib {
|
||||
unset_config('maintenance_message');
|
||||
}
|
||||
set_config('maintenance_later', $outage->starttime);
|
||||
self::maintenance_config_log($outage);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -382,14 +359,16 @@ EOT;
|
||||
* Generates a warning message in case the plugin is not active and configured.
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @internal stdClass $CFG
|
||||
* @internal bootstrap_renderer $OUTPUT
|
||||
*/
|
||||
public static function generate_plugin_configuration_warning() {
|
||||
global $CFG, $OUTPUT, $PAGE;
|
||||
|
||||
$message = [];
|
||||
|
||||
if (trim(self::get_config()->allowedips) != ''
|
||||
&& (!isset($CFG->auth_outage_bootstrap_loaded) || !$CFG->auth_outage_bootstrap_loaded)) {
|
||||
if (trim(self::get_config()->allowedips) != '' && (!isset($CFG->auth_outage_bootstrap_loaded) || !$CFG->auth_outage_bootstrap_loaded)) {
|
||||
$message[] = get_string('configurationwarning', 'auth_outage');
|
||||
}
|
||||
|
||||
@@ -415,18 +394,4 @@ EOT;
|
||||
|
||||
return $message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Logging for maintenance mode configuration.
|
||||
*
|
||||
* @param outage|null $outage Outage or null if no scheduled outage.
|
||||
*/
|
||||
private static function maintenance_config_log(outage $outage) {
|
||||
mtrace(get_string('logformaintmodeconfig', 'auth_outage'));
|
||||
$timezone = ' (Timezone ' . \core_date::get_server_timezone_object()->getName() . ')';
|
||||
mtrace('... updated at ' . date('H:i:s'));
|
||||
$time = date("Y-m-d H:i:s", $outage->starttime);
|
||||
mtrace("... enable maintenance mode at $time $timezone");
|
||||
mtrace(get_string('logformaintmodeconfigcomplete', 'auth_outage'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,10 +48,6 @@ class base_table extends flexible_table {
|
||||
*/
|
||||
private static $autoid = 0;
|
||||
|
||||
/**
|
||||
* Creates start time string.
|
||||
* @param string $starttime start time
|
||||
*/
|
||||
protected static function create_starttime_string($starttime) {
|
||||
$absolute = userdate($starttime, get_string('datetimeformat', 'auth_outage'));
|
||||
$relative = $starttime - time();
|
||||
|
||||
@@ -33,6 +33,8 @@ use html_writer;
|
||||
use moodle_url;
|
||||
use plugin_renderer_base;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* auth_outage_renderer class.
|
||||
*
|
||||
@@ -64,13 +66,6 @@ class renderer extends plugin_renderer_base {
|
||||
* @return string The rendered view code.
|
||||
*/
|
||||
public function render_view($view, $viewbag = []) {
|
||||
|
||||
// Do not render if the request are from some layouts.
|
||||
$excludelayout = ['embedded', 'popup', 'secure', 'maintenance'];
|
||||
if (in_array($this->page->pagelayout, $excludelayout)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
ob_start();
|
||||
$this->output_view($view, $viewbag);
|
||||
$html = ob_get_contents();
|
||||
|
||||
@@ -23,6 +23,10 @@
|
||||
|
||||
namespace auth_outage\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
use core_privacy\local\legacy_polyfill;
|
||||
|
||||
/**
|
||||
* Privacy provider for the authentication manual.
|
||||
*
|
||||
@@ -32,6 +36,8 @@ namespace auth_outage\privacy;
|
||||
class provider implements
|
||||
\core_privacy\local\metadata\null_provider {
|
||||
|
||||
use legacy_polyfill;
|
||||
|
||||
/**
|
||||
* Get the language string identifier with the component's language
|
||||
* file to explain why this plugin stores no data.
|
||||
@@ -41,7 +47,7 @@ class provider implements
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function get_reason() : string {
|
||||
public static function _get_reason() {
|
||||
return 'privacy:no_data_reason';
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,8 @@ use auth_outage\local\controllers\infopage;
|
||||
use auth_outage\local\outagelib;
|
||||
use core\task\scheduled_task;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* update_static_page class.
|
||||
*
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
<?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/>.
|
||||
|
||||
/**
|
||||
* Define capabilities for plugin.
|
||||
*
|
||||
* @package auth_outage
|
||||
* @author Andrew Madden <andrewmadden@catalyst-au.net>
|
||||
* @copyright 2021 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$capabilities = [
|
||||
'auth/outage:viewinfo' => array(
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_SYSTEM,
|
||||
'archetypes' => array(
|
||||
'guest' => CAP_ALLOW,
|
||||
'user' => CAP_ALLOW,
|
||||
)
|
||||
),
|
||||
];
|
||||
@@ -24,11 +24,14 @@
|
||||
*/
|
||||
use auth_outage\local\controllers\maintenance_static_page;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Auth Outage plugin uninstall code.
|
||||
* @return bool result
|
||||
* @throws moodle_exception
|
||||
*/
|
||||
|
||||
function xmldb_auth_outage_uninstall() {
|
||||
global $DB;
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Outage plugin upgrade code
|
||||
|
||||
3
file.php
3
file.php
@@ -57,6 +57,7 @@ header('Accept-Ranges: none');
|
||||
|
||||
/**
|
||||
* Callback used in bootstrap.
|
||||
* @SupressWarnings(PHPMD)
|
||||
*/
|
||||
function auth_outage_bootstrap_callback() {
|
||||
// Not using classes as classloader has not been initialized yet. Keep it minimalist.
|
||||
@@ -73,9 +74,7 @@ function auth_outage_bootstrap_callback() {
|
||||
exit(0);
|
||||
}
|
||||
|
||||
// @codingStandardsIgnoreStart
|
||||
require_once(__DIR__.'/../../config.php');
|
||||
// @codingStandardsIgnoreEnd
|
||||
|
||||
// We should never reach here if config.php and auth/outage/bootstrap.php intercepted it correctly.
|
||||
// If config.php did not execute the callback function we can use the debugging function here.
|
||||
|
||||
2
info.php
2
info.php
@@ -25,9 +25,7 @@
|
||||
|
||||
use auth_outage\local\controllers\infopage;
|
||||
|
||||
// @codingStandardsIgnoreStart
|
||||
require_once(__DIR__.'/../../config.php');
|
||||
// @codingStandardsIgnoreEnd
|
||||
|
||||
$info = new infopage();
|
||||
$info->output();
|
||||
|
||||
@@ -26,8 +26,6 @@
|
||||
$string['auth_outagedescription'] = 'Auxiliary plugin that warns users about a future outage and prevents them from logging in once the outage starts.';
|
||||
$string['autostart'] = 'Auto start maintenance mode.';
|
||||
$string['autostart_help'] = 'If selected, when the outage starts it will automatically turn on Moodle maintenance mode.';
|
||||
$string['builtinallowediplist'] = 'Builtin Allowed IP List';
|
||||
$string['builtinallowediplist_desc'] = 'A second allowed IP list which makes it easier to have some IPs forced in config.php and others editable in the UI';
|
||||
$string['clicreatehelp'] = 'Creates a new outage.';
|
||||
$string['clicreateexamples'] = "Create an outage starting in 10 seconds\n\n> php create.php -s=10";
|
||||
$string['clicreateparamautostart'] = 'must be Y or N, sets if the outage automatically triggers maintenance mode.';
|
||||
@@ -102,13 +100,10 @@ $string['infostart'] = 'start';
|
||||
$string['infostartofwarning'] = 'start of warning';
|
||||
$string['infostaticpage'] = 'static page';
|
||||
$string['infopagestaticgenerated'] = 'This warning was generated on {$a->time}.';
|
||||
$string['ips_combine'] = 'The IPs listed above will be combined with the IPs listed below.';
|
||||
$string['allowedipsempty'] = 'When the allowed IPs list is empty we will not block anyone. You can add your own IP address (<i>{$a->ip}</i>) and block all other IPs.';
|
||||
$string['allowedipshasmyip'] = 'Your IP (<i>{$a->ip}</i>) is in the list and you will not be blocked out during an Outage.';
|
||||
$string['allowedipshasntmyip'] = 'Your IP (<i>{$a->ip}</i>) is not in the list and you will be blocked out during an outage.';
|
||||
$string['allowedipsnoconfig'] = 'Your config.php does not have the extra setup to allow blocking via IP.<br />Please refer to our <a href="https://github.com/catalyst/moodle-auth_outage#installation" target="_blank">README.md</a> file for more information.';
|
||||
$string['logformaintmodeconfig'] = 'Update maintenance mode configuration.';
|
||||
$string['logformaintmodeconfigcomplete'] = 'Updating maintenance mode configuration complete.';
|
||||
$string['menusettings'] = 'Settings';
|
||||
$string['menumanage'] = 'Manage outages';
|
||||
$string['messageoutagebackonline'] = 'We are back online!';
|
||||
@@ -117,7 +112,6 @@ $string['messageoutageongoing'] = 'Back online at {$a->stop}.';
|
||||
$string['messageoutagewarning'] = 'Shutting down in {{countdown}}';
|
||||
$string['na'] = 'n/a';
|
||||
$string['notfound'] = 'No outages found.';
|
||||
$string['outage:viewinfo'] = 'View outage info';
|
||||
$string['outageedit'] = 'Edit outage';
|
||||
$string['outageeditcrumb'] = 'Edit';
|
||||
$string['outageclone'] = 'Clone outage';
|
||||
|
||||
6
lib.php
6
lib.php
@@ -25,6 +25,8 @@
|
||||
|
||||
use auth_outage\local\outagelib;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
/**
|
||||
* Used for adminlib::set_updatedcallback which requires a string that resolves to a function.
|
||||
*
|
||||
@@ -39,7 +41,7 @@ function auth_outage_outagelib_prepare_next_outage() {
|
||||
*
|
||||
* To keep it minimalist it was not added to the outagelib.php class.
|
||||
*
|
||||
* @param string $file Filename to fetch from sitedata
|
||||
* @param $file string Filename to fetch from sitedata
|
||||
* @return string|null Full path to the sitedata file or null if file is not valid.
|
||||
*/
|
||||
function auth_outage_get_climaintenance_resource_file($file) {
|
||||
@@ -84,4 +86,4 @@ function auth_outage_get_fontawesome_icon_map() {
|
||||
function auth_outage_before_standard_top_of_body_html() {
|
||||
// Get code to inject.
|
||||
return outagelib::get_inject_code();
|
||||
}
|
||||
}
|
||||
@@ -28,9 +28,7 @@
|
||||
use auth_outage\dml\outagedb;
|
||||
use auth_outage\local\controllers\maintenance_static_page;
|
||||
|
||||
// @codingStandardsIgnoreStart
|
||||
require_once(__DIR__.'/../../config.php');
|
||||
// @codingStandardsIgnoreEnd
|
||||
$id = optional_param('id', null, PARAM_INT);
|
||||
$outage = is_null($id) ? outagedb::get_next_starting() : outagedb::get_by_id($id);
|
||||
if (is_null($outage)) {
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* auth_outage_renderer class.
|
||||
*
|
||||
|
||||
38
settings.php
38
settings.php
@@ -26,30 +26,25 @@
|
||||
* @var admin_settingpage $settings
|
||||
* @var bootstrap_renderer $OUTPUT
|
||||
* @var admin_root $ADMIN
|
||||
* @var moodle_page $PAGE
|
||||
*/
|
||||
use auth_outage\local\outagelib;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
if ($hassiteconfig) {
|
||||
if ($hassiteconfig && is_enabled_auth('outage')) {
|
||||
$defaults = outagelib::get_config_defaults();
|
||||
$settings->visiblename = get_string('menusettings', 'auth_outage');
|
||||
$description = outagelib::generate_plugin_configuration_warning();
|
||||
|
||||
$settings->add(new admin_setting_heading(
|
||||
'defaults',
|
||||
get_string('settingssectiondefaults', 'auth_outage'),
|
||||
get_string('settingssectiondefaultsdescription', 'auth_outage') . $description
|
||||
));
|
||||
|
||||
get_string('settingssectiondefaultsdescription', 'auth_outage')));
|
||||
$settings->add(new admin_setting_configcheckbox(
|
||||
'auth_outage/default_autostart',
|
||||
get_string('defaultoutageautostart', 'auth_outage'),
|
||||
get_string('defaultoutageautostartdescription', 'auth_outage'),
|
||||
$defaults['default_autostart']
|
||||
));
|
||||
|
||||
$settings->add(new admin_setting_configduration(
|
||||
'auth_outage/default_warning_duration',
|
||||
get_string('defaultwarningduration', 'auth_outage'),
|
||||
@@ -101,23 +96,20 @@ if ($hassiteconfig) {
|
||||
|
||||
// Create 'Allowed IPs' settings.
|
||||
$allowedips = outagelib::get_config()->allowedips;
|
||||
$description = outagelib::generate_plugin_configuration_warning();
|
||||
if (trim($allowedips) == '') {
|
||||
$message = 'allowedipsempty';
|
||||
$type = 'notifymessage';
|
||||
} else if (remoteip_in_list($allowedips)) {
|
||||
$message = 'allowedipshasmyip';
|
||||
$type = 'notifysuccess';
|
||||
} else {
|
||||
if (remoteip_in_list($allowedips)) {
|
||||
$message = 'allowedipshasmyip';
|
||||
$type = 'notifysuccess';
|
||||
} else {
|
||||
$message = 'allowedipshasntmyip';
|
||||
$type = 'notifyerror';
|
||||
}
|
||||
$message = 'allowedipshasntmyip';
|
||||
$type = 'notifyerror';
|
||||
};
|
||||
$description = $OUTPUT->notification(get_string($message, 'auth_outage', ['ip' => getremoteaddr()]), $type);
|
||||
|
||||
$description .= '<p>' . get_string('ipblockersyntax', 'admin') . '</p>';
|
||||
$description .= '<p>' . get_string('ips_combine', 'auth_outage') . '</p>';
|
||||
$description .= $OUTPUT->notification(get_string($message, 'auth_outage', ['ip' => getremoteaddr()]), $type);
|
||||
|
||||
$description .= '<p>'.get_string('ipblockersyntax', 'admin').'</p>';
|
||||
$iplist = new admin_setting_configiplist(
|
||||
'auth_outage/allowedips',
|
||||
get_string('allowediplist', 'admin'),
|
||||
@@ -127,14 +119,6 @@ if ($hassiteconfig) {
|
||||
$iplist->set_updatedcallback('auth_outage_outagelib_prepare_next_outage');
|
||||
$settings->add($iplist);
|
||||
|
||||
$iplist = new admin_setting_configiplist(
|
||||
'auth_outage/allowedips_forced',
|
||||
get_string('builtinallowediplist', 'auth_outage'),
|
||||
get_string('builtinallowediplist_desc', 'auth_outage'),
|
||||
''
|
||||
);
|
||||
$settings->add($iplist);
|
||||
|
||||
// Create 'Static Page - Elements to Remove' settings.
|
||||
$toremove = new admin_setting_configtextarea(
|
||||
'auth_outage/remove_selectors',
|
||||
@@ -156,7 +140,7 @@ if ($hassiteconfig) {
|
||||
new admin_externalpage(
|
||||
'auth_outage_manage',
|
||||
get_string('menumanage', 'auth_outage'),
|
||||
new moodle_url($CFG->wwwroot . '/auth/outage/manage.php')
|
||||
new moodle_url($CFG->wwwroot.'/auth/outage/manage.php')
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@ require_once(__DIR__.'/../../../../lib/behat/behat_base.php');
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @SuppressWarnings(public) Allow as many methods as needed.
|
||||
*/
|
||||
class behat_auth_outage extends behat_base {
|
||||
/**
|
||||
@@ -154,7 +155,6 @@ class behat_auth_outage extends behat_base {
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if an specific action is not visible.
|
||||
* @Then /^I should see an empty settings text area "([^"]*)"$/
|
||||
* @param string $name
|
||||
*/
|
||||
@@ -163,7 +163,6 @@ class behat_auth_outage extends behat_base {
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if an specific action is not visible.
|
||||
* @When /^I go to the "Outage Settings" page$/
|
||||
*/
|
||||
public function i_go_to_the_outage_settings_page() {
|
||||
@@ -322,7 +321,7 @@ class behat_auth_outage extends behat_base {
|
||||
}
|
||||
if ($seconds >= 0) {
|
||||
$seconds++; // Give one extra second for things to happen.
|
||||
$this->getSession()->wait($seconds * 1000);
|
||||
$this->getSession()->wait($seconds * 1000, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
@auth @auth_outage @javascript @_file_upload @_switch_iframe
|
||||
Feature: Disable warning bar in embedded layout
|
||||
In order alert users about an outage
|
||||
As any user
|
||||
I need to view the warning bar, but not in embedded layout
|
||||
|
||||
Background:
|
||||
Given the authentication plugin "outage" is enabled
|
||||
And the following "courses" exist:
|
||||
| fullname | shortname |
|
||||
| Course 1 | C1 |
|
||||
And the following "activities" exist:
|
||||
| activity | name | intro | introformat | course | content | contentformat | idnumber |
|
||||
| page | PageName1 | PageDesc1 | 1 | C1 | H5Ptest | 1 | 1 |
|
||||
And the "displayh5p" filter is "on"
|
||||
|
||||
Scenario: Disable warning bar in embedded h5p in book activity
|
||||
Given I log in as "admin"
|
||||
And I am on "Course 1" course homepage with editing mode on
|
||||
And I add a "File" to section "1"
|
||||
And I set the following fields to these values:
|
||||
| Name | ipsumFile |
|
||||
And I upload "h5p/tests/fixtures/ipsums.h5p" file to "Select files" filemanager
|
||||
And I press "Save and return to course"
|
||||
And I follow "PageName1"
|
||||
And I navigate to "Edit settings" in current page administration
|
||||
And I click on "Insert H5P" "button" in the "#fitem_id_page" "css_element"
|
||||
And I click on "Browse repositories..." "button" in the "Insert H5P" "dialogue"
|
||||
And I click on "Server files" "link" in the ".fp-repo-area" "css_element"
|
||||
And I click on "ipsumFile (File)" "link"
|
||||
And I click on "ipsums.h5p" "link"
|
||||
And I click on "Select this file" "button"
|
||||
And I click on "Insert H5P" "button" in the "Insert H5P" "dialogue"
|
||||
And I wait until the page is ready
|
||||
And I click on "Save and display" "button"
|
||||
When there is the following outage:
|
||||
| warnbefore | startsin |
|
||||
| 0 | 0 |
|
||||
And I reload the page
|
||||
Then I should see "Back online at" in the warning bar
|
||||
And I should not see "Lorum ipsum"
|
||||
# Switch to iframe created by filter
|
||||
And I switch to "h5p-iframe" class iframe
|
||||
And I should not see the warning bar
|
||||
# Switch to iframe created by embed.php page
|
||||
And I switch to "h5p-iframe" class iframe
|
||||
And I should see "Lorum ipsum"
|
||||
And I should not see the warning bar
|
||||
@@ -1,7 +0,0 @@
|
||||
a {
|
||||
font-size: 200%;
|
||||
}
|
||||
|
||||
div {
|
||||
background-image: url('/moodle/auth/outage/tests/local/controllers/fixtures/catalyst.png');
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
a {
|
||||
font-size: 200%;
|
||||
}
|
||||
|
||||
div {
|
||||
background-image: url(/moodle/auth/outage/tests/local/controllers/fixtures/catalyst.png);
|
||||
}
|
||||
@@ -1,168 +0,0 @@
|
||||
<?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/>.
|
||||
|
||||
/**
|
||||
* Tests performed on infopage controller class and update_static_page task class.
|
||||
*
|
||||
* @package auth_outage
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace auth_outage\local\controllers;
|
||||
|
||||
use auth_outage\local\outage;
|
||||
use context_system;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
require_once(__DIR__.'/../../base_testcase.php');
|
||||
|
||||
/**
|
||||
* Tests performed on infopage controller class and update_static_page task class.
|
||||
*
|
||||
* @package auth_outage
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @covers \auth_outage\local\controllers\infopage
|
||||
*/
|
||||
class infopage_test extends \auth_outage\base_testcase {
|
||||
/**
|
||||
* Tests the constructor.
|
||||
*/
|
||||
public function test_constructor() {
|
||||
$this->assertTrue(has_capability('auth/outage:viewinfo', context_system::instance()));
|
||||
|
||||
new infopage();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the constructor with given parameters.
|
||||
*/
|
||||
public function test_constructor_withparams() {
|
||||
$this->assertTrue(has_capability('auth/outage:viewinfo', context_system::instance()));
|
||||
|
||||
$_GET = ['id' => 1, 'static' => 'true'];
|
||||
new infopage();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the constructor with different id and outage id.
|
||||
*/
|
||||
public function test_constructor_idmismatch() {
|
||||
$this->assertTrue(has_capability('auth/outage:viewinfo', context_system::instance()));
|
||||
|
||||
$outage = $this->get_dummy_outage();
|
||||
$this->set_expected_exception('coding_exception', 'Provided id and outage->id do not match. (2/1)');
|
||||
new infopage(['id' => 2, 'outage' => $outage]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the constructor with an invalid outage.
|
||||
*/
|
||||
public function test_constructor_invalidoutage() {
|
||||
$this->assertTrue(has_capability('auth/outage:viewinfo', context_system::instance()));
|
||||
|
||||
$this->set_expected_exception('coding_exception', 'Provided outage is not a valid outage object. (My outage)');
|
||||
new infopage(['outage' => 'My outage']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the output of the info page.
|
||||
*/
|
||||
public function test_output() {
|
||||
$this->assertTrue(has_capability('auth/outage:viewinfo', context_system::instance()));
|
||||
|
||||
$outage = $this->get_dummy_outage();
|
||||
|
||||
$info = new infopage(['outage' => $outage]);
|
||||
$output = $info->get_output();
|
||||
self::assertStringContainsString('auth_outage_info', $output);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the output of the info page.
|
||||
*/
|
||||
public function test_output_without_permission() {
|
||||
$this->revoke_info_page_permissions();
|
||||
$this->assertFalse(has_capability('auth/outage:viewinfo', context_system::instance()));
|
||||
|
||||
$outage = $this->get_dummy_outage();
|
||||
$info = new infopage(['outage' => $outage]);
|
||||
|
||||
$this->set_expected_exception('moodle_exception', 'Unsupported redirect detected, script execution terminated');
|
||||
$output = $info->get_output();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the output of the info page.
|
||||
*/
|
||||
public function test_output_without_permission_but_static() {
|
||||
$this->revoke_info_page_permissions();
|
||||
$this->assertFalse(has_capability('auth/outage:viewinfo', context_system::instance()));
|
||||
|
||||
$outage = $this->get_dummy_outage();
|
||||
$info = new infopage(['outage' => $outage, 'static' => true]);
|
||||
|
||||
$output = $info->get_output();
|
||||
self::assertStringContainsString('auth_outage_info', $output);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the output of the info page.
|
||||
*/
|
||||
public function test_output_with_forcelogin() {
|
||||
$this->assertTrue(has_capability('auth/outage:viewinfo', context_system::instance()));
|
||||
|
||||
set_config('forcelogin', true);
|
||||
|
||||
$outage = $this->get_dummy_outage();
|
||||
$info = new infopage(['outage' => $outage]);
|
||||
|
||||
$this->set_expected_exception('moodle_exception', 'Unsupported redirect detected, script execution terminated');
|
||||
$info->get_output();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the output of the info page.
|
||||
*/
|
||||
public function test_output_with_forcelogin_if_static() {
|
||||
$this->assertTrue(has_capability('auth/outage:viewinfo', context_system::instance()));
|
||||
|
||||
set_config('forcelogin', true);
|
||||
|
||||
$outage = $this->get_dummy_outage();
|
||||
|
||||
$info = new infopage(['outage' => $outage, 'static' => true]);
|
||||
|
||||
$output = $info->get_output();
|
||||
self::assertStringContainsString('auth_outage_info', $output);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the constructor enables SVG support.
|
||||
*/
|
||||
public function test_svgicons_is_true() {
|
||||
global $CFG;
|
||||
|
||||
$this->assertTrue(has_capability('auth/outage:viewinfo', context_system::instance()));
|
||||
|
||||
$CFG->svgicons = false;
|
||||
new infopage();
|
||||
self::assertTrue($CFG->svgicons);
|
||||
}
|
||||
}
|
||||
@@ -31,20 +31,20 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace auth_outage;
|
||||
|
||||
use auth_outage\dml\outagedb;
|
||||
use auth_outage\local\outage;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* base_testcase class.
|
||||
* auth_outage_base_testcase class.
|
||||
*
|
||||
* @package auth_outage
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @SuppressWarnings(public) Allow as many methods as needed.
|
||||
*/
|
||||
abstract class base_testcase extends \advanced_testcase {
|
||||
abstract class auth_outage_base_testcase extends advanced_testcase {
|
||||
/**
|
||||
* Checks PHPUnit version and calls the functions accordingly.
|
||||
* @param string $exception Expected exception class.
|
||||
@@ -66,51 +66,14 @@ abstract class base_testcase extends \advanced_testcase {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Revoke permission to see info page.
|
||||
*/
|
||||
protected function revoke_info_page_permissions() {
|
||||
global $DB;
|
||||
|
||||
$guestrole = $DB->get_record('role', array('shortname' => 'guest'));
|
||||
role_change_permission($guestrole->id, \context_system::instance(), 'auth/outage:viewinfo', CAP_PREVENT);
|
||||
|
||||
$this->setGuestUser();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an outage object.
|
||||
*
|
||||
* @return \auth_outage\local\outage
|
||||
*/
|
||||
protected function get_dummy_outage() {
|
||||
$now = time();
|
||||
|
||||
return new outage([
|
||||
'id' => 1,
|
||||
'autostart' => false,
|
||||
'warntime' => $now - 100,
|
||||
'starttime' => $now + 100,
|
||||
'stoptime' => $now + 200,
|
||||
'title' => 'Title',
|
||||
'description' => 'Description',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup testcase.
|
||||
*/
|
||||
public function setUp(): void {
|
||||
public function setUp() {
|
||||
global $CFG;
|
||||
|
||||
parent::setUp();
|
||||
$this->resetAfterTest(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tear down to restore the original DB reference.
|
||||
*/
|
||||
public function tearDown(): void {
|
||||
public function tearDown() {
|
||||
global $DB;
|
||||
|
||||
foreach (outagedb::get_all() as $i => $outage) {
|
||||
@@ -23,10 +23,11 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace auth_outage\calendar;
|
||||
|
||||
use auth_outage\calendar\calendar;
|
||||
use auth_outage\local\outage;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* calendar_test test class.
|
||||
*
|
||||
@@ -37,9 +38,8 @@ use auth_outage\local\outage;
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @covers \auth_outage\calendar\calendar
|
||||
*/
|
||||
class calendar_test extends \advanced_testcase {
|
||||
class calendar_test extends advanced_testcase {
|
||||
/**
|
||||
* @var outage|null The calendar entry owner.
|
||||
*/
|
||||
@@ -134,8 +134,8 @@ class calendar_test extends \advanced_testcase {
|
||||
]);
|
||||
|
||||
calendar::update($outage);
|
||||
self::assertCount(1, $this->getDebuggingMessages());
|
||||
$this->resetDebugging();
|
||||
self::assertCount(1, phpunit_util::get_debugging_messages());
|
||||
phpunit_util::reset_debugging();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -146,8 +146,8 @@ class calendar_test extends \advanced_testcase {
|
||||
self::setAdminUser();
|
||||
|
||||
calendar::delete(1);
|
||||
self::assertCount(1, $this->getDebuggingMessages());
|
||||
$this->resetDebugging();
|
||||
self::assertCount(1, phpunit_util::get_debugging_messages());
|
||||
phpunit_util::reset_debugging();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -23,8 +23,7 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace auth_outage\dml;
|
||||
|
||||
use auth_outage\dml\outagedb;
|
||||
use auth_outage\local\outage;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
@@ -37,9 +36,9 @@ require_once(__DIR__.'/../base_testcase.php');
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @covers \auth_outage\dml\outagedb
|
||||
* @SuppressWarnings(public) Allow as many methods as needed.
|
||||
*/
|
||||
class outagedb_test extends \auth_outage\base_testcase {
|
||||
class outagedb_test extends auth_outage_base_testcase {
|
||||
/**
|
||||
* Creates an array of ids in from the given outages array.
|
||||
* @param outage[] $outages An array of outages.
|
||||
@@ -80,7 +79,7 @@ class outagedb_test extends \auth_outage\base_testcase {
|
||||
/**
|
||||
* Ensure DB tests run as admin.
|
||||
*/
|
||||
public function setUp(): void {
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
$this->setAdminUser();
|
||||
}
|
||||
@@ -96,6 +95,8 @@ class outagedb_test extends \auth_outage\base_testcase {
|
||||
$outage = $this->createoutage(2);
|
||||
$outage->id = $id;
|
||||
outagedb::save($outage);
|
||||
// Ensure an id was given.
|
||||
self::assertNotEquals(0, $id);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -246,15 +247,6 @@ class outagedb_test extends \auth_outage\base_testcase {
|
||||
$activeid = self::saveoutage(false, $now, -2, 1, 2, 'An outage in warning period.');
|
||||
self::assertSame($activeid, outagedb::get_active($now)->id, 'Wrong active outage picked.');
|
||||
|
||||
$activeid = self::saveoutage(false, $now, -2, 0, 2, 'An outage starts now.');
|
||||
self::assertSame($activeid, outagedb::get_active($now)->id, 'Wrong active outage picked.');
|
||||
|
||||
self::saveoutage(false, $now, -2, 0, -1, 'Invalid outage.');
|
||||
self::assertSame($activeid, outagedb::get_active($now)->id, 'Wrong active outage picked.');
|
||||
|
||||
self::saveoutage(false, $now, -2, 0, 0, 'Invalid outage.');
|
||||
self::assertSame($activeid, outagedb::get_active($now)->id, 'Wrong active outage picked.');
|
||||
|
||||
self::saveoutage(false, $now, -1, 2, 3,
|
||||
'Another outage in warning period, but ignored as it starts after the previous one.');
|
||||
self::assertSame($activeid, outagedb::get_active($now)->id, 'Wrong active outage picked.');
|
||||
@@ -438,8 +430,8 @@ class outagedb_test extends \auth_outage\base_testcase {
|
||||
public function test_finish_now_notfound() {
|
||||
$this->resetAfterTest(true);
|
||||
outagedb::finish(1);
|
||||
self::assertCount(1, $this->getDebuggingMessages());
|
||||
$this->resetDebugging();
|
||||
self::assertCount(1, phpunit_util::get_debugging_messages());
|
||||
phpunit_util::reset_debugging();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -460,8 +452,8 @@ class outagedb_test extends \auth_outage\base_testcase {
|
||||
self::assertTrue(!$outage->is_ongoing($time));
|
||||
|
||||
outagedb::finish($id, $time);
|
||||
self::assertCount(1, $this->getDebuggingMessages());
|
||||
$this->resetDebugging();
|
||||
self::assertCount(1, phpunit_util::get_debugging_messages());
|
||||
phpunit_util::reset_debugging();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -23,10 +23,11 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace auth_outage\dml;
|
||||
|
||||
use auth_outage\dml\outagedb;
|
||||
use auth_outage\local\outage;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* events_test tests class.
|
||||
*
|
||||
@@ -37,9 +38,8 @@ use auth_outage\local\outage;
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @covers \auth_outage\dml\outagedb
|
||||
*/
|
||||
class events_test extends \advanced_testcase {
|
||||
class events_test extends advanced_testcase {
|
||||
/**
|
||||
* @var outage|null Outage used in the tests.
|
||||
*/
|
||||
@@ -23,12 +23,13 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace auth_outage\form\outage;
|
||||
|
||||
use auth_outage\form\outage\delete;
|
||||
use auth_outage\form\outage\edit;
|
||||
use auth_outage\form\outage\finish;
|
||||
use auth_outage\local\outage;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
require_once(__DIR__.'/../../base_testcase.php');
|
||||
require_once(__DIR__.'/../base_testcase.php');
|
||||
|
||||
/**
|
||||
* forms_test test class.
|
||||
@@ -37,21 +38,22 @@ require_once(__DIR__.'/../../base_testcase.php');
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @covers \auth_outage\form\outage\edit
|
||||
*/
|
||||
class forms_test extends \auth_outage\base_testcase {
|
||||
class forms_test extends auth_outage_base_testcase {
|
||||
/**
|
||||
* Create a delete form.
|
||||
*/
|
||||
public function test_delete() {
|
||||
new delete();
|
||||
$form = new delete();
|
||||
self::assertNotNull($form);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a finish form.
|
||||
*/
|
||||
public function test_finish() {
|
||||
new finish();
|
||||
$form = new finish();
|
||||
self::assertNotNull($form);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -146,8 +148,8 @@ class forms_test extends \auth_outage\base_testcase {
|
||||
$_POST['description'] = ['text' => 'The <b>description</b>.', 'format' => '2'];
|
||||
$edit = new edit();
|
||||
self::assertNull($edit->get_data());
|
||||
self::assertCount(1, $this->getDebuggingMessages());
|
||||
$this->resetDebugging();
|
||||
self::assertCount(1, phpunit_util::get_debugging_messages());
|
||||
phpunit_util::reset_debugging();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -164,6 +166,7 @@ class forms_test extends \auth_outage\base_testcase {
|
||||
]);
|
||||
$edit = new edit();
|
||||
$edit->set_data($outage);
|
||||
self::assertTrue(true, "set_data did not return any error");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -198,10 +201,6 @@ class forms_test extends \auth_outage\base_testcase {
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Skip tests for moodle below 30.
|
||||
* @param string $reason reason to be filled
|
||||
*/
|
||||
private function skip_because_moodle_is_below_30($reason = '') {
|
||||
global $CFG;
|
||||
|
||||
@@ -25,12 +25,10 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace auth_outage\dml;
|
||||
|
||||
use auth_outage\local\outage;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
require_once(__DIR__.'/../base_testcase.php');
|
||||
require_once(__DIR__.'/base_testcase.php');
|
||||
|
||||
/**
|
||||
* installation_test test class.
|
||||
@@ -41,9 +39,9 @@ require_once(__DIR__.'/../base_testcase.php');
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @covers \auth_outage\dml\outagedb
|
||||
* @SuppressWarnings(public) Allow as many methods as needed.
|
||||
*/
|
||||
class installation_test extends \auth_outage\base_testcase {
|
||||
class installation_test extends auth_outage_base_testcase {
|
||||
/**
|
||||
* Checks if plugin cleans up data after uninstall.
|
||||
*
|
||||
@@ -66,19 +64,15 @@ class installation_test extends \auth_outage\base_testcase {
|
||||
'title' => 'Title',
|
||||
'description' => 'Description',
|
||||
]);
|
||||
ob_start();
|
||||
outagedb::save($outage);
|
||||
$text = trim(ob_get_contents());
|
||||
ob_end_clean();
|
||||
self::assertStringContainsString('Update maintenance mode configuration', $text);
|
||||
\auth_outage\dml\outagedb::save($outage);
|
||||
self::assertSame(1, $DB->count_records_select('event', "eventtype = 'auth_outage'", null));
|
||||
|
||||
// Uninstall plugin.
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
$progress = new \progress_trace_buffer(new \text_progress_trace(), false);
|
||||
\core_plugin_manager::instance()->uninstall_plugin('auth_outage', $progress);
|
||||
$progress = new progress_trace_buffer(new text_progress_trace(), false);
|
||||
core_plugin_manager::instance()->uninstall_plugin('auth_outage', $progress);
|
||||
$progress->finished();
|
||||
self::assertStringContainsString('++ Success ++', $progress->get_buffer());
|
||||
self::assertContains('++ Success ++', $progress->get_buffer());
|
||||
|
||||
// Check ...
|
||||
self::assertSame(0, $DB->count_records_select('event', "eventtype = 'auth_outage'", null),
|
||||
@@ -23,11 +23,9 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace auth_outage;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
require_once(__DIR__.'/base_testcase.php');
|
||||
require_once(__DIR__.'/../lib.php');
|
||||
require_once(__DIR__.'/../../lib.php');
|
||||
|
||||
/**
|
||||
* tests for lib.php
|
||||
@@ -36,12 +34,9 @@ require_once(__DIR__.'/../lib.php');
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2017 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @covers ::auth_outage_get_climaintenance_resource_file
|
||||
* @SuppressWarnings(public) Allow as many methods as needed.
|
||||
*/
|
||||
class lib_test extends base_testcase {
|
||||
/**
|
||||
* Test this plugin gets climaintenance resource file.
|
||||
*/
|
||||
class lib_test extends auth_outage_base_testcase {
|
||||
public function test_auth_outage_get_climaintenance_resource_file_resolves_a_file() {
|
||||
global $CFG;
|
||||
$dir = $CFG->dataroot.'/auth_outage/climaintenance';
|
||||
@@ -93,9 +88,6 @@ class lib_test extends base_testcase {
|
||||
self::assertSame($realfile, $actual);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test this plugin gets climaintenance resource file and prevents path traversal attack.
|
||||
*/
|
||||
public function test_auth_outage_get_climaintenance_resource_file_prevent_path_traversal() {
|
||||
global $CFG;
|
||||
|
||||
@@ -23,7 +23,8 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace auth_outage\local\cli;
|
||||
use auth_outage\local\cli\cli_exception;
|
||||
use auth_outage\local\cli\create;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
require_once(__DIR__.'/cli_testcase.php');
|
||||
@@ -35,9 +36,9 @@ require_once(__DIR__.'/cli_testcase.php');
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @covers \auth_outage\local\cli\create
|
||||
* @SuppressWarnings(public) Allow as many methods as needed.
|
||||
*/
|
||||
class cli_test extends cli_testcase {
|
||||
class cli_test extends auth_outage_cli_testcase {
|
||||
/**
|
||||
* Tests providing an unknown parameter.
|
||||
*/
|
||||
@@ -60,8 +61,12 @@ class cli_test extends cli_testcase {
|
||||
*/
|
||||
public function test_setreferencetime() {
|
||||
$cli = new create(['start' => 0]);
|
||||
|
||||
$cli->set_referencetime(1);
|
||||
self::assertEquals(1, $cli->get_referencetime());
|
||||
|
||||
$cli->set_referencetime(60 * 60 * 24 * 7);
|
||||
self::assertEquals(604800, $cli->get_referencetime());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -81,8 +86,8 @@ class cli_test extends cli_testcase {
|
||||
$this->set_parameters(['-h']);
|
||||
$cli = new create();
|
||||
$output = $this->execute($cli);
|
||||
self::assertStringContainsString('-h', $output);
|
||||
self::assertStringContainsString('--help', $output);
|
||||
self::assertContains('-h', $output);
|
||||
self::assertContains('--help', $output);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -100,7 +105,7 @@ class cli_test extends cli_testcase {
|
||||
// Disable all auth plugins.
|
||||
set_config('auth', '');
|
||||
\core\session\manager::gc(); // Remove stale sessions.
|
||||
\core_plugin_manager::reset_caches();
|
||||
core_plugin_manager::reset_caches();
|
||||
// Try to create an CLI object.
|
||||
$this->set_expected_cli_exception(cli_exception::ERROR_PLUGIN_CONFIGURATION);
|
||||
new create();
|
||||
@@ -15,7 +15,7 @@
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* cli_testcase class.
|
||||
* auth_outage_cli_testcase class.
|
||||
*
|
||||
* @package auth_outage
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
@@ -23,24 +23,25 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace auth_outage\local\cli;
|
||||
use auth_outage\local\cli\clibase;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
require_once(__DIR__.'/../../base_testcase.php');
|
||||
|
||||
/**
|
||||
* cli_testcase class.
|
||||
* auth_outage_cli_testcase class.
|
||||
*
|
||||
* @package auth_outage
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @SuppressWarnings(public) Allow as many methods as needed.
|
||||
*/
|
||||
abstract class cli_testcase extends \auth_outage\base_testcase {
|
||||
abstract class auth_outage_cli_testcase extends auth_outage_base_testcase {
|
||||
/**
|
||||
* Always enable the auth outage plugin, resets after test and set no parameters.
|
||||
*/
|
||||
public function setUp(): void {
|
||||
public function setUp() {
|
||||
global $CFG;
|
||||
|
||||
// PHPUnit does not load config.php file.
|
||||
@@ -49,7 +50,7 @@ abstract class cli_testcase extends \auth_outage\base_testcase {
|
||||
// Enable auth plugins.
|
||||
set_config('auth', 'outage');
|
||||
\core\session\manager::gc(); // Remove stale sessions.
|
||||
\core_plugin_manager::reset_caches();
|
||||
core_plugin_manager::reset_caches();
|
||||
|
||||
$this->set_parameters([]);
|
||||
parent::setUp();
|
||||
@@ -23,9 +23,9 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace auth_outage\local\cli;
|
||||
|
||||
use auth_outage\dml\outagedb;
|
||||
use auth_outage\local\cli\cli_exception;
|
||||
use auth_outage\local\cli\create;
|
||||
use auth_outage\local\outage;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
@@ -38,9 +38,9 @@ require_once(__DIR__.'/cli_testcase.php');
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @covers \auth_outage\local\cli\create
|
||||
* @SuppressWarnings(public) Allow as many methods as needed.
|
||||
*/
|
||||
class create_test extends cli_testcase {
|
||||
class create_test extends auth_outage_cli_testcase {
|
||||
/**
|
||||
* Tests without any arguments.
|
||||
*/
|
||||
@@ -121,8 +121,8 @@ class create_test extends cli_testcase {
|
||||
$this->set_parameters(['--help']);
|
||||
$cli = new create();
|
||||
$output = $this->execute($cli);
|
||||
self::assertStringContainsString('Creates', $output);
|
||||
self::assertStringContainsString('--help', $output);
|
||||
self::assertContains('Creates', $output);
|
||||
self::assertContains('--help', $output);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -158,10 +158,10 @@ class create_test extends cli_testcase {
|
||||
$cli = new create();
|
||||
$cli->set_referencetime($now);
|
||||
$text = $this->execute($cli);
|
||||
self::assertStringContainsString('created', $text);
|
||||
self::assertContains('created', $text);
|
||||
// Check creted outage.
|
||||
$clioutput = explode(':', $text);
|
||||
$id = (int)end($clioutput);
|
||||
list(, $id) = explode(':', $text);
|
||||
$id = (int)$id;
|
||||
$outage = outagedb::get_by_id($id);
|
||||
self::assertSame($now, $outage->starttime);
|
||||
self::assertSame(10, $outage->get_warning_duration());
|
||||
@@ -222,10 +222,10 @@ class create_test extends cli_testcase {
|
||||
'description' => 'Default Description',
|
||||
]);
|
||||
$text = $this->execute($cli);
|
||||
self::assertStringContainsString('created', $text);
|
||||
self::assertContains('created', $text);
|
||||
// Check creted outage.
|
||||
$clioutput = explode(':', $text);
|
||||
$id = (int)end($clioutput);
|
||||
list(, $id) = explode(':', $text);
|
||||
$id = (int)$id;
|
||||
$outage = outagedb::get_by_id($id);
|
||||
self::assertSame($now + 50, $outage->starttime, 'Wrong starttime.');
|
||||
self::assertSame($outage->starttime - 100, $outage->warntime, 'Wrong warntime.');
|
||||
@@ -300,8 +300,8 @@ class create_test extends cli_testcase {
|
||||
$cli = new create();
|
||||
$cli->set_referencetime($now);
|
||||
$text = $this->execute($cli);
|
||||
self::assertStringContainsString('created', $text);
|
||||
self::assertStringContainsString('started', $text);
|
||||
self::assertContains('created', $text);
|
||||
self::assertContains('started', $text);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -23,9 +23,9 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace auth_outage\local\cli;
|
||||
|
||||
use auth_outage\dml\outagedb;
|
||||
use auth_outage\local\cli\cli_exception;
|
||||
use auth_outage\local\cli\finish;
|
||||
use auth_outage\local\outage;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
@@ -38,9 +38,9 @@ require_once(__DIR__.'/cli_testcase.php');
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @covers \auth_outage\local\cli\finish
|
||||
* @SuppressWarnings(public) Allow as many methods as needed.
|
||||
*/
|
||||
class finish_test extends cli_testcase {
|
||||
class finish_test extends auth_outage_cli_testcase {
|
||||
/**
|
||||
* Tests the constructor.
|
||||
*/
|
||||
@@ -73,8 +73,8 @@ class finish_test extends cli_testcase {
|
||||
$this->set_parameters(['--help']);
|
||||
$cli = new finish();
|
||||
$text = $this->execute($cli);
|
||||
self::assertStringContainsString('Finishes', $text);
|
||||
self::assertStringContainsString('--help', $text);
|
||||
self::assertContains('Finishes', $text);
|
||||
self::assertContains('--help', $text);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -121,10 +121,16 @@ class finish_test extends cli_testcase {
|
||||
'title' => 'Title',
|
||||
'description' => 'Description',
|
||||
]));
|
||||
$outage = outagedb::get_by_id($id);
|
||||
self::assertNull($outage->finished, "outage should not be finished");
|
||||
|
||||
$this->set_parameters(['-id='.$id]);
|
||||
$cli = new finish();
|
||||
$cli->set_referencetime($now);
|
||||
$this->execute($cli);
|
||||
|
||||
$outage = outagedb::get_by_id($id);
|
||||
self::assertNotNull($outage->finished, "outage should be finished");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -23,9 +23,9 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace auth_outage\local\cli;
|
||||
|
||||
use auth_outage\dml\outagedb;
|
||||
use auth_outage\local\cli\cli_exception;
|
||||
use auth_outage\local\cli\waitforit;
|
||||
use auth_outage\local\outage;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
@@ -38,9 +38,9 @@ require_once(__DIR__.'/cli_testcase.php');
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @covers \auth_outage\local\cli\waitforit
|
||||
* @SuppressWarnings(public) Allow as many methods as needed.
|
||||
*/
|
||||
class waitforit_test extends cli_testcase {
|
||||
class waitforit_test extends auth_outage_cli_testcase {
|
||||
/**
|
||||
* Tests the constructor.
|
||||
*/
|
||||
@@ -79,8 +79,8 @@ class waitforit_test extends cli_testcase {
|
||||
$this->set_parameters(['--help']);
|
||||
$cli = new waitforit();
|
||||
$text = $this->execute($cli);
|
||||
self::assertStringContainsString('Waits', $text);
|
||||
self::assertStringContainsString('--help', $text);
|
||||
self::assertContains('Waits', $text);
|
||||
self::assertContains('--help', $text);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -152,9 +152,9 @@ class waitforit_test extends cli_testcase {
|
||||
$cli = new waitforit();
|
||||
$cli->set_referencetime($now);
|
||||
$output = $this->execute($cli);
|
||||
self::assertStringContainsString('Verbose mode', $output);
|
||||
self::assertStringContainsString('starting in 1 sec', $output);
|
||||
self::assertStringContainsString('started', $output);
|
||||
self::assertContains('Verbose mode', $output);
|
||||
self::assertContains('starting in 1 sec', $output);
|
||||
self::assertContains('started', $output);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -179,11 +179,11 @@ class waitforit_test extends cli_testcase {
|
||||
return $now;
|
||||
});
|
||||
$output = $this->execute($cli);
|
||||
self::assertStringContainsString("starting in 45", $output);
|
||||
self::assertStringContainsString("sleep 30 second", $output);
|
||||
self::assertStringContainsString("starting in 15", $output);
|
||||
self::assertStringContainsString("sleep 15 second", $output);
|
||||
self::assertStringContainsString("started!", $output);
|
||||
self::assertContains("starting in 45", $output);
|
||||
self::assertContains("sleep 30 second", $output);
|
||||
self::assertContains("starting in 15", $output);
|
||||
self::assertContains("sleep 15 second", $output);
|
||||
self::assertContains("started!", $output);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
@@ -0,0 +1,7 @@
|
||||
a {
|
||||
font-size: 200%;
|
||||
}
|
||||
|
||||
div {
|
||||
background-image: url('/moodle/auth/outage/tests/phpunit/local/controllers/fixtures/catalyst.png');
|
||||
}
|
||||
7
tests/phpunit/local/controllers/fixtures/withurls.css
Normal file
7
tests/phpunit/local/controllers/fixtures/withurls.css
Normal file
@@ -0,0 +1,7 @@
|
||||
a {
|
||||
font-size: 200%;
|
||||
}
|
||||
|
||||
div {
|
||||
background-image: url(/moodle/auth/outage/tests/phpunit/local/controllers/fixtures/catalyst.png);
|
||||
}
|
||||
121
tests/phpunit/local/controllers/infopage_test.php
Normal file
121
tests/phpunit/local/controllers/infopage_test.php
Normal file
@@ -0,0 +1,121 @@
|
||||
<?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/>.
|
||||
|
||||
/**
|
||||
* Tests performed on infopage controller class and update_static_page task class.
|
||||
*
|
||||
* @package auth_outage
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
use auth_outage\local\controllers\infopage;
|
||||
use auth_outage\local\outage;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
require_once(__DIR__.'/../../base_testcase.php');
|
||||
|
||||
/**
|
||||
* Tests performed on infopage controller class and update_static_page task class.
|
||||
*
|
||||
* @package auth_outage
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @SuppressWarnings(public) Allow as many methods as needed.
|
||||
*/
|
||||
class infopagecontroller_test extends auth_outage_base_testcase {
|
||||
/**
|
||||
* Tests the constructor.
|
||||
*/
|
||||
public function test_constructor() {
|
||||
$infopage = new infopage();
|
||||
self::assertNotNull($infopage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the constructor with given parameters.
|
||||
*/
|
||||
public function test_constructor_withparams() {
|
||||
$_GET = ['id' => 1, 'static' => 'true'];
|
||||
$infopage = new infopage();
|
||||
self::assertNotNull($infopage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the constructor with different id and outage id.
|
||||
*/
|
||||
public function test_constructor_idmismatch() {
|
||||
$outage = new outage([
|
||||
'id' => 1,
|
||||
'autostart' => false,
|
||||
'warntime' => time() - 60,
|
||||
'starttime' => time(),
|
||||
'stoptime' => time() + 60,
|
||||
'title' => 'Title',
|
||||
'description' => 'Description',
|
||||
]);
|
||||
$this->set_expected_exception('coding_exception');
|
||||
new infopage(['id' => 2, 'outage' => $outage]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the constructor with an invalid outage.
|
||||
*/
|
||||
public function test_constructor_invalidoutage() {
|
||||
$this->set_expected_exception('coding_exception');
|
||||
new infopage(['outage' => 'My outage']);
|
||||
}
|
||||
|
||||
/**
|
||||
* We should have an exception because CLI cannot redirect.
|
||||
*/
|
||||
public function test_output_nonstatic_nooutage() {
|
||||
$info = new infopage(['static' => false]);
|
||||
$this->set_expected_exception('moodle_exception');
|
||||
$info->output();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the output of the info page.
|
||||
*/
|
||||
public function test_output() {
|
||||
$now = time();
|
||||
$outage = new outage([
|
||||
'id' => 1,
|
||||
'autostart' => false,
|
||||
'warntime' => $now - 100,
|
||||
'starttime' => $now + 100,
|
||||
'stoptime' => $now + 200,
|
||||
'title' => 'Title',
|
||||
'description' => 'Description',
|
||||
]);
|
||||
$info = new infopage(['outage' => $outage]);
|
||||
$output = $info->get_output();
|
||||
self::assertContains('auth_outage_info', $output);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the constructor enables SVG support.
|
||||
*/
|
||||
public function test_svgicons_is_true() {
|
||||
global $CFG;
|
||||
$CFG->svgicons = false;
|
||||
new infopage();
|
||||
self::assertTrue($CFG->svgicons);
|
||||
}
|
||||
}
|
||||
@@ -23,10 +23,10 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace auth_outage\local\controllers;
|
||||
|
||||
use auth_outage\local\controllers\maintenance_static_page;
|
||||
use auth_outage\local\controllers\maintenance_static_page_io;
|
||||
use auth_outage\local\controllers\maintenance_static_page_generator;
|
||||
use auth_outage\task\update_static_page;
|
||||
use DOMDocument;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
require_once(__DIR__.'/../../base_testcase.php');
|
||||
@@ -38,12 +38,10 @@ require_once(__DIR__.'/../../base_testcase.php');
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @covers \auth_outage\local\controllers\maintenance_static_page_generator
|
||||
* @SuppressWarnings(public) Allow as many methods as needed.
|
||||
* @SuppressWarnings(methods) Allow as many methods as needed.
|
||||
*/
|
||||
class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
/**
|
||||
* Test template file.
|
||||
*/
|
||||
class maintenance_static_page_test extends auth_outage_base_testcase {
|
||||
public function test_templatefile() {
|
||||
global $CFG;
|
||||
$page = maintenance_static_page::create_from_html('<html></html>');
|
||||
@@ -53,9 +51,6 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
$page->get_io()->get_template_file());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test resources folder.
|
||||
*/
|
||||
public function test_resourcesfolder() {
|
||||
global $CFG;
|
||||
$page = maintenance_static_page::create_from_html('<html></html>');
|
||||
@@ -64,16 +59,10 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
self::assertSame($CFG->dataroot.'/auth_outage/climaintenance/preview', $page->get_io()->get_resources_folder());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test create from outage.
|
||||
*/
|
||||
public function test_createfromoutage() {
|
||||
// How to fetch a page from PHPUnit environment?
|
||||
self::markTestSkipped("How to fetch a page from PHPUnit environment?");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test create from HTML.
|
||||
*/
|
||||
public function test_createfromhtml() {
|
||||
$html = "<!DOCTYPE html>\n<html><head><title>Title</title></head><body>Content</body></html>";
|
||||
$expected = "<!DOCTYPE html>\n<html><head><title>Title</title><meta http-equiv=\"refresh\" content=\"300\">".
|
||||
@@ -81,9 +70,6 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
self::assertSame($expected, $this->generated_page_html($html));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test remove script tags.
|
||||
*/
|
||||
public function test_removescripttags() {
|
||||
$html = "<!DOCTYPE html>\n".
|
||||
'<html><head><script type="text/javascript" src="http://xyz"></script><title>Title</title></head>'.
|
||||
@@ -91,12 +77,9 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
maintenance_static_page::create_from_html($html)->generate();
|
||||
|
||||
$generated = $this->generated_page_html($html);
|
||||
self::assertStringNotContainsString('<script', $generated);
|
||||
self::assertNotContains('<script', $generated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test remove script tags.
|
||||
*/
|
||||
public function test_updatelinkstylesheet() {
|
||||
$localcsslink = $this->get_fixture_path('simple.css');
|
||||
$externalcsslink = 'http://google.com/coolstuff.css';
|
||||
@@ -105,14 +88,11 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
'<body>Content<link rel="stylesheet" href="'.$externalcsslink.'"></body></html>';
|
||||
$generated = $this->generated_page_html($html);
|
||||
|
||||
self::assertStringContainsString('www.example.com/moodle/auth/outage/file.php?file=', $generated);
|
||||
self::assertStringNotContainsString($localcsslink, $generated);
|
||||
self::assertStringContainsString($externalcsslink, $generated);
|
||||
self::assertContains('www.example.com/moodle/auth/outage/file.php?file=', $generated);
|
||||
self::assertNotContains($localcsslink, $generated);
|
||||
self::assertContains($externalcsslink, $generated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test update link style sheet urls.
|
||||
*/
|
||||
public function test_updatelinkstylesheet_urls() {
|
||||
$localcsslink = $this->get_fixture_path('withurls.css');
|
||||
$html = "<!DOCTYPE html>\n".
|
||||
@@ -122,15 +102,12 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
$page->generate();
|
||||
|
||||
// Check for css file.
|
||||
self::assertFileExists($page->get_io()->get_resources_folder().'/53365950336b070c0b26ca50e7d0dad962c364e6.dGV4dC9wbGFpbg');
|
||||
self::assertFileExists($page->get_io()->get_resources_folder().'/d8643101d96b093e642b15544e4d1f7815b5ba55.dGV4dC9wbGFpbg');
|
||||
|
||||
// Check for catalyst.png file referenced in url(..) of css.
|
||||
self::assertFileExists($page->get_io()->get_resources_folder().'/ff7f7f87a26a908fc72930eaefb6b57306361d16.aW1hZ2UvcG5n');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test update link style sheet urls quoted.
|
||||
*/
|
||||
public function test_updatelinkstylesheet_urls_quoted() {
|
||||
$localcsslink = $this->get_fixture_path('withurls-quoted.css');
|
||||
$html = "<!DOCTYPE html>\n".
|
||||
@@ -140,15 +117,12 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
$page->generate();
|
||||
|
||||
// Check for css file.
|
||||
self::assertFileExists($page->get_io()->get_resources_folder().'/e0b34925c1f939c247a4b50d6bf08c76088def39.dGV4dC9wbGFpbg');
|
||||
self::assertFileExists($page->get_io()->get_resources_folder().'/9fe2374b03953e1949d54ab750be2d8706891c03.dGV4dC9wbGFpbg');
|
||||
|
||||
// Check for catalyst.png file referenced in url(..) of css.
|
||||
self::assertFileExists($page->get_io()->get_resources_folder().'/ff7f7f87a26a908fc72930eaefb6b57306361d16.aW1hZ2UvcG5n');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test update link style sheet urls with sub dir.
|
||||
*/
|
||||
public function test_updatelinkstylesheet_urls_subdir() {
|
||||
$localcsslink = $this->get_fixture_path('subdir/withurls-subdir.css');
|
||||
$html = "<!DOCTYPE html>\n".
|
||||
@@ -164,9 +138,6 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
self::assertFileExists($page->get_io()->get_resources_folder().'/a02a8a442fa82d5205ffb24722d9df7f35161f56.dGV4dC9wbGFpbg');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test update images to file.php style link.
|
||||
*/
|
||||
public function test_updateimages() {
|
||||
$localimglink = $this->get_fixture_path('catalyst.png');
|
||||
$externalimglink = 'http://google.com/coolstyle.css';
|
||||
@@ -175,14 +146,11 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
'<body><img src="'.$localimglink.'">Content<img src="'.$externalimglink.'" /></body></html>';
|
||||
$generated = $this->generated_page_html($html);
|
||||
|
||||
self::assertStringContainsString('www.example.com/moodle/auth/outage/file.php?file=', $generated);
|
||||
self::assertStringNotContainsString($localimglink, $generated);
|
||||
self::assertStringContainsString($externalimglink, $generated);
|
||||
self::assertContains('www.example.com/moodle/auth/outage/file.php?file=', $generated);
|
||||
self::assertNotContains($localimglink, $generated);
|
||||
self::assertContains($externalimglink, $generated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test update favicon to file.php style link.
|
||||
*/
|
||||
public function test_updatelinkfavicon() {
|
||||
$link = $this->get_fixture_path('catalyst.png');
|
||||
$html = "<!DOCTYPE html>\n".
|
||||
@@ -190,67 +158,10 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
'<body>Content</body></html>';
|
||||
$generated = $this->generated_page_html($html);
|
||||
|
||||
self::assertStringNotContainsString($link, $generated);
|
||||
self::assertStringContainsString('www.example.com/moodle/auth/outage/file.php?file=', $generated);
|
||||
self::assertNotContains($link, $generated);
|
||||
self::assertContains('www.example.com/moodle/auth/outage/file.php?file=', $generated);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Data provider for test_update_inline_background_images
|
||||
* @return array
|
||||
*/
|
||||
public function test_update_inline_background_images_provider() {
|
||||
return [
|
||||
// Empty string.
|
||||
["", false],
|
||||
// URLs that should be retrieved.
|
||||
["color: #FF00FF; background: lightblue url(/pluginfile.php/1/theme_custom/banner/251298630/0001.png) no-repeat", true],
|
||||
["background: lightblue url(https://www.example.com/moodle/pluginfile.php/1/theme_custom/banner/251298630/0001.png) no-repeat", true],
|
||||
["background:url('https://www.example.com/moodle/pluginfile.php/1/theme_custom/banner/251298630/0001.png')", true],
|
||||
["background-image : url( /pix/help.png);", true],
|
||||
["background-image: url ('/pix/help.png')", true],
|
||||
// URLs that should not be retrieved.
|
||||
["background-image:url(data:image/gif;base64,R0lGODlhYADIAP=)", false],
|
||||
["background-image:url('data:image/gif;base64,R0lGODlhYADIAP=')", false]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests update_inline_background_images() method to update the background images.
|
||||
*
|
||||
* @dataProvider test_update_inline_background_images_provider
|
||||
* @param string $stylecontent Content of the style to test
|
||||
* @param bool $rewrite Flag if URL should be rewritten
|
||||
* @throws coding_exception
|
||||
*/
|
||||
public function test_update_inline_background_images($stylecontent, $rewrite) {
|
||||
global $CFG;
|
||||
$this->resetAfterTest(true);
|
||||
$generator = new maintenance_static_page_generator(new DOMDocument(), new maintenance_static_page_io());
|
||||
|
||||
$html = '<!DOCTYPE html>\n'.
|
||||
'<html><head><title>Title</title></head>'.
|
||||
'<body><div style="'.$stylecontent.'">Content</div></body></html>';
|
||||
|
||||
// Temporarily disable debugging to prevent errors because file does not exist.
|
||||
$debuglevel = $CFG->debug;
|
||||
$CFG->debug = '';
|
||||
$generated = $this->generated_page_html($html);
|
||||
// Restore debugging level.
|
||||
$CFG->debug = $debuglevel;
|
||||
$matches = $generator->get_url_from_inline_style($stylecontent);
|
||||
if ($rewrite) {
|
||||
self::assertStringNotContainsString($matches[1], $generated);
|
||||
self::assertStringContainsString('www.example.com/moodle/auth/outage/file.php?file=', $generated);
|
||||
self::assertIsArray($matches);
|
||||
} else {
|
||||
self::assertStringContainsString($stylecontent, $generated);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test update preview path to file.php style link.
|
||||
*/
|
||||
public function test_previewpath() {
|
||||
$link = $this->get_fixture_path('catalyst.png');
|
||||
$html = "<!DOCTYPE html>\n".
|
||||
@@ -261,8 +172,8 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
$page->generate();
|
||||
$generated = trim(file_get_contents($page->get_io()->get_template_file()));
|
||||
|
||||
self::assertStringNotContainsString($link, $generated);
|
||||
self::assertStringContainsString('www.example.com/moodle/auth/outage/file.php?file=preview%2F', $generated);
|
||||
self::assertNotContains($link, $generated);
|
||||
self::assertContains('www.example.com/moodle/auth/outage/file.php?file=preview%2F', $generated);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -298,17 +209,9 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
touch($file);
|
||||
self::assertFileExists($file);
|
||||
maintenance_static_page::create_from_outage(null)->generate();
|
||||
// Backwards compatibility with older PHPUnit - use old assertFile method.
|
||||
if (method_exists($this, 'assertFileDoesNotExist')) {
|
||||
self::assertFileDoesNotExist($file);
|
||||
} else {
|
||||
self::assertFileNotExists($file);
|
||||
}
|
||||
self::assertFileNotExists($file);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests created file.
|
||||
*/
|
||||
public function test_createdfile() {
|
||||
global $CFG;
|
||||
|
||||
@@ -325,53 +228,38 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
|
||||
// We can still assert the contents really match, not just the hash.
|
||||
$found = file_get_contents($file);
|
||||
$expected = file_get_contents(__DIR__.'/fixtures/catalyst.png');
|
||||
$expected = file_get_contents($CFG->dirroot.'/auth/outage/tests/phpunit/local/controllers/fixtures/catalyst.png');
|
||||
self::assertSame($found, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a fixture file for this test case.
|
||||
*
|
||||
* @param string $file file name
|
||||
* @param $file
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function get_fixture_path($file) {
|
||||
return (string)new \moodle_url('/auth/outage/tests/local/controllers/fixtures/'.$file);
|
||||
return (string)new moodle_url('/auth/outage/tests/phpunit/local/controllers/fixtures/'.$file);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test saving empty string for template file.
|
||||
*/
|
||||
public function test_invalid_string_saving_template_empty() {
|
||||
$io = new maintenance_static_page_io();
|
||||
$this->set_expected_exception('coding_exception');
|
||||
$io->save_template_file('');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test saving non string for template file.
|
||||
*/
|
||||
public function test_invalid_string_saving_template_nostring() {
|
||||
$io = new maintenance_static_page_io();
|
||||
$this->set_expected_exception('coding_exception');
|
||||
$io->save_template_file(50);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get url for file.
|
||||
*/
|
||||
public function test_get_url_for_file() {
|
||||
$io = new maintenance_static_page_io();
|
||||
self::assertStringContainsString(
|
||||
'www.example.com/moodle/auth/outage/file.php?file=img.png',
|
||||
$io->get_url_for_file('img.png')
|
||||
);
|
||||
self::assertContains('www.example.com/moodle/auth/outage/file.php?file=img.png', $io->get_url_for_file('img.png'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return array of url data provider and true or false.
|
||||
*/
|
||||
public function is_url_dataprovider() {
|
||||
return [
|
||||
[true, 'http://catalyst.net.nz'],
|
||||
@@ -384,18 +272,12 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if it is url
|
||||
* @dataProvider is_url_dataprovider
|
||||
* @param string $result expected result
|
||||
* @param string $url url to be checked
|
||||
*/
|
||||
public function test_is_url($result, $url) {
|
||||
self::assertEquals($result, maintenance_static_page_io::is_url($url));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test file get_data.
|
||||
*/
|
||||
public function test_file_get_data() {
|
||||
$file = __DIR__.'/fixtures/catalyst.png';
|
||||
$found = maintenance_static_page_io::file_get_data($file);
|
||||
@@ -403,28 +285,19 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
self::assertSame('image/png', $found['mime']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test invalid file get_data.
|
||||
*/
|
||||
public function test_file_get_data_invalidfile() {
|
||||
$found = maintenance_static_page_io::file_get_data(__DIR__.'/fixtures/invalidfile');
|
||||
self::assertSame('', $found['contents']);
|
||||
self::assertSame('unknown', $found['mime']);
|
||||
self::assertCount(1, $this->getDebuggingMessages());
|
||||
$this->resetDebugging();
|
||||
self::assertCount(1, phpunit_util::get_debugging_messages());
|
||||
phpunit_util::reset_debugging();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test invalid file get_data.
|
||||
*/
|
||||
public function test_file_get_data_invalidfilename() {
|
||||
$this->set_expected_exception('coding_exception');
|
||||
maintenance_static_page_io::file_get_data(200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test remove css selector.
|
||||
*/
|
||||
public function test_remove_css_selector() {
|
||||
$this->resetAfterTest(true);
|
||||
$html = "<!DOCTYPE html>\n".
|
||||
@@ -433,13 +306,10 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
set_config('remove_selectors', '.removeme', 'auth_outage');
|
||||
$generated = $this->generated_page_html($html);
|
||||
|
||||
self::assertStringNotContainsString('removeme', $generated);
|
||||
self::assertStringNotContainsString('Goodbye cruel world', $generated);
|
||||
self::assertNotContains('removeme', $generated);
|
||||
self::assertNotContains('Goodbye cruel world', $generated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test remove css selector id.
|
||||
*/
|
||||
public function test_remove_css_selector_id() {
|
||||
$this->resetAfterTest(true);
|
||||
$html = "<!DOCTYPE html>\n".
|
||||
@@ -448,13 +318,10 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
set_config('remove_selectors', '#removeme', 'auth_outage');
|
||||
$generated = $this->generated_page_html($html);
|
||||
|
||||
self::assertStringNotContainsString('removeme', $generated);
|
||||
self::assertStringNotContainsString('Goodbye cruel world', $generated);
|
||||
self::assertNotContains('removeme', $generated);
|
||||
self::assertNotContains('Goodbye cruel world', $generated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test remove css selector with multi lines.
|
||||
*/
|
||||
public function test_remove_css_selector_with_multiline() {
|
||||
$this->resetAfterTest(true);
|
||||
$html = "<!DOCTYPE html>\n".
|
||||
@@ -466,14 +333,11 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
set_config('remove_selectors', ".removeme\n.deleteme", 'auth_outage');
|
||||
$generated = $this->generated_page_html($html);
|
||||
|
||||
self::assertStringNotContainsString('removeme', $generated);
|
||||
self::assertStringNotContainsString('deleteme', $generated);
|
||||
self::assertStringNotContainsString('Goodbye cruel world', $generated);
|
||||
self::assertNotContains('removeme', $generated);
|
||||
self::assertNotContains('deleteme', $generated);
|
||||
self::assertNotContains('Goodbye cruel world', $generated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test remove css selector needs trim.
|
||||
*/
|
||||
public function test_remove_css_selector_needing_trim() {
|
||||
$this->resetAfterTest(true);
|
||||
$html = "<!DOCTYPE html>\n".
|
||||
@@ -485,14 +349,11 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
set_config('remove_selectors', " .removeme \n .deleteme ", 'auth_outage');
|
||||
$generated = $this->generated_page_html($html);
|
||||
|
||||
self::assertStringNotContainsString('removeme', $generated);
|
||||
self::assertStringNotContainsString('deleteme', $generated);
|
||||
self::assertStringNotContainsString('Goodbye cruel world', $generated);
|
||||
self::assertNotContains('removeme', $generated);
|
||||
self::assertNotContains('deleteme', $generated);
|
||||
self::assertNotContains('Goodbye cruel world', $generated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test remove css selector with empty line.
|
||||
*/
|
||||
public function test_remove_css_selector_with_empty_line() {
|
||||
$this->resetAfterTest(true);
|
||||
$html = "<!DOCTYPE html>\n".
|
||||
@@ -504,14 +365,11 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
set_config('remove_selectors', "\n\n.removeme\n\n\n\n.deleteme\n\n", 'auth_outage');
|
||||
$generated = $this->generated_page_html($html);
|
||||
|
||||
self::assertStringNotContainsString('removeme', $generated);
|
||||
self::assertStringNotContainsString('deleteme', $generated);
|
||||
self::assertStringNotContainsString('Goodbye cruel world', $generated);
|
||||
self::assertNotContains('removeme', $generated);
|
||||
self::assertNotContains('deleteme', $generated);
|
||||
self::assertNotContains('Goodbye cruel world', $generated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test remove css selector with invalid id.
|
||||
*/
|
||||
public function test_remove_css_selector_with_invalid_id() {
|
||||
$this->resetAfterTest(true);
|
||||
$html = "<!DOCTYPE html>\n".
|
||||
@@ -520,13 +378,10 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
set_config('remove_selectors', '#invalidid', 'auth_outage');
|
||||
$generated = $this->generated_page_html($html);
|
||||
|
||||
self::assertStringContainsString('removeme', $generated);
|
||||
self::assertStringContainsString('Goodbye cruel world', $generated);
|
||||
self::assertContains('removeme', $generated);
|
||||
self::assertContains('Goodbye cruel world', $generated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test meta refresh 5 minutes.
|
||||
*/
|
||||
public function test_meta_refresh_5minutes() {
|
||||
$this->resetAfterTest(true);
|
||||
$html = "<!DOCTYPE html>\n".
|
||||
@@ -535,12 +390,9 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
set_config('remove_selectors', '#invalidid', 'auth_outage');
|
||||
$generated = $this->generated_page_html($html);
|
||||
|
||||
self::assertStringContainsString('<meta http-equiv="refresh" content="300">', $generated);
|
||||
self::assertContains('<meta http-equiv="refresh" content="300">', $generated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test meta refresh maximum 5 minutes.
|
||||
*/
|
||||
public function test_meta_refresh_maximum_5seconds() {
|
||||
$this->resetAfterTest(true);
|
||||
$html = "<!DOCTYPE html>\n".
|
||||
@@ -551,16 +403,15 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
$page->set_max_refresh_time(5);
|
||||
$page->generate();
|
||||
$generated = trim(file_get_contents($page->get_io()->get_template_file()));
|
||||
return $generated;
|
||||
|
||||
self::assertStringContainsString('<meta http-equiv="refresh" content="5">', $generated);
|
||||
self::assertContains('<meta http-equiv="refresh" content="5">', $generated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for test_get_urls_from_stylesheet
|
||||
* @return array
|
||||
*/
|
||||
public function test_get_urls_from_stylesheet_provider() {
|
||||
public function get_urls_from_stylesheet_provider() {
|
||||
return [
|
||||
// Empty string.
|
||||
["", 0],
|
||||
@@ -582,7 +433,7 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
/**
|
||||
* Tests get_urls_from_stylesheet() method to get all appropriate URLS from the file.
|
||||
*
|
||||
* @dataProvider test_get_urls_from_stylesheet_provider
|
||||
* @dataProvider get_urls_from_stylesheet_provider
|
||||
* @param string $filecontent Content of the file
|
||||
* @param int $count Expected quantity of found URLs
|
||||
* @throws coding_exception
|
||||
@@ -592,7 +443,7 @@ class maintenance_static_page_test extends \auth_outage\base_testcase {
|
||||
$generator = new maintenance_static_page_generator(new DOMDocument(), new maintenance_static_page_io());
|
||||
$matches = $generator->get_urls_from_stylesheet($filecontent);
|
||||
|
||||
self::assertIsArray($matches);
|
||||
self::assertInternalType('array', $matches);
|
||||
self::assertCount(2, $matches);
|
||||
self::assertCount($count, $matches[1]);
|
||||
}
|
||||
@@ -23,7 +23,7 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace auth_outage\local;
|
||||
use auth_outage\local\outage;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
require_once(__DIR__.'/../base_testcase.php');
|
||||
@@ -35,9 +35,9 @@ require_once(__DIR__.'/../base_testcase.php');
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @covers \auth_outage\local\outage
|
||||
* @SuppressWarnings(public) Allow as many methods as needed.
|
||||
*/
|
||||
class outage_test extends \auth_outage\base_testcase {
|
||||
class outage_test extends auth_outage_base_testcase {
|
||||
/**
|
||||
* Tests the constructor.
|
||||
*/
|
||||
@@ -55,7 +55,7 @@ class outage_test extends \auth_outage\base_testcase {
|
||||
* Tests the constructor, giving data as an object.
|
||||
*/
|
||||
public function test_constructor_object() {
|
||||
$obj = new \stdClass();
|
||||
$obj = new stdClass();
|
||||
$obj->id = 1;
|
||||
$obj->autostart = true;
|
||||
$obj->warntime = 2;
|
||||
@@ -281,11 +281,11 @@ class outage_test extends \auth_outage\base_testcase {
|
||||
'description' => 'Description {{start}} {{stop}} {{duration}}',
|
||||
]);
|
||||
$title = $outage->get_title();
|
||||
self::assertStringNotContainsString('{', $title);
|
||||
self::assertStringNotContainsString('}', $title);
|
||||
self::assertNotContains('{', $title);
|
||||
self::assertNotContains('}', $title);
|
||||
$description = $outage->get_description();
|
||||
self::assertStringNotContainsString('{', $description);
|
||||
self::assertStringNotContainsString('}', $description);
|
||||
self::assertNotContains('{', $description);
|
||||
self::assertNotContains('}', $description);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -23,11 +23,12 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace auth_outage\local;
|
||||
|
||||
use auth_outage\dml\outagedb;
|
||||
use auth_outage\local\outage;
|
||||
use auth_outage\local\outagelib;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
global $CFG;
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
require_once(__DIR__.'/../base_testcase.php');
|
||||
@@ -39,9 +40,9 @@ require_once(__DIR__.'/../base_testcase.php');
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @covers \auth_outage\local\outagelib
|
||||
* @SuppressWarnings(public) Allow as many methods as needed.
|
||||
*/
|
||||
class outagelib_test extends \auth_outage\base_testcase {
|
||||
class outagelib_test extends auth_outage_base_testcase {
|
||||
/**
|
||||
* Check if maintenance message is disabled as needed.
|
||||
*/
|
||||
@@ -60,14 +61,10 @@ class outagelib_test extends \auth_outage\base_testcase {
|
||||
]);
|
||||
|
||||
set_config('maintenance_message', 'A message.');
|
||||
ob_start();
|
||||
outagedb::save($outage);
|
||||
$text = trim(ob_get_contents());
|
||||
ob_end_clean();
|
||||
self::assertStringContainsString('Update maintenance mode configuration', $text);
|
||||
self::assertFalse((bool)get_config('moodle', 'maintenance_message'));
|
||||
self::assertCount(2, $this->getDebuggingMessages());
|
||||
$this->resetDebugging();
|
||||
self::assertCount(2, phpunit_util::get_debugging_messages());
|
||||
phpunit_util::reset_debugging();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -98,23 +95,16 @@ class outagelib_test extends \auth_outage\base_testcase {
|
||||
'title' => 'Title',
|
||||
'description' => 'Description',
|
||||
]);
|
||||
ob_start();
|
||||
$outage->id = outagedb::save($outage);
|
||||
$text = trim(ob_get_contents());
|
||||
ob_end_clean();
|
||||
self::assertStringContainsString('Update maintenance mode configuration', $text);
|
||||
|
||||
outagelib::reset_injectcalled();
|
||||
// Get full header to avoid interactions with other single inject plugins.
|
||||
$header1 = $OUTPUT->standard_top_of_body_html();
|
||||
self::assertStringContainsString('<style>', $header1);
|
||||
self::assertStringContainsString('<script>', $header1);
|
||||
$header1 = outagelib::get_inject_code();
|
||||
self::assertContains('<style>', $header1);
|
||||
self::assertContains('<script>', $header1);
|
||||
|
||||
// Should not inject more than once.
|
||||
$size = strlen($OUTPUT->standard_top_of_body_html());
|
||||
self::assertSame($size, strlen($OUTPUT->standard_top_of_body_html()));
|
||||
// Check styles aren't reinjected.
|
||||
self::assertStringNotContainsString('<style>', $OUTPUT->standard_top_of_body_html());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -124,8 +114,8 @@ class outagelib_test extends \auth_outage\base_testcase {
|
||||
$_GET = ['auth_outage_break_code' => '1'];
|
||||
outagelib::reset_injectcalled();
|
||||
$header = outagelib::get_inject_code();
|
||||
self::assertCount(2, $this->getDebuggingMessages());
|
||||
$this->resetDebugging();
|
||||
self::assertCount(2, phpunit_util::get_debugging_messages());
|
||||
phpunit_util::reset_debugging();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -144,18 +134,14 @@ class outagelib_test extends \auth_outage\base_testcase {
|
||||
'title' => 'Title',
|
||||
'description' => 'Description',
|
||||
]);
|
||||
ob_start();
|
||||
$outage->id = outagedb::save($outage);
|
||||
$text = trim(ob_get_contents());
|
||||
ob_end_clean();
|
||||
self::assertStringContainsString('Update maintenance mode configuration', $text);
|
||||
|
||||
$_GET = ['auth_outage_preview' => (string)$outage->id];
|
||||
|
||||
outagelib::reset_injectcalled();
|
||||
$header = outagelib::get_inject_code();
|
||||
self::assertStringContainsString('<style>', $header);
|
||||
self::assertStringContainsString('<script>', $header);
|
||||
self::assertContains('<style>', $header);
|
||||
self::assertContains('<script>', $header);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -187,11 +173,8 @@ class outagelib_test extends \auth_outage\base_testcase {
|
||||
'title' => 'Title',
|
||||
'description' => 'Description',
|
||||
]);
|
||||
ob_start();
|
||||
$outage->id = outagedb::save($outage);
|
||||
$text = trim(ob_get_contents());
|
||||
ob_end_clean();
|
||||
self::assertStringContainsString('Update maintenance mode configuration', $text);
|
||||
|
||||
$_GET = ['auth_outage_preview' => (string)$outage->id, 'auth_outage_delta' => '500'];
|
||||
outagelib::reset_injectcalled();
|
||||
$header = outagelib::get_inject_code();
|
||||
@@ -204,7 +187,8 @@ class outagelib_test extends \auth_outage\base_testcase {
|
||||
*/
|
||||
public function test_inject_noactive() {
|
||||
outagelib::reset_injectcalled();
|
||||
outagelib::get_inject_code();
|
||||
$code = outagelib::get_inject_code();
|
||||
self::assertNull($code);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -231,10 +215,6 @@ class outagelib_test extends \auth_outage\base_testcase {
|
||||
foreach ($keys as $k) {
|
||||
self::assertSame($config->$k, $k.'_value', 'auth_outage');
|
||||
}
|
||||
|
||||
set_config('allowedips_forced', 'allowedips_forced_value', 'auth_outage');
|
||||
$config = outagelib::get_config();
|
||||
self::assertSame($config->allowedips, "allowedips_value\nallowedips_forced_value", 'auth_outage');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -297,11 +277,7 @@ class outagelib_test extends \auth_outage\base_testcase {
|
||||
'title' => 'Title',
|
||||
'description' => 'Description',
|
||||
]);
|
||||
ob_start();
|
||||
$outage->id = outagedb::save($outage);
|
||||
$text = trim(ob_get_contents());
|
||||
ob_end_clean();
|
||||
self::assertStringContainsString('Update maintenance mode configuration', $text);
|
||||
|
||||
// Pretend we are there...
|
||||
$_SERVER['SCRIPT_FILENAME'] = '/var/www/alternativepath/admin/settings.php'; // Issue #88 regression test.
|
||||
@@ -313,9 +289,6 @@ class outagelib_test extends \auth_outage\base_testcase {
|
||||
self::assertEmpty($header);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test create maintenance php code
|
||||
*/
|
||||
public function test_createmaintenancephpcode() {
|
||||
$expected = <<<'EOT'
|
||||
<?php
|
||||
@@ -357,13 +330,7 @@ EOT;
|
||||
self::assertSame($expected, $found);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test create maintenance php code without age
|
||||
*
|
||||
* @param string $configkey The key of the config.
|
||||
* @dataProvider test_createmaintenancephpcode_withoutage_provider
|
||||
*/
|
||||
public function test_createmaintenancephpcode_withoutage($configkey) {
|
||||
public function test_createmaintenancephpcode_withoutage() {
|
||||
global $CFG;
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
@@ -406,7 +373,7 @@ EOT;
|
||||
'stoptime' => 456,
|
||||
]);
|
||||
$file = $CFG->dataroot.'/climaintenance.php';
|
||||
set_config($configkey, '127.0.0.1', 'auth_outage');
|
||||
set_config('allowedips', '127.0.0.1', 'auth_outage');
|
||||
|
||||
outagelib::update_climaintenance_code($outage);
|
||||
self::assertFileExists($file);
|
||||
@@ -414,13 +381,6 @@ EOT;
|
||||
self::assertSame($found, $expected);
|
||||
}
|
||||
|
||||
public function test_createmaintenancephpcode_withoutage_provider(): array {
|
||||
return [['allowedips'], ['allowedips_forced']];
|
||||
}
|
||||
|
||||
/**
|
||||
* Test create maintenance php code without IPs
|
||||
*/
|
||||
public function test_createmaintenancephpcode_withoutips() {
|
||||
global $CFG;
|
||||
$this->resetAfterTest(true);
|
||||
@@ -431,33 +391,19 @@ EOT;
|
||||
]);
|
||||
$file = $CFG->dataroot.'/climaintenance.php';
|
||||
set_config('allowedips', '', 'auth_outage');
|
||||
set_config('allowedips_forced', '', 'auth_outage');
|
||||
|
||||
touch($file);
|
||||
outagelib::update_climaintenance_code($outage);
|
||||
// Backwards compatibility with older PHPUnit - use old assertFile method.
|
||||
if (method_exists($this, 'assertFileDoesNotExist')) {
|
||||
self::assertFileDoesNotExist($file);
|
||||
} else {
|
||||
self::assertFileNotExists($file);
|
||||
}
|
||||
self::assertFileNotExists($file);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test create maintenance php code without outage
|
||||
*/
|
||||
public function test_createmaintenancephpcode_withoutoutage() {
|
||||
global $CFG;
|
||||
$file = $CFG->dataroot.'/climaintenance.php';
|
||||
|
||||
touch($file);
|
||||
outagelib::update_climaintenance_code(null);
|
||||
// Backwards compatibility with older PHPUnit - use old assertFile method.
|
||||
if (method_exists($this, 'assertFileDoesNotExist')) {
|
||||
self::assertFileDoesNotExist($file);
|
||||
} else {
|
||||
self::assertFileNotExists($file);
|
||||
}
|
||||
self::assertFileNotExists($file);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -484,7 +430,9 @@ EOT;
|
||||
$this->create_outage();
|
||||
|
||||
// Change settings.
|
||||
set_config('s_auth_outage_allowedips', '127', 'auth_outage');
|
||||
admin_write_settings((object)[
|
||||
's_auth_outage_allowedips' => '127',
|
||||
]);
|
||||
|
||||
// The method outagelib::prepare_next_outage() should have been called from admin_write_settings().
|
||||
foreach ([$CFG->dataroot.'/climaintenance.template.html', $CFG->dataroot.'/climaintenance.php'] as $file) {
|
||||
@@ -502,7 +450,9 @@ EOT;
|
||||
$this->create_outage();
|
||||
|
||||
// Change settings.
|
||||
set_config('s_auth_outage_remove_selectors', '.something', 'auth_outage');
|
||||
admin_write_settings((object)[
|
||||
's_auth_outage_remove_selectors' => '.something',
|
||||
]);
|
||||
|
||||
// The method outagelib::prepare_next_outage() should have been called from admin_write_settings().
|
||||
foreach ([$CFG->dataroot.'/climaintenance.template.html', $CFG->dataroot.'/climaintenance.php'] as $file) {
|
||||
@@ -533,12 +483,7 @@ EOT;
|
||||
// The method outagelib::prepare_next_outage() should have been called by save().
|
||||
self::assertFalse(get_config('moodle', 'maintenance_later'));
|
||||
// This file should not exist even if the statement above fails as Moodle does not create it immediately but test anyway.
|
||||
// Backwards compatibility with older PHPUnit - use old assertFile method.
|
||||
if (method_exists($this, 'assertFileDoesNotExist')) {
|
||||
self::assertFileDoesNotExist($CFG->dataroot.'/climaintenance.html');
|
||||
} else {
|
||||
self::assertFileNotExists($CFG->dataroot.'/climaintenance.html');
|
||||
}
|
||||
self::assertFileNotExists($CFG->dataroot.'/climaintenance.html');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -558,11 +503,8 @@ EOT;
|
||||
'title' => 'Title',
|
||||
'description' => 'Description',
|
||||
]);
|
||||
ob_start();
|
||||
$outage->id = outagedb::save($outage);
|
||||
$text = trim(ob_get_contents());
|
||||
ob_end_clean();
|
||||
self::assertStringContainsString('Update maintenance mode configuration', $text);
|
||||
|
||||
// Pretend we are there...
|
||||
$_SERVER['SCRIPT_FILENAME'] = '/var/www/alternativepath/admin/settings.php'; // Issue #88 regression test.
|
||||
$_SERVER['SCRIPT_NAME'] = '/admin/settings.php';
|
||||
@@ -573,9 +515,6 @@ EOT;
|
||||
self::assertNotEmpty($header);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates outage for tests.
|
||||
*/
|
||||
private function create_outage() {
|
||||
$this->resetAfterTest(true);
|
||||
self::setAdminUser();
|
||||
@@ -594,6 +533,6 @@ EOT;
|
||||
// Enable outage plugin so settings can be changed.
|
||||
set_config('auth', 'outage');
|
||||
\core\session\manager::gc(); // Remove stale sessions.
|
||||
\core_plugin_manager::reset_caches();
|
||||
core_plugin_manager::reset_caches();
|
||||
}
|
||||
}
|
||||
@@ -28,8 +28,7 @@
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$plugin->component = "auth_outage";
|
||||
$plugin->version = 2023012700; // The current plugin version (Date: YYYYMMDDXX).
|
||||
$plugin->release = 2023012700; // Human-readable release information.
|
||||
$plugin->requires = 2017111309; // 2017111309 = T13, but this really requires 3.9 and higher.
|
||||
$plugin->version = 2020110900; // The current plugin version (Date: YYYYMMDDXX).
|
||||
$plugin->release = 2020110900; // Human-readable release information.
|
||||
$plugin->requires = 2017051500; // Requires 3.3 and higher.
|
||||
$plugin->maturity = MATURITY_STABLE; // Suitable for PRODUCTION environments!
|
||||
$plugin->supported = [39, 401]; // A range of branch numbers of supported moodle versions.
|
||||
|
||||
@@ -12,21 +12,12 @@ If you need to make changes here, remember to update your settings inside Moodle
|
||||
padding: 0;
|
||||
position: fixed;
|
||||
text-align: center;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
top: 0;
|
||||
transition: background 3s ease-out;
|
||||
width: 100%;
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
#auth_outage_warningbar_box .auth_outage_warningbar_center {
|
||||
/* fix to prevent existing theme hacks to fix issue */
|
||||
margin-top: 0;
|
||||
position: static;
|
||||
}
|
||||
|
||||
#auth_outage_warningbar_box.auth_outage_warning_period {
|
||||
background:
|
||||
repeating-linear-gradient(
|
||||
@@ -75,10 +66,16 @@ If you need to make changes here, remember to update your settings inside Moodle
|
||||
background-color: #090;
|
||||
}
|
||||
|
||||
.auth_outage_warningbar_center {
|
||||
margin-top: -35px;
|
||||
position: relative;
|
||||
top: 50%;
|
||||
}
|
||||
|
||||
#auth_outage_warningbar_message {
|
||||
font-size: 200%;
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
a.auth_outage_warningbar_box_title {
|
||||
@@ -90,7 +87,6 @@ a.auth_outage_warningbar_box_finish {
|
||||
border: 1px solid black;
|
||||
border-radius: 5px;
|
||||
color: darkgray;
|
||||
white-space: nowrap;
|
||||
font-weight: bold;
|
||||
margin-left: 10px;
|
||||
padding-left: 5px;
|
||||
@@ -103,36 +99,14 @@ a.auth_outage_warningbar_box_finish:hover {
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
.auth_outage_warningbar_spacer {
|
||||
height: 80px;
|
||||
}
|
||||
|
||||
body.auth_outage #nav-drawer {
|
||||
top: 150px;
|
||||
}
|
||||
|
||||
body.auth_outage nav.fixed-top.navbar {
|
||||
top: 100px;
|
||||
}
|
||||
|
||||
body.auth_outage #page {
|
||||
margin-top: 150px;
|
||||
}
|
||||
|
||||
body.auth_outage.path-mod-assign [data-region="grading-navigation-panel"] {
|
||||
top: 100px;
|
||||
}
|
||||
|
||||
body.auth_outage.path-mod-assign [data-region="grade-panel"] {
|
||||
top: 185px;
|
||||
}
|
||||
|
||||
body.auth_outage .layout.fullscreen {
|
||||
top: 150px;
|
||||
}
|
||||
|
||||
body.auth_outage .modal-dialog {
|
||||
margin: calc(150px + 1.75rem) auto;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
#auth_outage_warningbar_message {
|
||||
font-size: 120%;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -56,8 +56,6 @@ var authOutageWarningBar = {
|
||||
},
|
||||
|
||||
tickOngoing: function() {
|
||||
const MINSECS = 60;
|
||||
|
||||
if (this.finished) {
|
||||
return;
|
||||
}
|
||||
@@ -80,8 +78,13 @@ var authOutageWarningBar = {
|
||||
xmlhttp.open("GET", this.checkfinishedurl, true);
|
||||
xmlhttp.send();
|
||||
|
||||
// Checking if the site is back online every 4-6 minutes.
|
||||
var sleepSeconds = 4 * MINSECS + (2 * MINSECS * Math.random());
|
||||
var estimatedServerTime = this.servertime + (Date.now() - this.clienttime);
|
||||
var sleepSeconds = this.stops - estimatedServerTime; // How long to sleep until it stops.
|
||||
if (sleepSeconds <= 0) {
|
||||
sleepSeconds = 5; // It should be back, keep checking every 5 seconds.
|
||||
} else {
|
||||
sleepSeconds = Math.min(sleepSeconds, (5 * 60)); // Check at least every 5 minutes.
|
||||
}
|
||||
|
||||
setTimeout(function() {
|
||||
$this.tickOngoing();
|
||||
|
||||
@@ -74,6 +74,8 @@ if (!$viewbag['static']) {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="auth_outage_warningbar_spacer"> </div>
|
||||
|
||||
<?php if (!$viewbag['static']): ?>
|
||||
<script>
|
||||
document.body.className += ' auth_outage';
|
||||
|
||||
Reference in New Issue
Block a user