2009-05-22 02:05:46 +00:00
< ? php
2009-06-30 15:19:12 +00:00
// This file is part of Moodle - http://moodle.org/
//
2009-05-22 02:05:46 +00:00
// 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.
2009-06-30 15:19:12 +00:00
//
2009-05-22 02:05:46 +00:00
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
2004-09-26 05:10:38 +00:00
/**
2009-06-30 15:19:12 +00:00
* Functions and classes used during installation , upgrades and for admin settings .
2009-05-22 02:05:46 +00:00
*
2009-06-30 15:19:12 +00:00
* ADMIN SETTINGS TREE INTRODUCTION
2009-05-22 02:05:46 +00:00
*
* This file performs the following tasks :
* - it defines the necessary objects and interfaces to build the Moodle
* admin hierarchy
2010-03-31 08:05:53 +00:00
* - it defines the admin_externalpage_setup ()
2009-05-22 02:05:46 +00:00
*
* ADMIN_SETTING OBJECTS
*
* Moodle settings are represented by objects that inherit from the admin_setting
* class . These objects encapsulate how to read a setting , how to write a new value
* to a setting , and how to appropriately display the HTML to modify the setting .
*
* ADMIN_SETTINGPAGE OBJECTS
*
* The admin_setting objects are then grouped into admin_settingpages . The latter
* appear in the Moodle admin tree block . All interaction with admin_settingpage
* objects is handled by the admin / settings . php file .
*
* ADMIN_EXTERNALPAGE OBJECTS
*
* There are some settings in Moodle that are too complex to ( efficiently ) handle
* with admin_settingpages . ( Consider , for example , user management and displaying
* lists of users . ) In this case , we use the admin_externalpage object . This object
* places a link to an external PHP file in the admin tree block .
*
* If you ' re using an admin_externalpage object for some settings , you can take
* advantage of the admin_externalpage_ * functions . For example , suppose you wanted
* to add a foo . php file into admin . First off , you add the following line to
* admin / settings / first . php ( at the end of the file ) or to some other file in
* admin / settings :
* < code >
* $ADMIN -> add ( 'userinterface' , new admin_externalpage ( 'foo' , get_string ( 'foo' ),
* $CFG -> wwwdir . '/' . '$CFG->admin . ' / foo . php ', ' some_role_permission ' ));
* </ code >
*
* Next , in foo . php , your file structure would resemble the following :
* < code >
2010-07-15 13:41:50 +00:00
* require ( dirname ( dirname ( dirname ( __FILE__ ))) . '/config.php' );
2009-05-22 02:05:46 +00:00
* require_once ( $CFG -> libdir . '/adminlib.php' );
* admin_externalpage_setup ( 'foo' );
* // functionality like processing form submissions goes here
2010-07-15 13:41:50 +00:00
* echo $OUTPUT -> header ();
2009-05-22 02:05:46 +00:00
* // your HTML goes here
2010-07-15 13:41:50 +00:00
* echo $OUTPUT -> footer ();
2009-05-22 02:05:46 +00:00
* </ code >
*
* The admin_externalpage_setup () function call ensures the user is logged in ,
* and makes sure that they have the proper role permission to access the page .
2010-03-07 09:28:54 +00:00
* It also configures all $PAGE properties needed for navigation .
2009-05-22 02:05:46 +00:00
*
* ADMIN_CATEGORY OBJECTS
*
* Above and beyond all this , we have admin_category objects . These objects
* appear as folders in the admin tree block . They contain admin_settingpage ' s ,
* admin_externalpage 's, and other admin_category' s .
*
* OTHER NOTES
*
* admin_settingpage 's, admin_externalpage' s , and admin_category ' s all inherit
* from part_of_admin_tree ( a pseudointerface ) . This interface insists that
* a class has a check_access method for access permissions , a locate method
* used to find a specific node in the admin tree and find parent path .
*
* admin_category ' s inherit from parentable_part_of_admin_tree . This pseudo -
* interface ensures that the class implements a recursive add function which
* accepts a part_of_admin_tree object and searches for the proper place to
* put it . parentable_part_of_admin_tree implies part_of_admin_tree .
*
* Please note that the $this -> name field of any part_of_admin_tree must be
* UNIQUE throughout the ENTIRE admin tree .
*
* The $this -> name field of an admin_setting object ( which is * not * part_of_
* admin_tree ) must be unique on the respective admin_settingpage where it is
* used .
*
2009-06-30 15:19:12 +00:00
* Original author : Vincenzo K . Marcovecchio
* Maintainer : Petr Skoda
2009-05-22 02:05:46 +00:00
*
2010-07-25 13:35:05 +00:00
* @ package core
* @ subpackage admin
* @ copyright 1999 onwards Martin Dougiamas http :// dougiamas . com
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2004-09-26 05:10:38 +00:00
*/
2010-07-25 13:35:05 +00:00
defined ( 'MOODLE_INTERNAL' ) || die ();
2008-08-30 18:47:22 +00:00
/// Add libraries
require_once ( $CFG -> libdir . '/ddllib.php' );
2008-06-15 10:32:50 +00:00
require_once ( $CFG -> libdir . '/xmlize.php' );
2011-05-20 14:01:28 +01:00
require_once ( $CFG -> libdir . '/messagelib.php' );
2008-06-15 10:32:50 +00:00
2008-08-21 15:29:42 +00:00
define ( 'INSECURE_DATAROOT_WARNING' , 1 );
define ( 'INSECURE_DATAROOT_ERROR' , 2 );
2009-06-30 15:19:12 +00:00
2009-08-31 15:23:02 +00:00
/**
* Automatically clean - up all plugin data and remove the plugin DB tables
*
2013-06-26 13:04:31 +02:00
* NOTE : do not call directly , use new / admin / plugins . php ? uninstall = component instead !
*
2009-08-31 15:23:02 +00:00
* @ param string $type The plugin type , eg . 'mod' , 'qtype' , 'workshopgrading' etc .
* @ param string $name The plugin name , eg . 'forum' , 'multichoice' , 'accumulative' etc .
* @ uses global $OUTPUT to produce notices and other messages
* @ return void
*/
function uninstall_plugin ( $type , $name ) {
global $CFG , $DB , $OUTPUT ;
2012-12-21 15:58:25 +01:00
// This may take a long time.
2013-10-15 13:22:19 +01:00
core_php_time_limit :: raise ();
2012-12-21 15:58:25 +01:00
2013-06-30 09:02:56 +02:00
// Recursively uninstall all subplugins first.
$subplugintypes = core_component :: get_plugin_types_with_subplugins ();
if ( isset ( $subplugintypes [ $type ])) {
$base = core_component :: get_plugin_directory ( $type , $name );
2012-05-17 17:13:26 +01:00
if ( file_exists ( " $base /db/subplugins.php " )) {
2010-04-04 19:58:03 +00:00
$subplugins = array ();
2012-05-17 17:13:26 +01:00
include ( " $base /db/subplugins.php " );
2010-04-04 19:58:03 +00:00
foreach ( $subplugins as $subplugintype => $dir ) {
2013-06-30 09:02:56 +02:00
$instances = core_component :: get_plugin_list ( $subplugintype );
2010-04-04 19:58:03 +00:00
foreach ( $instances as $subpluginname => $notusedpluginpath ) {
uninstall_plugin ( $subplugintype , $subpluginname );
}
2009-08-31 15:23:02 +00:00
}
}
2010-04-04 19:58:03 +00:00
2009-08-31 15:23:02 +00:00
}
2009-09-01 09:26:43 +00:00
$component = $type . '_' . $name ; // eg. 'qtype_multichoice' or 'workshopgrading_accumulative' or 'mod_forum'
if ( $type === 'mod' ) {
$pluginname = $name ; // eg. 'forum'
2010-05-20 07:29:54 +00:00
if ( get_string_manager () -> string_exists ( 'modulename' , $component )) {
$strpluginname = get_string ( 'modulename' , $component );
} else {
$strpluginname = $component ;
}
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
2009-09-01 09:26:43 +00:00
} else {
2009-09-09 07:55:03 +00:00
$pluginname = $component ;
2010-05-20 07:29:54 +00:00
if ( get_string_manager () -> string_exists ( 'pluginname' , $component )) {
$strpluginname = get_string ( 'pluginname' , $component );
} else {
$strpluginname = $component ;
}
2009-09-01 09:26:43 +00:00
}
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
2009-08-31 15:23:02 +00:00
echo $OUTPUT -> heading ( $pluginname );
2014-02-04 17:02:56 -08:00
// Delete all tag instances associated with this plugin.
require_once ( $CFG -> dirroot . '/tag/lib.php' );
tag_delete_instances ( $component );
2013-09-25 10:27:09 +02:00
// Custom plugin uninstall.
2013-07-16 22:38:38 +02:00
$plugindirectory = core_component :: get_plugin_directory ( $type , $name );
2009-08-31 15:23:02 +00:00
$uninstalllib = $plugindirectory . '/db/uninstall.php' ;
if ( file_exists ( $uninstalllib )) {
require_once ( $uninstalllib );
2009-09-01 09:26:43 +00:00
$uninstallfunction = 'xmldb_' . $pluginname . '_uninstall' ; // eg. 'xmldb_workshop_uninstall()'
2009-08-31 15:23:02 +00:00
if ( function_exists ( $uninstallfunction )) {
2013-09-25 10:27:09 +02:00
// Do not verify result, let plugin complain if necessary.
$uninstallfunction ();
2009-08-31 15:23:02 +00:00
}
}
2013-09-25 08:41:33 +02:00
// Specific plugin type cleanup.
2013-10-04 22:40:44 +02:00
$plugininfo = core_plugin_manager :: instance () -> get_plugin_info ( $component );
2013-09-25 08:41:33 +02:00
if ( $plugininfo ) {
$plugininfo -> uninstall_cleanup ();
2013-10-04 22:40:44 +02:00
core_plugin_manager :: reset_caches ();
2013-09-25 08:41:33 +02:00
}
$plugininfo = null ;
2010-05-20 07:29:54 +00:00
// perform clean-up task common for all the plugin/subplugin types
2009-08-31 15:23:02 +00:00
2012-04-11 14:48:14 +08:00
//delete the web service functions and pre-built services
require_once ( $CFG -> dirroot . '/lib/externallib.php' );
external_delete_descriptions ( $component );
2009-08-31 15:23:02 +00:00
// delete calendar events
2009-09-01 09:26:43 +00:00
$DB -> delete_records ( 'event' , array ( 'modulename' => $pluginname ));
2009-08-31 15:23:02 +00:00
2014-02-25 09:47:39 +08:00
// Delete scheduled tasks.
2014-03-13 15:31:39 +08:00
$DB -> delete_records ( 'task_scheduled' , array ( 'component' => $pluginname ));
2014-02-25 09:47:39 +08:00
2014-07-09 13:22:36 +08:00
// Delete Inbound Message datakeys.
2014-10-02 11:50:15 +08:00
$DB -> delete_records_select ( 'messageinbound_datakeys' ,
2014-07-09 13:22:36 +08:00
'handler IN (SELECT id FROM {messageinbound_handlers} WHERE component = ?)' , array ( $pluginname ));
// Delete Inbound Message handlers.
$DB -> delete_records ( 'messageinbound_handlers' , array ( 'component' => $pluginname ));
2009-08-31 15:23:02 +00:00
// delete all the logs
2009-09-01 09:26:43 +00:00
$DB -> delete_records ( 'log' , array ( 'module' => $pluginname ));
2009-08-31 15:23:02 +00:00
// delete log_display information
2010-08-03 10:07:18 +00:00
$DB -> delete_records ( 'log_display' , array ( 'component' => $component ));
2009-08-31 15:23:02 +00:00
// delete the module configuration records
2013-09-14 23:57:21 +02:00
unset_all_config_for_plugin ( $component );
if ( $type === 'mod' ) {
unset_all_config_for_plugin ( $pluginname );
}
2009-08-31 15:23:02 +00:00
2011-05-20 14:01:28 +01:00
// delete message provider
2011-06-02 09:27:05 +01:00
message_provider_uninstall ( $component );
2009-08-31 15:23:02 +00:00
// delete the plugin tables
$xmldbfilepath = $plugindirectory . '/db/install.xml' ;
2011-11-19 16:56:11 +01:00
drop_plugin_tables ( $component , $xmldbfilepath , false );
if ( $type === 'mod' or $type === 'block' ) {
// non-frankenstyle table prefixes
drop_plugin_tables ( $name , $xmldbfilepath , false );
}
2009-08-31 15:23:02 +00:00
// delete the capabilities that were defined by this module
capabilities_cleanup ( $component );
2010-05-21 19:06:38 +00:00
// remove event handlers and dequeue pending events
2009-08-31 15:23:02 +00:00
events_uninstall ( $component );
2013-04-10 13:20:02 +02:00
// Delete all remaining files in the filepool owned by the component.
$fs = get_file_storage ();
$fs -> delete_component_files ( $component );
2013-04-10 11:53:21 +02:00
// Finally purge all caches.
purge_all_caches ();
2013-08-16 11:02:03 +02:00
// Invalidate the hash used for upgrade detections.
set_config ( 'allversionshash' , '' );
2009-08-31 15:23:02 +00:00
echo $OUTPUT -> notification ( get_string ( 'success' ), 'notifysuccess' );
}
2010-08-23 14:24:38 +00:00
/**
* Returns the version of installed component
*
* @ param string $component component name
* @ param string $source either 'disk' or 'installed' - where to get the version information from
* @ return string | bool version number or false if the component is not found
*/
function get_component_version ( $component , $source = 'installed' ) {
global $CFG , $DB ;
2013-07-16 22:41:00 +02:00
list ( $type , $name ) = core_component :: normalize_component ( $component );
2010-08-23 14:24:38 +00:00
// moodle core or a core subsystem
if ( $type === 'core' ) {
if ( $source === 'installed' ) {
if ( empty ( $CFG -> version )) {
return false ;
} else {
return $CFG -> version ;
}
} else {
if ( ! is_readable ( $CFG -> dirroot . '/version.php' )) {
return false ;
} else {
2010-09-17 07:47:46 +00:00
$version = null ; //initialize variable for IDEs
2010-08-23 14:24:38 +00:00
include ( $CFG -> dirroot . '/version.php' );
return $version ;
}
}
}
// activity module
if ( $type === 'mod' ) {
if ( $source === 'installed' ) {
2013-09-25 10:50:00 +02:00
if ( $CFG -> version < 2013092001.02 ) {
return $DB -> get_field ( 'modules' , 'version' , array ( 'name' => $name ));
} else {
return get_config ( 'mod_' . $name , 'version' );
}
2010-08-23 14:24:38 +00:00
} else {
2013-07-16 22:36:11 +02:00
$mods = core_component :: get_plugin_list ( 'mod' );
2010-09-17 07:46:03 +00:00
if ( empty ( $mods [ $name ]) or ! is_readable ( $mods [ $name ] . '/version.php' )) {
2010-08-23 14:24:38 +00:00
return false ;
} else {
2013-09-14 23:57:21 +02:00
$plugin = new stdClass ();
$plugin -> version = null ;
$module = $plugin ;
2010-09-17 07:46:03 +00:00
include ( $mods [ $name ] . '/version.php' );
2013-09-14 23:57:21 +02:00
return $plugin -> version ;
2010-08-23 14:24:38 +00:00
}
}
}
// block
if ( $type === 'block' ) {
if ( $source === 'installed' ) {
2013-10-11 09:53:12 +02:00
if ( $CFG -> version < 2013092001.02 ) {
return $DB -> get_field ( 'block' , 'version' , array ( 'name' => $name ));
} else {
return get_config ( 'block_' . $name , 'version' );
}
2010-08-23 14:24:38 +00:00
} else {
2013-07-16 22:36:11 +02:00
$blocks = core_component :: get_plugin_list ( 'block' );
2010-08-23 14:24:38 +00:00
if ( empty ( $blocks [ $name ]) or ! is_readable ( $blocks [ $name ] . '/version.php' )) {
return false ;
} else {
$plugin = new stdclass ();
include ( $blocks [ $name ] . '/version.php' );
return $plugin -> version ;
}
}
}
// all other plugin types
if ( $source === 'installed' ) {
return get_config ( $type . '_' . $name , 'version' );
} else {
2013-07-16 22:36:11 +02:00
$plugins = core_component :: get_plugin_list ( $type );
2010-08-23 14:24:38 +00:00
if ( empty ( $plugins [ $name ])) {
return false ;
} else {
$plugin = new stdclass ();
include ( $plugins [ $name ] . '/version.php' );
return $plugin -> version ;
}
}
}
2008-06-15 10:32:50 +00:00
/**
* Delete all plugin tables
2009-05-22 02:05:46 +00:00
*
* @ param string $name Name of plugin , used as table prefix
* @ param string $file Path to install . xml file
* @ param bool $feedback defaults to true
2009-06-30 15:19:12 +00:00
* @ return bool Always returns true
2008-06-15 10:32:50 +00:00
*/
function drop_plugin_tables ( $name , $file , $feedback = true ) {
global $CFG , $DB ;
// first try normal delete
2008-08-26 06:54:43 +00:00
if ( file_exists ( $file ) and $DB -> get_manager () -> delete_tables_from_xmldb_file ( $file )) {
2008-06-15 10:32:50 +00:00
return true ;
}
// then try to find all tables that start with name and are not in any xml file
$used_tables = get_used_table_names ();
$tables = $DB -> get_tables ();
/// Iterate over, fixing id fields as necessary
foreach ( $tables as $table ) {
if ( in_array ( $table , $used_tables )) {
continue ;
}
2008-08-26 06:54:43 +00:00
if ( strpos ( $table , $name ) !== 0 ) {
continue ;
}
2008-06-15 10:32:50 +00:00
// found orphan table --> delete it
if ( $DB -> get_manager () -> table_exists ( $table )) {
$xmldb_table = new xmldb_table ( $table );
2008-06-22 16:51:55 +00:00
$DB -> get_manager () -> drop_table ( $xmldb_table );
2008-06-15 10:32:50 +00:00
}
}
return true ;
}
/**
2010-05-21 19:06:38 +00:00
* Returns names of all known tables == tables that moodle knows about .
2009-05-22 02:05:46 +00:00
*
* @ return array Array of lowercase table names
2008-06-15 10:32:50 +00:00
*/
function get_used_table_names () {
$table_names = array ();
$dbdirs = get_db_directories ();
foreach ( $dbdirs as $dbdir ) {
$file = $dbdir . '/install.xml' ;
$xmldb_file = new xmldb_file ( $file );
if ( ! $xmldb_file -> fileExists ()) {
continue ;
}
$loaded = $xmldb_file -> loadXMLStructure ();
2009-01-11 16:42:19 +00:00
$structure = $xmldb_file -> getStructure ();
2008-06-15 10:32:50 +00:00
if ( $loaded and $tables = $structure -> getTables ()) {
foreach ( $tables as $table ) {
2012-07-01 10:04:54 +02:00
$table_names [] = strtolower ( $table -> getName ());
2008-06-15 10:32:50 +00:00
}
}
}
return $table_names ;
}
/**
* Returns list of all directories where we expect install . xml files
2009-05-22 02:05:46 +00:00
* @ return array Array of paths
2008-06-15 10:32:50 +00:00
*/
function get_db_directories () {
global $CFG ;
$dbdirs = array ();
2009-09-09 07:55:03 +00:00
/// First, the main one (lib/db)
2008-06-15 10:32:50 +00:00
$dbdirs [] = $CFG -> libdir . '/db' ;
2013-07-16 22:31:48 +02:00
/// Then, all the ones defined by core_component::get_plugin_types()
$plugintypes = core_component :: get_plugin_types ();
2009-06-19 14:25:56 +00:00
foreach ( $plugintypes as $plugintype => $pluginbasedir ) {
2013-07-16 22:36:11 +02:00
if ( $plugins = core_component :: get_plugin_list ( $plugintype )) {
2009-06-19 14:25:56 +00:00
foreach ( $plugins as $plugin => $plugindir ) {
$dbdirs [] = $plugindir . '/db' ;
2009-05-30 15:33:21 +00:00
}
2008-08-30 11:25:29 +00:00
}
2008-06-20 09:11:08 +00:00
}
2008-06-15 10:32:50 +00:00
return $dbdirs ;
}
2006-09-20 21:00:45 +00:00
/**
2008-02-16 18:33:50 +00:00
* Try to obtain or release the cron lock .
* @ param string $name name of lock
2010-05-21 19:06:38 +00:00
* @ param int $until timestamp when this lock considered stale , null means remove lock unconditionally
* @ param bool $ignorecurrent ignore current lock state , usually extend previous lock , defaults to false
2008-02-16 18:33:50 +00:00
* @ return bool true if lock obtained
2005-09-01 04:14:31 +00:00
*/
2008-02-16 18:33:50 +00:00
function set_cron_lock ( $name , $until , $ignorecurrent = false ) {
2008-05-15 21:40:00 +00:00
global $DB ;
2005-09-01 04:14:31 +00:00
if ( empty ( $name )) {
2008-02-16 18:33:50 +00:00
debugging ( " Tried to get a cron lock for a null fieldname " );
2005-09-01 04:14:31 +00:00
return false ;
}
2008-02-16 18:33:50 +00:00
// remove lock by force == remove from config table
if ( is_null ( $until )) {
set_config ( $name , null );
2005-09-01 04:14:31 +00:00
return true ;
}
2008-02-16 18:33:50 +00:00
if ( ! $ignorecurrent ) {
2011-03-17 21:34:34 +01:00
// read value from db - other processes might have changed it
2008-05-15 21:40:00 +00:00
$value = $DB -> get_field ( 'config' , 'value' , array ( 'name' => $name ));
2008-02-16 18:33:50 +00:00
if ( $value and $value > time ()) {
2011-03-17 21:34:34 +01:00
//lock active
2008-02-16 18:33:50 +00:00
return false ;
2005-09-01 04:14:31 +00:00
}
}
2008-02-16 18:33:50 +00:00
set_config ( $name , $until );
2005-09-01 04:14:31 +00:00
return true ;
}
2006-01-27 02:54:51 +00:00
2008-08-21 15:29:42 +00:00
/**
* Test if and critical warnings are present
* @ return bool
*/
function admin_critical_warnings_present () {
global $SESSION ;
2012-07-25 16:25:55 +08:00
if ( ! has_capability ( 'moodle/site:config' , context_system :: instance ())) {
2008-08-21 15:29:42 +00:00
return 0 ;
}
if ( ! isset ( $SESSION -> admin_critical_warning )) {
$SESSION -> admin_critical_warning = 0 ;
2009-02-01 13:37:42 +00:00
if ( is_dataroot_insecure ( true ) === INSECURE_DATAROOT_ERROR ) {
2008-08-21 15:29:42 +00:00
$SESSION -> admin_critical_warning = 1 ;
}
}
return $SESSION -> admin_critical_warning ;
}
2009-01-13 09:04:09 +00:00
/**
2009-05-22 02:05:46 +00:00
* Detects if float supports at least 10 decimal digits
*
2010-05-21 19:06:38 +00:00
* Detects if float supports at least 10 decimal digits
2009-01-13 09:04:09 +00:00
* and also if float --> string conversion works as expected .
2009-05-22 02:05:46 +00:00
*
2009-01-13 09:04:09 +00:00
* @ return bool true if problem found
*/
function is_float_problem () {
$num1 = 2009010200.01 ;
$num2 = 2009010200.02 ;
return (( string ) $num1 === ( string ) $num2 or $num1 === $num2 or $num2 <= ( string ) $num1 );
}
2006-08-28 20:11:24 +00:00
/**
* Try to verify that dataroot is not accessible from web .
*
2009-05-22 02:05:46 +00:00
* Try to verify that dataroot is not accessible from web .
* It is not 100 % correct but might help to reduce number of vulnerable sites .
2006-08-28 20:11:24 +00:00
* Protection from httpd . conf and . htaccess is not detected properly .
2009-06-30 15:19:12 +00:00
*
2009-05-22 02:05:46 +00:00
* @ uses INSECURE_DATAROOT_WARNING
* @ uses INSECURE_DATAROOT_ERROR
* @ param bool $fetchtest try to test public access by fetching file , default false
2010-05-21 19:06:38 +00:00
* @ return mixed empty means secure , INSECURE_DATAROOT_ERROR found a critical problem , INSECURE_DATAROOT_WARNING might be problematic
2006-08-28 20:11:24 +00:00
*/
2008-08-21 15:29:42 +00:00
function is_dataroot_insecure ( $fetchtest = false ) {
2006-08-28 20:11:24 +00:00
global $CFG ;
$siteroot = str_replace ( '\\' , '/' , strrev ( $CFG -> dirroot . '/' )); // win32 backslash workaround
$rp = preg_replace ( '|https?://[^/]+|i' , '' , $CFG -> wwwroot , 1 );
$rp = strrev ( trim ( $rp , '/' ));
$rp = explode ( '/' , $rp );
foreach ( $rp as $r ) {
if ( strpos ( $siteroot , '/' . $r . '/' ) === 0 ) {
$siteroot = substr ( $siteroot , strlen ( $r ) + 1 ); // moodle web in subdirectory
} else {
break ; // probably alias root
}
}
$siteroot = strrev ( $siteroot );
$dataroot = str_replace ( '\\' , '/' , $CFG -> dataroot . '/' );
2008-08-21 15:29:42 +00:00
if ( strpos ( $dataroot , $siteroot ) !== 0 ) {
return false ;
}
if ( ! $fetchtest ) {
return INSECURE_DATAROOT_WARNING ;
}
// now try all methods to fetch a test file using http protocol
$httpdocroot = str_replace ( '\\' , '/' , strrev ( $CFG -> dirroot . '/' ));
preg_match ( '|(https?://[^/]+)|i' , $CFG -> wwwroot , $matches );
$httpdocroot = $matches [ 1 ];
$datarooturl = $httpdocroot . '/' . substr ( $dataroot , strlen ( $siteroot ));
2010-08-29 14:59:14 +00:00
make_upload_directory ( 'diag' );
2008-08-21 15:29:42 +00:00
$testfile = $CFG -> dataroot . '/diag/public.txt' ;
if ( ! file_exists ( $testfile )) {
file_put_contents ( $testfile , 'test file, do not delete' );
2013-07-13 19:54:50 +02:00
@ chmod ( $testfile , $CFG -> filepermissions );
2008-08-21 15:29:42 +00:00
}
$teststr = trim ( file_get_contents ( $testfile ));
if ( empty ( $teststr )) {
2009-09-09 07:55:03 +00:00
// hmm, strange
2008-08-21 15:29:42 +00:00
return INSECURE_DATAROOT_WARNING ;
}
$testurl = $datarooturl . '/diag/public.txt' ;
2009-01-09 02:10:56 +00:00
if ( extension_loaded ( 'curl' ) and
! ( stripos ( ini_get ( 'disable_functions' ), 'curl_init' ) !== FALSE ) and
! ( stripos ( ini_get ( 'disable_functions' ), 'curl_setop' ) !== FALSE ) and
( $ch = @ curl_init ( $testurl )) !== false ) {
2008-08-21 15:29:42 +00:00
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
curl_setopt ( $ch , CURLOPT_HEADER , false );
$data = curl_exec ( $ch );
if ( ! curl_errno ( $ch )) {
$data = trim ( $data );
if ( $data === $teststr ) {
curl_close ( $ch );
return INSECURE_DATAROOT_ERROR ;
}
}
curl_close ( $ch );
}
if ( $data = @ file_get_contents ( $testurl )) {
$data = trim ( $data );
if ( $data === $teststr ) {
return INSECURE_DATAROOT_ERROR ;
}
}
preg_match ( '|https?://([^/]+)|i' , $testurl , $matches );
$sitename = $matches [ 1 ];
$error = 0 ;
if ( $fp = @ fsockopen ( $sitename , 80 , $error )) {
preg_match ( '|https?://[^/]+(.*)|i' , $testurl , $matches );
$localurl = $matches [ 1 ];
$out = " GET $localurl HTTP/1.1 \r \n " ;
$out .= " Host: $sitename\r\n " ;
$out .= " Connection: Close \r \n \r \n " ;
fwrite ( $fp , $out );
$data = '' ;
$incoming = false ;
while ( ! feof ( $fp )) {
if ( $incoming ) {
$data .= fgets ( $fp , 1024 );
} else if ( @ fgets ( $fp , 1024 ) === " \r \n " ) {
2009-09-09 07:55:03 +00:00
$incoming = true ;
}
2008-08-21 15:29:42 +00:00
}
fclose ( $fp );
$data = trim ( $data );
if ( $data === $teststr ) {
return INSECURE_DATAROOT_ERROR ;
}
2006-08-28 20:11:24 +00:00
}
2008-08-21 15:29:42 +00:00
return INSECURE_DATAROOT_WARNING ;
2006-08-28 20:11:24 +00:00
}
2006-09-02 13:14:57 +00:00
2013-01-21 16:51:28 +01:00
/**
* Enables CLI maintenance mode by creating new dataroot / climaintenance . html file .
*/
function enable_cli_maintenance_mode () {
global $CFG ;
if ( file_exists ( " $CFG->dataroot /climaintenance.html " )) {
unlink ( " $CFG->dataroot /climaintenance.html " );
}
if ( isset ( $CFG -> maintenance_message ) and ! html_is_blank ( $CFG -> maintenance_message )) {
$data = $CFG -> maintenance_message ;
$data = bootstrap_renderer :: early_error_content ( $data , null , null , null );
$data = bootstrap_renderer :: plain_page ( get_string ( 'sitemaintenance' , 'admin' ), $data );
} else if ( file_exists ( " $CFG->dataroot /climaintenance.template.html " )) {
$data = file_get_contents ( " $CFG->dataroot /climaintenance.template.html " );
} else {
$data = get_string ( 'sitemaintenance' , 'admin' );
$data = bootstrap_renderer :: early_error_content ( $data , null , null , null );
$data = bootstrap_renderer :: plain_page ( get_string ( 'sitemaintenance' , 'admin' ), $data );
}
file_put_contents ( " $CFG->dataroot /climaintenance.html " , $data );
chmod ( " $CFG->dataroot /climaintenance.html " , $CFG -> filepermissions );
}
2006-09-02 13:14:57 +00:00
/// CLASS DEFINITIONS /////////////////////////////////////////////////////////
2011-03-17 21:34:34 +01:00
2006-09-02 13:14:57 +00:00
/**
2010-05-21 19:06:38 +00:00
* Interface for anything appearing in the admin tree
2006-09-02 13:14:57 +00:00
*
2010-05-21 19:06:38 +00:00
* The interface that is implemented by anything that appears in the admin tree
2006-09-02 13:14:57 +00:00
* block . It forces inheriting classes to define a method for checking user permissions
* and methods for finding something in the admin tree .
*
2009-05-22 02:05:46 +00:00
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2006-09-02 13:14:57 +00:00
*/
2009-01-11 16:42:19 +00:00
interface part_of_admin_tree {
2006-09-02 13:14:57 +00:00
2009-09-09 07:55:03 +00:00
/**
* Finds a named part_of_admin_tree .
*
* Used to find a part_of_admin_tree . If a class only inherits part_of_admin_tree
* and not parentable_part_of_admin_tree , then this function should only check if
* $this -> name matches $name . If it does , it should return a reference to $this ,
* otherwise , it should return a reference to NULL .
*
* If a class inherits parentable_part_of_admin_tree , this method should be called
* recursively on all child objects ( assuming , of course , the parent object ' s name
* doesn ' t match the search criterion ) .
*
* @ param string $name The internal name of the part_of_admin_tree we ' re searching for .
* @ return mixed An object reference or a NULL reference .
*/
2009-01-11 16:42:19 +00:00
public function locate ( $name );
2006-09-02 19:30:54 +00:00
/**
* Removes named part_of_admin_tree .
*
* @ param string $name The internal name of the part_of_admin_tree we want to remove .
2006-09-24 20:23:40 +00:00
* @ return bool success .
2006-09-02 19:30:54 +00:00
*/
2009-01-11 16:42:19 +00:00
public function prune ( $name );
2006-09-02 19:30:54 +00:00
2007-12-19 17:35:20 +00:00
/**
* Search using query
2009-05-22 02:05:46 +00:00
* @ param string $query
2007-12-19 17:35:20 +00:00
* @ return mixed array - object structure of found settings and pages
*/
2009-01-11 16:42:19 +00:00
public function search ( $query );
2007-12-19 17:35:20 +00:00
2006-09-02 13:14:57 +00:00
/**
* Verifies current user ' s access to this part_of_admin_tree .
*
* Used to check if the current user has access to this part of the admin tree or
* not . If a class only inherits part_of_admin_tree and not parentable_part_of_admin_tree ,
* then this method is usually just a call to has_capability () in the site context .
*
* If a class inherits parentable_part_of_admin_tree , this method should return the
* logical OR of the return of check_access () on all child objects .
*
* @ return bool True if the user has access , false if she doesn ' t .
*/
2009-01-11 16:42:19 +00:00
public function check_access ();
2006-09-20 21:00:45 +00:00
2006-09-24 20:23:40 +00:00
/**
2010-05-21 19:06:38 +00:00
* Mostly useful for removing of some parts of the tree in admin tree block .
2006-09-24 20:23:40 +00:00
*
* @ return True is hidden from normal list view
*/
2009-01-11 16:42:19 +00:00
public function is_hidden ();
2010-02-08 16:26:15 +00:00
/**
* Show we display Save button at the page bottom ?
* @ return bool
*/
public function show_save ();
2006-09-02 13:14:57 +00:00
}
2011-03-17 21:34:34 +01:00
2006-09-02 13:14:57 +00:00
/**
2010-05-21 19:06:38 +00:00
* Interface implemented by any part_of_admin_tree that has children .
2006-09-02 13:14:57 +00:00
*
2010-05-21 19:06:38 +00:00
* The interface implemented by any part_of_admin_tree that can be a parent
2006-09-02 13:14:57 +00:00
* to other part_of_admin_tree ' s . ( For now , this only includes admin_category . ) Apart
2006-09-20 21:00:45 +00:00
* from ensuring part_of_admin_tree compliancy , it also ensures inheriting methods
2006-09-02 13:14:57 +00:00
* include an add method for adding other part_of_admin_tree objects as children .
*
2009-05-22 02:05:46 +00:00
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2006-09-02 13:14:57 +00:00
*/
2009-01-11 16:42:19 +00:00
interface parentable_part_of_admin_tree extends part_of_admin_tree {
2006-09-20 21:00:45 +00:00
2009-09-09 07:55:03 +00:00
/**
* Adds a part_of_admin_tree object to the admin tree .
*
* Used to add a part_of_admin_tree object to this object or a child of this
* object . $something should only be added if $destinationname matches
* $this -> name . If it doesn ' t , add should be called on child objects that are
* also parentable_part_of_admin_tree ' s .
*
2013-03-15 00:47:11 +01:00
* $something should be appended as the last child in the $destinationname . If the
* $beforesibling is specified , $something should be prepended to it . If the given
* sibling is not found , $something should be appended to the end of $destinationname
* and a developer debugging message should be displayed .
*
2009-09-09 07:55:03 +00:00
* @ param string $destinationname The internal name of the new parent for $something .
* @ param part_of_admin_tree $something The object to be added .
* @ return bool True on success , false on failure .
*/
2013-03-15 00:47:11 +01:00
public function add ( $destinationname , $something , $beforesibling = null );
2006-09-20 21:00:45 +00:00
2006-09-02 13:14:57 +00:00
}
2011-03-17 21:34:34 +01:00
2006-09-02 13:14:57 +00:00
/**
* The object used to represent folders ( a . k . a . categories ) in the admin tree block .
2006-09-20 21:00:45 +00:00
*
2006-09-02 13:14:57 +00:00
* Each admin_category object contains a number of part_of_admin_tree objects .
*
2009-05-22 02:05:46 +00:00
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2006-09-02 13:14:57 +00:00
*/
2009-01-11 16:42:19 +00:00
class admin_category implements parentable_part_of_admin_tree {
2006-09-02 13:14:57 +00:00
2013-11-28 10:57:14 +13:00
/** @var part_of_admin_tree[] An array of part_of_admin_tree objects that are this object's children */
protected $children ;
2009-06-30 15:19:12 +00:00
/** @var string An internal name for this category. Must be unique amongst ALL part_of_admin_tree objects */
2009-01-11 16:42:19 +00:00
public $name ;
2009-06-30 15:19:12 +00:00
/** @var string The displayed name for this category. Usually obtained through get_string() */
2009-01-11 16:42:19 +00:00
public $visiblename ;
2009-06-30 15:19:12 +00:00
/** @var bool Should this category be hidden in admin tree block? */
2009-01-11 16:42:19 +00:00
public $hidden ;
2009-06-30 15:19:12 +00:00
/** @var mixed Either a string or an array or strings */
2009-01-11 16:42:19 +00:00
public $path ;
2009-06-30 15:19:12 +00:00
/** @var mixed Either a string or an array or strings */
2009-01-11 16:42:19 +00:00
public $visiblepath ;
2006-09-02 13:14:57 +00:00
2011-02-14 16:39:08 +01:00
/** @var array fast lookup category cache, all categories of one tree point to one cache */
protected $category_cache ;
2013-11-28 10:57:14 +13:00
/** @var bool If set to true children will be sorted when calling {@link admin_category::get_children()} */
protected $sort = false ;
/** @var bool If set to true children will be sorted in ascending order. */
protected $sortasc = true ;
/** @var bool If set to true sub categories and pages will be split and then sorted.. */
protected $sortsplit = true ;
/** @var bool $sorted True if the children have been sorted and don't need resorting */
protected $sorted = false ;
2006-09-02 13:14:57 +00:00
/**
* Constructor for an empty admin category
*
* @ param string $name The internal name for this category . Must be unique amongst ALL part_of_admin_tree objects
* @ param string $visiblename The displayed named for this category . Usually obtained through get_string ()
2009-05-22 02:05:46 +00:00
* @ param bool $hidden hide category in admin tree block , defaults to false
2006-09-02 13:14:57 +00:00
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $name , $visiblename , $hidden = false ) {
2007-12-19 17:35:20 +00:00
$this -> children = array ();
$this -> name = $name ;
2006-09-02 13:14:57 +00:00
$this -> visiblename = $visiblename ;
2007-12-19 17:35:20 +00:00
$this -> hidden = $hidden ;
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2006-09-02 13:14:57 +00:00
/**
2007-12-19 17:35:20 +00:00
* Returns a reference to the part_of_admin_tree object with internal name $name .
2006-09-02 13:14:57 +00:00
*
2007-12-19 17:35:20 +00:00
* @ param string $name The internal name of the object we want .
* @ param bool $findpath initialize path and visiblepath arrays
2009-06-30 15:19:12 +00:00
* @ return mixed A reference to the object with internal name $name if found , otherwise a reference to NULL .
2009-05-22 02:05:46 +00:00
* defaults to false
2006-09-02 13:14:57 +00:00
*/
2009-01-11 16:42:19 +00:00
public function locate ( $name , $findpath = false ) {
2013-05-03 14:13:17 +01:00
if ( ! isset ( $this -> category_cache [ $this -> name ])) {
2011-02-14 16:39:08 +01:00
// somebody much have purged the cache
$this -> category_cache [ $this -> name ] = $this ;
}
2006-09-02 13:14:57 +00:00
if ( $this -> name == $name ) {
2007-12-19 17:35:20 +00:00
if ( $findpath ) {
$this -> visiblepath [] = $this -> visiblename ;
$this -> path [] = $this -> name ;
}
return $this ;
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2011-02-14 16:39:08 +01:00
// quick category lookup
2013-05-03 14:13:17 +01:00
if ( ! $findpath and isset ( $this -> category_cache [ $name ])) {
2011-02-14 16:39:08 +01:00
return $this -> category_cache [ $name ];
}
2007-12-19 17:35:20 +00:00
$return = NULL ;
foreach ( $this -> children as $childid => $unused ) {
2009-01-11 16:42:19 +00:00
if ( $return = $this -> children [ $childid ] -> locate ( $name , $findpath )) {
2007-12-19 17:35:20 +00:00
break ;
2006-09-02 13:14:57 +00:00
}
}
2006-09-20 21:00:45 +00:00
2007-12-19 17:35:20 +00:00
if ( ! is_null ( $return ) and $findpath ) {
$return -> visiblepath [] = $this -> visiblename ;
$return -> path [] = $this -> name ;
}
2006-09-20 21:00:45 +00:00
2007-12-19 17:35:20 +00:00
return $return ;
2006-09-02 13:14:57 +00:00
}
/**
2007-12-19 17:35:20 +00:00
* Search using query
2009-05-22 02:05:46 +00:00
*
* @ param string query
2007-12-19 17:35:20 +00:00
* @ return mixed array - object structure of found settings and pages
2006-09-02 13:14:57 +00:00
*/
2009-01-11 16:42:19 +00:00
public function search ( $query ) {
2007-12-19 17:35:20 +00:00
$result = array ();
2013-11-28 10:57:14 +13:00
foreach ( $this -> get_children () as $child ) {
2007-12-20 14:39:12 +00:00
$subsearch = $child -> search ( $query );
if ( ! is_array ( $subsearch )) {
debugging ( 'Incorrect search result from ' . $child -> name );
continue ;
}
$result = array_merge ( $result , $subsearch );
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
return $result ;
2006-09-02 13:14:57 +00:00
}
2006-09-02 19:30:54 +00:00
/**
* Removes part_of_admin_tree object with internal name $name .
*
* @ param string $name The internal name of the object we want to remove .
2006-09-24 20:23:40 +00:00
* @ return bool success
2006-09-02 19:30:54 +00:00
*/
2009-01-11 16:42:19 +00:00
public function prune ( $name ) {
2006-09-02 19:30:54 +00:00
if ( $this -> name == $name ) {
return false ; //can not remove itself
}
foreach ( $this -> children as $precedence => $child ) {
if ( $child -> name == $name ) {
2011-02-14 16:39:08 +01:00
// clear cache and delete self
2013-05-03 14:13:17 +01:00
while ( $this -> category_cache ) {
// delete the cache, but keep the original array address
array_pop ( $this -> category_cache );
2011-02-14 16:39:08 +01:00
}
2006-09-20 21:00:45 +00:00
unset ( $this -> children [ $precedence ]);
2006-09-02 19:30:54 +00:00
return true ;
2011-02-14 16:39:08 +01:00
} else if ( $this -> children [ $precedence ] -> prune ( $name )) {
2006-09-02 19:30:54 +00:00
return true ;
}
}
return false ;
}
2006-09-02 13:14:57 +00:00
/**
* Adds a part_of_admin_tree to a child or grandchild ( or great - grandchild , and so forth ) of this object .
*
2013-03-15 00:47:11 +01:00
* By default the new part of the tree is appended as the last child of the parent . You
* can specify a sibling node that the new part should be prepended to . If the given
* sibling is not found , the part is appended to the end ( as it would be by default ) and
* a developer debugging message is displayed .
*
* @ throws coding_exception if the $beforesibling is empty string or is not string at all .
2007-12-19 17:35:20 +00:00
* @ param string $destinationame The internal name of the immediate parent that we want for $something .
2010-05-21 19:06:38 +00:00
* @ param mixed $something A part_of_admin_tree or setting instance to be added .
2013-03-15 00:47:11 +01:00
* @ param string $beforesibling The name of the parent ' s child the $something should be prepended to .
2007-12-19 17:35:20 +00:00
* @ return bool True if successfully added , false if $something can not be added .
2006-09-02 13:14:57 +00:00
*/
2013-03-15 00:47:11 +01:00
public function add ( $parentname , $something , $beforesibling = null ) {
2013-08-10 22:46:49 +02:00
global $CFG ;
2009-01-11 16:42:19 +00:00
$parent = $this -> locate ( $parentname );
2007-12-19 17:35:20 +00:00
if ( is_null ( $parent )) {
debugging ( 'parent does not exist!' );
2006-09-02 13:14:57 +00:00
return false ;
}
2009-01-11 16:42:19 +00:00
if ( $something instanceof part_of_admin_tree ) {
if ( ! ( $parent instanceof parentable_part_of_admin_tree )) {
2007-12-19 17:35:20 +00:00
debugging ( 'error - parts of tree can be inserted only into parentable parts' );
return false ;
2006-09-02 13:14:57 +00:00
}
2013-08-10 22:46:49 +02:00
if ( $CFG -> debugdeveloper && ! is_null ( $this -> locate ( $something -> name ))) {
2012-11-01 11:49:31 +08:00
// The name of the node is already used, simply warn the developer that this should not happen.
// It is intentional to check for the debug level before performing the check.
debugging ( 'Duplicate admin page name: ' . $something -> name , DEBUG_DEVELOPER );
}
2013-03-15 00:47:11 +01:00
if ( is_null ( $beforesibling )) {
// Append $something as the parent's last child.
$parent -> children [] = $something ;
} else {
if ( ! is_string ( $beforesibling ) or trim ( $beforesibling ) === '' ) {
throw new coding_exception ( 'Unexpected value of the beforesibling parameter' );
}
// Try to find the position of the sibling.
$siblingposition = null ;
foreach ( $parent -> children as $childposition => $child ) {
if ( $child -> name === $beforesibling ) {
$siblingposition = $childposition ;
break ;
}
}
if ( is_null ( $siblingposition )) {
debugging ( 'Sibling ' . $beforesibling . ' not found' , DEBUG_DEVELOPER );
$parent -> children [] = $something ;
} else {
$parent -> children = array_merge (
array_slice ( $parent -> children , 0 , $siblingposition ),
array ( $something ),
array_slice ( $parent -> children , $siblingposition )
);
}
}
2013-05-03 14:13:17 +01:00
if ( $something instanceof admin_category ) {
2011-02-14 16:39:08 +01:00
if ( isset ( $this -> category_cache [ $something -> name ])) {
2011-03-17 21:34:34 +01:00
debugging ( 'Duplicate admin category name: ' . $something -> name );
2011-02-14 16:39:08 +01:00
} else {
$this -> category_cache [ $something -> name ] = $something ;
$something -> category_cache =& $this -> category_cache ;
foreach ( $something -> children as $child ) {
// just in case somebody already added subcategories
if ( $child instanceof admin_category ) {
if ( isset ( $this -> category_cache [ $child -> name ])) {
2011-03-17 21:34:34 +01:00
debugging ( 'Duplicate admin category name: ' . $child -> name );
2011-02-14 16:39:08 +01:00
} else {
$this -> category_cache [ $child -> name ] = $child ;
$child -> category_cache =& $this -> category_cache ;
}
}
}
}
}
2006-09-02 13:14:57 +00:00
return true ;
2006-09-20 21:00:45 +00:00
2007-12-19 17:35:20 +00:00
} else {
debugging ( 'error - can not add this element' );
return false ;
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2006-09-02 13:14:57 +00:00
/**
* Checks if the user has access to anything in this category .
*
2010-05-21 19:06:38 +00:00
* @ return bool True if the user has access to at least one child in this category , false otherwise .
2006-09-02 13:14:57 +00:00
*/
2009-01-11 16:42:19 +00:00
public function check_access () {
2006-09-02 13:14:57 +00:00
foreach ( $this -> children as $child ) {
2007-12-19 17:35:20 +00:00
if ( $child -> check_access ()) {
return true ;
}
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
return false ;
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2006-09-24 20:23:40 +00:00
/**
* Is this category hidden in admin tree block ?
*
* @ return bool True if hidden
*/
2009-01-11 16:42:19 +00:00
public function is_hidden () {
2006-09-24 20:23:40 +00:00
return $this -> hidden ;
}
2010-02-08 16:26:15 +00:00
/**
* Show we display Save button at the page bottom ?
* @ return bool
*/
public function show_save () {
foreach ( $this -> children as $child ) {
if ( $child -> show_save ()) {
return true ;
}
}
return false ;
}
2013-11-28 10:57:14 +13:00
/**
* Sets sorting on this category .
*
* Please note this function doesn ' t actually do the sorting .
* It can be called anytime .
* Sorting occurs when the user calls get_children .
* Code using the children array directly won ' t see the sorted results .
*
* @ param bool $sort If set to true children will be sorted , if false they won ' t be .
* @ param bool $asc If true sorting will be ascending , otherwise descending .
* @ param bool $split If true we sort pages and sub categories separately .
*/
public function set_sorting ( $sort , $asc = true , $split = true ) {
$this -> sort = ( bool ) $sort ;
$this -> sortasc = ( bool ) $asc ;
$this -> sortsplit = ( bool ) $split ;
}
/**
* Returns the children associated with this category .
*
* @ return part_of_admin_tree []
*/
public function get_children () {
// If we should sort and it hasn't already been sorted.
if ( $this -> sort && ! $this -> sorted ) {
if ( $this -> sortsplit ) {
$categories = array ();
$pages = array ();
foreach ( $this -> children as $child ) {
if ( $child instanceof admin_category ) {
$categories [] = $child ;
} else {
$pages [] = $child ;
}
}
core_collator :: asort_objects_by_property ( $categories , 'visiblename' );
core_collator :: asort_objects_by_property ( $pages , 'visiblename' );
if ( ! $this -> sortasc ) {
$categories = array_reverse ( $categories );
$pages = array_reverse ( $pages );
}
$this -> children = array_merge ( $pages , $categories );
} else {
core_collator :: asort_objects_by_property ( $this -> children , 'visiblename' );
if ( ! $this -> sortasc ) {
$this -> children = array_reverse ( $this -> children );
}
}
$this -> sorted = true ;
}
return $this -> children ;
}
/**
* Magically gets a property from this object .
*
* @ param $property
* @ return part_of_admin_tree []
* @ throws coding_exception
*/
public function __get ( $property ) {
if ( $property === 'children' ) {
return $this -> get_children ();
}
throw new coding_exception ( 'Invalid property requested.' );
}
/**
* Magically sets a property against this object .
*
* @ param string $property
* @ param mixed $value
* @ throws coding_exception
*/
public function __set ( $property , $value ) {
if ( $property === 'children' ) {
$this -> sorted = false ;
$this -> children = $value ;
} else {
throw new coding_exception ( 'Invalid property requested.' );
}
}
/**
* Checks if an inaccessible property is set .
*
* @ param string $property
* @ return bool
* @ throws coding_exception
*/
public function __isset ( $property ) {
if ( $property === 'children' ) {
return isset ( $this -> children );
}
throw new coding_exception ( 'Invalid property requested.' );
}
2006-09-02 13:14:57 +00:00
}
2011-03-17 21:34:34 +01:00
2009-05-22 02:05:46 +00:00
/**
2009-06-30 15:19:12 +00:00
* Root of admin settings tree , does not have any parent .
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
2007-12-19 17:35:20 +00:00
class admin_root extends admin_category {
2009-09-09 07:55:03 +00:00
/** @var array List of errors */
2009-01-11 16:42:19 +00:00
public $errors ;
2009-06-30 15:19:12 +00:00
/** @var string search query */
2009-01-11 16:42:19 +00:00
public $search ;
2010-05-21 19:06:38 +00:00
/** @var bool full tree flag - true means all settings required, false only pages required */
2009-01-11 16:42:19 +00:00
public $fulltree ;
2009-06-30 15:19:12 +00:00
/** @var bool flag indicating loaded tree */
2009-01-11 16:42:19 +00:00
public $loaded ;
2010-05-21 19:06:38 +00:00
/** @var mixed site custom defaults overriding defaults in settings files*/
2009-02-01 10:19:13 +00:00
public $custom_defaults ;
2009-05-22 02:05:46 +00:00
/**
2009-06-30 15:19:12 +00:00
* @ param bool $fulltree true means all settings required ,
2009-05-22 02:05:46 +00:00
* false only pages required
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $fulltree ) {
2009-02-01 10:19:13 +00:00
global $CFG ;
2009-01-11 16:42:19 +00:00
parent :: __construct ( 'root' , get_string ( 'administration' ), false );
2007-12-19 17:35:20 +00:00
$this -> errors = array ();
$this -> search = '' ;
2009-01-11 16:42:19 +00:00
$this -> fulltree = $fulltree ;
$this -> loaded = false ;
2009-02-01 10:19:13 +00:00
2011-02-14 16:39:08 +01:00
$this -> category_cache = array ();
2009-02-01 10:19:13 +00:00
// load custom defaults if found
$this -> custom_defaults = null ;
$defaultsfile = " $CFG->dirroot /local/defaults.php " ;
if ( is_readable ( $defaultsfile )) {
$defaults = array ();
include ( $defaultsfile );
if ( is_array ( $defaults ) and count ( $defaults )) {
$this -> custom_defaults = $defaults ;
}
}
2009-01-11 16:42:19 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Empties children array , and sets loaded to false
*
* @ param bool $requirefulltree
*/
2009-01-11 16:42:19 +00:00
public function purge_children ( $requirefulltree ) {
$this -> children = array ();
$this -> fulltree = ( $requirefulltree || $this -> fulltree );
$this -> loaded = false ;
2011-02-14 16:39:08 +01:00
//break circular dependencies - this helps PHP 5.2
while ( $this -> category_cache ) {
array_pop ( $this -> category_cache );
}
$this -> category_cache = array ();
2007-12-19 17:35:20 +00:00
}
}
2011-03-17 21:34:34 +01:00
2006-09-02 13:14:57 +00:00
/**
* Links external PHP pages into the admin tree .
*
* See detailed usage example at the top of this document ( adminlib . php )
*
2009-05-22 02:05:46 +00:00
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2006-09-02 13:14:57 +00:00
*/
2009-01-11 16:42:19 +00:00
class admin_externalpage implements part_of_admin_tree {
2006-09-02 13:14:57 +00:00
2011-03-17 21:34:34 +01:00
/** @var string An internal name for this external page. Must be unique amongst ALL part_of_admin_tree objects */
2009-01-11 16:42:19 +00:00
public $name ;
2006-09-20 21:00:45 +00:00
2009-06-30 15:19:12 +00:00
/** @var string The displayed name for this external page. Usually obtained through get_string(). */
2009-01-11 16:42:19 +00:00
public $visiblename ;
2006-09-20 21:00:45 +00:00
2009-06-30 15:19:12 +00:00
/** @var string The external URL that we should link to when someone requests this external page. */
2009-01-11 16:42:19 +00:00
public $url ;
2006-09-20 21:00:45 +00:00
2009-06-30 15:19:12 +00:00
/** @var string The role capability/permission a user must have to access this external page. */
2009-01-11 16:42:19 +00:00
public $req_capability ;
2006-09-20 21:00:45 +00:00
2009-06-30 15:19:12 +00:00
/** @var object The context in which capability/permission should be checked, default is site context. */
2009-01-11 16:42:19 +00:00
public $context ;
2007-01-29 21:29:27 +00:00
2009-06-30 15:19:12 +00:00
/** @var bool hidden in admin tree block. */
2009-01-11 16:42:19 +00:00
public $hidden ;
2006-09-24 20:23:40 +00:00
2009-06-30 15:19:12 +00:00
/** @var mixed either string or array of string */
2009-01-11 16:42:19 +00:00
public $path ;
2011-03-17 21:34:34 +01:00
/** @var array list of visible names of page parents */
2009-01-11 16:42:19 +00:00
public $visiblepath ;
2007-12-19 17:35:20 +00:00
2006-09-02 13:14:57 +00:00
/**
* Constructor for adding an external page into the admin tree .
*
* @ param string $name The internal name for this external page . Must be unique amongst ALL part_of_admin_tree objects .
* @ param string $visiblename The displayed name for this external page . Usually obtained through get_string () .
* @ param string $url The external URL that we should link to when someone requests this external page .
2006-09-24 11:55:11 +00:00
* @ param mixed $req_capability The role capability / permission a user must have to access this external page . Defaults to 'moodle/site:config' .
2008-12-11 09:21:41 +00:00
* @ param boolean $hidden Is this external page hidden in admin tree block ? Default false .
2010-09-17 09:33:05 +00:00
* @ param stdClass $context The context the page relates to . Not sure what happens
2008-12-11 09:21:41 +00:00
* if you specify something other than system or front page . Defaults to system .
2006-09-02 13:14:57 +00:00
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $name , $visiblename , $url , $req_capability = 'moodle/site:config' , $hidden = false , $context = NULL ) {
2007-12-19 17:35:20 +00:00
$this -> name = $name ;
2006-09-02 13:14:57 +00:00
$this -> visiblename = $visiblename ;
2007-12-19 17:35:20 +00:00
$this -> url = $url ;
2006-09-24 11:55:11 +00:00
if ( is_array ( $req_capability )) {
$this -> req_capability = $req_capability ;
} else {
$this -> req_capability = array ( $req_capability );
}
2008-12-11 09:21:41 +00:00
$this -> hidden = $hidden ;
2007-01-29 21:29:27 +00:00
$this -> context = $context ;
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2006-09-02 13:14:57 +00:00
/**
* Returns a reference to the part_of_admin_tree object with internal name $name .
*
* @ param string $name The internal name of the object we want .
2009-05-22 02:05:46 +00:00
* @ param bool $findpath defaults to false
2006-09-02 13:14:57 +00:00
* @ return mixed A reference to the object with internal name $name if found , otherwise a reference to NULL .
*/
2009-01-11 16:42:19 +00:00
public function locate ( $name , $findpath = false ) {
2007-12-19 17:35:20 +00:00
if ( $this -> name == $name ) {
if ( $findpath ) {
$this -> visiblepath = array ( $this -> visiblename );
$this -> path = array ( $this -> name );
}
return $this ;
} else {
$return = NULL ;
return $return ;
}
2006-09-02 13:14:57 +00:00
}
2006-09-02 19:30:54 +00:00
2009-05-22 02:05:46 +00:00
/**
* This function always returns false , required function by interface
*
* @ param string $name
* @ return false
*/
2009-01-11 16:42:19 +00:00
public function prune ( $name ) {
2006-09-02 19:30:54 +00:00
return false ;
}
2007-12-19 17:35:20 +00:00
/**
* Search using query
2009-05-22 02:05:46 +00:00
*
* @ param string $query
2007-12-19 17:35:20 +00:00
* @ return mixed array - object structure of found settings and pages
*/
2009-01-11 16:42:19 +00:00
public function search ( $query ) {
2007-12-19 17:35:20 +00:00
$found = false ;
if ( strpos ( strtolower ( $this -> name ), $query ) !== false ) {
$found = true ;
2013-08-06 20:58:28 +02:00
} else if ( strpos ( core_text :: strtolower ( $this -> visiblename ), $query ) !== false ) {
2009-09-09 07:55:03 +00:00
$found = true ;
}
2007-12-19 17:35:20 +00:00
if ( $found ) {
2010-09-21 08:07:44 +00:00
$result = new stdClass ();
2007-12-19 17:35:20 +00:00
$result -> page = $this ;
$result -> settings = array ();
return array ( $this -> name => $result );
} else {
return array ();
}
}
2006-09-02 13:14:57 +00:00
/**
2006-09-21 08:18:14 +00:00
* Determines if the current user has access to this external page based on $this -> req_capability .
2009-05-22 02:05:46 +00:00
*
2006-09-02 13:14:57 +00:00
* @ return bool True if user has access , false otherwise .
*/
2009-01-11 16:42:19 +00:00
public function check_access () {
2009-01-11 09:41:48 +00:00
global $CFG ;
2012-07-25 16:25:55 +08:00
$context = empty ( $this -> context ) ? context_system :: instance () : $this -> context ;
2006-09-24 11:55:11 +00:00
foreach ( $this -> req_capability as $cap ) {
2010-03-31 07:41:31 +00:00
if ( has_capability ( $cap , $context )) {
2006-09-24 11:55:11 +00:00
return true ;
}
}
return false ;
2006-09-02 13:14:57 +00:00
}
2006-09-24 20:23:40 +00:00
/**
* Is this external page hidden in admin tree block ?
*
* @ return bool True if hidden
*/
2009-01-11 16:42:19 +00:00
public function is_hidden () {
2006-09-24 20:23:40 +00:00
return $this -> hidden ;
}
2010-02-08 16:26:15 +00:00
/**
* Show we display Save button at the page bottom ?
* @ return bool
*/
public function show_save () {
return false ;
}
2006-09-02 13:14:57 +00:00
}
2011-03-17 21:34:34 +01:00
2006-09-02 13:14:57 +00:00
/**
* Used to group a number of admin_setting objects into a page and add them to the admin tree .
*
2009-05-22 02:05:46 +00:00
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2006-09-02 13:14:57 +00:00
*/
2009-01-11 16:42:19 +00:00
class admin_settingpage implements part_of_admin_tree {
2006-09-02 13:14:57 +00:00
2011-03-17 21:34:34 +01:00
/** @var string An internal name for this external page. Must be unique amongst ALL part_of_admin_tree objects */
2009-01-11 16:42:19 +00:00
public $name ;
2006-09-20 21:00:45 +00:00
2009-06-30 15:19:12 +00:00
/** @var string The displayed name for this external page. Usually obtained through get_string(). */
2009-01-11 16:42:19 +00:00
public $visiblename ;
2009-06-30 15:19:12 +00:00
/** @var mixed An array of admin_setting objects that are part of this setting page. */
2009-01-11 16:42:19 +00:00
public $settings ;
2006-09-20 21:00:45 +00:00
2009-06-30 15:19:12 +00:00
/** @var string The role capability/permission a user must have to access this external page. */
2009-01-11 16:42:19 +00:00
public $req_capability ;
2006-09-20 21:00:45 +00:00
2009-06-30 15:19:12 +00:00
/** @var object The context in which capability/permission should be checked, default is site context. */
2009-01-11 16:42:19 +00:00
public $context ;
2007-01-29 21:29:27 +00:00
2009-06-30 15:19:12 +00:00
/** @var bool hidden in admin tree block. */
2009-01-11 16:42:19 +00:00
public $hidden ;
2006-09-24 20:23:40 +00:00
2009-06-30 15:19:12 +00:00
/** @var mixed string of paths or array of strings of paths */
2009-01-11 16:42:19 +00:00
public $path ;
2011-03-17 21:34:34 +01:00
/** @var array list of visible names of page parents */
2009-01-11 16:42:19 +00:00
public $visiblepath ;
2007-12-19 17:35:20 +00:00
2009-05-22 02:05:46 +00:00
/**
* see admin_settingpage for details of this function
2009-06-30 15:19:12 +00:00
*
2009-05-22 02:05:46 +00:00
* @ param string $name The internal name for this external page . Must be unique amongst ALL part_of_admin_tree objects .
* @ param string $visiblename The displayed name for this external page . Usually obtained through get_string () .
* @ param mixed $req_capability The role capability / permission a user must have to access this external page . Defaults to 'moodle/site:config' .
* @ param boolean $hidden Is this external page hidden in admin tree block ? Default false .
2010-09-17 09:33:05 +00:00
* @ param stdClass $context The context the page relates to . Not sure what happens
2009-05-22 02:05:46 +00:00
* if you specify something other than system or front page . Defaults to system .
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $name , $visiblename , $req_capability = 'moodle/site:config' , $hidden = false , $context = NULL ) {
2010-09-21 08:07:44 +00:00
$this -> settings = new stdClass ();
2007-12-19 17:35:20 +00:00
$this -> name = $name ;
$this -> visiblename = $visiblename ;
if ( is_array ( $req_capability )) {
$this -> req_capability = $req_capability ;
2006-09-02 13:14:57 +00:00
} else {
2007-12-19 17:35:20 +00:00
$this -> req_capability = array ( $req_capability );
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
$this -> hidden = $hidden ;
$this -> context = $context ;
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2009-06-30 15:19:12 +00:00
/**
2009-05-22 02:05:46 +00:00
* see admin_category
*
* @ param string $name
* @ param bool $findpath
* @ return mixed Object ( this ) if name == this -> name , else returns null
*/
2009-01-11 16:42:19 +00:00
public function locate ( $name , $findpath = false ) {
2007-12-19 17:35:20 +00:00
if ( $this -> name == $name ) {
if ( $findpath ) {
$this -> visiblepath = array ( $this -> visiblename );
$this -> path = array ( $this -> name );
}
return $this ;
} else {
$return = NULL ;
return $return ;
}
2006-09-02 13:14:57 +00:00
}
2006-09-02 19:30:54 +00:00
2009-06-30 15:19:12 +00:00
/**
* Search string in settings page .
*
2009-05-22 02:05:46 +00:00
* @ param string $query
* @ return array
*/
2009-01-11 16:42:19 +00:00
public function search ( $query ) {
2007-12-19 17:35:20 +00:00
$found = array ();
2006-09-02 19:30:54 +00:00
2007-12-19 17:35:20 +00:00
foreach ( $this -> settings as $setting ) {
if ( $setting -> is_related ( $query )) {
$found [] = $setting ;
}
}
if ( $found ) {
2010-09-21 08:07:44 +00:00
$result = new stdClass ();
2007-12-19 17:35:20 +00:00
$result -> page = $this ;
$result -> settings = $found ;
return array ( $this -> name => $result );
}
$found = false ;
if ( strpos ( strtolower ( $this -> name ), $query ) !== false ) {
$found = true ;
2013-08-06 20:58:28 +02:00
} else if ( strpos ( core_text :: strtolower ( $this -> visiblename ), $query ) !== false ) {
2009-09-09 07:55:03 +00:00
$found = true ;
}
2007-12-19 17:35:20 +00:00
if ( $found ) {
2010-09-21 08:07:44 +00:00
$result = new stdClass ();
2007-12-19 17:35:20 +00:00
$result -> page = $this ;
$result -> settings = array ();
return array ( $this -> name => $result );
2006-09-24 11:55:11 +00:00
} else {
2007-12-19 17:35:20 +00:00
return array ();
2006-09-24 11:55:11 +00:00
}
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2009-05-22 02:05:46 +00:00
/**
* This function always returns false , required by interface
*
* @ param string $name
* @ return bool Always false
*/
2009-01-11 16:42:19 +00:00
public function prune ( $name ) {
2006-09-02 13:14:57 +00:00
return false ;
}
2006-09-20 21:00:45 +00:00
2007-12-19 17:35:20 +00:00
/**
2009-05-22 02:05:46 +00:00
* adds an admin_setting to this admin_settingpage
*
2007-12-19 17:35:20 +00:00
* not the same as add for admin_category . adds an admin_setting to this admin_settingpage . settings appear ( on the settingpage ) in the order in which they ' re added
* n . b . each admin_setting in an admin_settingpage must have a unique internal name
2009-05-22 02:05:46 +00:00
*
2007-12-19 17:35:20 +00:00
* @ param object $setting is the admin_setting object you want to add
2009-05-22 02:05:46 +00:00
* @ return bool true if successful , false if not
2007-12-19 17:35:20 +00:00
*/
2009-01-11 16:42:19 +00:00
public function add ( $setting ) {
if ( ! ( $setting instanceof admin_setting )) {
2007-12-19 17:35:20 +00:00
debugging ( 'error - not a setting instance' );
return false ;
}
$this -> settings -> { $setting -> name } = $setting ;
return true ;
}
2009-05-22 02:05:46 +00:00
/**
* see admin_externalpage
*
* @ return bool Returns true for yes false for no
*/
2009-01-11 16:42:19 +00:00
public function check_access () {
2009-01-11 09:41:48 +00:00
global $CFG ;
2012-07-25 16:25:55 +08:00
$context = empty ( $this -> context ) ? context_system :: instance () : $this -> context ;
2006-09-24 11:55:11 +00:00
foreach ( $this -> req_capability as $cap ) {
2010-03-31 07:41:31 +00:00
if ( has_capability ( $cap , $context )) {
2006-09-24 11:55:11 +00:00
return true ;
}
}
return false ;
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2007-12-19 17:35:20 +00:00
/**
* outputs this page as html in a table ( suitable for inclusion in an admin pagetype )
2009-05-22 02:05:46 +00:00
* @ return string Returns an XHTML string
2007-12-19 17:35:20 +00:00
*/
2009-01-11 16:42:19 +00:00
public function output_html () {
$adminroot = admin_get_root ();
2007-12-19 17:35:20 +00:00
$return = '<fieldset>' . " \n " . '<div class="clearer"><!-- --></div>' . " \n " ;
2006-09-02 13:14:57 +00:00
foreach ( $this -> settings as $setting ) {
2007-12-19 17:35:20 +00:00
$fullname = $setting -> get_full_name ();
if ( array_key_exists ( $fullname , $adminroot -> errors )) {
$data = $adminroot -> errors [ $fullname ] -> data ;
2006-09-02 13:14:57 +00:00
} else {
2007-12-19 17:35:20 +00:00
$data = $setting -> get_setting ();
2010-04-30 08:03:32 +00:00
// do not use defaults if settings not available - upgrade settings handles the defaults!
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
$return .= $setting -> output_html ( $data );
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
$return .= '</fieldset>' ;
2006-09-02 13:14:57 +00:00
return $return ;
}
2006-09-24 20:23:40 +00:00
/**
2010-05-21 19:06:38 +00:00
* Is this settings page hidden in admin tree block ?
2006-09-24 20:23:40 +00:00
*
* @ return bool True if hidden
*/
2009-01-11 16:42:19 +00:00
public function is_hidden () {
2006-09-24 20:23:40 +00:00
return $this -> hidden ;
}
2010-02-08 16:26:15 +00:00
/**
* Show we display Save button at the page bottom ?
* @ return bool
*/
public function show_save () {
foreach ( $this -> settings as $setting ) {
if ( empty ( $setting -> nosave )) {
return true ;
}
}
return false ;
}
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
/**
* Admin settings class . Only exists on setting pages .
* Read & write happens at this level ; no authentication .
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
2009-01-13 19:02:00 +00:00
abstract class admin_setting {
2011-03-17 21:34:34 +01:00
/** @var string unique ascii name, either 'mysetting' for settings that in config, or 'myplugin/mysetting' for ones in config_plugins. */
2009-01-11 16:42:19 +00:00
public $name ;
2009-06-30 15:19:12 +00:00
/** @var string localised name */
2009-01-11 16:42:19 +00:00
public $visiblename ;
2010-05-17 21:08:57 +00:00
/** @var string localised long description in Markdown format */
2009-01-11 16:42:19 +00:00
public $description ;
2009-06-30 15:19:12 +00:00
/** @var mixed Can be string or array of string */
2009-01-11 16:42:19 +00:00
public $defaultsetting ;
2009-06-30 15:19:12 +00:00
/** @var string */
2009-01-11 16:42:19 +00:00
public $updatedcallback ;
2009-06-30 15:19:12 +00:00
/** @var mixed can be String or Null. Null means main config table */
2009-01-11 16:42:19 +00:00
public $plugin ; // null means main config table
2010-02-08 16:26:15 +00:00
/** @var bool true indicates this setting does not actually save anything, just information */
public $nosave = false ;
2011-03-11 17:26:23 +00:00
/** @var bool if set, indicates that a change to this setting requires rebuild course cache */
public $affectsmodinfo = false ;
2013-01-10 15:10:02 +08:00
/** @var array of admin_setting_flag - These are extra checkboxes attached to a setting. */
private $flags = array ();
2006-09-02 13:14:57 +00:00
2007-12-19 17:35:20 +00:00
/**
* Constructor
2009-06-30 15:19:12 +00:00
* @ param string $name unique ascii name , either 'mysetting' for settings that in config ,
2009-05-22 02:05:46 +00:00
* or 'myplugin/mysetting' for ones in config_plugins .
2008-09-18 10:23:03 +00:00
* @ param string $visiblename localised name
* @ param string $description localised long description
2007-12-19 17:35:20 +00:00
* @ param mixed $defaultsetting string or array depending on implementation
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $name , $visiblename , $description , $defaultsetting ) {
2008-09-18 09:55:04 +00:00
$this -> parse_setting_name ( $name );
2007-12-19 17:35:20 +00:00
$this -> visiblename = $visiblename ;
2010-09-08 07:48:17 +00:00
$this -> description = $description ;
2006-09-02 13:14:57 +00:00
$this -> defaultsetting = $defaultsetting ;
}
2006-09-20 21:00:45 +00:00
2013-01-10 15:10:02 +08:00
/**
* Generic function to add a flag to this admin setting .
*
* @ param bool $enabled - One of self :: OPTION_ENABLED or self :: OPTION_DISABLED
* @ param bool $default - The default for the flag
* @ param string $shortname - The shortname for this flag . Used as a suffix for the setting name .
* @ param string $displayname - The display name for this flag . Used as a label next to the checkbox .
*/
protected function set_flag_options ( $enabled , $default , $shortname , $displayname ) {
if ( empty ( $this -> flags [ $shortname ])) {
$this -> flags [ $shortname ] = new admin_setting_flag ( $enabled , $default , $shortname , $displayname );
} else {
$this -> flags [ $shortname ] -> set_options ( $enabled , $default );
}
}
/**
* Set the enabled options flag on this admin setting .
*
* @ param bool $enabled - One of self :: OPTION_ENABLED or self :: OPTION_DISABLED
* @ param bool $default - The default for the flag
*/
public function set_enabled_flag_options ( $enabled , $default ) {
$this -> set_flag_options ( $enabled , $default , 'enabled' , new lang_string ( 'enabled' , 'core_admin' ));
}
/**
* Set the advanced options flag on this admin setting .
*
* @ param bool $enabled - One of self :: OPTION_ENABLED or self :: OPTION_DISABLED
* @ param bool $default - The default for the flag
*/
public function set_advanced_flag_options ( $enabled , $default ) {
$this -> set_flag_options ( $enabled , $default , 'adv' , new lang_string ( 'advanced' ));
}
/**
* Set the locked options flag on this admin setting .
*
* @ param bool $enabled - One of self :: OPTION_ENABLED or self :: OPTION_DISABLED
* @ param bool $default - The default for the flag
*/
public function set_locked_flag_options ( $enabled , $default ) {
$this -> set_flag_options ( $enabled , $default , 'locked' , new lang_string ( 'locked' , 'core_admin' ));
}
/**
* Get the currently saved value for a setting flag
*
* @ param admin_setting_flag $flag - One of the admin_setting_flag for this admin_setting .
* @ return bool
*/
public function get_setting_flag_value ( admin_setting_flag $flag ) {
$value = $this -> config_read ( $this -> name . '_' . $flag -> get_shortname ());
if ( ! isset ( $value )) {
$value = $flag -> get_default ();
}
return ! empty ( $value );
}
/**
* Get the list of defaults for the flags on this setting .
*
* @ param array of strings describing the defaults for this setting . This is appended to by this function .
*/
public function get_setting_flag_defaults ( & $defaults ) {
foreach ( $this -> flags as $flag ) {
if ( $flag -> is_enabled () && $flag -> get_default ()) {
$defaults [] = $flag -> get_displayname ();
}
}
}
/**
* Output the input fields for the advanced and locked flags on this setting .
*
* @ param bool $adv - The current value of the advanced flag .
* @ param bool $locked - The current value of the locked flag .
* @ return string $output - The html for the flags .
*/
public function output_setting_flags () {
$output = '' ;
foreach ( $this -> flags as $flag ) {
if ( $flag -> is_enabled ()) {
$output .= $flag -> output_setting_flag ( $this );
}
}
2013-06-12 10:06:06 +08:00
if ( ! empty ( $output )) {
return html_writer :: tag ( 'span' , $output , array ( 'class' => 'adminsettingsflags' ));
}
2013-01-10 15:10:02 +08:00
return $output ;
}
/**
* Write the values of the flags for this admin setting .
*
2013-06-13 12:46:45 +08:00
* @ param array $data - The data submitted from the form or null to set the default value for new installs .
2013-01-10 15:10:02 +08:00
* @ return bool - true if successful .
*/
public function write_setting_flags ( $data ) {
$result = true ;
foreach ( $this -> flags as $flag ) {
$result = $result && $flag -> write_setting_flag ( $this , $data );
}
return $result ;
}
2008-09-18 09:55:04 +00:00
/**
2009-05-22 02:05:46 +00:00
* Set up $this -> name and potentially $this -> plugin
*
2008-09-18 09:55:04 +00:00
* Set up $this -> name and possibly $this -> plugin based on whether $name looks
* like 'settingname' or 'plugin/settingname' . Also , do some sanity checking
* on the names , that is , output a developer debug warning if the name
* contains anything other than [ a - zA - Z0 - 9_ ] +.
*
* @ param string $name the setting name passed in to the constructor .
*/
private function parse_setting_name ( $name ) {
$bits = explode ( '/' , $name );
if ( count ( $bits ) > 2 ) {
throw new moodle_exception ( 'invalidadminsettingname' , '' , '' , $name );
}
$this -> name = array_pop ( $bits );
if ( ! preg_match ( '/^[a-zA-Z0-9_]+$/' , $this -> name )) {
throw new moodle_exception ( 'invalidadminsettingname' , '' , '' , $name );
}
if ( ! empty ( $bits )) {
$this -> plugin = array_pop ( $bits );
2009-02-01 10:19:13 +00:00
if ( $this -> plugin === 'moodle' ) {
$this -> plugin = null ;
} else if ( ! preg_match ( '/^[a-zA-Z0-9_]+$/' , $this -> plugin )) {
2009-09-09 07:55:03 +00:00
throw new moodle_exception ( 'invalidadminsettingname' , '' , '' , $name );
}
2008-09-18 09:55:04 +00:00
}
}
2009-05-22 02:05:46 +00:00
/**
* Returns the fullname prefixed by the plugin
* @ return string
*/
2009-01-11 16:42:19 +00:00
public function get_full_name () {
2007-12-19 17:35:20 +00:00
return 's_' . $this -> plugin . '_' . $this -> name ;
}
2009-05-22 02:05:46 +00:00
/**
* Returns the ID string based on plugin and name
* @ return string
*/
2009-01-11 16:42:19 +00:00
public function get_id () {
2007-12-19 17:35:20 +00:00
return 'id_s_' . $this -> plugin . '_' . $this -> name ;
}
2011-03-11 17:26:23 +00:00
/**
* @ param bool $affectsmodinfo If true , changes to this setting will
* cause the course cache to be rebuilt
*/
public function set_affects_modinfo ( $affectsmodinfo ) {
$this -> affectsmodinfo = $affectsmodinfo ;
}
2009-05-22 02:05:46 +00:00
/**
* Returns the config if possible
*
2011-03-17 21:34:34 +01:00
* @ return mixed returns config if successful else null
2009-05-22 02:05:46 +00:00
*/
2009-01-11 16:42:19 +00:00
public function config_read ( $name ) {
2007-12-19 17:35:20 +00:00
global $CFG ;
2009-01-11 15:49:35 +00:00
if ( ! empty ( $this -> plugin )) {
2007-12-19 17:35:20 +00:00
$value = get_config ( $this -> plugin , $name );
return $value === false ? NULL : $value ;
} else {
if ( isset ( $CFG -> $name )) {
return $CFG -> $name ;
} else {
return NULL ;
}
}
}
2009-01-13 19:02:00 +00:00
/**
2009-05-22 02:05:46 +00:00
* Used to set a config pair and log change
2009-01-13 19:02:00 +00:00
*
2009-05-22 02:05:46 +00:00
* @ param string $name
* @ param mixed $value Gets converted to string if not null
2010-05-21 19:06:38 +00:00
* @ return bool Write setting to config table
2009-01-13 19:02:00 +00:00
*/
2009-01-11 16:42:19 +00:00
public function config_write ( $name , $value ) {
2009-01-13 19:02:00 +00:00
global $DB , $USER , $CFG ;
2010-02-08 16:26:15 +00:00
if ( $this -> nosave ) {
return true ;
}
2009-01-13 19:02:00 +00:00
// make sure it is a real change
$oldvalue = get_config ( $this -> plugin , $name );
$oldvalue = ( $oldvalue === false ) ? null : $oldvalue ; // normalise
$value = is_null ( $value ) ? null : ( string ) $value ;
if ( $oldvalue === $value ) {
return true ;
}
// store change
set_config ( $name , $value , $this -> plugin );
2011-03-11 17:26:23 +00:00
// Some admin settings affect course modinfo
if ( $this -> affectsmodinfo ) {
// Clear course cache for all courses
rebuild_course_cache ( 0 , true );
}
2013-12-09 09:11:02 +08:00
$this -> add_to_config_log ( $name , $oldvalue , $value );
2009-01-13 19:02:00 +00:00
return true ; // BC only
2007-12-19 17:35:20 +00:00
}
2013-12-09 09:11:02 +08:00
/**
* Log config changes if necessary .
* @ param string $name
* @ param string $oldvalue
* @ param string $value
*/
protected function add_to_config_log ( $name , $oldvalue , $value ) {
add_to_config_log ( $name , $oldvalue , $value , $this -> plugin );
}
2007-12-19 17:35:20 +00:00
/**
* Returns current value of this setting
* @ return mixed array or string depending on instance , NULL means not set yet
*/
2009-01-13 19:02:00 +00:00
public abstract function get_setting ();
2006-09-20 21:00:45 +00:00
2007-12-19 17:35:20 +00:00
/**
* Returns default setting if exists
* @ return mixed array or string depending on instance ; NULL means no default , user must supply
*/
2009-01-11 16:42:19 +00:00
public function get_defaultsetting () {
2009-02-01 10:19:13 +00:00
$adminroot = admin_get_root ( false , false );
if ( ! empty ( $adminroot -> custom_defaults )) {
$plugin = is_null ( $this -> plugin ) ? 'moodle' : $this -> plugin ;
if ( isset ( $adminroot -> custom_defaults [ $plugin ])) {
2010-05-21 19:06:38 +00:00
if ( array_key_exists ( $this -> name , $adminroot -> custom_defaults [ $plugin ])) { // null is valid value here ;-)
2009-02-01 10:19:13 +00:00
return $adminroot -> custom_defaults [ $plugin ][ $this -> name ];
}
}
}
2007-10-02 21:38:53 +00:00
return $this -> defaultsetting ;
}
2007-12-19 17:35:20 +00:00
/**
* Store new setting
2009-05-22 02:05:46 +00:00
*
* @ param mixed $data string or array , must not be NULL
* @ return string empty string if ok , string error message otherwise
2007-12-19 17:35:20 +00:00
*/
2009-01-13 19:02:00 +00:00
public abstract function write_setting ( $data );
2006-09-20 21:00:45 +00:00
2007-12-19 17:35:20 +00:00
/**
* Return part of form with setting
2009-05-22 02:05:46 +00:00
* This function should always be overwritten
*
* @ param mixed $data array or string depending on setting
* @ param string $query
2007-12-19 17:35:20 +00:00
* @ return string
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2009-09-09 07:55:03 +00:00
// should be overridden
2007-12-19 17:35:20 +00:00
return ;
}
/**
2009-05-22 02:05:46 +00:00
* Function called if setting updated - cleanup , cache reset , etc .
* @ param string $functionname Sets the function name
2011-03-17 21:34:34 +01:00
* @ return void
2007-12-19 17:35:20 +00:00
*/
2009-01-11 16:42:19 +00:00
public function set_updatedcallback ( $functionname ) {
2007-12-19 17:35:20 +00:00
$this -> updatedcallback = $functionname ;
}
2013-04-09 20:43:28 +02:00
/**
* Execute postupdatecallback if necessary .
* @ param mixed $original original value before write_setting ()
* @ return bool true if changed , false if not .
*/
public function post_write_settings ( $original ) {
// Comparison must work for arrays too.
if ( serialize ( $original ) === serialize ( $this -> get_setting ())) {
return false ;
}
$callbackfunction = $this -> updatedcallback ;
if ( ! empty ( $callbackfunction ) and function_exists ( $callbackfunction )) {
$callbackfunction ( $this -> get_full_name ());
}
return true ;
}
2007-12-19 17:35:20 +00:00
/**
* Is setting related to query text - used when searching
* @ param string $query
* @ return bool
*/
2009-01-11 16:42:19 +00:00
public function is_related ( $query ) {
2007-12-19 17:35:20 +00:00
if ( strpos ( strtolower ( $this -> name ), $query ) !== false ) {
return true ;
}
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $this -> visiblename ), $query ) !== false ) {
2007-12-19 17:35:20 +00:00
return true ;
}
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $this -> description ), $query ) !== false ) {
2007-12-19 17:35:20 +00:00
return true ;
}
2008-01-01 15:51:54 +00:00
$current = $this -> get_setting ();
if ( ! is_null ( $current )) {
if ( is_string ( $current )) {
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $current ), $query ) !== false ) {
2008-01-01 15:51:54 +00:00
return true ;
}
}
}
$default = $this -> get_defaultsetting ();
if ( ! is_null ( $default )) {
if ( is_string ( $default )) {
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $default ), $query ) !== false ) {
2008-01-01 15:51:54 +00:00
return true ;
}
}
}
2007-12-19 17:35:20 +00:00
return false ;
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
}
2006-09-20 21:00:45 +00:00
2013-01-10 15:10:02 +08:00
/**
* An additional option that can be applied to an admin setting .
* The currently supported options are 'ADVANCED' and 'LOCKED' .
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_flag {
/** @var bool Flag to indicate if this option can be toggled for this setting */
private $enabled = false ;
/** @var bool Flag to indicate if this option defaults to true or false */
private $default = false ;
/** @var string Short string used to create setting name - e.g. 'adv' */
private $shortname = '' ;
/** @var string String used as the label for this flag */
private $displayname = '' ;
/** @const Checkbox for this flag is displayed in admin page */
const ENABLED = true ;
/** @const Checkbox for this flag is not displayed in admin page */
const DISABLED = false ;
/**
* Constructor
*
* @ param bool $enabled Can this option can be toggled .
* Should be one of admin_setting_flag :: ENABLED or admin_setting_flag :: DISABLED .
* @ param bool $default The default checked state for this setting option .
* @ param string $shortname The shortname of this flag . Currently supported flags are 'locked' and 'adv'
* @ param string $displayname The displayname of this flag . Used as a label for the flag .
*/
public function __construct ( $enabled , $default , $shortname , $displayname ) {
$this -> shortname = $shortname ;
$this -> displayname = $displayname ;
$this -> set_options ( $enabled , $default );
}
/**
* Update the values of this setting options class
*
* @ param bool $enabled Can this option can be toggled .
* Should be one of admin_setting_flag :: ENABLED or admin_setting_flag :: DISABLED .
* @ param bool $default The default checked state for this setting option .
*/
public function set_options ( $enabled , $default ) {
$this -> enabled = $enabled ;
$this -> default = $default ;
}
/**
* Should this option appear in the interface and be toggleable ?
*
* @ return bool Is it enabled ?
*/
public function is_enabled () {
return $this -> enabled ;
}
/**
* Should this option be checked by default ?
*
* @ return bool Is it on by default ?
*/
public function get_default () {
return $this -> default ;
}
/**
* Return the short name for this flag . e . g . 'adv' or 'locked'
*
* @ return string
*/
public function get_shortname () {
return $this -> shortname ;
}
/**
* Return the display name for this flag . e . g . 'Advanced' or 'Locked'
*
* @ return string
*/
public function get_displayname () {
return $this -> displayname ;
}
/**
* Save the submitted data for this flag - or set it to the default if $data is null .
*
* @ param admin_setting $setting - The admin setting for this flag
2013-06-13 12:46:45 +08:00
* @ param array $data - The data submitted from the form or null to set the default value for new installs .
2013-01-10 15:10:02 +08:00
* @ return bool
*/
public function write_setting_flag ( admin_setting $setting , $data ) {
$result = true ;
if ( $this -> is_enabled ()) {
2013-06-13 12:46:45 +08:00
if ( ! isset ( $data )) {
$value = $this -> get_default ();
} else {
$value = ! empty ( $data [ $setting -> get_full_name () . '_' . $this -> get_shortname ()]);
}
2013-01-10 15:10:02 +08:00
$result = $setting -> config_write ( $setting -> name . '_' . $this -> get_shortname (), $value );
}
return $result ;
}
/**
* Output the checkbox for this setting flag . Should only be called if the flag is enabled .
*
* @ param admin_setting $setting - The admin setting for this flag
* @ return string - The html for the checkbox .
*/
public function output_setting_flag ( admin_setting $setting ) {
$value = $setting -> get_setting_flag_value ( $this );
$output = ' <input type="checkbox" class="form-checkbox" ' .
' id="' . $setting -> get_id () . '_' . $this -> get_shortname () . '" ' .
' name="' . $setting -> get_full_name () . '_' . $this -> get_shortname () . '" ' .
' value="1" ' . ( $value ? 'checked="checked"' : '' ) . ' />' .
' <label for="' . $setting -> get_id () . '_' . $this -> get_shortname () . '">' .
$this -> get_displayname () .
' </label> ' ;
return $output ;
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* No setting - just heading and text .
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
class admin_setting_heading extends admin_setting {
2011-03-17 21:34:34 +01:00
/**
* not a setting , just text
* @ param string $name unique ascii name , either 'mysetting' for settings that in config , or 'myplugin/mysetting' for ones in config_plugins .
* @ param string $heading heading
* @ param string $information text in box
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $name , $heading , $information ) {
2010-02-08 16:26:15 +00:00
$this -> nosave = true ;
2009-01-11 16:42:19 +00:00
parent :: __construct ( $name , $heading , $information , '' );
2007-12-19 17:35:20 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Always returns true
* @ return bool Always returns true
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2007-12-19 17:35:20 +00:00
return true ;
}
2009-05-22 02:05:46 +00:00
/**
* Always returns true
* @ return bool Always returns true
*/
2009-01-11 16:42:19 +00:00
public function get_defaultsetting () {
2007-12-19 17:35:20 +00:00
return true ;
}
2009-05-22 02:05:46 +00:00
/**
* Never write settings
* @ return string Always returns an empty string
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2009-09-09 07:55:03 +00:00
// do not write any setting
2007-12-19 17:35:20 +00:00
return '' ;
}
2009-06-30 15:19:12 +00:00
2009-05-22 02:05:46 +00:00
/**
* Returns an HTML string
* @ return string Returns an HTML string
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2009-08-06 08:19:21 +00:00
global $OUTPUT ;
2007-12-19 17:35:20 +00:00
$return = '' ;
if ( $this -> visiblename != '' ) {
2010-07-30 07:43:14 +00:00
$return .= $OUTPUT -> heading ( $this -> visiblename , 3 , 'main' );
2007-12-19 17:35:20 +00:00
}
if ( $this -> description != '' ) {
2010-09-08 07:48:17 +00:00
$return .= $OUTPUT -> box ( highlight ( $query , markdown_to_html ( $this -> description )), 'generalbox formsettingheading' );
2007-12-19 17:35:20 +00:00
}
return $return ;
}
}
2006-09-02 13:14:57 +00:00
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* The most flexibly setting , user is typing text
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
2006-09-02 13:14:57 +00:00
class admin_setting_configtext extends admin_setting {
2011-03-17 21:34:34 +01:00
/** @var mixed int means PARAM_XXX type, string is a allowed format in regex */
2009-01-11 16:42:19 +00:00
public $paramtype ;
2009-06-30 15:19:12 +00:00
/** @var int default field size */
2009-01-11 16:42:19 +00:00
public $size ;
2006-09-02 13:14:57 +00:00
2007-12-19 17:35:20 +00:00
/**
2010-05-21 19:06:38 +00:00
* Config text constructor
2009-05-22 02:05:46 +00:00
*
2008-09-18 10:23:03 +00:00
* @ param string $name unique ascii name , either 'mysetting' for settings that in config , or 'myplugin/mysetting' for ones in config_plugins .
2007-12-19 17:35:20 +00:00
* @ param string $visiblename localised
* @ param string $description long localised info
* @ param string $defaultsetting
* @ param mixed $paramtype int means PARAM_XXX type , string is a allowed format in regex
2008-02-05 11:45:05 +00:00
* @ param int $size default field size
2007-12-19 17:35:20 +00:00
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $name , $visiblename , $description , $defaultsetting , $paramtype = PARAM_RAW , $size = null ) {
2006-09-02 13:14:57 +00:00
$this -> paramtype = $paramtype ;
2008-02-05 11:45:05 +00:00
if ( ! is_null ( $size )) {
$this -> size = $size ;
} else {
2010-09-02 17:33:49 +00:00
$this -> size = ( $paramtype === PARAM_INT ) ? 5 : 30 ;
2008-02-05 11:45:05 +00:00
}
2009-01-11 16:42:19 +00:00
parent :: __construct ( $name , $visiblename , $description , $defaultsetting );
2006-09-02 13:14:57 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Return the setting
*
2010-05-21 19:06:38 +00:00
* @ return mixed returns config if successful else null
2009-05-22 02:05:46 +00:00
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2007-12-19 17:35:20 +00:00
return $this -> config_read ( $this -> name );
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2007-12-30 22:30:46 +00:00
if ( $this -> paramtype === PARAM_INT and $data === '' ) {
2009-09-09 07:55:03 +00:00
// do not complain if '' used instead of 0
2007-12-30 22:30:46 +00:00
$data = 0 ;
}
2007-12-19 17:35:20 +00:00
// $data is a string
2008-07-31 06:01:12 +00:00
$validated = $this -> validate ( $data );
2007-12-30 17:59:17 +00:00
if ( $validated !== true ) {
return $validated ;
2006-09-11 05:06:38 +00:00
}
2007-12-19 17:35:20 +00:00
return ( $this -> config_write ( $this -> name , $data ) ? '' : get_string ( 'errorsetting' , 'admin' ));
2006-09-02 13:14:57 +00:00
}
2007-12-30 17:59:17 +00:00
/**
* Validate data before storage
* @ param string data
* @ return mixed true if ok string if error found
*/
2009-01-11 16:42:19 +00:00
public function validate ( $data ) {
2009-09-18 03:52:50 +00:00
// allow paramtype to be a custom regex if it is the form of /pattern/
if ( preg_match ( '#^/.*/$#' , $this -> paramtype )) {
2007-12-30 17:59:17 +00:00
if ( preg_match ( $this -> paramtype , $data )) {
return true ;
} else {
return get_string ( 'validateerror' , 'admin' );
}
2006-09-26 08:16:17 +00:00
} else if ( $this -> paramtype === PARAM_RAW ) {
2009-09-21 02:52:34 +00:00
return true ;
2009-09-09 07:55:03 +00:00
2009-09-21 02:52:34 +00:00
} else {
$cleaned = clean_param ( $data , $this -> paramtype );
2010-09-02 17:33:49 +00:00
if ( " $data " === " $cleaned " ) { // implicit conversion to string is needed to do exact comparison
2009-09-21 02:52:34 +00:00
return true ;
2007-12-30 17:59:17 +00:00
} else {
2009-09-21 02:52:34 +00:00
return get_string ( 'validateerror' , 'admin' );
2007-12-30 17:59:17 +00:00
}
2009-09-21 02:52:34 +00:00
}
2006-09-11 05:06:38 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Return an XHTML string for the setting
* @ return string Returns an XHTML string
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2007-12-19 17:35:20 +00:00
$default = $this -> get_defaultsetting ();
return format_admin_setting ( $this , $this -> visiblename ,
2009-09-09 07:55:03 +00:00
'<div class="form-text defaultsnext"><input type="text" size="' . $this -> size . '" id="' . $this -> get_id () . '" name="' . $this -> get_full_name () . '" value="' . s ( $data ) . '" /></div>' ,
$this -> description , true , '' , $default , $query );
2006-09-02 13:14:57 +00:00
}
}
2015-05-27 13:19:45 +05:30
/**
* Text input with a maximum length constraint .
*
* @ copyright 2015 onwards Ankit Agarwal
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_configtext_with_maxlength extends admin_setting_configtext {
/** @var int maximum number of chars allowed. */
protected $maxlength ;
/**
* Config text constructor
*
* @ param string $name unique ascii name , either 'mysetting' for settings that in config ,
* or 'myplugin/mysetting' for ones in config_plugins .
* @ param string $visiblename localised
* @ param string $description long localised info
* @ param string $defaultsetting
* @ param mixed $paramtype int means PARAM_XXX type , string is a allowed format in regex
* @ param int $size default field size
* @ param mixed $maxlength int maxlength allowed , 0 for infinite .
*/
public function __construct ( $name , $visiblename , $description , $defaultsetting , $paramtype = PARAM_RAW ,
$size = null , $maxlength = 0 ) {
$this -> maxlength = $maxlength ;
parent :: __construct ( $name , $visiblename , $description , $defaultsetting , $paramtype , $size );
}
/**
* Validate data before storage
*
* @ param string $data data
* @ return mixed true if ok string if error found
*/
public function validate ( $data ) {
$parentvalidation = parent :: validate ( $data );
if ( $parentvalidation === true ) {
if ( $this -> maxlength > 0 ) {
// Max length check.
$length = core_text :: strlen ( $data );
if ( $length > $this -> maxlength ) {
return get_string ( 'maximumchars' , 'moodle' , $this -> maxlength );
}
return true ;
} else {
return true ; // No max length check needed.
}
} else {
return $parentvalidation ;
}
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* General text area without html editor .
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
class admin_setting_configtextarea extends admin_setting_configtext {
2009-05-31 14:42:29 +00:00
private $rows ;
private $cols ;
2007-04-26 07:08:12 +00:00
2009-05-22 02:05:46 +00:00
/**
* @ param string $name
* @ param string $visiblename
* @ param string $description
* @ param mixed $defaultsetting string or array
* @ param mixed $paramtype
* @ param string $cols The number of columns to make the editor
* @ param string $rows The number of rows to make the editor
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $name , $visiblename , $description , $defaultsetting , $paramtype = PARAM_RAW , $cols = '60' , $rows = '8' ) {
2007-12-19 17:35:20 +00:00
$this -> rows = $rows ;
$this -> cols = $cols ;
2009-01-11 16:42:19 +00:00
parent :: __construct ( $name , $visiblename , $description , $defaultsetting , $paramtype );
2007-04-26 07:08:12 +00:00
}
2011-03-17 21:34:34 +01:00
2009-05-22 02:05:46 +00:00
/**
* Returns an XHTML string for the editor
*
* @ param string $data
* @ param string $query
* @ return string XHTML string for the editor
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2007-12-19 17:35:20 +00:00
$default = $this -> get_defaultsetting ();
2008-01-01 15:51:54 +00:00
$defaultinfo = $default ;
if ( ! is_null ( $default ) and $default !== '' ) {
$defaultinfo = " \n " . $default ;
2008-07-31 06:01:12 +00:00
}
2007-12-19 17:35:20 +00:00
return format_admin_setting ( $this , $this -> visiblename ,
2013-04-07 18:18:01 +02:00
'<div class="form-textarea" ><textarea rows="' . $this -> rows . '" cols="' . $this -> cols . '" id="' . $this -> get_id () . '" name="' . $this -> get_full_name () . '" spellcheck="true">' . s ( $data ) . '</textarea></div>' ,
2009-09-09 07:55:03 +00:00
$this -> description , true , '' , $defaultinfo , $query );
2009-05-31 14:42:29 +00:00
}
}
2011-03-17 21:34:34 +01:00
2009-05-31 14:42:29 +00:00
/**
* General text area with html editor .
*/
class admin_setting_confightmleditor extends admin_setting_configtext {
private $rows ;
private $cols ;
2009-06-30 15:19:12 +00:00
2009-05-31 14:42:29 +00:00
/**
* @ param string $name
* @ param string $visiblename
* @ param string $description
* @ param mixed $defaultsetting string or array
* @ param mixed $paramtype
*/
public function __construct ( $name , $visiblename , $description , $defaultsetting , $paramtype = PARAM_RAW , $cols = '60' , $rows = '8' ) {
$this -> rows = $rows ;
$this -> cols = $cols ;
parent :: __construct ( $name , $visiblename , $description , $defaultsetting , $paramtype );
2009-06-24 22:34:29 +00:00
editors_head_setup ();
2009-05-31 14:42:29 +00:00
}
2011-03-17 21:34:34 +01:00
2009-05-31 14:42:29 +00:00
/**
* Returns an XHTML string for the editor
*
* @ param string $data
* @ param string $query
* @ return string XHTML string for the editor
*/
public function output_html ( $data , $query = '' ) {
$default = $this -> get_defaultsetting ();
$defaultinfo = $default ;
if ( ! is_null ( $default ) and $default !== '' ) {
$defaultinfo = " \n " . $default ;
}
2010-07-10 12:12:59 +00:00
$editor = editors_get_preferred_editor ( FORMAT_HTML );
2015-09-01 12:23:00 +08:00
$editor -> set_text ( $data );
2009-06-20 11:00:40 +00:00
$editor -> use_editor ( $this -> get_id (), array ( 'noclean' => true ));
2009-05-31 14:42:29 +00:00
return format_admin_setting ( $this , $this -> visiblename ,
2013-04-07 18:18:01 +02:00
'<div class="form-textarea"><textarea rows="' . $this -> rows . '" cols="' . $this -> cols . '" id="' . $this -> get_id () . '" name="' . $this -> get_full_name () . '" spellcheck="true">' . s ( $data ) . '</textarea></div>' ,
2009-09-09 07:55:03 +00:00
$this -> description , true , '' , $defaultinfo , $query );
2007-12-19 17:35:20 +00:00
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Password field , allows unmasking of password
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
class admin_setting_configpasswordunmask extends admin_setting_configtext {
2011-03-17 21:34:34 +01:00
/**
* Constructor
* @ param string $name unique ascii name , either 'mysetting' for settings that in config , or 'myplugin/mysetting' for ones in config_plugins .
* @ param string $visiblename localised
* @ param string $description long localised info
* @ param string $defaultsetting default password
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $name , $visiblename , $description , $defaultsetting ) {
parent :: __construct ( $name , $visiblename , $description , $defaultsetting , PARAM_RAW , 30 );
2007-12-19 17:35:20 +00:00
}
2009-06-30 15:19:12 +00:00
2013-12-09 09:11:02 +08:00
/**
* Log config changes if necessary .
* @ param string $name
* @ param string $oldvalue
* @ param string $value
*/
protected function add_to_config_log ( $name , $oldvalue , $value ) {
if ( $value !== '' ) {
$value = '********' ;
}
if ( $oldvalue !== '' and $oldvalue !== null ) {
$oldvalue = '********' ;
}
parent :: add_to_config_log ( $name , $oldvalue , $value );
}
2009-05-22 02:05:46 +00:00
/**
* Returns XHTML for the field
* Writes Javascript into the HTML below right before the last div
*
* @ todo Make javascript available through newer methods if possible
* @ param string $data Value for the field
* @ param string $query Passed as final argument for format_admin_setting
* @ return string XHTML field
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2007-12-19 17:35:20 +00:00
$id = $this -> get_id ();
$unmask = get_string ( 'unmaskpassword' , 'form' );
$unmaskjs = ' < script type = " text/javascript " >
2007-04-26 07:08:12 +00:00
//<![CDATA[
2008-08-26 06:41:37 +00:00
var is_ie = ( navigator . userAgent . toLowerCase () . indexOf ( " msie " ) != - 1 );
document . getElementById ( " '. $id .' " ) . setAttribute ( " autocomplete " , " off " );
var unmaskdiv = document . getElementById ( " '. $id .'unmaskdiv " );
var unmaskchb = document . createElement ( " input " );
unmaskchb . setAttribute ( " type " , " checkbox " );
unmaskchb . setAttribute ( " id " , " '. $id .'unmask " );
unmaskchb . onchange = function () { unmaskPassword ( " '. $id .' " );};
unmaskdiv . appendChild ( unmaskchb );
var unmasklbl = document . createElement ( " label " );
unmasklbl . innerHTML = " '.addslashes_js( $unmask ).' " ;
if ( is_ie ) {
unmasklbl . setAttribute ( " htmlFor " , " '. $id .'unmask " );
} else {
unmasklbl . setAttribute ( " for " , " '. $id .'unmask " );
}
unmaskdiv . appendChild ( unmasklbl );
if ( is_ie ) {
// ugly hack to work around the famous onchange IE bug
unmaskchb . onclick = function () { this . blur ();};
unmaskdiv . onclick = function () { this . blur ();};
}
2007-04-26 07:08:12 +00:00
//]]>
</ script > ' ;
2007-12-19 17:35:20 +00:00
return format_admin_setting ( $this , $this -> visiblename ,
2009-09-09 07:55:03 +00:00
'<div class="form-password"><input type="password" size="' . $this -> size . '" id="' . $id . '" name="' . $this -> get_full_name () . '" value="' . s ( $data ) . '" /><div class="unmask" id="' . $id . 'unmaskdiv"></div>' . $unmaskjs . '</div>' ,
$this -> description , true , '' , NULL , $query );
2007-12-19 17:35:20 +00:00
}
}
2013-06-12 13:45:48 +08:00
/**
* Empty setting used to allow flags ( advanced ) on settings that can have no sensible default .
* Note : Only advanced makes sense right now - locked does not .
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_configempty extends admin_setting_configtext {
/**
* @ param string $name
* @ param string $visiblename
* @ param string $description
*/
public function __construct ( $name , $visiblename , $description ) {
parent :: __construct ( $name , $visiblename , $description , '' , PARAM_RAW );
}
/**
* Returns an XHTML string for the hidden field
*
* @ param string $data
* @ param string $query
* @ return string XHTML string for the editor
*/
public function output_html ( $data , $query = '' ) {
return format_admin_setting ( $this ,
$this -> visiblename ,
'<div class="form-empty" >' .
'<input type="hidden"' .
' id="' . $this -> get_id () . '"' .
' name="' . $this -> get_full_name () . '"' .
' value=""/></div>' ,
$this -> description ,
true ,
'' ,
get_string ( 'none' ),
$query );
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
2008-01-01 22:25:11 +00:00
* Path to directory
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
2008-01-01 22:25:11 +00:00
class admin_setting_configfile extends admin_setting_configtext {
2011-03-17 21:34:34 +01:00
/**
* Constructor
* @ param string $name unique ascii name , either 'mysetting' for settings that in config , or 'myplugin/mysetting' for ones in config_plugins .
* @ param string $visiblename localised
* @ param string $description long localised info
* @ param string $defaultdirectory default directory location
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $name , $visiblename , $description , $defaultdirectory ) {
parent :: __construct ( $name , $visiblename , $description , $defaultdirectory , PARAM_RAW , 50 );
2007-12-19 17:35:20 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Returns XHTML for the field
2009-06-30 15:19:12 +00:00
*
2009-05-22 02:05:46 +00:00
* Returns XHTML for the field and also checks whether the file
* specified in $data exists using file_exists ()
*
* @ param string $data File name and path to use in value attr
* @ param string $query
* @ return string XHTML field
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2014-10-29 10:36:59 +13:00
global $CFG ;
2007-12-19 17:35:20 +00:00
$default = $this -> get_defaultsetting ();
if ( $data ) {
2008-01-01 22:25:11 +00:00
if ( file_exists ( $data )) {
2007-12-19 17:35:20 +00:00
$executable = '<span class="pathok">✔</span>' ;
} else {
$executable = '<span class="patherror">✘</span>' ;
}
} else {
$executable = '' ;
}
2014-10-29 10:36:59 +13:00
$readonly = '' ;
if ( ! empty ( $CFG -> preventexecpath )) {
$this -> visiblename .= '<div class="form-overridden">' . get_string ( 'execpathnotallowed' , 'admin' ) . '</div>' ;
$readonly = 'readonly="readonly"' ;
}
2007-12-19 17:35:20 +00:00
return format_admin_setting ( $this , $this -> visiblename ,
2014-10-29 10:36:59 +13:00
'<div class="form-file defaultsnext"><input ' . $readonly . ' type="text" size="' . $this -> size . '" id="' . $this -> get_id () . '" name="' . $this -> get_full_name () . '" value="' . s ( $data ) . '" />' . $executable . '</div>' ,
2009-09-09 07:55:03 +00:00
$this -> description , true , '' , $default , $query );
2007-04-26 07:08:12 +00:00
}
2014-10-07 09:46:37 +13:00
2013-03-28 14:32:48 +13:00
/**
2014-10-07 09:46:37 +13:00
* Checks if execpatch has been disabled in config . php
2013-03-28 14:32:48 +13:00
*/
public function write_setting ( $data ) {
global $CFG ;
if ( ! empty ( $CFG -> preventexecpath )) {
2014-10-07 09:46:37 +13:00
if ( $this -> get_setting () === null ) {
// Use default during installation.
$data = $this -> get_defaultsetting ();
if ( $data === null ) {
$data = '' ;
}
} else {
return '' ;
}
2013-03-28 14:32:48 +13:00
}
return parent :: write_setting ( $data );
}
2007-12-19 17:35:20 +00:00
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
2008-01-01 22:25:11 +00:00
* Path to executable file
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
2008-01-01 22:25:11 +00:00
class admin_setting_configexecutable extends admin_setting_configfile {
2011-03-17 21:34:34 +01:00
/**
* Returns an XHTML field
*
* @ param string $data This is the value for the field
* @ param string $query
* @ return string XHTML field
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2013-03-28 14:32:48 +13:00
global $CFG ;
2008-01-01 22:25:11 +00:00
$default = $this -> get_defaultsetting ();
if ( $data ) {
2014-04-22 22:45:33 +08:00
if ( file_exists ( $data ) and ! is_dir ( $data ) and is_executable ( $data )) {
2008-01-01 22:25:11 +00:00
$executable = '<span class="pathok">✔</span>' ;
} else {
$executable = '<span class="patherror">✘</span>' ;
}
} else {
$executable = '' ;
}
2014-10-29 10:36:59 +13:00
$readonly = '' ;
2013-03-28 14:32:48 +13:00
if ( ! empty ( $CFG -> preventexecpath )) {
$this -> visiblename .= '<div class="form-overridden">' . get_string ( 'execpathnotallowed' , 'admin' ) . '</div>' ;
2014-10-29 10:36:59 +13:00
$readonly = 'readonly="readonly"' ;
2013-03-28 14:32:48 +13:00
}
2008-01-01 22:25:11 +00:00
return format_admin_setting ( $this , $this -> visiblename ,
2014-10-29 10:36:59 +13:00
'<div class="form-file defaultsnext"><input ' . $readonly . ' type="text" size="' . $this -> size . '" id="' . $this -> get_id () . '" name="' . $this -> get_full_name () . '" value="' . s ( $data ) . '" />' . $executable . '</div>' ,
2009-09-09 07:55:03 +00:00
$this -> description , true , '' , $default , $query );
2007-12-19 17:35:20 +00:00
}
2008-01-01 22:25:11 +00:00
}
2007-12-19 17:35:20 +00:00
2011-03-17 21:34:34 +01:00
2008-01-01 22:25:11 +00:00
/**
* Path to directory
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2008-01-01 22:25:11 +00:00
*/
class admin_setting_configdirectory extends admin_setting_configfile {
2009-05-22 02:05:46 +00:00
2011-03-17 21:34:34 +01:00
/**
* Returns an XHTML field
*
* @ param string $data This is the value for the field
* @ param string $query
* @ return string XHTML
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2014-10-29 10:36:59 +13:00
global $CFG ;
2007-12-19 17:35:20 +00:00
$default = $this -> get_defaultsetting ();
if ( $data ) {
if ( file_exists ( $data ) and is_dir ( $data )) {
$executable = '<span class="pathok">✔</span>' ;
} else {
$executable = '<span class="patherror">✘</span>' ;
}
} else {
$executable = '' ;
}
2014-10-29 10:36:59 +13:00
$readonly = '' ;
if ( ! empty ( $CFG -> preventexecpath )) {
$this -> visiblename .= '<div class="form-overridden">' . get_string ( 'execpathnotallowed' , 'admin' ) . '</div>' ;
$readonly = 'readonly="readonly"' ;
}
2007-07-27 13:38:06 +00:00
2007-12-19 17:35:20 +00:00
return format_admin_setting ( $this , $this -> visiblename ,
2014-10-29 10:36:59 +13:00
'<div class="form-file defaultsnext"><input ' . $readonly . ' type="text" size="' . $this -> size . '" id="' . $this -> get_id () . '" name="' . $this -> get_full_name () . '" value="' . s ( $data ) . '" />' . $executable . '</div>' ,
2009-09-09 07:55:03 +00:00
$this -> description , true , '' , $default , $query );
2007-12-19 17:35:20 +00:00
}
2007-04-26 07:08:12 +00:00
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Checkbox
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
2006-09-02 13:14:57 +00:00
class admin_setting_configcheckbox extends admin_setting {
2011-03-17 21:34:34 +01:00
/** @var string Value used when checked */
2009-01-11 16:42:19 +00:00
public $yes ;
2009-06-30 15:19:12 +00:00
/** @var string Value used when not checked */
2009-01-11 16:42:19 +00:00
public $no ;
2006-09-02 13:14:57 +00:00
2007-12-19 17:35:20 +00:00
/**
* Constructor
2008-09-18 10:23:03 +00:00
* @ param string $name unique ascii name , either 'mysetting' for settings that in config , or 'myplugin/mysetting' for ones in config_plugins .
2007-12-19 17:35:20 +00:00
* @ param string $visiblename localised
* @ param string $description long localised info
* @ param string $defaultsetting
* @ param string $yes value used when checked
* @ param string $no value used when not checked
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $name , $visiblename , $description , $defaultsetting , $yes = '1' , $no = '0' ) {
parent :: __construct ( $name , $visiblename , $description , $defaultsetting );
2007-12-19 17:35:20 +00:00
$this -> yes = ( string ) $yes ;
$this -> no = ( string ) $no ;
2006-09-02 13:14:57 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Retrieves the current setting using the objects name
*
* @ return string
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2007-12-19 17:35:20 +00:00
return $this -> config_read ( $this -> name );
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2009-05-22 02:05:46 +00:00
/**
* Sets the value for the setting
*
* Sets the value for the setting to either the yes or no values
* of the object by comparing $data to yes
*
* @ param mixed $data Gets converted to str for comparison against yes value
* @ return string empty string or error
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2007-12-19 17:35:20 +00:00
if (( string ) $data === $this -> yes ) { // convert to strings before comparison
$data = $this -> yes ;
2006-09-02 13:14:57 +00:00
} else {
2007-12-19 17:35:20 +00:00
$data = $this -> no ;
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
return ( $this -> config_write ( $this -> name , $data ) ? '' : get_string ( 'errorsetting' , 'admin' ));
2006-09-02 13:14:57 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Returns an XHTML checkbox field
*
* @ param string $data If $data matches yes then checkbox is checked
* @ param string $query
* @ return string XHTML field
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2007-12-19 17:35:20 +00:00
$default = $this -> get_defaultsetting ();
if ( ! is_null ( $default )) {
if (( string ) $default === $this -> yes ) {
2008-01-01 15:51:54 +00:00
$defaultinfo = get_string ( 'checkboxyes' , 'admin' );
2007-12-19 17:35:20 +00:00
} else {
2008-01-01 15:51:54 +00:00
$defaultinfo = get_string ( 'checkboxno' , 'admin' );
2007-12-19 17:35:20 +00:00
}
2006-09-17 12:11:23 +00:00
} else {
2008-01-01 15:51:54 +00:00
$defaultinfo = NULL ;
2006-09-17 12:11:23 +00:00
}
2007-12-19 17:35:20 +00:00
if (( string ) $data === $this -> yes ) { // convert to strings before comparison
$checked = 'checked="checked"' ;
} else {
$checked = '' ;
}
return format_admin_setting ( $this , $this -> visiblename ,
2009-09-09 07:55:03 +00:00
'<div class="form-checkbox defaultsnext" ><input type="hidden" name="' . $this -> get_full_name () . '" value="' . s ( $this -> no ) . '" /> '
. '<input type="checkbox" id="' . $this -> get_id () . '" name="' . $this -> get_full_name () . '" value="' . s ( $this -> yes ) . '" ' . $checked . ' /></div>' ,
$this -> description , true , '' , $defaultinfo , $query );
2006-09-02 13:14:57 +00:00
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Multiple checkboxes , each represents different value , stored in csv format
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
class admin_setting_configmulticheckbox extends admin_setting {
2011-03-17 21:34:34 +01:00
/** @var array Array of choices value=>label */
2009-01-11 16:42:19 +00:00
public $choices ;
2006-09-20 21:00:45 +00:00
2007-12-19 17:35:20 +00:00
/**
2009-05-22 02:05:46 +00:00
* Constructor : uses parent :: __construct
*
2008-09-18 10:23:03 +00:00
* @ param string $name unique ascii name , either 'mysetting' for settings that in config , or 'myplugin/mysetting' for ones in config_plugins .
2007-12-19 17:35:20 +00:00
* @ param string $visiblename localised
* @ param string $description long localised info
* @ param array $defaultsetting array of selected
* @ param array $choices array of $value => $label for each checkbox
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $name , $visiblename , $description , $defaultsetting , $choices ) {
2006-09-02 13:14:57 +00:00
$this -> choices = $choices ;
2009-01-11 16:42:19 +00:00
parent :: __construct ( $name , $visiblename , $description , $defaultsetting );
2006-09-02 13:14:57 +00:00
}
2007-10-28 17:15:00 +00:00
/**
2009-01-11 16:42:19 +00:00
* This public function may be used in ancestors for lazy loading of choices
2009-05-22 02:05:46 +00:00
*
* @ todo Check if this function is still required content commented out only returns true
* @ return bool true if loaded , false if error
2007-10-28 17:15:00 +00:00
*/
2009-01-11 16:42:19 +00:00
public function load_choices () {
2007-10-28 17:15:00 +00:00
/*
2007-12-19 17:35:20 +00:00
if ( is_array ( $this -> choices )) {
return true ;
2007-10-28 17:15:00 +00:00
}
.... load choices here
*/
2007-12-19 17:35:20 +00:00
return true ;
}
/**
* Is setting related to query text - used when searching
2009-05-22 02:05:46 +00:00
*
2007-12-19 17:35:20 +00:00
* @ param string $query
2009-05-22 02:05:46 +00:00
* @ return bool true on related , false on not or failure
2007-12-19 17:35:20 +00:00
*/
2009-01-11 16:42:19 +00:00
public function is_related ( $query ) {
2007-12-19 17:35:20 +00:00
if ( ! $this -> load_choices () or empty ( $this -> choices )) {
return false ;
}
if ( parent :: is_related ( $query )) {
return true ;
}
foreach ( $this -> choices as $desc ) {
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $desc ), $query ) !== false ) {
2007-12-19 17:35:20 +00:00
return true ;
}
}
return false ;
2007-10-28 17:15:00 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Returns the current setting if it is set
*
* @ return mixed null if null , else an array
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2007-12-19 17:35:20 +00:00
$result = $this -> config_read ( $this -> name );
2008-08-28 07:08:08 +00:00
2007-12-19 17:35:20 +00:00
if ( is_null ( $result )) {
return NULL ;
}
if ( $result === '' ) {
return array ();
}
2008-08-28 07:08:08 +00:00
$enabled = explode ( ',' , $result );
$setting = array ();
foreach ( $enabled as $option ) {
$setting [ $option ] = 1 ;
}
return $setting ;
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2009-05-22 02:05:46 +00:00
/**
* Saves the setting ( s ) provided in $data
*
* @ param array $data An array of data , if not array returns empty str
* @ return mixed empty string on useless data or bool true = success , false = failed
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2007-12-19 17:35:20 +00:00
if ( ! is_array ( $data )) {
return '' ; // ignore it
}
if ( ! $this -> load_choices () or empty ( $this -> choices )) {
return '' ;
}
unset ( $data [ 'xxxxx' ]);
$result = array ();
foreach ( $data as $key => $value ) {
if ( $value and array_key_exists ( $key , $this -> choices )) {
$result [] = $key ;
}
}
return $this -> config_write ( $this -> name , implode ( ',' , $result )) ? '' : get_string ( 'errorsetting' , 'admin' );
2006-09-02 13:14:57 +00:00
}
2009-06-30 15:19:12 +00:00
2009-05-22 02:05:46 +00:00
/**
* Returns XHTML field ( s ) as required by choices
*
* Relies on data being an array should data ever be another valid vartype with
* acceptable value this may cause a warning / error
* if ( ! is_array ( $data )) would fix the problem
*
* @ todo Add vartype handling to ensure $data is an array
*
* @ param array $data An array of checked values
* @ param string $query
* @ return string XHTML field
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2007-12-19 17:35:20 +00:00
if ( ! $this -> load_choices () or empty ( $this -> choices )) {
return '' ;
}
$default = $this -> get_defaultsetting ();
if ( is_null ( $default )) {
$default = array ();
}
if ( is_null ( $data )) {
2008-08-16 12:16:01 +00:00
$data = array ();
2007-12-19 17:35:20 +00:00
}
$options = array ();
$defaults = array ();
2008-08-28 07:08:08 +00:00
foreach ( $this -> choices as $key => $description ) {
if ( ! empty ( $data [ $key ])) {
2007-12-19 17:35:20 +00:00
$checked = 'checked="checked"' ;
} else {
$checked = '' ;
}
2008-08-28 07:08:08 +00:00
if ( ! empty ( $default [ $key ])) {
2007-12-19 17:35:20 +00:00
$defaults [] = $description ;
}
$options [] = '<input type="checkbox" id="' . $this -> get_id () . '_' . $key . '" name="' . $this -> get_full_name () . '[' . $key . ']" value="1" ' . $checked . ' />'
2009-09-09 07:55:03 +00:00
. '<label for="' . $this -> get_id () . '_' . $key . '">' . highlightfast ( $query , $description ) . '</label>' ;
2007-12-19 17:35:20 +00:00
}
2008-01-01 15:51:54 +00:00
if ( is_null ( $default )) {
$defaultinfo = NULL ;
} else if ( ! empty ( $defaults )) {
2009-09-09 07:55:03 +00:00
$defaultinfo = implode ( ', ' , $defaults );
} else {
$defaultinfo = get_string ( 'none' );
}
2007-12-19 17:35:20 +00:00
$return = '<div class="form-multicheckbox">' ;
$return .= '<input type="hidden" name="' . $this -> get_full_name () . '[xxxxx]" value="1" />' ; // something must be submitted even if nothing selected
if ( $options ) {
$return .= '<ul>' ;
foreach ( $options as $option ) {
$return .= '<li>' . $option . '</li>' ;
}
$return .= '</ul>' ;
2006-09-02 13:14:57 +00:00
}
2008-01-01 15:51:54 +00:00
$return .= '</div>' ;
2006-09-25 07:35:43 +00:00
2008-01-01 15:51:54 +00:00
return format_admin_setting ( $this , $this -> visiblename , $return , $this -> description , false , '' , $defaultinfo , $query );
2008-07-31 06:01:12 +00:00
2006-09-02 13:14:57 +00:00
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Multiple checkboxes 2 , value stored as string 00101011
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
class admin_setting_configmulticheckbox2 extends admin_setting_configmulticheckbox {
2009-05-22 02:05:46 +00:00
2011-03-17 21:34:34 +01:00
/**
* Returns the setting if set
*
* @ return mixed null if not set , else an array of set settings
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2007-12-19 17:35:20 +00:00
$result = $this -> config_read ( $this -> name );
if ( is_null ( $result )) {
return NULL ;
}
if ( ! $this -> load_choices ()) {
return NULL ;
}
$result = str_pad ( $result , count ( $this -> choices ), '0' );
$result = preg_split ( '//' , $result , - 1 , PREG_SPLIT_NO_EMPTY );
$setting = array ();
foreach ( $this -> choices as $key => $unused ) {
$value = array_shift ( $result );
if ( $value ) {
2008-08-28 07:08:08 +00:00
$setting [ $key ] = 1 ;
2007-12-19 17:35:20 +00:00
}
}
return $setting ;
}
2006-09-02 13:14:57 +00:00
2009-05-22 02:05:46 +00:00
/**
* Save setting ( s ) provided in $data param
*
* @ param array $data An array of settings to save
* @ return mixed empty string for bad data or bool true => success , false => error
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2007-12-19 17:35:20 +00:00
if ( ! is_array ( $data )) {
return '' ; // ignore it
}
if ( ! $this -> load_choices () or empty ( $this -> choices )) {
return '' ;
}
$result = '' ;
foreach ( $this -> choices as $key => $unused ) {
if ( ! empty ( $data [ $key ])) {
$result .= '1' ;
} else {
$result .= '0' ;
}
}
return $this -> config_write ( $this -> name , $result ) ? '' : get_string ( 'errorsetting' , 'admin' );
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Select one value from list
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
class admin_setting_configselect extends admin_setting {
2011-03-17 21:34:34 +01:00
/** @var array Array of choices value=>label */
2009-01-11 16:42:19 +00:00
public $choices ;
2006-09-02 13:14:57 +00:00
2007-12-19 17:35:20 +00:00
/**
* Constructor
2008-09-18 10:23:03 +00:00
* @ param string $name unique ascii name , either 'mysetting' for settings that in config , or 'myplugin/mysetting' for ones in config_plugins .
2007-12-19 17:35:20 +00:00
* @ param string $visiblename localised
* @ param string $description long localised info
2010-09-17 10:27:26 +00:00
* @ param string | int $defaultsetting
2007-12-19 17:35:20 +00:00
* @ param array $choices array of $value => $label for each selection
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $name , $visiblename , $description , $defaultsetting , $choices ) {
2007-12-19 17:35:20 +00:00
$this -> choices = $choices ;
2009-01-11 16:42:19 +00:00
parent :: __construct ( $name , $visiblename , $description , $defaultsetting );
2007-12-19 17:35:20 +00:00
}
/**
* This function may be used in ancestors for lazy loading of choices
2009-05-22 02:05:46 +00:00
*
2009-06-30 15:19:12 +00:00
* Override this method if loading of choices is expensive , such
* as when it requires multiple db requests .
*
2009-05-22 02:05:46 +00:00
* @ return bool true if loaded , false if error
2007-12-19 17:35:20 +00:00
*/
2009-01-11 16:42:19 +00:00
public function load_choices () {
2007-12-19 17:35:20 +00:00
/*
if ( is_array ( $this -> choices )) {
return true ;
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
.... load choices here
*/
return true ;
2006-09-02 13:14:57 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Check if this is $query is related to a choice
*
* @ param string $query
* @ return bool true if related , false if not
*/
2009-01-11 16:42:19 +00:00
public function is_related ( $query ) {
2007-12-31 15:55:36 +00:00
if ( parent :: is_related ( $query )) {
return true ;
}
if ( ! $this -> load_choices ()) {
return false ;
}
foreach ( $this -> choices as $key => $value ) {
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $key ), $query ) !== false ) {
2007-12-31 15:55:36 +00:00
return true ;
}
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $value ), $query ) !== false ) {
2007-12-31 15:55:36 +00:00
return true ;
}
2008-07-31 06:01:12 +00:00
}
2007-12-31 15:55:36 +00:00
return false ;
}
2009-05-22 02:05:46 +00:00
/**
* Return the setting
2009-06-30 15:19:12 +00:00
*
2010-05-21 19:06:38 +00:00
* @ return mixed returns config if successful else null
2009-05-22 02:05:46 +00:00
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2007-12-19 17:35:20 +00:00
return $this -> config_read ( $this -> name );
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2009-05-22 02:05:46 +00:00
/**
* Save a setting
*
* @ param string $data
* @ return string empty of error string
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2007-12-19 17:35:20 +00:00
if ( ! $this -> load_choices () or empty ( $this -> choices )) {
return '' ;
}
if ( ! array_key_exists ( $data , $this -> choices )) {
return '' ; // ignore it
}
2006-09-20 21:00:45 +00:00
2007-12-19 17:35:20 +00:00
return ( $this -> config_write ( $this -> name , $data ) ? '' : get_string ( 'errorsetting' , 'admin' ));
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2008-08-26 01:05:01 +00:00
/**
2009-05-22 02:05:46 +00:00
* Returns XHTML select field
*
* Ensure the options are loaded , and generate the XHTML for the select
2008-08-26 01:05:01 +00:00
* element and any warning message . Separating this out from output_html
* makes it easier to subclass this class .
*
* @ param string $data the option to show as selected .
* @ param string $current the currently selected option in the database , null if none .
* @ param string $default the default selected option .
* @ return array the HTML for the select element , and a warning message .
*/
2009-01-11 16:42:19 +00:00
public function output_select_html ( $data , $current , $default , $extraname = '' ) {
2007-12-19 17:35:20 +00:00
if ( ! $this -> load_choices () or empty ( $this -> choices )) {
2008-08-26 01:05:01 +00:00
return array ( '' , '' );
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
2007-12-19 22:32:43 +00:00
$warning = '' ;
if ( is_null ( $current )) {
2009-09-09 07:55:03 +00:00
// first run
2007-12-19 22:32:43 +00:00
} else if ( empty ( $current ) and ( array_key_exists ( '' , $this -> choices ) or array_key_exists ( 0 , $this -> choices ))) {
// no warning
2009-09-09 07:55:03 +00:00
} else if ( ! array_key_exists ( $current , $this -> choices )) {
$warning = get_string ( 'warningcurrentsetting' , 'admin' , s ( $current ));
if ( ! is_null ( $default ) and $data == $current ) {
$data = $default ; // use default instead of first value when showing the form
}
}
2007-12-19 22:32:43 +00:00
2008-08-26 01:05:01 +00:00
$selecthtml = '<select id="' . $this -> get_id () . '" name="' . $this -> get_full_name () . $extraname . '">' ;
2006-09-02 13:14:57 +00:00
foreach ( $this -> choices as $key => $value ) {
2009-09-09 07:55:03 +00:00
// the string cast is needed because key may be integer - 0 is equal to most strings!
2008-08-26 01:05:01 +00:00
$selecthtml .= '<option value="' . $key . '"' . (( string ) $key == $data ? ' selected="selected"' : '' ) . '>' . $value . '</option>' ;
2006-09-20 21:00:45 +00:00
}
2008-08-26 01:05:01 +00:00
$selecthtml .= '</select>' ;
return array ( $selecthtml , $warning );
}
2009-05-22 02:05:46 +00:00
/**
* Returns XHTML select field and wrapping div ( s )
*
* @ see output_select_html ()
2009-06-30 15:19:12 +00:00
*
2009-05-22 02:05:46 +00:00
* @ param string $data the option to show as selected
* @ param string $query
* @ return string XHTML field and wrapping div
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2008-08-26 01:05:01 +00:00
$default = $this -> get_defaultsetting ();
$current = $this -> get_setting ();
list ( $selecthtml , $warning ) = $this -> output_select_html ( $data , $current , $default );
if ( ! $selecthtml ) {
return '' ;
}
if ( ! is_null ( $default ) and array_key_exists ( $default , $this -> choices )) {
$defaultinfo = $this -> choices [ $default ];
} else {
$defaultinfo = NULL ;
}
$return = '<div class="form-select defaultsnext">' . $selecthtml . '</div>' ;
2007-12-19 17:35:20 +00:00
2008-01-01 15:51:54 +00:00
return format_admin_setting ( $this , $this -> visiblename , $return , $this -> description , true , $warning , $defaultinfo , $query );
2006-09-02 13:14:57 +00:00
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Select multiple items from list
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
2006-09-02 13:14:57 +00:00
class admin_setting_configmultiselect extends admin_setting_configselect {
2011-03-17 21:34:34 +01:00
/**
* Constructor
* @ param string $name unique ascii name , either 'mysetting' for settings that in config , or 'myplugin/mysetting' for ones in config_plugins .
* @ param string $visiblename localised
* @ param string $description long localised info
* @ param array $defaultsetting array of selected items
* @ param array $choices array of $value => $label for each list item
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $name , $visiblename , $description , $defaultsetting , $choices ) {
parent :: __construct ( $name , $visiblename , $description , $defaultsetting , $choices );
2006-09-02 13:14:57 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Returns the select setting ( s )
*
* @ return mixed null or array . Null if no settings else array of setting ( s )
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2007-12-19 17:35:20 +00:00
$result = $this -> config_read ( $this -> name );
if ( is_null ( $result )) {
2007-01-12 18:30:27 +00:00
return NULL ;
}
2007-12-19 17:35:20 +00:00
if ( $result === '' ) {
return array ();
}
return explode ( ',' , $result );
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2009-05-22 02:05:46 +00:00
/**
* Saves setting ( s ) provided through $data
*
* Potential bug in the works should anyone call with this function
* using a vartype that is not an array
*
* @ param array $data
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2007-12-19 17:35:20 +00:00
if ( ! is_array ( $data )) {
return '' ; //ignore it
}
if ( ! $this -> load_choices () or empty ( $this -> choices )) {
return '' ;
}
2007-12-22 21:58:10 +00:00
unset ( $data [ 'xxxxx' ]);
2007-12-19 17:35:20 +00:00
$save = array ();
foreach ( $data as $value ) {
if ( ! array_key_exists ( $value , $this -> choices )) {
continue ; // ignore it
}
$save [] = $value ;
}
return ( $this -> config_write ( $this -> name , implode ( ',' , $save )) ? '' : get_string ( 'errorsetting' , 'admin' ));
}
/**
* Is setting related to query text - used when searching
2009-05-22 02:05:46 +00:00
*
2007-12-19 17:35:20 +00:00
* @ param string $query
2009-05-22 02:05:46 +00:00
* @ return bool true if related , false if not
2007-12-19 17:35:20 +00:00
*/
2009-01-11 16:42:19 +00:00
public function is_related ( $query ) {
2007-12-19 17:35:20 +00:00
if ( ! $this -> load_choices () or empty ( $this -> choices )) {
return false ;
}
if ( parent :: is_related ( $query )) {
return true ;
}
foreach ( $this -> choices as $desc ) {
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $desc ), $query ) !== false ) {
2007-12-19 17:35:20 +00:00
return true ;
}
}
return false ;
}
2009-05-22 02:05:46 +00:00
/**
* Returns XHTML multi - select field
*
* @ todo Add vartype handling to ensure $data is an array
* @ param array $data Array of values to select by default
* @ param string $query
* @ return string XHTML multi - select field
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2007-12-19 17:35:20 +00:00
if ( ! $this -> load_choices () or empty ( $this -> choices )) {
return '' ;
}
$choices = $this -> choices ;
$default = $this -> get_defaultsetting ();
if ( is_null ( $default )) {
$default = array ();
}
if ( is_null ( $data )) {
2007-01-12 18:30:27 +00:00
$data = array ();
}
2007-12-19 17:35:20 +00:00
$defaults = array ();
2009-01-08 07:07:00 +00:00
$size = min ( 10 , count ( $this -> choices ));
2007-12-22 21:58:10 +00:00
$return = '<div class="form-select"><input type="hidden" name="' . $this -> get_full_name () . '[xxxxx]" value="1" />' ; // something must be submitted even if nothing selected
2009-01-08 07:07:00 +00:00
$return .= '<select id="' . $this -> get_id () . '" name="' . $this -> get_full_name () . '[]" size="' . $size . '" multiple="multiple">' ;
2007-12-19 17:35:20 +00:00
foreach ( $this -> choices as $key => $description ) {
if ( in_array ( $key , $data )) {
$selected = 'selected="selected"' ;
} else {
$selected = '' ;
}
if ( in_array ( $key , $default )) {
$defaults [] = $description ;
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
$return .= '<option value="' . s ( $key ) . '" ' . $selected . '>' . $description . '</option>' ;
}
2008-01-01 15:51:54 +00:00
if ( is_null ( $default )) {
$defaultinfo = NULL ;
} if ( ! empty ( $defaults )) {
$defaultinfo = implode ( ', ' , $defaults );
2007-12-19 17:35:20 +00:00
} else {
2008-01-01 15:51:54 +00:00
$defaultinfo = get_string ( 'none' );
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2008-01-01 15:51:54 +00:00
$return .= '</select></div>' ;
return format_admin_setting ( $this , $this -> visiblename , $return , $this -> description , true , '' , $defaultinfo , $query );
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
}
2006-09-20 21:00:45 +00:00
2007-12-19 17:35:20 +00:00
/**
* Time selector
2009-05-22 02:05:46 +00:00
*
* This is a liiitle bit messy . we 're using two selects, but we' re returning
2007-12-19 17:35:20 +00:00
* them as an array named after $name ( so we only use $name2 internally for the setting )
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
class admin_setting_configtime extends admin_setting {
2011-03-17 21:34:34 +01:00
/** @var string Used for setting second select (minutes) */
2009-01-11 16:42:19 +00:00
public $name2 ;
2007-12-19 17:35:20 +00:00
/**
* Constructor
* @ param string $hoursname setting for hours
* @ param string $minutesname setting for hours
* @ param string $visiblename localised
* @ param string $description long localised info
* @ param array $defaultsetting array representing default time 'h' => hours , 'm' => minutes
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $hoursname , $minutesname , $visiblename , $description , $defaultsetting ) {
2007-12-19 17:35:20 +00:00
$this -> name2 = $minutesname ;
2009-01-11 16:42:19 +00:00
parent :: __construct ( $hoursname , $visiblename , $description , $defaultsetting );
2007-12-19 17:35:20 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Get the selected time
2009-06-30 15:19:12 +00:00
*
2009-05-22 02:05:46 +00:00
* @ return mixed An array containing 'h' => xx , 'm' => xx , or null if not set
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2007-12-19 17:35:20 +00:00
$result1 = $this -> config_read ( $this -> name );
$result2 = $this -> config_read ( $this -> name2 );
if ( is_null ( $result1 ) or is_null ( $result2 )) {
return NULL ;
}
return array ( 'h' => $result1 , 'm' => $result2 );
}
2009-05-22 02:05:46 +00:00
/**
* Store the time ( hours and minutes )
2009-06-30 15:19:12 +00:00
*
2009-05-22 02:05:46 +00:00
* @ param array $data Must be form 'h' => xx , 'm' => xx
* @ return bool true if success , false if not
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2007-12-19 17:35:20 +00:00
if ( ! is_array ( $data )) {
return '' ;
}
$result = $this -> config_write ( $this -> name , ( int ) $data [ 'h' ]) && $this -> config_write ( $this -> name2 , ( int ) $data [ 'm' ]);
return ( $result ? '' : get_string ( 'errorsetting' , 'admin' ));
}
2009-05-22 02:05:46 +00:00
/**
* Returns XHTML time select fields
*
* @ param array $data Must be form 'h' => xx , 'm' => xx
* @ param string $query
* @ return string XHTML time select fields and wrapping div ( s )
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2007-12-19 17:35:20 +00:00
$default = $this -> get_defaultsetting ();
if ( is_array ( $default )) {
2008-01-01 15:51:54 +00:00
$defaultinfo = $default [ 'h' ] . ':' . $default [ 'm' ];
2006-09-18 02:41:14 +00:00
} else {
2008-01-01 15:51:54 +00:00
$defaultinfo = NULL ;
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
2015-02-03 13:21:40 +08:00
$return = '<div class="form-time defaultsnext">' ;
$return .= '<label class="accesshide" for="' . $this -> get_id () . 'h">' . get_string ( 'hours' ) . '</label>' ;
$return .= '<select id="' . $this -> get_id () . 'h" name="' . $this -> get_full_name () . '[h]">' ;
2007-12-19 17:35:20 +00:00
for ( $i = 0 ; $i < 24 ; $i ++ ) {
2015-02-03 13:21:40 +08:00
$return .= '<option value="' . $i . '"' . ( $i == $data [ 'h' ] ? ' selected="selected"' : '' ) . '>' . $i . '</option>' ;
2006-09-02 13:14:57 +00:00
}
2015-02-03 13:21:40 +08:00
$return .= '</select>:' ;
$return .= '<label class="accesshide" for="' . $this -> get_id () . 'm">' . get_string ( 'minutes' ) . '</label>' ;
$return .= '<select id="' . $this -> get_id () . 'm" name="' . $this -> get_full_name () . '[m]">' ;
2007-12-19 17:35:20 +00:00
for ( $i = 0 ; $i < 60 ; $i += 5 ) {
2015-02-03 13:21:40 +08:00
$return .= '<option value="' . $i . '"' . ( $i == $data [ 'm' ] ? ' selected="selected"' : '' ) . '>' . $i . '</option>' ;
2007-12-19 17:35:20 +00:00
}
2015-02-03 13:21:40 +08:00
$return .= '</select>' ;
$return .= '</div>' ;
2015-01-28 13:32:58 +13:00
return format_admin_setting ( $this , $this -> visiblename , $return , $this -> description ,
$this -> get_id () . 'h' , '' , $defaultinfo , $query );
2006-09-02 13:14:57 +00:00
}
}
2011-03-17 21:34:34 +01:00
2012-08-14 14:06:20 +02:00
/**
* Seconds duration setting .
*
* @ copyright 2012 Petr Skoda ( http :// skodak . org )
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_configduration extends admin_setting {
/** @var int default duration unit */
protected $defaultunit ;
/**
* Constructor
* @ param string $name unique ascii name , either 'mysetting' for settings that in config ,
* or 'myplugin/mysetting' for ones in config_plugins .
* @ param string $visiblename localised name
* @ param string $description localised long description
* @ param mixed $defaultsetting string or array depending on implementation
* @ param int $defaultunit - day , week , etc . ( in seconds )
*/
public function __construct ( $name , $visiblename , $description , $defaultsetting , $defaultunit = 86400 ) {
if ( is_number ( $defaultsetting )) {
$defaultsetting = self :: parse_seconds ( $defaultsetting );
}
$units = self :: get_units ();
if ( isset ( $units [ $defaultunit ])) {
$this -> defaultunit = $defaultunit ;
} else {
$this -> defaultunit = 86400 ;
}
parent :: __construct ( $name , $visiblename , $description , $defaultsetting );
}
/**
* Returns selectable units .
* @ static
* @ return array
*/
protected static function get_units () {
return array (
604800 => get_string ( 'weeks' ),
86400 => get_string ( 'days' ),
3600 => get_string ( 'hours' ),
60 => get_string ( 'minutes' ),
1 => get_string ( 'seconds' ),
);
}
/**
* Converts seconds to some more user friendly string .
* @ static
* @ param int $seconds
* @ return string
*/
protected static function get_duration_text ( $seconds ) {
if ( empty ( $seconds )) {
return get_string ( 'none' );
}
$data = self :: parse_seconds ( $seconds );
switch ( $data [ 'u' ]) {
2012-08-22 03:08:40 +02:00
case ( 60 * 60 * 24 * 7 ) :
return get_string ( 'numweeks' , '' , $data [ 'v' ]);
case ( 60 * 60 * 24 ) :
return get_string ( 'numdays' , '' , $data [ 'v' ]);
case ( 60 * 60 ) :
return get_string ( 'numhours' , '' , $data [ 'v' ]);
case ( 60 ) :
return get_string ( 'numminutes' , '' , $data [ 'v' ]);
default :
return get_string ( 'numseconds' , '' , $data [ 'v' ] * $data [ 'u' ]);
2012-08-14 14:06:20 +02:00
}
}
/**
* Finds suitable units for given duration .
* @ static
* @ param int $seconds
* @ return array
*/
protected static function parse_seconds ( $seconds ) {
2012-08-22 03:08:40 +02:00
foreach ( self :: get_units () as $unit => $unused ) {
2012-08-14 14:06:20 +02:00
if ( $seconds % $unit === 0 ) {
return array ( 'v' => ( int )( $seconds / $unit ), 'u' => $unit );
}
}
return array ( 'v' => ( int ) $seconds , 'u' => 1 );
}
/**
* Get the selected duration as array .
*
* @ return mixed An array containing 'v' => xx , 'u' => xx , or null if not set
*/
public function get_setting () {
$seconds = $this -> config_read ( $this -> name );
if ( is_null ( $seconds )) {
return null ;
}
return self :: parse_seconds ( $seconds );
}
/**
* Store the duration as seconds .
*
* @ param array $data Must be form 'h' => xx , 'm' => xx
* @ return bool true if success , false if not
*/
public function write_setting ( $data ) {
if ( ! is_array ( $data )) {
return '' ;
}
$seconds = ( int )( $data [ 'v' ] * $data [ 'u' ]);
if ( $seconds < 0 ) {
return get_string ( 'errorsetting' , 'admin' );
}
$result = $this -> config_write ( $this -> name , $seconds );
return ( $result ? '' : get_string ( 'errorsetting' , 'admin' ));
}
/**
* Returns duration text + select fields .
*
* @ param array $data Must be form 'v' => xx , 'u' => xx
* @ param string $query
* @ return string duration text + select fields and wrapping div ( s )
*/
public function output_html ( $data , $query = '' ) {
$default = $this -> get_defaultsetting ();
if ( is_number ( $default )) {
$defaultinfo = self :: get_duration_text ( $default );
} else if ( is_array ( $default )) {
$defaultinfo = self :: get_duration_text ( $default [ 'v' ] * $default [ 'u' ]);
} else {
$defaultinfo = null ;
}
$units = self :: get_units ();
2014-12-04 13:42:35 +13:00
$inputid = $this -> get_id () . 'v' ;
2012-08-14 14:06:20 +02:00
$return = '<div class="form-duration defaultsnext">' ;
2014-12-04 13:42:35 +13:00
$return .= '<input type="text" size="5" id="' . $inputid . '" name="' . $this -> get_full_name () .
'[v]" value="' . s ( $data [ 'v' ]) . '" />' ;
$return .= '<label for="' . $this -> get_id () . 'u" class="accesshide">' .
get_string ( 'durationunits' , 'admin' ) . '</label>' ;
2012-08-14 14:06:20 +02:00
$return .= '<select id="' . $this -> get_id () . 'u" name="' . $this -> get_full_name () . '[u]">' ;
2012-08-22 03:08:40 +02:00
foreach ( $units as $val => $text ) {
2012-08-14 14:06:20 +02:00
$selected = '' ;
if ( $data [ 'v' ] == 0 ) {
if ( $val == $this -> defaultunit ) {
$selected = ' selected="selected"' ;
}
} else if ( $val == $data [ 'u' ]) {
$selected = ' selected="selected"' ;
}
$return .= '<option value="' . $val . '"' . $selected . '>' . $text . '</option>' ;
}
$return .= '</select></div>' ;
2014-12-04 13:42:35 +13:00
return format_admin_setting ( $this , $this -> visiblename , $return , $this -> description , $inputid , '' , $defaultinfo , $query );
2012-08-14 14:06:20 +02:00
}
}
2015-01-19 18:43:57 +00:00
/**
* Seconds duration setting with an advanced checkbox , that controls a additional
* $name . '_adv' setting .
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
* @ copyright 2014 The Open University
*/
class admin_setting_configduration_with_advanced extends admin_setting_configduration {
/**
* Constructor
* @ param string $name unique ascii name , either 'mysetting' for settings that in config ,
* or 'myplugin/mysetting' for ones in config_plugins .
* @ param string $visiblename localised name
* @ param string $description localised long description
* @ param array $defaultsetting array of int value , and bool whether it is
* is advanced by default .
* @ param int $defaultunit - day , week , etc . ( in seconds )
*/
public function __construct ( $name , $visiblename , $description , $defaultsetting , $defaultunit = 86400 ) {
parent :: __construct ( $name , $visiblename , $description , $defaultsetting [ 'value' ], $defaultunit );
$this -> set_advanced_flag_options ( admin_setting_flag :: ENABLED , ! empty ( $defaultsetting [ 'adv' ]));
}
}
2009-05-22 02:05:46 +00:00
/**
* Used to validate a textarea used for ip addresses
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2015-01-19 18:43:57 +00:00
* @ copyright 2011 Petr Skoda ( http :// skodak . org )
2009-05-22 02:05:46 +00:00
*/
2008-07-16 02:16:42 +00:00
class admin_setting_configiplist extends admin_setting_configtextarea {
2009-05-22 02:05:46 +00:00
2011-03-17 21:34:34 +01:00
/**
* Validate the contents of the textarea as IP addresses
*
* Used to validate a new line separated list of IP addresses collected from
* a textarea control
*
* @ param string $data A list of IP Addresses separated by new lines
* @ return mixed bool true for success or string : error on failure
*/
2009-01-11 16:42:19 +00:00
public function validate ( $data ) {
2008-07-16 02:16:42 +00:00
if ( ! empty ( $data )) {
2008-07-31 06:01:12 +00:00
$ips = explode ( " \n " , $data );
2008-07-16 02:16:42 +00:00
} else {
return true ;
}
$result = true ;
foreach ( $ips as $ip ) {
$ip = trim ( $ip );
2011-03-17 21:34:34 +01:00
if ( preg_match ( '#^(\d{1,3})(\.\d{1,3}){0,3}$#' , $ip , $match ) ||
2009-09-09 07:55:03 +00:00
preg_match ( '#^(\d{1,3})(\.\d{1,3}){0,3}(\/\d{1,2})$#' , $ip , $match ) ||
preg_match ( '#^(\d{1,3})(\.\d{1,3}){3}(-\d{1,3})$#' , $ip , $match )) {
2008-07-16 02:16:42 +00:00
$result = true ;
} else {
$result = false ;
break ;
}
}
2009-09-09 07:55:03 +00:00
if ( $result ) {
2008-07-16 02:16:42 +00:00
return true ;
} else {
return get_string ( 'validateerror' , 'admin' );
}
}
}
2011-03-17 21:34:34 +01:00
2009-01-08 07:07:00 +00:00
/**
2009-05-22 02:05:46 +00:00
* An admin setting for selecting one or more users who have a capability
* in the system context
*
2009-01-08 07:07:00 +00:00
* An admin setting for selecting one or more users , who have a particular capability
* in the system context . Warning , make sure the list will never be too long . There is
* no paging or searching of this list .
*
* To correctly get a list of users from this config setting , you need to call the
* get_users_from_config ( $CFG -> mysetting , $capability ); function in moodlelib . php .
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2009-01-08 07:07:00 +00:00
*/
class admin_setting_users_with_capability extends admin_setting_configmultiselect {
2010-05-18 16:59:08 +00:00
/** @var string The capabilities name */
2009-01-08 07:07:00 +00:00
protected $capability ;
2010-05-18 16:59:08 +00:00
/** @var int include admin users too */
protected $includeadmins ;
2009-01-08 07:07:00 +00:00
/**
* Constructor .
*
* @ param string $name unique ascii name , either 'mysetting' for settings that in config , or 'myplugin/mysetting' for ones in config_plugins .
* @ param string $visiblename localised name
* @ param string $description localised long description
* @ param array $defaultsetting array of usernames
* @ param string $capability string capability name .
2010-05-21 19:06:38 +00:00
* @ param bool $includeadmins include administrators
2009-01-08 07:07:00 +00:00
*/
2010-05-18 16:59:08 +00:00
function __construct ( $name , $visiblename , $description , $defaultsetting , $capability , $includeadmins = true ) {
$this -> capability = $capability ;
$this -> includeadmins = $includeadmins ;
2009-05-01 10:32:12 +00:00
parent :: __construct ( $name , $visiblename , $description , $defaultsetting , NULL );
}
2009-05-22 02:05:46 +00:00
/**
* Load all of the uses who have the capability into choice array
*
* @ return bool Always returns true
*/
2009-05-01 10:32:12 +00:00
function load_choices () {
if ( is_array ( $this -> choices )) {
return true ;
}
2012-08-08 13:56:12 +01:00
list ( $sort , $sortparams ) = users_order_by_sql ( 'u' );
if ( ! empty ( $sortparams )) {
throw new coding_exception ( 'users_order_by_sql returned some query parameters. ' .
'This is unexpected, and a problem because there is no way to pass these ' .
'parameters to get_users_by_capability. See MDL-34657.' );
}
2013-10-03 10:25:27 +08:00
$userfields = 'u.id, u.username, ' . get_all_user_name_fields ( true , 'u' );
$users = get_users_by_capability ( context_system :: instance (), $this -> capability , $userfields , $sort );
2009-05-01 10:32:12 +00:00
$this -> choices = array (
2009-01-08 07:07:00 +00:00
'$@NONE@$' => get_string ( 'nobody' ),
2009-05-01 10:32:12 +00:00
'$@ALL@$' => get_string ( 'everyonewhocan' , 'admin' , get_capability_string ( $this -> capability )),
2009-01-08 07:07:00 +00:00
);
2010-05-18 16:59:08 +00:00
if ( $this -> includeadmins ) {
$admins = get_admins ();
foreach ( $admins as $user ) {
$this -> choices [ $user -> id ] = fullname ( $user );
}
}
2010-10-06 08:54:47 +00:00
if ( is_array ( $users )) {
foreach ( $users as $user ) {
$this -> choices [ $user -> id ] = fullname ( $user );
}
2009-01-08 07:07:00 +00:00
}
2009-05-01 10:32:12 +00:00
return true ;
2009-01-08 07:07:00 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Returns the default setting for class
*
* @ return mixed Array , or string . Empty string if no default
*/
2009-01-11 16:42:19 +00:00
public function get_defaultsetting () {
2009-01-08 07:07:00 +00:00
$this -> load_choices ();
2009-02-01 10:19:13 +00:00
$defaultsetting = parent :: get_defaultsetting ();
if ( empty ( $defaultsetting )) {
2009-01-08 07:07:00 +00:00
return array ( '$@NONE@$' );
2009-02-01 10:19:13 +00:00
} else if ( array_key_exists ( $defaultsetting , $this -> choices )) {
2009-09-09 07:55:03 +00:00
return $defaultsetting ;
} else {
return '' ;
}
2009-01-08 07:07:00 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Returns the current setting
*
* @ return mixed array or string
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2009-01-08 07:07:00 +00:00
$result = parent :: get_setting ();
2010-05-18 16:59:08 +00:00
if ( $result === null ) {
// this is necessary for settings upgrade
return null ;
}
2009-01-08 07:07:00 +00:00
if ( empty ( $result )) {
$result = array ( '$@NONE@$' );
}
return $result ;
}
2009-05-22 02:05:46 +00:00
/**
* Save the chosen setting provided as $data
*
* @ param array $data
* @ return mixed string or array
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2009-09-09 07:55:03 +00:00
// If all is selected, remove any explicit options.
2009-01-08 07:07:00 +00:00
if ( in_array ( '$@ALL@$' , $data )) {
$data = array ( '$@ALL@$' );
}
2010-05-21 19:06:38 +00:00
// None never needs to be written to the DB.
2009-01-08 07:07:00 +00:00
if ( in_array ( '$@NONE@$' , $data )) {
unset ( $data [ array_search ( '$@NONE@$' , $data )]);
}
return parent :: write_setting ( $data );
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Special checkbox for calendar - resets SESSION vars .
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
2006-09-02 13:14:57 +00:00
class admin_setting_special_adminseesall extends admin_setting_configcheckbox {
2011-03-17 21:34:34 +01:00
/**
* Calls the parent :: __construct with default values
*
* name => calendar_adminseesall
* visiblename => get_string ( 'adminseesall' , 'admin' )
* description => get_string ( 'helpadminseesall' , 'admin' )
* defaultsetting => 0
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
parent :: __construct ( 'calendar_adminseesall' , get_string ( 'adminseesall' , 'admin' ),
2009-09-09 07:55:03 +00:00
get_string ( 'helpadminseesall' , 'admin' ), '0' );
2006-09-02 13:14:57 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Stores the setting passed in $data
*
* @ param mixed gets converted to string for comparison
* @ return string empty string or error message
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2006-09-02 13:14:57 +00:00
global $SESSION ;
2007-12-19 17:35:20 +00:00
return parent :: write_setting ( $data );
2006-09-02 13:14:57 +00:00
}
}
2007-12-23 13:10:35 +00:00
/**
* Special select for settings that are altered in setup . php and can not be altered on the fly
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-23 13:10:35 +00:00
*/
class admin_setting_special_selectsetup extends admin_setting_configselect {
2011-03-17 21:34:34 +01:00
/**
* Reads the setting directly from the database
*
* @ return mixed
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2009-09-09 07:55:03 +00:00
// read directly from db!
2007-12-23 13:10:35 +00:00
return get_config ( NULL , $this -> name );
}
2009-05-22 02:05:46 +00:00
/**
* Save the setting passed in $data
*
* @ param string $data The setting to save
* @ return string empty or error message
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2007-12-23 13:10:35 +00:00
global $CFG ;
// do not change active CFG setting!
$current = $CFG -> { $this -> name };
$result = parent :: write_setting ( $data );
$CFG -> { $this -> name } = $current ;
return $result ;
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Special select for frontpage - stores data in course table
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
2006-09-02 13:14:57 +00:00
class admin_setting_sitesetselect extends admin_setting_configselect {
2011-03-17 21:34:34 +01:00
/**
* Returns the site name for the selected site
*
* @ see get_site ()
* @ return string The site name of the selected site
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2012-10-11 15:08:17 +08:00
$site = course_get_format ( get_site ()) -> get_course ();
2009-03-26 08:56:08 +00:00
return $site -> { $this -> name };
2006-09-02 13:14:57 +00:00
}
2011-03-17 21:34:34 +01:00
2009-05-22 02:05:46 +00:00
/**
* Updates the database and save the setting
*
* @ param string data
* @ return string empty or error message
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2013-08-21 15:11:59 +12:00
global $DB , $SITE , $COURSE ;
2006-09-02 13:14:57 +00:00
if ( ! in_array ( $data , array_keys ( $this -> choices ))) {
2007-12-19 17:35:20 +00:00
return get_string ( 'errorsetting' , 'admin' );
2006-09-02 13:14:57 +00:00
}
$record = new stdClass ();
2007-12-19 17:35:20 +00:00
$record -> id = SITEID ;
$temp = $this -> name ;
$record -> $temp = $data ;
2006-09-02 13:14:57 +00:00
$record -> timemodified = time ();
2013-06-19 11:04:17 +02:00
2012-10-11 15:08:17 +08:00
course_get_format ( $SITE ) -> update_course_format_options ( $record );
2013-08-21 15:11:59 +12:00
$DB -> update_record ( 'course' , $record );
2013-06-19 11:04:17 +02:00
// Reset caches.
2013-08-21 15:11:59 +12:00
$SITE = $DB -> get_record ( 'course' , array ( 'id' => $SITE -> id ), '*' , MUST_EXIST );
2013-06-19 11:04:17 +02:00
if ( $SITE -> id == $COURSE -> id ) {
$COURSE = $SITE ;
}
format_base :: reset_course_cache ( $SITE -> id );
return '' ;
2013-08-21 15:11:59 +12:00
2006-09-02 13:14:57 +00:00
}
}
2011-03-17 21:34:34 +01:00
2009-09-15 07:19:03 +00:00
/**
* Select for blog ' s bloglevel setting : if set to 0 , will set blog_menu
* block to hidden .
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_bloglevel extends admin_setting_configselect {
/**
* Updates the database and save the setting
*
* @ param string data
* @ return string empty or error message
*/
public function write_setting ( $data ) {
2011-03-20 12:28:34 +01:00
global $DB , $CFG ;
2012-01-15 13:40:12 +01:00
if ( $data == 0 ) {
2011-03-20 12:28:34 +01:00
$blogblocks = $DB -> get_records_select ( 'block' , " name LIKE 'blog_%' AND visible = 1 " );
foreach ( $blogblocks as $block ) {
$DB -> set_field ( 'block' , 'visible' , 0 , array ( 'id' => $block -> id ));
}
2009-09-15 07:19:03 +00:00
} else {
2011-03-20 12:28:34 +01:00
// reenable all blocks only when switching from disabled blogs
if ( isset ( $CFG -> bloglevel ) and $CFG -> bloglevel == 0 ) {
$blogblocks = $DB -> get_records_select ( 'block' , " name LIKE 'blog_%' AND visible = 0 " );
foreach ( $blogblocks as $block ) {
$DB -> set_field ( 'block' , 'visible' , 1 , array ( 'id' => $block -> id ));
}
}
2009-09-15 07:19:03 +00:00
}
return parent :: write_setting ( $data );
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Special select - lists on the frontpage - hacky
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
class admin_setting_courselist_frontpage extends admin_setting {
2011-03-17 21:34:34 +01:00
/** @var array Array of choices value=>label */
2009-01-11 16:42:19 +00:00
public $choices ;
2006-09-02 13:14:57 +00:00
2009-05-22 02:05:46 +00:00
/**
* Construct override , requires one param
*
* @ param bool $loggedin Is the user logged in
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $loggedin ) {
2006-09-02 13:14:57 +00:00
global $CFG ;
2007-12-19 17:35:20 +00:00
require_once ( $CFG -> dirroot . '/course/lib.php' );
$name = 'frontpage' . ( $loggedin ? 'loggedin' : '' );
$visiblename = get_string ( 'frontpage' . ( $loggedin ? 'loggedin' : '' ), 'admin' );
$description = get_string ( 'configfrontpage' . ( $loggedin ? 'loggedin' : '' ), 'admin' );
2013-03-26 13:04:42 +11:00
$defaults = array ( FRONTPAGEALLCOURSELIST );
2009-01-11 16:42:19 +00:00
parent :: __construct ( $name , $visiblename , $description , $defaults );
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2009-05-22 02:05:46 +00:00
/**
* Loads the choices available
*
* @ return bool always returns true
*/
2009-01-11 16:42:19 +00:00
public function load_choices () {
2007-12-19 17:35:20 +00:00
if ( is_array ( $this -> choices )) {
return true ;
}
$this -> choices = array ( FRONTPAGENEWS => get_string ( 'frontpagenews' ),
2013-03-26 13:04:42 +11:00
FRONTPAGEALLCOURSELIST => get_string ( 'frontpagecourselist' ),
FRONTPAGEENROLLEDCOURSELIST => get_string ( 'frontpageenrolledcourselist' ),
2009-09-09 07:55:03 +00:00
FRONTPAGECATEGORYNAMES => get_string ( 'frontpagecategorynames' ),
FRONTPAGECATEGORYCOMBO => get_string ( 'frontpagecategorycombo' ),
2013-03-26 13:04:42 +11:00
FRONTPAGECOURSESEARCH => get_string ( 'frontpagecoursesearch' ),
2009-09-09 07:55:03 +00:00
'none' => get_string ( 'none' ));
2013-03-26 13:04:42 +11:00
if ( $this -> name === 'frontpage' ) {
unset ( $this -> choices [ FRONTPAGEENROLLEDCOURSELIST ]);
2007-12-19 17:35:20 +00:00
}
return true ;
}
2011-03-17 21:34:34 +01:00
2009-05-22 02:05:46 +00:00
/**
* Returns the selected settings
*
* @ param mixed array or setting or null
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2007-12-19 17:35:20 +00:00
$result = $this -> config_read ( $this -> name );
if ( is_null ( $result )) {
return NULL ;
}
if ( $result === '' ) {
return array ();
}
return explode ( ',' , $result );
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2009-05-22 02:05:46 +00:00
/**
* Save the selected options
*
* @ param array $data
* @ return mixed empty string ( data is not an array ) or bool true = success false = failure
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2007-12-19 17:35:20 +00:00
if ( ! is_array ( $data )) {
return '' ;
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
$this -> load_choices ();
$save = array ();
2006-09-02 13:14:57 +00:00
foreach ( $data as $datum ) {
2007-12-19 17:35:20 +00:00
if ( $datum == 'none' or ! array_key_exists ( $datum , $this -> choices )) {
continue ;
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
$save [ $datum ] = $datum ; // no duplicates
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
return ( $this -> config_write ( $this -> name , implode ( ',' , $save )) ? '' : get_string ( 'errorsetting' , 'admin' ));
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2009-05-22 02:05:46 +00:00
/**
* Return XHTML select field and wrapping div
*
* @ todo Add vartype handling to make sure $data is an array
* @ param array $data Array of elements to select by default
* @ return string XHTML select field and wrapping div
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2007-12-19 17:35:20 +00:00
$this -> load_choices ();
$currentsetting = array ();
foreach ( $data as $key ) {
if ( $key != 'none' and array_key_exists ( $key , $this -> choices )) {
$currentsetting [] = $key ; // already selected first
2006-09-02 13:14:57 +00:00
}
}
2007-12-19 17:35:20 +00:00
2006-09-25 09:06:51 +00:00
$return = '<div class="form-group">' ;
2006-09-02 13:14:57 +00:00
for ( $i = 0 ; $i < count ( $this -> choices ) - 1 ; $i ++ ) {
2007-12-19 17:35:20 +00:00
if ( ! array_key_exists ( $i , $currentsetting )) {
$currentsetting [ $i ] = 'none' ; //none
}
$return .= '<select class="form-select" id="' . $this -> get_id () . $i . '" name="' . $this -> get_full_name () . '[]">' ;
2006-09-02 13:14:57 +00:00
foreach ( $this -> choices as $key => $value ) {
2007-12-19 17:35:20 +00:00
$return .= '<option value="' . $key . '"' . ( " $key " == $currentsetting [ $i ] ? ' selected="selected"' : '' ) . '>' . $value . '</option>' ;
2006-09-02 13:14:57 +00:00
}
$return .= '</select>' ;
if ( $i !== count ( $this -> choices ) - 2 ) {
2006-09-24 06:47:53 +00:00
$return .= '<br />' ;
2006-09-02 13:14:57 +00:00
}
}
2006-09-25 09:06:51 +00:00
$return .= '</div>' ;
2008-01-01 15:51:54 +00:00
return format_admin_setting ( $this , $this -> visiblename , $return , $this -> description , false , '' , NULL , $query );
2006-09-02 13:14:57 +00:00
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Special checkbox for frontpage - stores data in course table
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
2006-09-02 13:14:57 +00:00
class admin_setting_sitesetcheckbox extends admin_setting_configcheckbox {
2011-03-17 21:34:34 +01:00
/**
* Returns the current sites name
*
* @ return string
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2012-10-11 15:08:17 +08:00
$site = course_get_format ( get_site ()) -> get_course ();
2009-03-26 08:56:08 +00:00
return $site -> { $this -> name };
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2009-05-22 02:05:46 +00:00
/**
* Save the selected setting
*
* @ param string $data The selected site
* @ return string empty string or error message
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2013-08-21 15:11:59 +12:00
global $DB , $SITE , $COURSE ;
2010-09-21 08:07:44 +00:00
$record = new stdClass ();
2012-11-20 15:40:19 +01:00
$record -> id = $SITE -> id ;
2007-12-19 17:35:20 +00:00
$record -> { $this -> name } = ( $data == '1' ? 1 : 0 );
$record -> timemodified = time ();
2013-06-19 11:04:17 +02:00
2012-10-11 15:08:17 +08:00
course_get_format ( $SITE ) -> update_course_format_options ( $record );
2013-08-21 15:11:59 +12:00
$DB -> update_record ( 'course' , $record );
2013-06-19 11:04:17 +02:00
// Reset caches.
2013-08-21 15:11:59 +12:00
$SITE = $DB -> get_record ( 'course' , array ( 'id' => $SITE -> id ), '*' , MUST_EXIST );
2013-06-19 11:04:17 +02:00
if ( $SITE -> id == $COURSE -> id ) {
$COURSE = $SITE ;
}
format_base :: reset_course_cache ( $SITE -> id );
2013-08-21 15:11:59 +12:00
2012-11-20 15:40:19 +01:00
return '' ;
2006-09-02 13:14:57 +00:00
}
}
2007-12-19 17:35:20 +00:00
/**
* Special text for frontpage - stores data in course table .
* Empty string means not set here . Manual setting is required .
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
2006-09-02 13:14:57 +00:00
class admin_setting_sitesettext extends admin_setting_configtext {
2011-03-17 21:34:34 +01:00
/**
* Return the current setting
*
* @ return mixed string or null
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2012-10-11 15:08:17 +08:00
$site = course_get_format ( get_site ()) -> get_course ();
2009-03-26 13:32:28 +00:00
return $site -> { $this -> name } != '' ? $site -> { $this -> name } : NULL ;
2006-09-02 13:14:57 +00:00
}
2006-09-17 06:08:10 +00:00
2009-05-22 02:05:46 +00:00
/**
* Validate the selected data
*
* @ param string $data The selected value to validate
* @ return mixed true or message string
*/
2009-01-11 16:42:19 +00:00
public function validate ( $data ) {
2015-09-16 14:38:52 +08:00
global $DB , $SITE ;
2012-05-11 15:50:09 +08:00
$cleaned = clean_param ( $data , PARAM_TEXT );
2007-12-30 17:59:17 +00:00
if ( $cleaned === '' ) {
return get_string ( 'required' );
}
2015-09-16 14:38:52 +08:00
if ( $this -> name === 'shortname' &&
$DB -> record_exists_sql ( 'SELECT id from {course} WHERE shortname = ? AND id <> ?' , array ( $data , $SITE -> id ))) {
2015-02-26 21:42:53 +01:00
return get_string ( 'shortnametaken' , 'error' , $data );
2007-12-30 17:59:17 +00:00
}
if ( " $data " == " $cleaned " ) { // implicit conversion to string is needed to do exact comparison
return true ;
} else {
return get_string ( 'validateerror' , 'admin' );
2006-10-16 07:37:41 +00:00
}
}
2009-05-22 02:05:46 +00:00
/**
* Save the selected setting
*
* @ param string $data The selected value
2010-05-21 19:06:38 +00:00
* @ return string empty or error message
2009-05-22 02:05:46 +00:00
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2013-08-21 15:11:59 +12:00
global $DB , $SITE , $COURSE ;
2006-10-16 07:37:41 +00:00
$data = trim ( $data );
2008-07-31 06:01:12 +00:00
$validated = $this -> validate ( $data );
2007-12-30 17:59:17 +00:00
if ( $validated !== true ) {
return $validated ;
2006-09-17 06:08:10 +00:00
}
2006-09-20 21:00:45 +00:00
2010-09-21 08:07:44 +00:00
$record = new stdClass ();
2012-11-20 15:40:19 +01:00
$record -> id = $SITE -> id ;
2008-05-15 21:40:00 +00:00
$record -> { $this -> name } = $data ;
2007-12-19 17:35:20 +00:00
$record -> timemodified = time ();
2013-06-19 11:04:17 +02:00
2012-10-11 15:08:17 +08:00
course_get_format ( $SITE ) -> update_course_format_options ( $record );
2013-08-21 15:11:59 +12:00
$DB -> update_record ( 'course' , $record );
2013-06-19 11:04:17 +02:00
// Reset caches.
2013-08-21 15:11:59 +12:00
$SITE = $DB -> get_record ( 'course' , array ( 'id' => $SITE -> id ), '*' , MUST_EXIST );
2013-06-19 11:04:17 +02:00
if ( $SITE -> id == $COURSE -> id ) {
$COURSE = $SITE ;
}
format_base :: reset_course_cache ( $SITE -> id );
2013-08-21 15:11:59 +12:00
2012-11-20 15:40:19 +01:00
return '' ;
2006-09-02 13:14:57 +00:00
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Special text editor for site description .
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
2006-09-02 13:14:57 +00:00
class admin_setting_special_frontpagedesc extends admin_setting {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
parent :: __construct ( 'summary' , get_string ( 'frontpagedescription' ), get_string ( 'frontpagedescriptionhelp' ), NULL );
2009-06-24 22:34:29 +00:00
editors_head_setup ();
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2009-05-22 02:05:46 +00:00
/**
* Return the current setting
* @ return string The current setting
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2012-10-11 15:08:17 +08:00
$site = course_get_format ( get_site ()) -> get_course ();
2009-03-26 08:56:08 +00:00
return $site -> { $this -> name };
2007-10-03 10:35:34 +00:00
}
2006-09-20 21:00:45 +00:00
2009-05-22 02:05:46 +00:00
/**
* Save the new setting
*
* @ param string $data The new value to save
* @ return string empty or error message
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2013-06-19 11:04:17 +02:00
global $DB , $SITE , $COURSE ;
2010-09-21 08:07:44 +00:00
$record = new stdClass ();
2012-11-20 15:40:19 +01:00
$record -> id = $SITE -> id ;
2008-05-15 21:40:00 +00:00
$record -> { $this -> name } = $data ;
2007-10-03 10:35:34 +00:00
$record -> timemodified = time ();
2013-06-19 11:04:17 +02:00
2012-10-11 15:08:17 +08:00
course_get_format ( $SITE ) -> update_course_format_options ( $record );
2013-08-21 15:11:59 +12:00
$DB -> update_record ( 'course' , $record );
2013-06-19 11:04:17 +02:00
// Reset caches.
$SITE = $DB -> get_record ( 'course' , array ( 'id' => $SITE -> id ), '*' , MUST_EXIST );
if ( $SITE -> id == $COURSE -> id ) {
$COURSE = $SITE ;
}
format_base :: reset_course_cache ( $SITE -> id );
2012-11-20 15:40:19 +01:00
return '' ;
2006-09-02 13:14:57 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Returns XHTML for the field plus wrapping div
*
* @ param string $data The current value
* @ param string $query
* @ return string The XHTML output
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2008-07-30 07:58:05 +00:00
global $CFG ;
2006-09-02 13:14:57 +00:00
2013-08-13 11:09:46 +08:00
$return = '<div class="form-htmlarea">' . print_textarea ( true , 15 , 60 , 0 , 0 , $this -> get_full_name (), $data , 0 , true , 'summary' ) . '</div>' ;
2007-12-19 17:35:20 +00:00
2008-01-01 15:51:54 +00:00
return format_admin_setting ( $this , $this -> visiblename , $return , $this -> description , false , '' , NULL , $query );
2007-12-19 17:35:20 +00:00
}
}
2006-09-02 13:14:57 +00:00
2011-03-17 21:34:34 +01:00
2009-05-22 02:05:46 +00:00
/**
2010-10-23 18:40:11 +00:00
* Administration interface for emoticon_manager settings .
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
2007-12-03 06:27:21 +00:00
class admin_setting_emoticons extends admin_setting {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific args
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
2007-12-03 06:27:21 +00:00
global $CFG ;
2010-10-23 18:40:11 +00:00
$manager = get_emoticon_manager ();
$defaults = $this -> prepare_form_data ( $manager -> default_emoticons ());
parent :: __construct ( 'emoticons' , get_string ( 'emoticons' , 'admin' ), get_string ( 'emoticons_desc' , 'admin' ), $defaults );
2007-12-03 06:27:21 +00:00
}
2009-06-30 15:19:12 +00:00
2009-05-22 02:05:46 +00:00
/**
* Return the current setting ( s )
*
* @ return array Current settings array
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2007-12-03 06:27:21 +00:00
global $CFG ;
2010-10-23 18:40:11 +00:00
$manager = get_emoticon_manager ();
2010-11-01 09:35:57 +00:00
2010-10-23 18:40:11 +00:00
$config = $this -> config_read ( $this -> name );
2010-11-01 09:35:57 +00:00
if ( is_null ( $config )) {
return null ;
}
2010-10-23 18:40:11 +00:00
2010-11-01 09:35:57 +00:00
$config = $manager -> decode_stored_config ( $config );
2010-10-23 18:40:11 +00:00
if ( is_null ( $config )) {
return null ;
2007-12-19 17:35:20 +00:00
}
2010-10-23 18:40:11 +00:00
2010-11-01 09:35:57 +00:00
return $this -> prepare_form_data ( $config );
2007-12-03 06:27:21 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Save selected settings
*
* @ param array $data Array of settings to save
* @ return bool
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2007-12-03 06:27:21 +00:00
2010-10-23 18:40:11 +00:00
$manager = get_emoticon_manager ();
$emoticons = $this -> process_form_data ( $data );
2007-12-03 06:27:21 +00:00
2010-10-23 18:40:11 +00:00
if ( $emoticons === false ) {
return false ;
2007-12-03 06:27:21 +00:00
}
2010-10-23 18:40:11 +00:00
if ( $this -> config_write ( $this -> name , $manager -> encode_stored_config ( $emoticons ))) {
return '' ; // success
} else {
return get_string ( 'errorsetting' , 'admin' ) . $this -> visiblename . html_writer :: empty_tag ( 'br' );
2007-12-03 06:27:21 +00:00
}
}
2009-05-22 02:05:46 +00:00
/**
* Return XHTML field ( s ) for options
*
* @ param array $data Array of options to set in HTML
* @ return string XHTML string for the fields and wrapping div ( s )
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2010-10-23 18:40:11 +00:00
global $OUTPUT ;
2007-12-03 06:27:21 +00:00
2013-01-16 13:15:40 +08:00
$out = html_writer :: start_tag ( 'table' , array ( 'id' => 'emoticonsetting' , 'class' => 'admintable generaltable' ));
2010-10-23 18:40:11 +00:00
$out .= html_writer :: start_tag ( 'thead' );
$out .= html_writer :: start_tag ( 'tr' );
$out .= html_writer :: tag ( 'th' , get_string ( 'emoticontext' , 'admin' ));
$out .= html_writer :: tag ( 'th' , get_string ( 'emoticonimagename' , 'admin' ));
$out .= html_writer :: tag ( 'th' , get_string ( 'emoticoncomponent' , 'admin' ));
$out .= html_writer :: tag ( 'th' , get_string ( 'emoticonalt' , 'admin' ), array ( 'colspan' => 2 ));
$out .= html_writer :: tag ( 'th' , '' );
$out .= html_writer :: end_tag ( 'tr' );
$out .= html_writer :: end_tag ( 'thead' );
$out .= html_writer :: start_tag ( 'tbody' );
$i = 0 ;
foreach ( $data as $field => $value ) {
switch ( $i ) {
case 0 :
$out .= html_writer :: start_tag ( 'tr' );
$current_text = $value ;
$current_filename = '' ;
$current_imagecomponent = '' ;
$current_altidentifier = '' ;
$current_altcomponent = '' ;
case 1 :
$current_filename = $value ;
case 2 :
$current_imagecomponent = $value ;
case 3 :
$current_altidentifier = $value ;
case 4 :
$current_altcomponent = $value ;
}
$out .= html_writer :: tag ( 'td' ,
html_writer :: empty_tag ( 'input' ,
array (
'type' => 'text' ,
'class' => 'form-text' ,
'name' => $this -> get_full_name () . '[' . $field . ']' ,
'value' => $value ,
)
), array ( 'class' => 'c' . $i )
);
if ( $i == 4 ) {
if ( get_string_manager () -> string_exists ( $current_altidentifier , $current_altcomponent )) {
$alt = get_string ( $current_altidentifier , $current_altcomponent );
} else {
$alt = $current_text ;
}
if ( $current_filename ) {
$out .= html_writer :: tag ( 'td' , $OUTPUT -> render ( new pix_emoticon ( $current_filename , $alt , $current_imagecomponent )));
} else {
$out .= html_writer :: tag ( 'td' , '' );
}
$out .= html_writer :: end_tag ( 'tr' );
$i = 0 ;
} else {
$i ++ ;
}
}
$out .= html_writer :: end_tag ( 'tbody' );
$out .= html_writer :: end_tag ( 'table' );
$out = html_writer :: tag ( 'div' , $out , array ( 'class' => 'form-group' ));
$out .= html_writer :: tag ( 'div' , html_writer :: link ( new moodle_url ( '/admin/resetemoticons.php' ), get_string ( 'emoticonsreset' , 'admin' )));
return format_admin_setting ( $this , $this -> visiblename , $out , $this -> description , false , '' , NULL , $query );
2007-12-03 06:27:21 +00:00
}
2010-10-23 18:40:11 +00:00
/**
* Converts the array of emoticon objects provided by { @ see emoticon_manager } into admin settings form data
*
* @ see self :: process_form_data ()
* @ param array $emoticons array of emoticon objects as returned by { @ see emoticon_manager }
* @ return array of form fields and their values
*/
protected function prepare_form_data ( array $emoticons ) {
$form = array ();
$i = 0 ;
foreach ( $emoticons as $emoticon ) {
$form [ 'text' . $i ] = $emoticon -> text ;
$form [ 'imagename' . $i ] = $emoticon -> imagename ;
$form [ 'imagecomponent' . $i ] = $emoticon -> imagecomponent ;
$form [ 'altidentifier' . $i ] = $emoticon -> altidentifier ;
$form [ 'altcomponent' . $i ] = $emoticon -> altcomponent ;
$i ++ ;
}
// add one more blank field set for new object
$form [ 'text' . $i ] = '' ;
$form [ 'imagename' . $i ] = '' ;
$form [ 'imagecomponent' . $i ] = '' ;
$form [ 'altidentifier' . $i ] = '' ;
$form [ 'altcomponent' . $i ] = '' ;
return $form ;
}
/**
* Converts the data from admin settings form into an array of emoticon objects
*
* @ see self :: prepare_form_data ()
* @ param array $data array of admin form fields and values
* @ return false | array of emoticon objects
*/
protected function process_form_data ( array $form ) {
$count = count ( $form ); // number of form field values
if ( $count % 5 ) {
// we must get five fields per emoticon object
return false ;
}
$emoticons = array ();
for ( $i = 0 ; $i < $count / 5 ; $i ++ ) {
$emoticon = new stdClass ();
$emoticon -> text = clean_param ( trim ( $form [ 'text' . $i ]), PARAM_NOTAGS );
$emoticon -> imagename = clean_param ( trim ( $form [ 'imagename' . $i ]), PARAM_PATH );
2011-09-24 15:07:27 +02:00
$emoticon -> imagecomponent = clean_param ( trim ( $form [ 'imagecomponent' . $i ]), PARAM_COMPONENT );
2010-10-23 18:40:11 +00:00
$emoticon -> altidentifier = clean_param ( trim ( $form [ 'altidentifier' . $i ]), PARAM_STRINGID );
2011-09-24 15:07:27 +02:00
$emoticon -> altcomponent = clean_param ( trim ( $form [ 'altcomponent' . $i ]), PARAM_COMPONENT );
2010-10-23 18:40:11 +00:00
if ( strpos ( $emoticon -> text , ':/' ) !== false or strpos ( $emoticon -> text , '//' ) !== false ) {
// prevent from breaking http://url.addresses by accident
$emoticon -> text = '' ;
}
if ( strlen ( $emoticon -> text ) < 2 ) {
// do not allow single character emoticons
$emoticon -> text = '' ;
}
if ( preg_match ( '/^[a-zA-Z]+[a-zA-Z0-9]*$/' , $emoticon -> text )) {
// emoticon text must contain some non-alphanumeric character to prevent
// breaking HTML tags
$emoticon -> text = '' ;
}
if ( $emoticon -> text !== '' and $emoticon -> imagename !== '' and $emoticon -> imagecomponent !== '' ) {
$emoticons [] = $emoticon ;
}
}
return $emoticons ;
}
2007-12-03 06:27:21 +00:00
}
2006-09-02 13:14:57 +00:00
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Special setting for limiting of the list of available languages .
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
2007-04-24 16:33:06 +00:00
class admin_setting_langlist extends admin_setting_configtext {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
parent :: __construct ( 'langlist' , get_string ( 'langlist' , 'admin' ), get_string ( 'configlanglist' , 'admin' ), '' , PARAM_NOTAGS );
2007-04-24 16:33:06 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Save the new setting
*
* @ param string $data The new setting
* @ return bool
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2007-04-24 16:33:06 +00:00
$return = parent :: write_setting ( $data );
2010-05-22 22:31:19 +00:00
get_string_manager () -> reset_caches ();
2007-04-24 16:33:06 +00:00
return $return ;
}
}
2011-03-17 21:34:34 +01:00
2009-10-02 11:30:11 +00:00
/**
* Selection of one of the recognised countries using the list
* returned by { @ link get_list_of_countries ()} .
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_settings_country_select extends admin_setting_configselect {
2010-04-14 14:27:10 +00:00
protected $includeall ;
public function __construct ( $name , $visiblename , $description , $defaultsetting , $includeall = false ) {
$this -> includeall = $includeall ;
2009-10-02 11:30:11 +00:00
parent :: __construct ( $name , $visiblename , $description , $defaultsetting , NULL );
}
/**
* Lazy - load the available choices for the select box
*/
public function load_choices () {
global $CFG ;
if ( is_array ( $this -> choices )) {
return true ;
}
$this -> choices = array_merge (
array ( '0' => get_string ( 'choosedots' )),
2010-04-14 14:27:10 +00:00
get_string_manager () -> get_list_of_countries ( $this -> includeall ));
2009-10-02 11:30:11 +00:00
return true ;
}
}
2011-03-17 21:34:34 +01:00
2011-03-07 18:08:04 +00:00
/**
* admin_setting_configselect for the default number of sections in a course ,
* simply so we can lazy - load the choices .
*
* @ copyright 2011 The Open University
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_settings_num_course_sections extends admin_setting_configselect {
public function __construct ( $name , $visiblename , $description , $defaultsetting ) {
parent :: __construct ( $name , $visiblename , $description , $defaultsetting , array ());
}
/** Lazy-load the available choices for the select box */
public function load_choices () {
$max = get_config ( 'moodlecourse' , 'maxsections' );
2012-11-23 15:50:11 +08:00
if ( ! isset ( $max ) || ! is_numeric ( $max )) {
2011-03-07 18:08:04 +00:00
$max = 52 ;
}
for ( $i = 0 ; $i <= $max ; $i ++ ) {
$this -> choices [ $i ] = " $i " ;
}
return true ;
}
}
2007-12-19 17:35:20 +00:00
/**
* Course category selection
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
class admin_settings_coursecat_select extends admin_setting_configselect {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $name , $visiblename , $description , $defaultsetting ) {
parent :: __construct ( $name , $visiblename , $description , $defaultsetting , NULL );
2007-12-19 17:35:20 +00:00
}
2006-09-25 07:35:43 +00:00
2009-05-22 02:05:46 +00:00
/**
* Load the available choices for the select box
*
* @ return bool
*/
2009-01-11 16:42:19 +00:00
public function load_choices () {
2007-12-19 17:35:20 +00:00
global $CFG ;
require_once ( $CFG -> dirroot . '/course/lib.php' );
if ( is_array ( $this -> choices )) {
return true ;
}
$this -> choices = make_categories_options ();
return true ;
}
}
2006-09-20 21:00:45 +00:00
2011-03-17 21:34:34 +01:00
2009-05-22 02:05:46 +00:00
/**
* Special control for selecting days to backup
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
2007-12-19 17:35:20 +00:00
class admin_setting_special_backupdays extends admin_setting_configmulticheckbox2 {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
backup MDL-22184 Scheduled backups are now possible again through cron.
AMOS BEGIN
MOV [move scheduledsetup,core_backup],[automatedsetup,core_backup]
MOV [scheduledsettings,core_backup],[automatedsettings,core_backup]
MOV [scheduledstorage,core_backup],[automatedstorage,core_backup]
MOV [scheduledstoragehelp,core_backup],[automatedstoragehelp,core_backup]
MOV [scheduledbackupsinactive,core],[automatedbackupsinactive,core_backup]
MOV [scheduledbackupstatus,core],[automatedbackupstatus,core_backup]
CPY [schedule,core],[automatedbackupschedule,core_backup]
MOV [backupschedulehelp,core],[automatedbackupschedulehelp,core_backup]
AMOS END
2010-11-10 06:07:43 +00:00
parent :: __construct ( 'backup_auto_weekdays' , get_string ( 'automatedbackupschedule' , 'backup' ), get_string ( 'automatedbackupschedulehelp' , 'backup' ), array (), NULL );
2007-12-19 17:35:20 +00:00
$this -> plugin = 'backup' ;
2006-09-02 13:14:57 +00:00
}
2011-03-17 21:34:34 +01:00
2009-05-22 02:05:46 +00:00
/**
* Load the available choices for the select box
*
* @ return bool Always returns true
*/
2009-01-11 16:42:19 +00:00
public function load_choices () {
2007-12-19 17:35:20 +00:00
if ( is_array ( $this -> choices )) {
return true ;
}
$this -> choices = array ();
$days = array ( 'sunday' , 'monday' , 'tuesday' , 'wednesday' , 'thursday' , 'friday' , 'saturday' );
foreach ( $days as $day ) {
$this -> choices [ $day ] = get_string ( $day , 'calendar' );
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
return true ;
2006-09-02 13:14:57 +00:00
}
}
2014-12-12 14:58:42 +08:00
/**
* Special setting for backup auto destination .
*
* @ package core
* @ subpackage admin
* @ copyright 2014 Frédéric Massart - FMCorz . net
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_special_backup_auto_destination extends admin_setting_configdirectory {
/**
* Calls parent :: __construct with specific arguments .
*/
public function __construct () {
parent :: __construct ( 'backup/backup_auto_destination' , new lang_string ( 'saveto' ), new lang_string ( 'backupsavetohelp' ), '' );
}
/**
* Check if the directory must be set , depending on backup / backup_auto_storage .
*
* Note : backup / backup_auto_storage must be specified BEFORE this setting otherwise
* there will be conflicts if this validation happens before the other one .
*
* @ param string $data Form data .
* @ return string Empty when no errors .
*/
public function write_setting ( $data ) {
$storage = ( int ) get_config ( 'backup' , 'backup_auto_storage' );
if ( $storage !== 0 ) {
if ( empty ( $data ) || ! file_exists ( $data ) || ! is_dir ( $data ) || ! is_writable ( $data ) ) {
// The directory must exist and be writable.
return get_string ( 'backuperrorinvaliddestination' );
}
}
return parent :: write_setting ( $data );
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Special debug setting
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
2006-09-13 09:22:16 +00:00
class admin_setting_special_debug extends admin_setting_configselect {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
parent :: __construct ( 'debug' , get_string ( 'debug' , 'admin' ), get_string ( 'configdebug' , 'admin' ), DEBUG_NONE , NULL );
2006-09-02 13:14:57 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Load the available choices for the select box
*
* @ return bool
*/
2009-01-11 16:42:19 +00:00
public function load_choices () {
2007-12-19 17:35:20 +00:00
if ( is_array ( $this -> choices )) {
return true ;
2006-09-13 09:22:16 +00:00
}
2007-12-19 17:35:20 +00:00
$this -> choices = array ( DEBUG_NONE => get_string ( 'debugnone' , 'admin' ),
2009-09-09 07:55:03 +00:00
DEBUG_MINIMAL => get_string ( 'debugminimal' , 'admin' ),
DEBUG_NORMAL => get_string ( 'debugnormal' , 'admin' ),
DEBUG_ALL => get_string ( 'debugall' , 'admin' ),
DEBUG_DEVELOPER => get_string ( 'debugdeveloper' , 'admin' ));
2007-12-19 17:35:20 +00:00
return true ;
2006-09-02 13:14:57 +00:00
}
}
2011-03-17 21:34:34 +01:00
2009-05-22 02:05:46 +00:00
/**
* Special admin control
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
2006-09-02 13:14:57 +00:00
class admin_setting_special_calendar_weekend extends admin_setting {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
2006-09-02 13:14:57 +00:00
$name = 'calendar_weekend' ;
$visiblename = get_string ( 'calendar_weekend' , 'admin' );
$description = get_string ( 'helpweekenddays' , 'admin' );
2007-03-05 11:57:15 +00:00
$default = array ( '0' , '6' ); // Saturdays and Sundays
2009-01-11 16:42:19 +00:00
parent :: __construct ( $name , $visiblename , $description , $default );
2006-09-02 13:14:57 +00:00
}
2011-03-17 21:34:34 +01:00
2009-05-22 02:05:46 +00:00
/**
2010-05-21 19:06:38 +00:00
* Gets the current settings as an array
2009-05-22 02:05:46 +00:00
*
* @ return mixed Null if none , else array of settings
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2007-12-19 17:35:20 +00:00
$result = $this -> config_read ( $this -> name );
if ( is_null ( $result )) {
return NULL ;
}
if ( $result === '' ) {
return array ();
}
$settings = array ();
for ( $i = 0 ; $i < 7 ; $i ++ ) {
if ( $result & ( 1 << $i )) {
2008-08-31 20:45:10 +00:00
$settings [] = $i ;
2007-12-19 17:35:20 +00:00
}
}
2008-08-31 20:45:10 +00:00
return $settings ;
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2009-05-22 02:05:46 +00:00
/**
* Save the new settings
*
* @ param array $data Array of new settings
* @ return bool
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2007-12-19 17:35:20 +00:00
if ( ! is_array ( $data )) {
return '' ;
}
unset ( $data [ 'xxxxx' ]);
2007-02-27 12:42:08 +00:00
$result = 0 ;
2007-12-19 17:35:20 +00:00
foreach ( $data as $index ) {
$result |= 1 << $index ;
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
return ( $this -> config_write ( $this -> name , $result ) ? '' : get_string ( 'errorsetting' , 'admin' ));
2006-09-02 13:14:57 +00:00
}
2006-09-20 21:00:45 +00:00
2009-05-22 02:05:46 +00:00
/**
* Return XHTML to display the control
*
* @ param array $data array of selected days
* @ param string $query
* @ return string XHTML for display ( field + wrapping div ( s )
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2009-09-09 07:55:03 +00:00
// The order matters very much because of the implied numeric keys
2007-02-27 12:42:08 +00:00
$days = array ( 'sunday' , 'monday' , 'tuesday' , 'wednesday' , 'thursday' , 'friday' , 'saturday' );
$return = '<table><thead><tr>' ;
2007-12-19 17:35:20 +00:00
$return .= '<input type="hidden" name="' . $this -> get_full_name () . '[xxxxx]" value="1" />' ; // something must be submitted even if nothing selected
2007-02-27 12:42:08 +00:00
foreach ( $days as $index => $day ) {
2007-12-19 17:35:20 +00:00
$return .= '<td><label for="' . $this -> get_id () . $index . '">' . get_string ( $day , 'calendar' ) . '</label></td>' ;
2007-02-27 12:42:08 +00:00
}
$return .= '</tr></thead><tbody><tr>' ;
foreach ( $days as $index => $day ) {
2007-12-19 17:35:20 +00:00
$return .= '<td><input type="checkbox" class="form-checkbox" id="' . $this -> get_id () . $index . '" name="' . $this -> get_full_name () . '[]" value="' . $index . '" ' . ( in_array ( " $index " , $data ) ? 'checked="checked"' : '' ) . ' /></td>' ;
2007-02-27 12:42:08 +00:00
}
$return .= '</tr></tbody></table>' ;
2006-09-25 07:35:43 +00:00
2008-01-01 15:51:54 +00:00
return format_admin_setting ( $this , $this -> visiblename , $return , $this -> description , false , '' , NULL , $query );
2006-09-20 21:00:45 +00:00
2006-09-02 13:14:57 +00:00
}
}
2007-12-19 17:35:20 +00:00
2011-05-12 18:58:50 +01:00
/**
* Admin setting that allows a user to pick a behaviour .
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_question_behaviour extends admin_setting_configselect {
/**
* @ param string $name name of config variable
* @ param string $visiblename display name
* @ param string $description description
* @ param string $default default .
*/
public function __construct ( $name , $visiblename , $description , $default ) {
parent :: __construct ( $name , $visiblename , $description , $default , NULL );
}
/**
* Load list of behaviours as choices
* @ return bool true => success , false => error .
*/
public function load_choices () {
global $CFG ;
require_once ( $CFG -> dirroot . '/question/engine/lib.php' );
2013-05-09 11:22:49 +08:00
$this -> choices = question_engine :: get_behaviour_options ( '' );
2011-05-12 18:58:50 +01:00
return true ;
}
}
2007-11-15 17:32:31 +00:00
/**
2008-07-28 12:31:29 +00:00
* Admin setting that allows a user to pick appropriate roles for something .
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2006-10-25 08:51:26 +00:00
*/
2008-07-28 12:31:29 +00:00
class admin_setting_pickroles extends admin_setting_configmulticheckbox {
2011-03-17 21:34:34 +01:00
/** @var array Array of capabilities which identify roles */
2008-07-28 12:31:29 +00:00
private $types ;
/**
* @ param string $name Name of config variable
* @ param string $visiblename Display name
* @ param string $description Description
2010-03-31 07:41:31 +00:00
* @ param array $types Array of archetypes which identify
* roles that will be enabled by default .
2008-07-28 12:31:29 +00:00
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $name , $visiblename , $description , $types ) {
parent :: __construct ( $name , $visiblename , $description , NULL , NULL );
2008-08-16 12:16:01 +00:00
$this -> types = $types ;
2006-10-25 08:51:26 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Load roles as choices
*
* @ return bool true => success , false => error
*/
2009-01-11 16:42:19 +00:00
public function load_choices () {
2008-05-15 21:40:00 +00:00
global $CFG , $DB ;
2009-06-24 09:17:56 +00:00
if ( during_initial_install ()) {
2007-12-19 17:35:20 +00:00
return false ;
}
if ( is_array ( $this -> choices )) {
return true ;
}
2008-11-13 08:40:57 +00:00
if ( $roles = get_all_roles ()) {
2012-05-18 11:40:35 +02:00
$this -> choices = role_fix_names ( $roles , null , ROLENAME_ORIGINAL , true );
2007-12-19 17:35:20 +00:00
return true ;
2006-10-25 08:51:26 +00:00
} else {
2007-12-19 17:35:20 +00:00
return false ;
2006-10-25 08:51:26 +00:00
}
}
2011-03-17 21:34:34 +01:00
2009-05-22 02:05:46 +00:00
/**
* Return the default setting for this control
*
* @ return array Array of default settings
*/
2009-01-11 16:42:19 +00:00
public function get_defaultsetting () {
2007-12-19 17:35:20 +00:00
global $CFG ;
2008-08-28 07:08:08 +00:00
2009-06-24 09:17:56 +00:00
if ( during_initial_install ()) {
2008-08-16 12:16:01 +00:00
return null ;
2007-12-19 17:35:20 +00:00
}
$result = array ();
2010-03-31 07:41:31 +00:00
foreach ( $this -> types as $archetype ) {
if ( $caproles = get_archetype_roles ( $archetype )) {
2008-07-28 12:31:29 +00:00
foreach ( $caproles as $caprole ) {
2008-08-28 07:08:08 +00:00
$result [ $caprole -> id ] = 1 ;
2008-07-28 12:31:29 +00:00
}
2006-10-25 08:51:26 +00:00
}
2006-10-27 21:07:18 +00:00
}
2007-12-19 17:35:20 +00:00
return $result ;
2006-10-25 08:51:26 +00:00
}
2007-12-19 17:35:20 +00:00
}
2006-10-25 08:51:26 +00:00
2011-03-17 21:34:34 +01:00
2015-06-05 16:38:57 +01:00
/**
* Admin setting that is a list of installed filter plugins .
*
* @ copyright 2015 The Open University
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_pickfilters extends admin_setting_configmulticheckbox {
/**
* Constructor
*
* @ param string $name unique ascii name , either 'mysetting' for settings
* that in config , or 'myplugin/mysetting' for ones in config_plugins .
* @ param string $visiblename localised name
* @ param string $description localised long description
* @ param array $default the default . E . g . array ( 'urltolink' => 1 , 'emoticons' => 1 )
*/
public function __construct ( $name , $visiblename , $description , $default ) {
if ( empty ( $default )) {
$default = array ();
}
$this -> load_choices ();
foreach ( $default as $plugin ) {
if ( ! isset ( $this -> choices [ $plugin ])) {
unset ( $default [ $plugin ]);
}
}
parent :: __construct ( $name , $visiblename , $description , $default , null );
}
public function load_choices () {
if ( is_array ( $this -> choices )) {
return true ;
}
$this -> choices = array ();
foreach ( core_component :: get_plugin_list ( 'filter' ) as $plugin => $unused ) {
$this -> choices [ $plugin ] = filter_get_name ( $plugin );
}
return true ;
}
}
2008-08-26 01:05:01 +00:00
/**
2009-06-30 16:55:56 +00:00
* Text field with an advanced checkbox , that controls a additional $name . '_adv' setting .
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2008-08-26 01:05:01 +00:00
*/
2009-06-30 15:23:33 +00:00
class admin_setting_configtext_with_advanced extends admin_setting_configtext {
2011-03-17 21:34:34 +01:00
/**
* Constructor
* @ param string $name unique ascii name , either 'mysetting' for settings that in config , or 'myplugin/mysetting' for ones in config_plugins .
* @ param string $visiblename localised
* @ param string $description long localised info
* @ param array $defaultsetting ( 'value' => string , '__construct' => bool )
* @ param mixed $paramtype int means PARAM_XXX type , string is a allowed format in regex
* @ param int $size default field size
*/
2009-06-30 16:55:56 +00:00
public function __construct ( $name , $visiblename , $description , $defaultsetting , $paramtype = PARAM_RAW , $size = null ) {
2013-01-10 15:10:02 +08:00
parent :: __construct ( $name , $visiblename , $description , $defaultsetting [ 'value' ], $paramtype , $size );
$this -> set_advanced_flag_options ( admin_setting_flag :: ENABLED , ! empty ( $defaultsetting [ 'adv' ]));
2008-08-26 01:05:01 +00:00
}
}
2011-03-17 21:34:34 +01:00
2008-08-26 01:05:01 +00:00
/**
2009-06-30 16:55:56 +00:00
* Checkbox with an advanced checkbox that controls an additional $name . '_adv' config setting .
*
* @ copyright 2009 Petr Skoda ( http :// skodak . org )
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_configcheckbox_with_advanced extends admin_setting_configcheckbox {
2011-03-17 21:34:34 +01:00
/**
* Constructor
* @ param string $name unique ascii name , either 'mysetting' for settings that in config , or 'myplugin/mysetting' for ones in config_plugins .
* @ param string $visiblename localised
* @ param string $description long localised info
* @ param array $defaultsetting ( 'value' => string , 'adv' => bool )
* @ param string $yes value used when checked
* @ param string $no value used when not checked
*/
2009-06-30 16:55:56 +00:00
public function __construct ( $name , $visiblename , $description , $defaultsetting , $yes = '1' , $no = '0' ) {
2013-01-10 15:10:02 +08:00
parent :: __construct ( $name , $visiblename , $description , $defaultsetting [ 'value' ], $yes , $no );
$this -> set_advanced_flag_options ( admin_setting_flag :: ENABLED , ! empty ( $defaultsetting [ 'adv' ]));
2009-06-30 16:55:56 +00:00
}
}
2011-03-17 21:34:34 +01:00
2010-06-17 08:57:00 +00:00
/**
* Checkbox with an advanced checkbox that controls an additional $name . '_locked' config setting .
*
* This is nearly a copy / paste of admin_setting_configcheckbox_with_adv
*
* @ copyright 2010 Sam Hemelryk
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_configcheckbox_with_lock extends admin_setting_configcheckbox {
/**
* Constructor
* @ param string $name unique ascii name , either 'mysetting' for settings that in config , or 'myplugin/mysetting' for ones in config_plugins .
* @ param string $visiblename localised
* @ param string $description long localised info
* @ param array $defaultsetting ( 'value' => string , 'locked' => bool )
* @ param string $yes value used when checked
* @ param string $no value used when not checked
*/
public function __construct ( $name , $visiblename , $description , $defaultsetting , $yes = '1' , $no = '0' ) {
2013-01-10 15:10:02 +08:00
parent :: __construct ( $name , $visiblename , $description , $defaultsetting [ 'value' ], $yes , $no );
$this -> set_locked_flag_options ( admin_setting_flag :: ENABLED , ! empty ( $defaultsetting [ 'locked' ]));
2010-06-17 08:57:00 +00:00
}
}
2011-03-17 21:34:34 +01:00
2009-06-30 16:55:56 +00:00
/**
* Dropdown menu with an advanced checkbox , that controls a additional $name . '_adv' setting .
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2008-08-26 01:05:01 +00:00
*/
2009-06-30 15:23:33 +00:00
class admin_setting_configselect_with_advanced extends admin_setting_configselect {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $name , $visiblename , $description , $defaultsetting , $choices ) {
2013-01-10 15:10:02 +08:00
parent :: __construct ( $name , $visiblename , $description , $defaultsetting [ 'value' ], $choices );
$this -> set_advanced_flag_options ( admin_setting_flag :: ENABLED , ! empty ( $defaultsetting [ 'adv' ]));
2008-08-26 01:05:01 +00:00
}
2009-06-30 15:19:12 +00:00
2008-08-26 01:05:01 +00:00
}
2011-03-17 21:34:34 +01:00
2008-07-28 12:31:29 +00:00
/**
* Graded roles in gradebook
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2008-07-28 12:31:29 +00:00
*/
class admin_setting_special_gradebookroles extends admin_setting_pickroles {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
parent :: __construct ( 'gradebookroles' , get_string ( 'gradebookroles' , 'admin' ),
2009-09-09 07:55:03 +00:00
get_string ( 'configgradebookroles' , 'admin' ),
2010-03-31 07:41:31 +00:00
array ( 'student' ));
2008-07-28 12:31:29 +00:00
}
}
2011-03-17 21:34:34 +01:00
2009-05-22 02:05:46 +00:00
/**
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
2008-03-03 11:03:54 +00:00
class admin_setting_regradingcheckbox extends admin_setting_configcheckbox {
2011-03-17 21:34:34 +01:00
/**
* Saves the new settings passed in $data
*
* @ param string $data
* @ return mixed string or Array
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2008-05-15 21:40:00 +00:00
global $CFG , $DB ;
2008-03-03 11:03:54 +00:00
$oldvalue = $this -> config_read ( $this -> name );
$return = parent :: write_setting ( $data );
$newvalue = $this -> config_read ( $this -> name );
if ( $oldvalue !== $newvalue ) {
2009-09-09 07:55:03 +00:00
// force full regrading
2008-05-15 21:40:00 +00:00
$DB -> set_field ( 'grade_items' , 'needsupdate' , 1 , array ( 'needsupdate' => 0 ));
2008-03-03 11:03:54 +00:00
}
return $return ;
2008-07-31 06:01:12 +00:00
}
2008-03-03 11:03:54 +00:00
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
2010-05-21 19:06:38 +00:00
* Which roles to show on course description page
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
class admin_setting_special_coursecontact extends admin_setting_pickroles {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
parent :: __construct ( 'coursecontact' , get_string ( 'coursecontact' , 'admin' ),
get_string ( 'coursecontact_desc' , 'admin' ),
2010-03-31 07:41:31 +00:00
array ( 'editingteacher' ));
2015-08-14 12:27:26 +08:00
$this -> set_updatedcallback ( create_function ( '' ,
" cache::make('core', 'coursecontacts')->purge(); " ));
2007-12-19 17:35:20 +00:00
}
}
2006-10-25 08:51:26 +00:00
2011-03-17 21:34:34 +01:00
2009-05-22 02:05:46 +00:00
/**
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
2009-04-16 07:16:44 +00:00
class admin_setting_special_gradelimiting extends admin_setting_configcheckbox {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-04-16 07:16:44 +00:00
function admin_setting_special_gradelimiting () {
parent :: __construct ( 'unlimitedgrades' , get_string ( 'unlimitedgrades' , 'grades' ),
MDL-21695 Removing obsolete strings and renaming legacy config* strings in gradebook
AMOS BEGIN
MOV [configdisablegradehistory,core_grades],[disablegradehistory_help,core_grades]
MOV [configenableoutcomes,core_grades],[enableoutcomes_help,core_grades]
MOV [configfixedstudents,core_grades],[fixedstudents_help,core_grades]
MOV [configgradehistorylifetime,core_grades],[gradehistorylifetime_help,core_grades]
MOV [configgradeitemadvanced,core_grades],[gradeitemadvanced_help,core_grades]
MOV [configgradepublishing,core_grades],[gradepublishing_help,core_grades]
MOV [confighiddenasdate,core_grades],[hiddenasdate_help,core_grades]
MOV [confighideforcedsettings,core_grades],[hideforcedsettings_help],[core_grades]
MOV [configincludescalesinaggregation,core_grades],[includescalesinaggregation_help,core_grades]
MOV [configprofilereport,core_grades],[profilereport_help,core_grades]
MOV [configshowuserimage,core_grades],[showuserimage_help,core_grades]
MOV [configunlimitedgrades,core_grades],[unlimitedgrades_help,core_grades]
AMOS END
2010-06-25 17:21:15 +00:00
get_string ( 'unlimitedgrades_help' , 'grades' ), '0' , '1' , '0' );
2009-04-16 07:16:44 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Force site regrading
*/
2009-04-16 07:16:44 +00:00
function regrade_all () {
global $CFG ;
require_once ( " $CFG->libdir /gradelib.php " );
grade_force_site_regrading ();
}
2009-05-22 02:05:46 +00:00
/**
* Saves the new settings
*
* @ param mixed $data
* @ return string empty string or error message
*/
2009-04-16 07:16:44 +00:00
function write_setting ( $data ) {
$previous = $this -> get_setting ();
if ( $previous === null ) {
if ( $data ) {
$this -> regrade_all ();
}
} else {
if ( $data != $previous ) {
$this -> regrade_all ();
}
}
return ( $this -> config_write ( $this -> name , $data ) ? '' : get_string ( 'errorsetting' , 'admin' ));
}
}
2015-06-04 17:56:37 +08:00
/**
* Special setting for $CFG -> grade_minmaxtouse .
*
* @ package core
* @ copyright 2015 Frédéric Massart - FMCorz . net
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_special_grademinmaxtouse extends admin_setting_configselect {
/**
* Constructor .
*/
public function __construct () {
parent :: __construct ( 'grade_minmaxtouse' , new lang_string ( 'minmaxtouse' , 'grades' ),
new lang_string ( 'minmaxtouse_desc' , 'grades' ), GRADE_MIN_MAX_FROM_GRADE_ITEM ,
array (
GRADE_MIN_MAX_FROM_GRADE_ITEM => get_string ( 'gradeitemminmax' , 'grades' ),
GRADE_MIN_MAX_FROM_GRADE_GRADE => get_string ( 'gradegrademinmax' , 'grades' )
)
);
}
/**
* Saves the new setting .
*
* @ param mixed $data
* @ return string empty string or error message
*/
function write_setting ( $data ) {
global $CFG ;
$previous = $this -> get_setting ();
$result = parent :: write_setting ( $data );
// If saved and the value has changed.
if ( empty ( $result ) && $previous != $data ) {
require_once ( $CFG -> libdir . '/gradelib.php' );
grade_force_site_regrading ();
}
return $result ;
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Primary grade export plugin - has state tracking .
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
class admin_setting_special_gradeexport extends admin_setting_configmulticheckbox {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
parent :: __construct ( 'gradeexport' , get_string ( 'gradeexport' , 'admin' ),
2009-09-09 07:55:03 +00:00
get_string ( 'configgradeexport' , 'admin' ), array (), NULL );
2006-10-25 08:51:26 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Load the available choices for the multicheckbox
*
* @ return bool always returns true
*/
2009-01-11 16:42:19 +00:00
public function load_choices () {
2007-12-19 17:35:20 +00:00
if ( is_array ( $this -> choices )) {
return true ;
}
$this -> choices = array ();
2013-07-16 22:36:11 +02:00
if ( $plugins = core_component :: get_plugin_list ( 'gradeexport' )) {
2009-06-19 14:25:56 +00:00
foreach ( $plugins as $plugin => $unused ) {
2010-07-05 09:30:49 +00:00
$this -> choices [ $plugin ] = get_string ( 'pluginname' , 'gradeexport_' . $plugin );
2007-12-19 17:35:20 +00:00
}
}
return true ;
}
2006-10-25 08:51:26 +00:00
}
2006-09-02 13:14:57 +00:00
2011-03-17 21:34:34 +01:00
2014-04-07 16:00:20 -04:00
/**
* A setting for setting the default grade point value . Must be an integer between 1 and $CFG -> gradepointmax .
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_special_gradepointdefault extends admin_setting_configtext {
/**
* Config gradepointmax constructor
*
* @ param string $name Overidden by " gradepointmax "
* @ param string $visiblename Overridden by " gradepointmax " language string .
* @ param string $description Overridden by " gradepointmax_help " language string .
* @ param string $defaultsetting Not used , overridden by 100.
* @ param mixed $paramtype Overridden by PARAM_INT .
* @ param int $size Overridden by 5.
*/
public function __construct ( $name = '' , $visiblename = '' , $description = '' , $defaultsetting = '' , $paramtype = PARAM_INT , $size = 5 ) {
$name = 'gradepointdefault' ;
$visiblename = get_string ( 'gradepointdefault' , 'grades' );
$description = get_string ( 'gradepointdefault_help' , 'grades' );
$defaultsetting = 100 ;
$paramtype = PARAM_INT ;
$size = 5 ;
parent :: __construct ( $name , $visiblename , $description , $defaultsetting , $paramtype , $size );
}
/**
* Validate data before storage
* @ param string $data The submitted data
* @ return bool | string true if ok , string if error found
*/
public function validate ( $data ) {
global $CFG ;
if ((( string )( int ) $data === ( string ) $data && $data > 0 && $data <= $CFG -> gradepointmax )) {
return true ;
} else {
return get_string ( 'gradepointdefault_validateerror' , 'grades' );
}
}
}
/**
* A setting for setting the maximum grade value . Must be an integer between 1 and 10000.
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_special_gradepointmax extends admin_setting_configtext {
/**
* Config gradepointmax constructor
*
* @ param string $name Overidden by " gradepointmax "
* @ param string $visiblename Overridden by " gradepointmax " language string .
* @ param string $description Overridden by " gradepointmax_help " language string .
* @ param string $defaultsetting Not used , overridden by 100.
* @ param mixed $paramtype Overridden by PARAM_INT .
* @ param int $size Overridden by 5.
*/
public function __construct ( $name = '' , $visiblename = '' , $description = '' , $defaultsetting = '' , $paramtype = PARAM_INT , $size = 5 ) {
$name = 'gradepointmax' ;
$visiblename = get_string ( 'gradepointmax' , 'grades' );
$description = get_string ( 'gradepointmax_help' , 'grades' );
$defaultsetting = 100 ;
$paramtype = PARAM_INT ;
$size = 5 ;
parent :: __construct ( $name , $visiblename , $description , $defaultsetting , $paramtype , $size );
}
/**
* Save the selected setting
*
* @ param string $data The selected site
* @ return string empty string or error message
*/
public function write_setting ( $data ) {
if ( $data === '' ) {
$data = ( int ) $this -> defaultsetting ;
} else {
$data = $data ;
}
return parent :: write_setting ( $data );
}
/**
* Validate data before storage
* @ param string $data The submitted data
* @ return bool | string true if ok , string if error found
*/
public function validate ( $data ) {
if ((( string )( int ) $data === ( string ) $data && $data > 0 && $data <= 10000 )) {
return true ;
} else {
return get_string ( 'gradepointmax_validateerror' , 'grades' );
}
}
/**
* Return an XHTML string for the setting
* @ param array $data Associative array of value => xx , forced => xx , adv => xx
* @ param string $query search query to be highlighted
* @ return string XHTML to display control
*/
public function output_html ( $data , $query = '' ) {
$default = $this -> get_defaultsetting ();
$attr = array (
'type' => 'text' ,
'size' => $this -> size ,
'id' => $this -> get_id (),
'name' => $this -> get_full_name (),
'value' => s ( $data ),
'maxlength' => '5'
);
$input = html_writer :: empty_tag ( 'input' , $attr );
$attr = array ( 'class' => 'form-text defaultsnext' );
$div = html_writer :: tag ( 'div' , $input , $attr );
return format_admin_setting ( $this , $this -> visiblename , $div , $this -> description , true , '' , $default , $query );
}
}
2007-12-19 17:35:20 +00:00
/**
* Grade category settings
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2006-11-17 08:57:50 +00:00
*/
2007-12-19 17:35:20 +00:00
class admin_setting_gradecat_combo extends admin_setting {
2011-03-17 21:34:34 +01:00
/** @var array Array of choices */
2009-01-11 16:42:19 +00:00
public $choices ;
2007-12-19 17:35:20 +00:00
2009-05-22 02:05:46 +00:00
/**
* Sets choices and calls parent :: __construct with passed arguments
* @ param string $name
* @ param string $visiblename
* @ param string $description
* @ param mixed $defaultsetting string or array depending on implementation
* @ param array $choices An array of choices for the control
*/
2009-01-11 16:42:19 +00:00
public function __construct ( $name , $visiblename , $description , $defaultsetting , $choices ) {
2007-12-19 17:35:20 +00:00
$this -> choices = $choices ;
2009-01-11 16:42:19 +00:00
parent :: __construct ( $name , $visiblename , $description , $defaultsetting );
2006-11-17 08:57:50 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Return the current setting ( s ) array
2009-06-30 15:19:12 +00:00
*
2009-05-22 02:05:46 +00:00
* @ return array Array of value => xx , forced => xx , adv => xx
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2006-11-17 08:57:50 +00:00
global $CFG ;
2007-12-19 17:35:20 +00:00
$value = $this -> config_read ( $this -> name );
$flag = $this -> config_read ( $this -> name . '_flag' );
if ( is_null ( $value ) or is_null ( $flag )) {
return NULL ;
2006-11-17 08:57:50 +00:00
}
2007-12-19 17:35:20 +00:00
$flag = ( int ) $flag ;
$forced = ( boolean )( 1 & $flag ); // first bit
$adv = ( boolean )( 2 & $flag ); // second bit
return array ( 'value' => $value , 'forced' => $forced , 'adv' => $adv );
2006-11-17 08:57:50 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Save the new settings passed in $data
*
* @ todo Add vartype handling to ensure $data is array
* @ param array $data Associative array of value => xx , forced => xx , adv => xx
* @ return string empty or error message
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2007-12-19 17:35:20 +00:00
global $CFG ;
2006-11-17 08:57:50 +00:00
2007-12-19 17:35:20 +00:00
$value = $data [ 'value' ];
$forced = empty ( $data [ 'forced' ]) ? 0 : 1 ;
$adv = empty ( $data [ 'adv' ]) ? 0 : 2 ;
$flag = ( $forced | $adv ); //bitwise or
if ( ! in_array ( $value , array_keys ( $this -> choices ))) {
return 'Error setting ' ;
}
$oldvalue = $this -> config_read ( $this -> name );
$oldflag = ( int ) $this -> config_read ( $this -> name . '_flag' );
$oldforced = ( 1 & $oldflag ); // first bit
$result1 = $this -> config_write ( $this -> name , $value );
$result2 = $this -> config_write ( $this -> name . '_flag' , $flag );
// force regrade if needed
if ( $oldforced != $forced or ( $forced and $value != $oldvalue )) {
2009-09-09 07:55:03 +00:00
require_once ( $CFG -> libdir . '/gradelib.php' );
grade_category :: updated_forced_settings ();
2007-12-19 17:35:20 +00:00
}
if ( $result1 and $result2 ) {
return '' ;
2006-11-17 08:57:50 +00:00
} else {
2007-12-19 17:35:20 +00:00
return get_string ( 'errorsetting' , 'admin' );
2006-11-17 08:57:50 +00:00
}
}
2009-05-22 02:05:46 +00:00
/**
* Return XHTML to display the field and wrapping div
*
* @ todo Add vartype handling to ensure $data is array
* @ param array $data Associative array of value => xx , forced => xx , adv => xx
2009-06-30 15:19:12 +00:00
* @ param string $query
2009-05-22 02:05:46 +00:00
* @ return string XHTML to display control
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2007-12-19 17:35:20 +00:00
$value = $data [ 'value' ];
$forced = ! empty ( $data [ 'forced' ]);
$adv = ! empty ( $data [ 'adv' ]);
2006-11-17 08:57:50 +00:00
2008-01-22 08:27:30 +00:00
$default = $this -> get_defaultsetting ();
if ( ! is_null ( $default )) {
$defaultinfo = array ();
if ( isset ( $this -> choices [ $default [ 'value' ]])) {
$defaultinfo [] = $this -> choices [ $default [ 'value' ]];
}
if ( ! empty ( $default [ 'forced' ])) {
$defaultinfo [] = get_string ( 'force' );
}
if ( ! empty ( $default [ 'adv' ])) {
$defaultinfo [] = get_string ( 'advanced' );
}
$defaultinfo = implode ( ', ' , $defaultinfo );
2008-07-31 06:01:12 +00:00
2008-01-22 08:27:30 +00:00
} else {
$defaultinfo = NULL ;
}
$return = '<div class="form-group">' ;
$return .= '<select class="form-select" id="' . $this -> get_id () . '" name="' . $this -> get_full_name () . '[value]">' ;
2007-12-19 17:35:20 +00:00
foreach ( $this -> choices as $key => $val ) {
2009-09-09 07:55:03 +00:00
// the string cast is needed because key may be integer - 0 is equal to most strings!
2007-12-19 17:35:20 +00:00
$return .= '<option value="' . $key . '"' . (( string ) $key == $value ? ' selected="selected"' : '' ) . '>' . $val . '</option>' ;
}
$return .= '</select>' ;
2008-01-01 15:51:54 +00:00
$return .= '<input type="checkbox" class="form-checkbox" id="' . $this -> get_id () . 'force" name="' . $this -> get_full_name () . '[forced]" value="1" ' . ( $forced ? 'checked="checked"' : '' ) . ' />'
2009-09-09 07:55:03 +00:00
. '<label for="' . $this -> get_id () . 'force">' . get_string ( 'force' ) . '</label>' ;
2008-01-01 15:51:54 +00:00
$return .= '<input type="checkbox" class="form-checkbox" id="' . $this -> get_id () . 'adv" name="' . $this -> get_full_name () . '[adv]" value="1" ' . ( $adv ? 'checked="checked"' : '' ) . ' />'
2009-09-09 07:55:03 +00:00
. '<label for="' . $this -> get_id () . 'adv">' . get_string ( 'advanced' ) . '</label>' ;
2008-01-22 08:27:30 +00:00
$return .= '</div>' ;
2007-12-19 17:35:20 +00:00
2008-01-22 08:27:30 +00:00
return format_admin_setting ( $this , $this -> visiblename , $return , $this -> description , true , '' , $defaultinfo , $query );
2007-12-19 17:35:20 +00:00
}
}
/**
* Selection of grade report in user profiles
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
class admin_setting_grade_profilereport extends admin_setting_configselect {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
MDL-21695 Removing obsolete strings and renaming legacy config* strings in gradebook
AMOS BEGIN
MOV [configdisablegradehistory,core_grades],[disablegradehistory_help,core_grades]
MOV [configenableoutcomes,core_grades],[enableoutcomes_help,core_grades]
MOV [configfixedstudents,core_grades],[fixedstudents_help,core_grades]
MOV [configgradehistorylifetime,core_grades],[gradehistorylifetime_help,core_grades]
MOV [configgradeitemadvanced,core_grades],[gradeitemadvanced_help,core_grades]
MOV [configgradepublishing,core_grades],[gradepublishing_help,core_grades]
MOV [confighiddenasdate,core_grades],[hiddenasdate_help,core_grades]
MOV [confighideforcedsettings,core_grades],[hideforcedsettings_help],[core_grades]
MOV [configincludescalesinaggregation,core_grades],[includescalesinaggregation_help,core_grades]
MOV [configprofilereport,core_grades],[profilereport_help,core_grades]
MOV [configshowuserimage,core_grades],[showuserimage_help,core_grades]
MOV [configunlimitedgrades,core_grades],[unlimitedgrades_help,core_grades]
AMOS END
2010-06-25 17:21:15 +00:00
parent :: __construct ( 'grade_profilereport' , get_string ( 'profilereport' , 'grades' ), get_string ( 'profilereport_help' , 'grades' ), 'user' , null );
2007-12-19 17:35:20 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Loads an array of choices for the configselect control
*
* @ return bool always return true
*/
2009-01-11 16:42:19 +00:00
public function load_choices () {
2007-12-19 17:35:20 +00:00
if ( is_array ( $this -> choices )) {
return true ;
}
$this -> choices = array ();
global $CFG ;
require_once ( $CFG -> libdir . '/gradelib.php' );
2013-07-16 22:36:11 +02:00
foreach ( core_component :: get_plugin_list ( 'gradereport' ) as $plugin => $plugindir ) {
2009-06-19 14:25:56 +00:00
if ( file_exists ( $plugindir . '/lib.php' )) {
require_once ( $plugindir . '/lib.php' );
2007-12-19 17:35:20 +00:00
$functionname = 'grade_report_' . $plugin . '_profilereport' ;
if ( function_exists ( $functionname )) {
2010-07-05 09:30:49 +00:00
$this -> choices [ $plugin ] = get_string ( 'pluginname' , 'gradereport_' . $plugin );
2006-11-17 08:57:50 +00:00
}
}
}
2007-12-19 17:35:20 +00:00
return true ;
2006-11-17 08:57:50 +00:00
}
}
2015-02-05 14:22:34 +08:00
/**
2015-04-29 11:29:52 +08:00
* Provides a selection of grade reports to be used for " grades " .
2015-02-05 14:22:34 +08:00
*
* @ copyright 2015 Adrian Greeve < adrian @ moodle . com >
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_my_grades_report extends admin_setting_configselect {
/**
* Calls parent :: __construct with specific arguments .
*/
public function __construct () {
2015-05-05 15:12:59 +08:00
parent :: __construct ( 'grade_mygrades_report' , new lang_string ( 'mygrades' , 'grades' ),
2015-02-05 14:22:34 +08:00
new lang_string ( 'mygrades_desc' , 'grades' ), 'overview' , null );
}
/**
* Loads an array of choices for the configselect control .
*
* @ return bool always returns true .
*/
public function load_choices () {
global $CFG ; // Remove this line and behold the horror of behat test failures!
$this -> choices = array ();
foreach ( core_component :: get_plugin_list ( 'gradereport' ) as $plugin => $plugindir ) {
if ( file_exists ( $plugindir . '/lib.php' )) {
require_once ( $plugindir . '/lib.php' );
// Check to see if the class exists. Check the correct plugin convention first.
if ( class_exists ( 'gradereport_' . $plugin )) {
$classname = 'gradereport_' . $plugin ;
} else if ( class_exists ( 'grade_report_' . $plugin )) {
// We are using the old plugin naming convention.
$classname = 'grade_report_' . $plugin ;
} else {
continue ;
}
if ( $classname :: supports_mygrades ()) {
$this -> choices [ $plugin ] = get_string ( 'pluginname' , 'gradereport_' . $plugin );
}
}
}
// Add an option to specify an external url.
$this -> choices [ 'external' ] = get_string ( 'externalurl' , 'grades' );
return true ;
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Special class for register auth selection
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-05-10 08:23:44 +00:00
*/
2007-12-19 17:35:20 +00:00
class admin_setting_special_registerauth extends admin_setting_configselect {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
parent :: __construct ( 'registerauth' , get_string ( 'selfregistration' , 'auth' ), get_string ( 'selfregistration_help' , 'auth' ), '' , null );
2007-05-10 08:23:44 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Returns the default option
*
2010-05-21 19:06:38 +00:00
* @ return string empty or default option
2009-05-22 02:05:46 +00:00
*/
2009-02-01 10:19:13 +00:00
public function get_defaultsetting () {
2007-12-19 17:35:20 +00:00
$this -> load_choices ();
2009-02-01 10:19:13 +00:00
$defaultsetting = parent :: get_defaultsetting ();
if ( array_key_exists ( $defaultsetting , $this -> choices )) {
return $defaultsetting ;
2007-12-19 17:35:20 +00:00
} else {
return '' ;
}
}
2007-05-10 08:23:44 +00:00
2009-05-22 02:05:46 +00:00
/**
* Loads the possible choices for the array
*
* @ return bool always returns true
*/
2009-01-11 16:42:19 +00:00
public function load_choices () {
2007-05-10 08:23:44 +00:00
global $CFG ;
2007-12-19 17:35:20 +00:00
if ( is_array ( $this -> choices )) {
return true ;
}
$this -> choices = array ();
$this -> choices [ '' ] = get_string ( 'disable' );
$authsenabled = get_enabled_auth_plugins ( true );
foreach ( $authsenabled as $auth ) {
$authplugin = get_auth_plugin ( $auth );
if ( ! $authplugin -> can_signup ()) {
continue ;
2007-05-10 08:23:44 +00:00
}
2007-12-19 17:35:20 +00:00
// Get the auth title (from core or own auth lang files)
2008-01-31 22:02:44 +00:00
$authtitle = $authplugin -> get_title ();
2007-12-19 17:35:20 +00:00
$this -> choices [ $auth ] = $authtitle ;
2007-05-10 08:23:44 +00:00
}
2007-12-19 17:35:20 +00:00
return true ;
2007-05-10 08:23:44 +00:00
}
2007-12-19 17:35:20 +00:00
}
2007-05-10 08:23:44 +00:00
2011-03-17 21:34:34 +01:00
2011-03-10 00:50:18 +01:00
/**
* General plugins manager
*/
class admin_page_pluginsoverview extends admin_externalpage {
/**
* Sets basic information about the external page
*/
public function __construct () {
global $CFG ;
parent :: __construct ( 'pluginsoverview' , get_string ( 'pluginsoverview' , 'core_admin' ),
" $CFG->wwwroot / $CFG->admin /plugins.php " );
}
}
2007-12-19 17:35:20 +00:00
/**
* Module manage page
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
class admin_page_managemods extends admin_externalpage {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
2007-12-19 17:35:20 +00:00
global $CFG ;
2009-01-11 16:42:19 +00:00
parent :: __construct ( 'managemodules' , get_string ( 'modsettings' , 'admin' ), " $CFG->wwwroot / $CFG->admin /modules.php " );
2007-12-19 17:35:20 +00:00
}
2007-05-10 08:23:44 +00:00
2009-05-22 02:05:46 +00:00
/**
* Try to find the specified module
*
* @ param string $query The module to search for
* @ return array
*/
2009-01-11 16:42:19 +00:00
public function search ( $query ) {
2010-04-11 09:21:18 +00:00
global $CFG , $DB ;
2007-12-20 14:39:12 +00:00
if ( $result = parent :: search ( $query )) {
return $result ;
2007-12-19 17:35:20 +00:00
}
$found = false ;
2008-05-15 21:40:00 +00:00
if ( $modules = $DB -> get_records ( 'modules' )) {
2007-12-19 17:35:20 +00:00
foreach ( $modules as $module ) {
2010-04-11 09:21:18 +00:00
if ( ! file_exists ( " $CFG->dirroot /mod/ $module->name /lib.php " )) {
continue ;
}
2007-12-19 17:35:20 +00:00
if ( strpos ( $module -> name , $query ) !== false ) {
$found = true ;
break ;
}
$strmodulename = get_string ( 'modulename' , $module -> name );
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $strmodulename ), $query ) !== false ) {
2007-12-19 17:35:20 +00:00
$found = true ;
break ;
2007-05-10 08:23:44 +00:00
}
}
2007-12-19 17:35:20 +00:00
}
if ( $found ) {
2010-09-21 08:07:44 +00:00
$result = new stdClass ();
2007-12-19 17:35:20 +00:00
$result -> page = $this ;
$result -> settings = array ();
return array ( $this -> name => $result );
2007-05-10 08:23:44 +00:00
} else {
2007-12-19 17:35:20 +00:00
return array ();
2007-05-10 08:23:44 +00:00
}
}
2007-12-19 17:35:20 +00:00
}
2007-05-10 08:23:44 +00:00
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
2008-07-26 16:50:33 +00:00
/**
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
* Special class for enrol plugins management .
2009-05-22 02:05:46 +00:00
*
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
* @ copyright 2010 Petr Skoda { @ link http :// skodak . org }
2009-05-22 02:05:46 +00:00
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2008-07-26 16:50:33 +00:00
*/
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
class admin_setting_manageenrols extends admin_setting {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
$this -> nosave = true ;
parent :: __construct ( 'enrolsui' , get_string ( 'manageenrols' , 'enrol' ), '' , '' );
2008-07-26 16:50:33 +00:00
}
2009-05-22 02:05:46 +00:00
/**
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
* Always returns true , does nothing
*
* @ return true
2009-05-22 02:05:46 +00:00
*/
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
public function get_setting () {
return true ;
}
/**
* Always returns true , does nothing
*
* @ return true
*/
public function get_defaultsetting () {
return true ;
}
/**
* Always returns '' , does not write anything
*
* @ return string Always returns ''
*/
public function write_setting ( $data ) {
// do not write any setting
return '' ;
}
/**
* Checks if $query is one of the available enrol plugins
*
* @ param string $query The string to search for
* @ return bool Returns true if found , false if not
*/
public function is_related ( $query ) {
if ( parent :: is_related ( $query )) {
return true ;
2008-07-26 16:50:33 +00:00
}
2013-08-06 20:58:28 +02:00
$query = core_text :: strtolower ( $query );
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
$enrols = enrol_get_plugins ( false );
foreach ( $enrols as $name => $enrol ) {
$localised = get_string ( 'pluginname' , 'enrol_' . $name );
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $name ), $query ) !== false ) {
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
return true ;
}
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $localised ), $query ) !== false ) {
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
return true ;
}
}
return false ;
}
2008-07-26 16:50:33 +00:00
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
/**
* Builds the XHTML to display the control
*
* @ param string $data Unused
* @ param string $query
* @ return string
*/
public function output_html ( $data , $query = '' ) {
2012-12-21 14:28:05 +01:00
global $CFG , $OUTPUT , $DB , $PAGE ;
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
2012-12-21 14:28:05 +01:00
// Display strings.
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
$strup = get_string ( 'up' );
$strdown = get_string ( 'down' );
$strsettings = get_string ( 'settings' );
$strenable = get_string ( 'enable' );
$strdisable = get_string ( 'disable' );
2013-06-26 13:56:24 +02:00
$struninstall = get_string ( 'uninstallplugin' , 'core_admin' );
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
$strusage = get_string ( 'enrolusage' , 'enrol' );
2012-12-21 14:28:05 +01:00
$strversion = get_string ( 'version' );
2013-09-30 22:39:21 +02:00
$strtest = get_string ( 'testsettings' , 'core_enrol' );
2012-12-21 14:28:05 +01:00
2013-10-04 22:40:44 +02:00
$pluginmanager = core_plugin_manager :: instance ();
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
$enrols_available = enrol_get_plugins ( false );
$active_enrols = enrol_get_plugins ( true );
$allenrols = array ();
foreach ( $active_enrols as $key => $enrol ) {
$allenrols [ $key ] = true ;
}
foreach ( $enrols_available as $key => $enrol ) {
$allenrols [ $key ] = true ;
}
2012-12-21 14:28:05 +01:00
// Now find all borked plugins and at least allow then to uninstall.
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
$condidates = $DB -> get_fieldset_sql ( " SELECT DISTINCT enrol FROM { enrol} " );
foreach ( $condidates as $candidate ) {
if ( empty ( $allenrols [ $candidate ])) {
$allenrols [ $candidate ] = true ;
}
}
$return = $OUTPUT -> heading ( get_string ( 'actenrolshhdr' , 'enrol' ), 3 , 'main' , true );
$return .= $OUTPUT -> box_start ( 'generalbox enrolsui' );
$table = new html_table ();
2013-09-30 22:39:21 +02:00
$table -> head = array ( get_string ( 'name' ), $strusage , $strversion , $strenable , $strup . '/' . $strdown , $strsettings , $strtest , $struninstall );
$table -> colclasses = array ( 'leftalign' , 'centeralign' , 'centeralign' , 'centeralign' , 'centeralign' , 'centeralign' , 'centeralign' , 'centeralign' );
2012-11-14 10:30:50 +08:00
$table -> id = 'courseenrolmentplugins' ;
$table -> attributes [ 'class' ] = 'admintable generaltable' ;
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
$table -> data = array ();
2012-12-21 14:28:05 +01:00
// Iterate through enrol plugins and add to the display table.
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
$updowncount = 1 ;
$enrolcount = count ( $active_enrols );
$url = new moodle_url ( '/admin/enrol.php' , array ( 'sesskey' => sesskey ()));
$printed = array ();
foreach ( $allenrols as $enrol => $unused ) {
2012-12-21 14:28:05 +01:00
$plugininfo = $pluginmanager -> get_plugin_info ( 'enrol_' . $enrol );
$version = get_config ( 'enrol_' . $enrol , 'version' );
if ( $version === false ) {
$version = '' ;
}
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
if ( get_string_manager () -> string_exists ( 'pluginname' , 'enrol_' . $enrol )) {
$name = get_string ( 'pluginname' , 'enrol_' . $enrol );
} else {
$name = $enrol ;
}
2012-12-21 14:28:05 +01:00
// Usage.
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
$ci = $DB -> count_records ( 'enrol' , array ( 'enrol' => $enrol ));
$cp = $DB -> count_records_select ( 'user_enrolments' , " enrolid IN (SELECT id FROM { enrol} WHERE enrol = ?) " , array ( $enrol ));
$usage = " $ci / $cp " ;
2012-12-21 14:28:05 +01:00
// Hide/show links.
2013-10-04 22:40:44 +02:00
$class = '' ;
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
if ( isset ( $active_enrols [ $enrol ])) {
$aurl = new moodle_url ( $url , array ( 'action' => 'disable' , 'enrol' => $enrol ));
$hideshow = " <a href= \" $aurl\ " > " ;
2012-11-19 13:06:41 +08:00
$hideshow .= " <img src= \" " . $OUTPUT -> pix_url ( 't/hide' ) . " \" class= \" iconsmall \" alt= \" $strdisable\ " /></ a > " ;
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
$enabled = true ;
2013-10-04 22:40:44 +02:00
$displayname = $name ;
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
} else if ( isset ( $enrols_available [ $enrol ])) {
$aurl = new moodle_url ( $url , array ( 'action' => 'enable' , 'enrol' => $enrol ));
$hideshow = " <a href= \" $aurl\ " > " ;
2012-11-19 13:06:41 +08:00
$hideshow .= " <img src= \" " . $OUTPUT -> pix_url ( 't/show' ) . " \" class= \" iconsmall \" alt= \" $strenable\ " /></ a > " ;
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
$enabled = false ;
2013-10-04 22:40:44 +02:00
$displayname = $name ;
$class = 'dimmed_text' ;
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
} else {
$hideshow = '' ;
$enabled = false ;
$displayname = '<span class="notifyproblem">' . $name . '</span>' ;
}
2012-12-21 14:28:05 +01:00
if ( $PAGE -> theme -> resolve_image_location ( 'icon' , 'enrol_' . $name , false )) {
$icon = $OUTPUT -> pix_icon ( 'icon' , '' , 'enrol_' . $name , array ( 'class' => 'icon pluginicon' ));
} else {
$icon = $OUTPUT -> pix_icon ( 'spacer' , '' , 'moodle' , array ( 'class' => 'icon pluginicon noicon' ));
}
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
2012-12-21 14:28:05 +01:00
// Up/down link (only if enrol is enabled).
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
$updown = '' ;
if ( $enabled ) {
if ( $updowncount > 1 ) {
$aurl = new moodle_url ( $url , array ( 'action' => 'up' , 'enrol' => $enrol ));
$updown .= " <a href= \" $aurl\ " > " ;
2012-11-15 11:44:18 +08:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 't/up' ) . " \" alt= \" $strup\ " class = \ " iconsmall \" /></a> " ;
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
} else {
2012-11-15 11:44:18 +08:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 'spacer' ) . " \" class= \" iconsmall \" alt= \" \" /> " ;
2008-07-26 16:50:33 +00:00
}
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
if ( $updowncount < $enrolcount ) {
$aurl = new moodle_url ( $url , array ( 'action' => 'down' , 'enrol' => $enrol ));
$updown .= " <a href= \" $aurl\ " > " ;
2012-11-15 11:44:18 +08:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 't/down' ) . " \" alt= \" $strdown\ " class = \ " iconsmall \" /></a> " ;
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
} else {
2012-11-15 11:44:18 +08:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 'spacer' ) . " \" class= \" iconsmall \" alt= \" \" /> " ;
2008-07-26 16:50:33 +00:00
}
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
++ $updowncount ;
2008-07-26 16:50:33 +00:00
}
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
2012-12-21 14:28:05 +01:00
// Add settings link.
if ( ! $version ) {
$settings = '' ;
2013-06-26 13:24:08 +02:00
} else if ( $surl = $plugininfo -> get_settings_url ()) {
$settings = html_writer :: link ( $surl , $strsettings );
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
} else {
$settings = '' ;
}
2012-12-21 14:28:05 +01:00
// Add uninstall info.
2013-06-26 13:24:08 +02:00
$uninstall = '' ;
2013-10-04 22:40:44 +02:00
if ( $uninstallurl = core_plugin_manager :: instance () -> get_uninstall_url ( 'enrol_' . $enrol , 'manage' )) {
2013-06-26 13:56:24 +02:00
$uninstall = html_writer :: link ( $uninstallurl , $struninstall );
2012-12-21 14:28:05 +01:00
}
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
2013-09-30 22:39:21 +02:00
$test = '' ;
if ( ! empty ( $enrols_available [ $enrol ]) and method_exists ( $enrols_available [ $enrol ], 'test_settings' )) {
2013-10-23 10:44:22 +11:00
$testsettingsurl = new moodle_url ( '/enrol/test_settings.php' , array ( 'enrol' => $enrol , 'sesskey' => sesskey ()));
$test = html_writer :: link ( $testsettingsurl , $strtest );
2013-09-30 22:39:21 +02:00
}
2012-12-21 14:28:05 +01:00
// Add a row to the table.
2013-09-30 22:39:21 +02:00
$row = new html_table_row ( array ( $icon . $displayname , $usage , $version , $hideshow , $updown , $settings , $test , $uninstall ));
2013-10-04 22:40:44 +02:00
if ( $class ) {
$row -> attributes [ 'class' ] = $class ;
}
$table -> data [] = $row ;
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
$printed [ $enrol ] = true ;
2008-07-26 16:50:33 +00:00
}
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
$return .= html_writer :: table ( $table );
$return .= get_string ( 'configenrolplugins' , 'enrol' ) . '<br />' . get_string ( 'tablenosave' , 'admin' );
$return .= $OUTPUT -> box_end ();
return highlight ( $query , $return );
2008-07-26 16:50:33 +00:00
}
}
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
2007-12-19 17:35:20 +00:00
/**
* Blocks manage page
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
class admin_page_manageblocks extends admin_externalpage {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
2007-12-19 17:35:20 +00:00
global $CFG ;
2009-01-11 16:42:19 +00:00
parent :: __construct ( 'manageblocks' , get_string ( 'blocksettings' , 'admin' ), " $CFG->wwwroot / $CFG->admin /blocks.php " );
2007-12-19 17:35:20 +00:00
}
2007-05-10 08:23:44 +00:00
2009-05-22 02:05:46 +00:00
/**
* Search for a specific block
*
* @ param string $query The string to search for
* @ return array
*/
2009-01-11 16:42:19 +00:00
public function search ( $query ) {
2008-05-15 21:40:00 +00:00
global $CFG , $DB ;
2007-12-20 14:39:12 +00:00
if ( $result = parent :: search ( $query )) {
return $result ;
2007-12-19 17:35:20 +00:00
}
$found = false ;
2009-01-10 21:06:53 +00:00
if ( $blocks = $DB -> get_records ( 'block' )) {
2007-12-19 17:35:20 +00:00
foreach ( $blocks as $block ) {
2010-04-11 09:21:18 +00:00
if ( ! file_exists ( " $CFG->dirroot /blocks/ $block->name / " )) {
continue ;
}
2007-12-19 17:35:20 +00:00
if ( strpos ( $block -> name , $query ) !== false ) {
$found = true ;
break ;
2007-05-10 08:23:44 +00:00
}
2010-04-11 10:09:59 +00:00
$strblockname = get_string ( 'pluginname' , 'block_' . $block -> name );
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $strblockname ), $query ) !== false ) {
2007-12-19 17:35:20 +00:00
$found = true ;
break ;
2007-05-10 08:23:44 +00:00
}
}
}
2007-12-19 17:35:20 +00:00
if ( $found ) {
2010-09-21 08:07:44 +00:00
$result = new stdClass ();
2007-12-19 17:35:20 +00:00
$result -> page = $this ;
$result -> settings = array ();
return array ( $this -> name => $result );
} else {
return array ();
}
2007-05-10 08:23:44 +00:00
}
}
2011-05-11 16:48:04 +01:00
/**
* Message outputs configuration
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_page_managemessageoutputs extends admin_externalpage {
/**
* Calls parent :: __construct with specific arguments
*/
public function __construct () {
global $CFG ;
2011-05-27 11:44:58 +01:00
parent :: __construct ( 'managemessageoutputs' , get_string ( 'managemessageoutputs' , 'message' ), new moodle_url ( '/admin/message.php' ));
2011-05-11 16:48:04 +01:00
}
/**
MDL-27171 messages: admin settings reordering
This includes:
* most email settings go from general admin setings to email plugin settings
* digestmailtime goes to mod/forum/settings.php
* supportname, supportemail and supportpage go to Support contact page
* all jabber settings go from general admin setings to jabber plugin settings
AMOS BEGIN
MOV [jabberhost,admin],[jabberhost,message_jabber]
MOV [configjabberhost,admin],[configjabberhost,message_jabber]
MOV [jabberserver,admin],[jabberserver,message_jabber]
MOV [configjabberserver,admin],[configjabberserver,message_jabber]
MOV [jabberusername,admin],[jabberusername,message_jabber]
MOV [configjabberusername,admin],[configjabberusername,message_jabber]
MOV [jabberpassword,admin],[jabberpassword,message_jabber]
MOV [configjabberpassword,admin],[configjabberpassword,message_jabber]
MOV [jabberport,admin],[jabberport,message_jabber]
MOV [configjabberport,admin],[configjabberport,message_jabber]
MOV [digestmailtime,admin],[digestmailtime,forum]
MOV [configdigestmailtime,admin],[configdigestmailtime,forum]
MOV [allowusermailcharset,admin],[allowusermailcharset,message_email]
MOV [configallowusermailcharset,admin],[configallowusermailcharset,message_email]
MOV [mailnewline,admin],[mailnewline,message_email]
MOV [configmailnewline,admin],[configmailnewline,message_email]
MOV [noreplyaddress,admin],[noreplyaddress,message_email]
MOV [confignoreplyaddress,admin],[confignoreplyaddress,message_email]
MOV [sitemailcharset,admin],[sitemailcharset,message_email]
MOV [configsitemailcharset,admin],[configsitemailcharset,message_email]
MOV [smtphosts,admin],[smtphosts,message_email]
MOV [configsmtphosts,admin],[configsmtphosts,message_email]
MOV [smtpmaxbulk,admin],[smtpmaxbulk,message_email]
MOV [configsmtpmaxbulk,admin],[configsmtpmaxbulk,message_email]
MOV [smtpuser,admin],[smtpuser,message_email]
MOV [configsmtpuser,admin],[configsmtpuser,message_email]
MOV [smtppass,admin],[smtppass,message_email]
AMOS END
Signed-off-by: Ruslan Kabalin <ruslan.kabalin@luns.net.uk>
2011-05-12 12:11:47 +01:00
* Search for a specific message processor
2011-05-11 16:48:04 +01:00
*
* @ param string $query The string to search for
* @ return array
*/
public function search ( $query ) {
global $CFG , $DB ;
if ( $result = parent :: search ( $query )) {
return $result ;
}
$found = false ;
MDL-27171 messages: admin settings reordering
This includes:
* most email settings go from general admin setings to email plugin settings
* digestmailtime goes to mod/forum/settings.php
* supportname, supportemail and supportpage go to Support contact page
* all jabber settings go from general admin setings to jabber plugin settings
AMOS BEGIN
MOV [jabberhost,admin],[jabberhost,message_jabber]
MOV [configjabberhost,admin],[configjabberhost,message_jabber]
MOV [jabberserver,admin],[jabberserver,message_jabber]
MOV [configjabberserver,admin],[configjabberserver,message_jabber]
MOV [jabberusername,admin],[jabberusername,message_jabber]
MOV [configjabberusername,admin],[configjabberusername,message_jabber]
MOV [jabberpassword,admin],[jabberpassword,message_jabber]
MOV [configjabberpassword,admin],[configjabberpassword,message_jabber]
MOV [jabberport,admin],[jabberport,message_jabber]
MOV [configjabberport,admin],[configjabberport,message_jabber]
MOV [digestmailtime,admin],[digestmailtime,forum]
MOV [configdigestmailtime,admin],[configdigestmailtime,forum]
MOV [allowusermailcharset,admin],[allowusermailcharset,message_email]
MOV [configallowusermailcharset,admin],[configallowusermailcharset,message_email]
MOV [mailnewline,admin],[mailnewline,message_email]
MOV [configmailnewline,admin],[configmailnewline,message_email]
MOV [noreplyaddress,admin],[noreplyaddress,message_email]
MOV [confignoreplyaddress,admin],[confignoreplyaddress,message_email]
MOV [sitemailcharset,admin],[sitemailcharset,message_email]
MOV [configsitemailcharset,admin],[configsitemailcharset,message_email]
MOV [smtphosts,admin],[smtphosts,message_email]
MOV [configsmtphosts,admin],[configsmtphosts,message_email]
MOV [smtpmaxbulk,admin],[smtpmaxbulk,message_email]
MOV [configsmtpmaxbulk,admin],[configsmtpmaxbulk,message_email]
MOV [smtpuser,admin],[smtpuser,message_email]
MOV [configsmtpuser,admin],[configsmtpuser,message_email]
MOV [smtppass,admin],[smtppass,message_email]
AMOS END
Signed-off-by: Ruslan Kabalin <ruslan.kabalin@luns.net.uk>
2011-05-12 12:11:47 +01:00
if ( $processors = get_message_processors ()) {
foreach ( $processors as $processor ) {
if ( ! $processor -> available ) {
2011-05-11 16:48:04 +01:00
continue ;
}
MDL-27171 messages: admin settings reordering
This includes:
* most email settings go from general admin setings to email plugin settings
* digestmailtime goes to mod/forum/settings.php
* supportname, supportemail and supportpage go to Support contact page
* all jabber settings go from general admin setings to jabber plugin settings
AMOS BEGIN
MOV [jabberhost,admin],[jabberhost,message_jabber]
MOV [configjabberhost,admin],[configjabberhost,message_jabber]
MOV [jabberserver,admin],[jabberserver,message_jabber]
MOV [configjabberserver,admin],[configjabberserver,message_jabber]
MOV [jabberusername,admin],[jabberusername,message_jabber]
MOV [configjabberusername,admin],[configjabberusername,message_jabber]
MOV [jabberpassword,admin],[jabberpassword,message_jabber]
MOV [configjabberpassword,admin],[configjabberpassword,message_jabber]
MOV [jabberport,admin],[jabberport,message_jabber]
MOV [configjabberport,admin],[configjabberport,message_jabber]
MOV [digestmailtime,admin],[digestmailtime,forum]
MOV [configdigestmailtime,admin],[configdigestmailtime,forum]
MOV [allowusermailcharset,admin],[allowusermailcharset,message_email]
MOV [configallowusermailcharset,admin],[configallowusermailcharset,message_email]
MOV [mailnewline,admin],[mailnewline,message_email]
MOV [configmailnewline,admin],[configmailnewline,message_email]
MOV [noreplyaddress,admin],[noreplyaddress,message_email]
MOV [confignoreplyaddress,admin],[confignoreplyaddress,message_email]
MOV [sitemailcharset,admin],[sitemailcharset,message_email]
MOV [configsitemailcharset,admin],[configsitemailcharset,message_email]
MOV [smtphosts,admin],[smtphosts,message_email]
MOV [configsmtphosts,admin],[configsmtphosts,message_email]
MOV [smtpmaxbulk,admin],[smtpmaxbulk,message_email]
MOV [configsmtpmaxbulk,admin],[configsmtpmaxbulk,message_email]
MOV [smtpuser,admin],[smtpuser,message_email]
MOV [configsmtpuser,admin],[configsmtpuser,message_email]
MOV [smtppass,admin],[smtppass,message_email]
AMOS END
Signed-off-by: Ruslan Kabalin <ruslan.kabalin@luns.net.uk>
2011-05-12 12:11:47 +01:00
if ( strpos ( $processor -> name , $query ) !== false ) {
2011-05-11 16:48:04 +01:00
$found = true ;
break ;
}
MDL-27171 messages: admin settings reordering
This includes:
* most email settings go from general admin setings to email plugin settings
* digestmailtime goes to mod/forum/settings.php
* supportname, supportemail and supportpage go to Support contact page
* all jabber settings go from general admin setings to jabber plugin settings
AMOS BEGIN
MOV [jabberhost,admin],[jabberhost,message_jabber]
MOV [configjabberhost,admin],[configjabberhost,message_jabber]
MOV [jabberserver,admin],[jabberserver,message_jabber]
MOV [configjabberserver,admin],[configjabberserver,message_jabber]
MOV [jabberusername,admin],[jabberusername,message_jabber]
MOV [configjabberusername,admin],[configjabberusername,message_jabber]
MOV [jabberpassword,admin],[jabberpassword,message_jabber]
MOV [configjabberpassword,admin],[configjabberpassword,message_jabber]
MOV [jabberport,admin],[jabberport,message_jabber]
MOV [configjabberport,admin],[configjabberport,message_jabber]
MOV [digestmailtime,admin],[digestmailtime,forum]
MOV [configdigestmailtime,admin],[configdigestmailtime,forum]
MOV [allowusermailcharset,admin],[allowusermailcharset,message_email]
MOV [configallowusermailcharset,admin],[configallowusermailcharset,message_email]
MOV [mailnewline,admin],[mailnewline,message_email]
MOV [configmailnewline,admin],[configmailnewline,message_email]
MOV [noreplyaddress,admin],[noreplyaddress,message_email]
MOV [confignoreplyaddress,admin],[confignoreplyaddress,message_email]
MOV [sitemailcharset,admin],[sitemailcharset,message_email]
MOV [configsitemailcharset,admin],[configsitemailcharset,message_email]
MOV [smtphosts,admin],[smtphosts,message_email]
MOV [configsmtphosts,admin],[configsmtphosts,message_email]
MOV [smtpmaxbulk,admin],[smtpmaxbulk,message_email]
MOV [configsmtpmaxbulk,admin],[configsmtpmaxbulk,message_email]
MOV [smtpuser,admin],[smtpuser,message_email]
MOV [configsmtpuser,admin],[configsmtpuser,message_email]
MOV [smtppass,admin],[smtppass,message_email]
AMOS END
Signed-off-by: Ruslan Kabalin <ruslan.kabalin@luns.net.uk>
2011-05-12 12:11:47 +01:00
$strprocessorname = get_string ( 'pluginname' , 'message_' . $processor -> name );
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $strprocessorname ), $query ) !== false ) {
2011-05-11 16:48:04 +01:00
$found = true ;
break ;
}
}
}
if ( $found ) {
$result = new stdClass ();
$result -> page = $this ;
$result -> settings = array ();
return array ( $this -> name => $result );
} else {
return array ();
}
}
}
2011-03-17 21:34:34 +01:00
2011-05-13 11:13:13 +01:00
/**
* Default message outputs configuration
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_page_defaultmessageoutputs extends admin_page_managemessageoutputs {
/**
* Calls parent :: __construct with specific arguments
*/
public function __construct () {
global $CFG ;
2011-05-27 11:44:58 +01:00
admin_externalpage :: __construct ( 'defaultmessageoutputs' , get_string ( 'defaultmessageoutputs' , 'message' ), new moodle_url ( '/message/defaultoutputs.php' ));
2011-05-13 11:13:13 +01:00
}
}
2011-03-17 21:34:34 +01:00
MDL-27490 Implement a manage question behaviours admin page
While doing this, I found various bugs in the manages question types admin page, and so fixed them, and updated the code
there to use $OUTPUT and html_writer.
AMOS BEGIN
MOV [cannotdeletemissingqtype,admin],[cannotdeletemissingqtype,question]
MOV [cannotdeleteqtypeinuse,admin],[cannotdeleteqtypeinuse,question]
MOV [cannotdeleteqtypeneeded,admin],[cannotdeleteqtypeneeded,question]
MOV [deleteqtypeareyousure,admin],[deleteqtypeareyousure,question]
MOV [deleteqtypeareyousuremessage,admin],[deleteqtypeareyousuremessage,question]
MOV [deletingqtype,admin],[deletingqtype,question]
MOV [numquestions,admin],[numquestions,question]
MOV [numquestionsandhidden,admin],[numquestionsandhidden,question]
MOV [qtypedeletefiles,admin],[qtypedeletefiles,question]
MOV [uninstallqtype,admin],[uninstallqtype,question]
AMOS END
2011-06-15 20:18:33 +01:00
/**
* Manage question behaviours page
*
* @ copyright 2011 The Open University
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_page_manageqbehaviours extends admin_externalpage {
/**
* Constructor
*/
public function __construct () {
global $CFG ;
parent :: __construct ( 'manageqbehaviours' , get_string ( 'manageqbehaviours' , 'admin' ),
2012-11-13 16:07:28 +00:00
new moodle_url ( '/admin/qbehaviours.php' ));
MDL-27490 Implement a manage question behaviours admin page
While doing this, I found various bugs in the manages question types admin page, and so fixed them, and updated the code
there to use $OUTPUT and html_writer.
AMOS BEGIN
MOV [cannotdeletemissingqtype,admin],[cannotdeletemissingqtype,question]
MOV [cannotdeleteqtypeinuse,admin],[cannotdeleteqtypeinuse,question]
MOV [cannotdeleteqtypeneeded,admin],[cannotdeleteqtypeneeded,question]
MOV [deleteqtypeareyousure,admin],[deleteqtypeareyousure,question]
MOV [deleteqtypeareyousuremessage,admin],[deleteqtypeareyousuremessage,question]
MOV [deletingqtype,admin],[deletingqtype,question]
MOV [numquestions,admin],[numquestions,question]
MOV [numquestionsandhidden,admin],[numquestionsandhidden,question]
MOV [qtypedeletefiles,admin],[qtypedeletefiles,question]
MOV [uninstallqtype,admin],[uninstallqtype,question]
AMOS END
2011-06-15 20:18:33 +01:00
}
/**
* Search question behaviours for the specified string
*
* @ param string $query The string to search for in question behaviours
* @ return array
*/
public function search ( $query ) {
global $CFG ;
if ( $result = parent :: search ( $query )) {
return $result ;
}
$found = false ;
require_once ( $CFG -> dirroot . '/question/engine/lib.php' );
2013-07-16 22:36:11 +02:00
foreach ( core_component :: get_plugin_list ( 'qbehaviour' ) as $behaviour => $notused ) {
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( question_engine :: get_behaviour_name ( $behaviour )),
MDL-27490 Implement a manage question behaviours admin page
While doing this, I found various bugs in the manages question types admin page, and so fixed them, and updated the code
there to use $OUTPUT and html_writer.
AMOS BEGIN
MOV [cannotdeletemissingqtype,admin],[cannotdeletemissingqtype,question]
MOV [cannotdeleteqtypeinuse,admin],[cannotdeleteqtypeinuse,question]
MOV [cannotdeleteqtypeneeded,admin],[cannotdeleteqtypeneeded,question]
MOV [deleteqtypeareyousure,admin],[deleteqtypeareyousure,question]
MOV [deleteqtypeareyousuremessage,admin],[deleteqtypeareyousuremessage,question]
MOV [deletingqtype,admin],[deletingqtype,question]
MOV [numquestions,admin],[numquestions,question]
MOV [numquestionsandhidden,admin],[numquestionsandhidden,question]
MOV [qtypedeletefiles,admin],[qtypedeletefiles,question]
MOV [uninstallqtype,admin],[uninstallqtype,question]
AMOS END
2011-06-15 20:18:33 +01:00
$query ) !== false ) {
$found = true ;
break ;
}
}
if ( $found ) {
$result = new stdClass ();
$result -> page = $this ;
$result -> settings = array ();
return array ( $this -> name => $result );
} else {
return array ();
}
}
}
2008-09-09 08:57:51 +00:00
/**
* Question type manage page
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2008-09-09 08:57:51 +00:00
*/
class admin_page_manageqtypes extends admin_externalpage {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
2008-09-09 08:57:51 +00:00
global $CFG ;
2012-11-13 16:07:28 +00:00
parent :: __construct ( 'manageqtypes' , get_string ( 'manageqtypes' , 'admin' ),
new moodle_url ( '/admin/qtypes.php' ));
2008-09-09 08:57:51 +00:00
}
2009-05-22 02:05:46 +00:00
/**
2011-06-06 17:48:29 +01:00
* Search question types for the specified string
2009-05-22 02:05:46 +00:00
*
2011-06-06 17:48:29 +01:00
* @ param string $query The string to search for in question types
2009-05-22 02:05:46 +00:00
* @ return array
*/
2009-01-11 16:42:19 +00:00
public function search ( $query ) {
2008-09-09 08:57:51 +00:00
global $CFG ;
if ( $result = parent :: search ( $query )) {
return $result ;
}
$found = false ;
2011-02-10 20:44:47 +00:00
require_once ( $CFG -> dirroot . '/question/engine/bank.php' );
foreach ( question_bank :: get_all_qtypes () as $qtype ) {
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $qtype -> local_name ()), $query ) !== false ) {
2008-09-09 08:57:51 +00:00
$found = true ;
break ;
}
}
if ( $found ) {
2010-09-21 08:07:44 +00:00
$result = new stdClass ();
2008-09-09 08:57:51 +00:00
$result -> page = $this ;
$result -> settings = array ();
return array ( $this -> name => $result );
} else {
return array ();
}
}
}
2011-03-17 21:34:34 +01:00
2010-11-08 17:12:03 +00:00
class admin_page_manageportfolios extends admin_externalpage {
/**
* Calls parent :: __construct with specific arguments
*/
public function __construct () {
global $CFG ;
parent :: __construct ( 'manageportfolios' , get_string ( 'manageportfolios' , 'portfolio' ),
" $CFG->wwwroot / $CFG->admin /portfolio.php " );
}
/**
* Searches page for the specified string .
* @ param string $query The string to search for
* @ return bool True if it is found on this page
*/
public function search ( $query ) {
global $CFG ;
if ( $result = parent :: search ( $query )) {
return $result ;
}
$found = false ;
2013-07-16 22:36:11 +02:00
$portfolios = core_component :: get_plugin_list ( 'portfolio' );
2010-11-08 17:12:03 +00:00
foreach ( $portfolios as $p => $dir ) {
if ( strpos ( $p , $query ) !== false ) {
$found = true ;
break ;
}
}
if ( ! $found ) {
foreach ( portfolio_instances ( false , false ) as $instance ) {
$title = $instance -> get ( 'name' );
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $title ), $query ) !== false ) {
2010-11-08 17:12:03 +00:00
$found = true ;
break ;
}
}
}
if ( $found ) {
$result = new stdClass ();
$result -> page = $this ;
$result -> settings = array ();
return array ( $this -> name => $result );
} else {
return array ();
}
}
}
2011-03-17 21:34:34 +01:00
2010-11-08 17:12:03 +00:00
class admin_page_managerepositories extends admin_externalpage {
/**
* Calls parent :: __construct with specific arguments
*/
public function __construct () {
global $CFG ;
parent :: __construct ( 'managerepositories' , get_string ( 'manage' ,
'repository' ), " $CFG->wwwroot / $CFG->admin /repository.php " );
}
/**
* Searches page for the specified string .
* @ param string $query The string to search for
* @ return bool True if it is found on this page
*/
public function search ( $query ) {
global $CFG ;
if ( $result = parent :: search ( $query )) {
return $result ;
}
$found = false ;
2013-07-16 22:36:11 +02:00
$repositories = core_component :: get_plugin_list ( 'repository' );
2010-11-08 17:12:03 +00:00
foreach ( $repositories as $p => $dir ) {
if ( strpos ( $p , $query ) !== false ) {
$found = true ;
break ;
}
}
if ( ! $found ) {
foreach ( repository :: get_types () as $instance ) {
$title = $instance -> get_typename ();
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $title ), $query ) !== false ) {
2010-11-08 17:12:03 +00:00
$found = true ;
break ;
}
}
}
if ( $found ) {
$result = new stdClass ();
$result -> page = $this ;
$result -> settings = array ();
return array ( $this -> name => $result );
} else {
return array ();
}
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Special class for authentication administration .
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
class admin_setting_manageauths extends admin_setting {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
2010-02-08 16:26:15 +00:00
$this -> nosave = true ;
2009-01-11 16:42:19 +00:00
parent :: __construct ( 'authsui' , get_string ( 'authsettings' , 'admin' ), '' , '' );
2007-12-19 17:35:20 +00:00
}
2007-05-10 08:23:44 +00:00
2009-05-22 02:05:46 +00:00
/**
* Always returns true
*
* @ return true
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2007-12-19 17:35:20 +00:00
return true ;
}
2007-05-10 08:23:44 +00:00
2009-05-22 02:05:46 +00:00
/**
* Always returns true
*
* @ return true
*/
2009-01-11 16:42:19 +00:00
public function get_defaultsetting () {
2007-12-19 17:35:20 +00:00
return true ;
2006-09-02 13:14:57 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Always returns '' and doesn ' t write anything
*
* @ return string Always returns ''
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2009-09-09 07:55:03 +00:00
// do not write any setting
2007-12-19 17:35:20 +00:00
return '' ;
2006-09-02 13:14:57 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Search to find if Query is related to auth plugin
*
* @ param string $query The string to search for
* @ return bool true for related false for not
*/
2009-01-11 16:42:19 +00:00
public function is_related ( $query ) {
2007-12-19 17:35:20 +00:00
if ( parent :: is_related ( $query )) {
return true ;
}
2006-11-17 08:57:50 +00:00
2013-07-16 22:36:11 +02:00
$authsavailable = core_component :: get_plugin_list ( 'auth' );
2009-06-19 14:25:56 +00:00
foreach ( $authsavailable as $auth => $dir ) {
2007-12-19 17:35:20 +00:00
if ( strpos ( $auth , $query ) !== false ) {
return true ;
}
2008-01-31 22:02:44 +00:00
$authplugin = get_auth_plugin ( $auth );
$authtitle = $authplugin -> get_title ();
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $authtitle ), $query ) !== false ) {
2007-12-19 17:35:20 +00:00
return true ;
}
2006-09-18 02:41:14 +00:00
}
2007-12-19 17:35:20 +00:00
return false ;
2006-09-02 13:14:57 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Return XHTML to display control
*
* @ param mixed $data Unused
* @ param string $query
* @ return string highlight
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2013-10-04 22:40:44 +02:00
global $CFG , $OUTPUT , $DB ;
2006-12-21 04:30:03 +00:00
2007-12-19 17:35:20 +00:00
// display strings
$txt = get_strings ( array ( 'authenticationplugins' , 'users' , 'administration' ,
2009-09-09 07:55:03 +00:00
'settings' , 'edit' , 'name' , 'enable' , 'disable' ,
2013-10-04 22:40:44 +02:00
'up' , 'down' , 'none' , 'users' ));
2007-12-19 17:35:20 +00:00
$txt -> updown = " $txt->up / $txt->down " ;
2013-10-04 22:40:44 +02:00
$txt -> uninstall = get_string ( 'uninstallplugin' , 'core_admin' );
2013-09-30 22:39:21 +02:00
$txt -> testsettings = get_string ( 'testsettings' , 'core_auth' );
2006-12-21 04:30:03 +00:00
2013-07-16 22:36:11 +02:00
$authsavailable = core_component :: get_plugin_list ( 'auth' );
2007-12-19 17:35:20 +00:00
get_enabled_auth_plugins ( true ); // fix the list of enabled auths
if ( empty ( $CFG -> auth )) {
$authsenabled = array ();
2006-12-21 04:30:03 +00:00
} else {
2007-12-19 17:35:20 +00:00
$authsenabled = explode ( ',' , $CFG -> auth );
}
// construct the display array, with enabled auth plugins at the top, in order
$displayauths = array ();
$registrationauths = array ();
$registrationauths [ '' ] = $txt -> disable ;
2013-09-30 22:39:21 +02:00
$authplugins = array ();
2007-12-19 17:35:20 +00:00
foreach ( $authsenabled as $auth ) {
$authplugin = get_auth_plugin ( $auth );
2013-09-30 22:39:21 +02:00
$authplugins [ $auth ] = $authplugin ;
2009-09-09 07:55:03 +00:00
/// Get the auth title (from core or own auth lang files)
2008-01-31 22:02:44 +00:00
$authtitle = $authplugin -> get_title ();
2009-09-09 07:55:03 +00:00
/// Apply titles
2007-12-19 17:35:20 +00:00
$displayauths [ $auth ] = $authtitle ;
if ( $authplugin -> can_signup ()) {
$registrationauths [ $auth ] = $authtitle ;
}
2006-12-21 04:30:03 +00:00
}
2009-06-19 14:25:56 +00:00
foreach ( $authsavailable as $auth => $dir ) {
2007-12-19 17:35:20 +00:00
if ( array_key_exists ( $auth , $displayauths )) {
continue ; //already in the list
}
$authplugin = get_auth_plugin ( $auth );
2013-09-30 22:39:21 +02:00
$authplugins [ $auth ] = $authplugin ;
2009-09-09 07:55:03 +00:00
/// Get the auth title (from core or own auth lang files)
2008-01-31 22:02:44 +00:00
$authtitle = $authplugin -> get_title ();
2009-09-09 07:55:03 +00:00
/// Apply titles
2007-12-19 17:35:20 +00:00
$displayauths [ $auth ] = $authtitle ;
if ( $authplugin -> can_signup ()) {
$registrationauths [ $auth ] = $authtitle ;
}
2006-12-21 04:30:03 +00:00
}
2009-08-06 09:08:48 +00:00
$return = $OUTPUT -> heading ( get_string ( 'actauthhdr' , 'auth' ), 3 , 'main' );
2009-08-10 04:58:02 +00:00
$return .= $OUTPUT -> box_start ( 'generalbox authsui' );
2006-12-21 04:30:03 +00:00
2009-08-20 08:50:50 +00:00
$table = new html_table ();
2013-09-30 22:39:21 +02:00
$table -> head = array ( $txt -> name , $txt -> users , $txt -> enable , $txt -> updown , $txt -> settings , $txt -> testsettings , $txt -> uninstall );
$table -> colclasses = array ( 'leftalign' , 'centeralign' , 'centeralign' , 'centeralign' , 'centeralign' , 'centeralign' , 'centeralign' );
2007-12-19 17:35:20 +00:00
$table -> data = array ();
2012-11-14 10:30:50 +08:00
$table -> attributes [ 'class' ] = 'admintable generaltable' ;
$table -> id = 'manageauthtable' ;
2006-12-21 04:30:03 +00:00
2007-12-19 17:35:20 +00:00
//add always enabled plugins first
2013-10-04 22:40:44 +02:00
$displayname = $displayauths [ 'manual' ];
2007-12-20 21:00:05 +00:00
$settings = " <a href= \" auth_config.php?auth=manual \" > { $txt -> settings } </a> " ;
//$settings = "<a href=\"settings.php?section=authsettingmanual\">{$txt->settings}</a>";
2013-10-04 22:40:44 +02:00
$usercount = $DB -> count_records ( 'user' , array ( 'auth' => 'manual' , 'deleted' => 0 ));
2013-09-30 22:39:21 +02:00
$table -> data [] = array ( $displayname , $usercount , '' , '' , $settings , '' , '' );
2013-10-04 22:40:44 +02:00
$displayname = $displayauths [ 'nologin' ];
2007-12-19 17:35:20 +00:00
$settings = " <a href= \" auth_config.php?auth=nologin \" > { $txt -> settings } </a> " ;
2013-10-04 22:40:44 +02:00
$usercount = $DB -> count_records ( 'user' , array ( 'auth' => 'nologin' , 'deleted' => 0 ));
2013-09-30 22:39:21 +02:00
$table -> data [] = array ( $displayname , $usercount , '' , '' , $settings , '' , '' );
2007-10-20 15:00:31 +00:00
2007-11-14 11:52:21 +00:00
2007-12-19 17:35:20 +00:00
// iterate through auth plugins and add to the display table
$updowncount = 1 ;
$authcount = count ( $authsenabled );
$url = " auth.php?sesskey= " . sesskey ();
foreach ( $displayauths as $auth => $name ) {
if ( $auth == 'manual' or $auth == 'nologin' ) {
continue ;
}
2013-10-04 22:40:44 +02:00
$class = '' ;
2007-12-19 17:35:20 +00:00
// hide/show link
if ( in_array ( $auth , $authsenabled )) {
$hideshow = " <a href= \" $url &action=disable&auth= $auth\ " > " ;
2012-11-19 13:06:41 +08:00
$hideshow .= " <img src= \" " . $OUTPUT -> pix_url ( 't/hide' ) . " \" class= \" iconsmall \" alt= \" disable \" /></a> " ;
2007-12-19 17:35:20 +00:00
// $hideshow = "<a href=\"$url&action=disable&auth=$auth\"><input type=\"checkbox\" checked /></a>";
$enabled = true ;
2013-10-04 22:40:44 +02:00
$displayname = $name ;
2007-12-19 17:35:20 +00:00
}
else {
$hideshow = " <a href= \" $url &action=enable&auth= $auth\ " > " ;
2012-11-19 13:06:41 +08:00
$hideshow .= " <img src= \" " . $OUTPUT -> pix_url ( 't/show' ) . " \" class= \" iconsmall \" alt= \" enable \" /></a> " ;
2007-12-19 17:35:20 +00:00
// $hideshow = "<a href=\"$url&action=enable&auth=$auth\"><input type=\"checkbox\" /></a>";
$enabled = false ;
2013-10-04 22:40:44 +02:00
$displayname = $name ;
$class = 'dimmed_text' ;
2007-12-19 17:35:20 +00:00
}
2007-11-14 11:52:21 +00:00
2013-10-04 22:40:44 +02:00
$usercount = $DB -> count_records ( 'user' , array ( 'auth' => $auth , 'deleted' => 0 ));
2007-12-19 17:35:20 +00:00
// up/down link (only if auth is enabled)
$updown = '' ;
if ( $enabled ) {
if ( $updowncount > 1 ) {
$updown .= " <a href= \" $url &action=up&auth= $auth\ " > " ;
2012-11-15 11:44:18 +08:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 't/up' ) . " \" alt= \" up \" class= \" iconsmall \" /></a> " ;
2007-12-19 17:35:20 +00:00
}
else {
2012-11-15 11:44:18 +08:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 'spacer' ) . " \" class= \" iconsmall \" alt= \" \" /> " ;
2007-12-19 17:35:20 +00:00
}
if ( $updowncount < $authcount ) {
$updown .= " <a href= \" $url &action=down&auth= $auth\ " > " ;
2012-11-15 11:44:18 +08:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 't/down' ) . " \" alt= \" down \" class= \" iconsmall \" /></a> " ;
2007-12-19 17:35:20 +00:00
}
else {
2012-11-15 11:44:18 +08:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 'spacer' ) . " \" class= \" iconsmall \" alt= \" \" /> " ;
2007-12-19 17:35:20 +00:00
}
++ $updowncount ;
}
2007-11-14 11:52:21 +00:00
2007-12-19 17:35:20 +00:00
// settings link
if ( file_exists ( $CFG -> dirroot . '/auth/' . $auth . '/settings.php' )) {
$settings = " <a href= \" settings.php?section=authsetting $auth\ " > { $txt -> settings } </ a > " ;
} else {
$settings = " <a href= \" auth_config.php?auth= $auth\ " > { $txt -> settings } </ a > " ;
}
2007-11-14 11:52:21 +00:00
2013-10-04 22:40:44 +02:00
// Uninstall link.
$uninstall = '' ;
if ( $uninstallurl = core_plugin_manager :: instance () -> get_uninstall_url ( 'auth_' . $auth , 'manage' )) {
$uninstall = html_writer :: link ( $uninstallurl , $txt -> uninstall );
}
2013-09-30 22:39:21 +02:00
$test = '' ;
if ( ! empty ( $authplugins [ $auth ]) and method_exists ( $authplugins [ $auth ], 'test_settings' )) {
2013-10-20 10:50:19 +02:00
$testurl = new moodle_url ( '/auth/test_settings.php' , array ( 'auth' => $auth , 'sesskey' => sesskey ()));
$test = html_writer :: link ( $testurl , $txt -> testsettings );
2013-09-30 22:39:21 +02:00
}
2013-10-04 22:40:44 +02:00
// Add a row to the table.
2013-09-30 22:39:21 +02:00
$row = new html_table_row ( array ( $displayname , $usercount , $hideshow , $updown , $settings , $test , $uninstall ));
2013-10-04 22:40:44 +02:00
if ( $class ) {
$row -> attributes [ 'class' ] = $class ;
}
$table -> data [] = $row ;
2007-11-14 11:52:21 +00:00
}
2010-03-20 22:15:54 +00:00
$return .= html_writer :: table ( $table );
2007-12-19 17:35:20 +00:00
$return .= get_string ( 'configauthenticationplugins' , 'admin' ) . '<br />' . get_string ( 'tablenosave' , 'filters' );
2009-08-10 04:58:02 +00:00
$return .= $OUTPUT -> box_end ();
2008-01-01 15:51:54 +00:00
return highlight ( $query , $return );
2007-12-19 17:35:20 +00:00
}
}
2009-05-17 21:10:06 +00:00
2011-03-17 21:34:34 +01:00
2009-05-17 21:10:06 +00:00
/**
* Special class for authentication administration .
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2009-05-17 21:10:06 +00:00
*/
class admin_setting_manageeditors extends admin_setting {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-05-17 21:10:06 +00:00
public function __construct () {
2010-02-08 16:26:15 +00:00
$this -> nosave = true ;
2009-05-17 21:10:06 +00:00
parent :: __construct ( 'editorsui' , get_string ( 'editorsettings' , 'editor' ), '' , '' );
}
2009-05-22 02:05:46 +00:00
/**
2009-06-30 15:19:12 +00:00
* Always returns true , does nothing
2009-05-22 02:05:46 +00:00
*
* @ return true
*/
2009-05-17 21:10:06 +00:00
public function get_setting () {
return true ;
}
2009-05-22 02:05:46 +00:00
/**
2009-06-30 15:19:12 +00:00
* Always returns true , does nothing
2009-05-22 02:05:46 +00:00
*
* @ return true
*/
2009-05-17 21:10:06 +00:00
public function get_defaultsetting () {
return true ;
}
2009-05-22 02:05:46 +00:00
/**
* Always returns '' , does not write anything
*
* @ return string Always returns ''
*/
2009-05-17 21:10:06 +00:00
public function write_setting ( $data ) {
2009-09-09 07:55:03 +00:00
// do not write any setting
2009-05-17 21:10:06 +00:00
return '' ;
}
2009-05-22 02:05:46 +00:00
/**
* Checks if $query is one of the available editors
2009-06-30 15:19:12 +00:00
*
2009-05-22 02:05:46 +00:00
* @ param string $query The string to search for
* @ return bool Returns true if found , false if not
*/
2009-05-17 21:10:06 +00:00
public function is_related ( $query ) {
if ( parent :: is_related ( $query )) {
return true ;
}
2010-07-10 12:12:59 +00:00
$editors_available = editors_get_available ();
2009-05-17 21:10:06 +00:00
foreach ( $editors_available as $editor => $editorstr ) {
if ( strpos ( $editor , $query ) !== false ) {
return true ;
}
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $editorstr ), $query ) !== false ) {
2009-05-17 21:10:06 +00:00
return true ;
}
}
return false ;
}
2009-05-22 02:05:46 +00:00
/**
* Builds the XHTML to display the control
*
* @ param string $data Unused
* @ param string $query
* @ return string
*/
2009-05-17 21:10:06 +00:00
public function output_html ( $data , $query = '' ) {
2009-07-03 06:19:25 +00:00
global $CFG , $OUTPUT ;
2009-05-17 21:10:06 +00:00
// display strings
$txt = get_strings ( array ( 'administration' , 'settings' , 'edit' , 'name' , 'enable' , 'disable' ,
2009-09-09 07:55:03 +00:00
'up' , 'down' , 'none' ));
2013-06-26 13:56:24 +02:00
$struninstall = get_string ( 'uninstallplugin' , 'core_admin' );
2012-10-24 23:20:31 +08:00
2009-05-17 21:10:06 +00:00
$txt -> updown = " $txt->up / $txt->down " ;
2010-07-10 12:12:59 +00:00
$editors_available = editors_get_available ();
2009-05-17 21:10:06 +00:00
$active_editors = explode ( ',' , $CFG -> texteditors );
$active_editors = array_reverse ( $active_editors );
foreach ( $active_editors as $key => $editor ) {
if ( empty ( $editors_available [ $editor ])) {
unset ( $active_editors [ $key ]);
} else {
$name = $editors_available [ $editor ];
unset ( $editors_available [ $editor ]);
$editors_available [ $editor ] = $name ;
}
}
if ( empty ( $active_editors )) {
2009-09-09 07:55:03 +00:00
//$active_editors = array('textarea');
2009-05-17 21:10:06 +00:00
}
$editors_available = array_reverse ( $editors_available , true );
2009-08-06 08:19:21 +00:00
$return = $OUTPUT -> heading ( get_string ( 'acteditorshhdr' , 'editor' ), 3 , 'main' , true );
2009-08-10 04:58:02 +00:00
$return .= $OUTPUT -> box_start ( 'generalbox editorsui' );
2009-05-17 21:10:06 +00:00
2009-08-20 08:50:50 +00:00
$table = new html_table ();
2012-10-24 23:20:31 +08:00
$table -> head = array ( $txt -> name , $txt -> enable , $txt -> updown , $txt -> settings , $struninstall );
2013-10-04 22:40:44 +02:00
$table -> colclasses = array ( 'leftalign' , 'centeralign' , 'centeralign' , 'centeralign' , 'centeralign' );
2012-11-14 10:30:50 +08:00
$table -> id = 'editormanagement' ;
$table -> attributes [ 'class' ] = 'admintable generaltable' ;
2009-05-17 21:10:06 +00:00
$table -> data = array ();
// iterate through auth plugins and add to the display table
$updowncount = 1 ;
$editorcount = count ( $active_editors );
$url = " editors.php?sesskey= " . sesskey ();
foreach ( $editors_available as $editor => $name ) {
2009-09-09 07:55:03 +00:00
// hide/show link
2013-10-04 22:40:44 +02:00
$class = '' ;
2009-05-17 21:10:06 +00:00
if ( in_array ( $editor , $active_editors )) {
$hideshow = " <a href= \" $url &action=disable&editor= $editor\ " > " ;
2012-11-19 13:06:41 +08:00
$hideshow .= " <img src= \" " . $OUTPUT -> pix_url ( 't/hide' ) . " \" class= \" iconsmall \" alt= \" disable \" /></a> " ;
2009-05-17 21:10:06 +00:00
// $hideshow = "<a href=\"$url&action=disable&editor=$editor\"><input type=\"checkbox\" checked /></a>";
$enabled = true ;
2013-10-04 22:40:44 +02:00
$displayname = $name ;
2009-05-17 21:10:06 +00:00
}
else {
$hideshow = " <a href= \" $url &action=enable&editor= $editor\ " > " ;
2012-11-19 13:06:41 +08:00
$hideshow .= " <img src= \" " . $OUTPUT -> pix_url ( 't/show' ) . " \" class= \" iconsmall \" alt= \" enable \" /></a> " ;
2009-05-17 21:10:06 +00:00
// $hideshow = "<a href=\"$url&action=enable&editor=$editor\"><input type=\"checkbox\" /></a>";
$enabled = false ;
2013-10-04 22:40:44 +02:00
$displayname = $name ;
$class = 'dimmed_text' ;
2009-05-17 21:10:06 +00:00
}
// up/down link (only if auth is enabled)
$updown = '' ;
if ( $enabled ) {
if ( $updowncount > 1 ) {
$updown .= " <a href= \" $url &action=up&editor= $editor\ " > " ;
2012-11-15 11:44:18 +08:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 't/up' ) . " \" alt= \" up \" class= \" iconsmall \" /></a> " ;
2009-05-17 21:10:06 +00:00
}
else {
2012-11-15 11:44:18 +08:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 'spacer' ) . " \" class= \" iconsmall \" alt= \" \" /> " ;
2009-05-17 21:10:06 +00:00
}
if ( $updowncount < $editorcount ) {
$updown .= " <a href= \" $url &action=down&editor= $editor\ " > " ;
2012-11-15 11:44:18 +08:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 't/down' ) . " \" alt= \" down \" class= \" iconsmall \" /></a> " ;
2009-05-17 21:10:06 +00:00
}
else {
2012-11-15 11:44:18 +08:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 'spacer' ) . " \" class= \" iconsmall \" alt= \" \" /> " ;
2009-05-17 21:10:06 +00:00
}
++ $updowncount ;
}
// settings link
2010-03-23 08:47:05 +00:00
if ( file_exists ( $CFG -> dirroot . '/lib/editor/' . $editor . '/settings.php' )) {
2011-04-17 11:18:00 +02:00
$eurl = new moodle_url ( '/admin/settings.php' , array ( 'section' => 'editorsettings' . $editor ));
2010-07-04 20:53:01 +00:00
$settings = " <a href=' $eurl '> { $txt -> settings } </a> " ;
2009-05-17 21:10:06 +00:00
} else {
$settings = '' ;
}
2013-06-26 13:19:00 +02:00
$uninstall = '' ;
2013-10-04 22:40:44 +02:00
if ( $uninstallurl = core_plugin_manager :: instance () -> get_uninstall_url ( 'editor_' . $editor , 'manage' )) {
2013-06-26 13:56:24 +02:00
$uninstall = html_writer :: link ( $uninstallurl , $struninstall );
2012-10-24 23:20:31 +08:00
}
2013-10-04 22:40:44 +02:00
// Add a row to the table.
$row = new html_table_row ( array ( $displayname , $hideshow , $updown , $settings , $uninstall ));
if ( $class ) {
$row -> attributes [ 'class' ] = $class ;
}
$table -> data [] = $row ;
2009-05-17 21:10:06 +00:00
}
2010-03-20 22:15:54 +00:00
$return .= html_writer :: table ( $table );
2009-10-12 21:46:16 +00:00
$return .= get_string ( 'configeditorplugins' , 'editor' ) . '<br />' . get_string ( 'tablenosave' , 'admin' );
2009-08-10 04:58:02 +00:00
$return .= $OUTPUT -> box_end ();
2009-05-17 21:10:06 +00:00
return highlight ( $query , $return );
}
}
2011-03-17 21:34:34 +01:00
2010-03-29 03:39:08 +00:00
/**
* Special class for license administration .
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_managelicenses extends admin_setting {
/**
* Calls parent :: __construct with specific arguments
*/
public function __construct () {
$this -> nosave = true ;
parent :: __construct ( 'licensesui' , get_string ( 'licensesettings' , 'admin' ), '' , '' );
}
/**
* Always returns true , does nothing
*
* @ return true
*/
public function get_setting () {
return true ;
}
/**
* Always returns true , does nothing
*
* @ return true
*/
public function get_defaultsetting () {
return true ;
}
/**
* Always returns '' , does not write anything
*
* @ return string Always returns ''
*/
public function write_setting ( $data ) {
2011-03-17 21:34:34 +01:00
// do not write any setting
2010-03-29 03:39:08 +00:00
return '' ;
}
/**
* Builds the XHTML to display the control
*
* @ param string $data Unused
* @ param string $query
* @ return string
*/
public function output_html ( $data , $query = '' ) {
global $CFG , $OUTPUT ;
require_once ( $CFG -> libdir . '/licenselib.php' );
2010-03-31 03:08:05 +00:00
$url = " licenses.php?sesskey= " . sesskey ();
2010-03-29 03:39:08 +00:00
// display strings
$txt = get_strings ( array ( 'administration' , 'settings' , 'name' , 'enable' , 'disable' , 'none' ));
2010-03-31 03:08:05 +00:00
$licenses = license_manager :: get_licenses ();
2010-03-29 03:39:08 +00:00
2010-09-08 07:03:19 +00:00
$return = $OUTPUT -> heading ( get_string ( 'availablelicenses' , 'admin' ), 3 , 'main' , true );
2010-03-31 03:08:05 +00:00
2010-03-29 03:39:08 +00:00
$return .= $OUTPUT -> box_start ( 'generalbox editorsui' );
$table = new html_table ();
$table -> head = array ( $txt -> name , $txt -> enable );
2012-11-14 10:30:50 +08:00
$table -> colclasses = array ( 'leftalign' , 'centeralign' );
$table -> id = 'availablelicenses' ;
$table -> attributes [ 'class' ] = 'admintable generaltable' ;
2010-03-29 03:39:08 +00:00
$table -> data = array ();
2010-03-31 03:08:05 +00:00
foreach ( $licenses as $value ) {
$displayname = html_writer :: link ( $value -> source , get_string ( $value -> shortname , 'license' ), array ( 'target' => '_blank' ));
2010-03-29 03:39:08 +00:00
if ( $value -> enabled == 1 ) {
2010-04-04 19:58:03 +00:00
$hideshow = html_writer :: link ( $url . '&action=disable&license=' . $value -> shortname ,
2012-11-19 13:06:41 +08:00
html_writer :: tag ( 'img' , '' , array ( 'src' => $OUTPUT -> pix_url ( 't/hide' ), 'class' => 'iconsmall' , 'alt' => 'disable' )));
2010-03-29 03:39:08 +00:00
} else {
2010-04-04 19:58:03 +00:00
$hideshow = html_writer :: link ( $url . '&action=enable&license=' . $value -> shortname ,
2012-11-19 13:06:41 +08:00
html_writer :: tag ( 'img' , '' , array ( 'src' => $OUTPUT -> pix_url ( 't/show' ), 'class' => 'iconsmall' , 'alt' => 'enable' )));
2010-03-29 03:39:08 +00:00
}
2010-04-09 19:40:23 +00:00
if ( $value -> shortname == $CFG -> sitedefaultlicense ) {
2012-11-19 13:06:41 +08:00
$displayname .= ' ' . html_writer :: tag ( 'img' , '' , array ( 'src' => $OUTPUT -> pix_url ( 't/locked' ), 'class' => 'iconsmall' , 'alt' => get_string ( 'default' ), 'title' => get_string ( 'default' )));
2010-04-09 19:40:23 +00:00
$hideshow = '' ;
}
2010-03-29 03:39:08 +00:00
$enabled = true ;
$table -> data [] = array ( $displayname , $hideshow );
}
$return .= html_writer :: table ( $table );
$return .= $OUTPUT -> box_end ();
return highlight ( $query , $return );
}
}
2011-03-17 21:34:34 +01:00
2012-10-18 16:03:11 +08:00
/**
* Course formats manager . Allows to enable / disable formats and jump to settings
*/
class admin_setting_manageformats extends admin_setting {
/**
* Calls parent :: __construct with specific arguments
*/
public function __construct () {
$this -> nosave = true ;
parent :: __construct ( 'formatsui' , new lang_string ( 'manageformats' , 'core_admin' ), '' , '' );
}
/**
* Always returns true
*
* @ return true
*/
public function get_setting () {
return true ;
}
/**
* Always returns true
*
* @ return true
*/
public function get_defaultsetting () {
return true ;
}
/**
* Always returns '' and doesn ' t write anything
*
* @ param mixed $data string or array , must not be NULL
* @ return string Always returns ''
*/
public function write_setting ( $data ) {
// do not write any setting
return '' ;
}
/**
* Search to find if Query is related to format plugin
*
* @ param string $query The string to search for
* @ return bool true for related false for not
*/
public function is_related ( $query ) {
if ( parent :: is_related ( $query )) {
return true ;
}
2013-10-04 22:40:44 +02:00
$formats = core_plugin_manager :: instance () -> get_plugins_of_type ( 'format' );
2012-10-18 16:03:11 +08:00
foreach ( $formats as $format ) {
if ( strpos ( $format -> component , $query ) !== false ||
2013-08-06 20:58:28 +02:00
strpos ( core_text :: strtolower ( $format -> displayname ), $query ) !== false ) {
2012-10-18 16:03:11 +08:00
return true ;
}
}
return false ;
}
/**
* Return XHTML to display control
*
* @ param mixed $data Unused
* @ param string $query
* @ return string highlight
*/
public function output_html ( $data , $query = '' ) {
global $CFG , $OUTPUT ;
$return = '' ;
$return = $OUTPUT -> heading ( new lang_string ( 'courseformats' ), 3 , 'main' );
$return .= $OUTPUT -> box_start ( 'generalbox formatsui' );
2013-10-04 22:40:44 +02:00
$formats = core_plugin_manager :: instance () -> get_plugins_of_type ( 'format' );
2012-10-18 16:03:11 +08:00
// display strings
2013-06-26 13:56:24 +02:00
$txt = get_strings ( array ( 'settings' , 'name' , 'enable' , 'disable' , 'up' , 'down' , 'default' ));
$txt -> uninstall = get_string ( 'uninstallplugin' , 'core_admin' );
2012-10-18 16:03:11 +08:00
$txt -> updown = " $txt->up / $txt->down " ;
$table = new html_table ();
2013-06-26 13:56:24 +02:00
$table -> head = array ( $txt -> name , $txt -> enable , $txt -> updown , $txt -> uninstall , $txt -> settings );
2012-10-18 16:03:11 +08:00
$table -> align = array ( 'left' , 'center' , 'center' , 'center' , 'center' );
2013-10-04 22:40:44 +02:00
$table -> attributes [ 'class' ] = 'manageformattable generaltable admintable' ;
2012-10-18 16:03:11 +08:00
$table -> data = array ();
$cnt = 0 ;
$defaultformat = get_config ( 'moodlecourse' , 'format' );
2012-11-15 11:44:18 +08:00
$spacer = $OUTPUT -> pix_icon ( 'spacer' , '' , 'moodle' , array ( 'class' => 'iconsmall' ));
2012-10-18 16:03:11 +08:00
foreach ( $formats as $format ) {
$url = new moodle_url ( '/admin/courseformats.php' ,
array ( 'sesskey' => sesskey (), 'format' => $format -> name ));
$isdefault = '' ;
2013-10-04 22:40:44 +02:00
$class = '' ;
2012-10-18 16:03:11 +08:00
if ( $format -> is_enabled ()) {
2013-10-04 22:40:44 +02:00
$strformatname = $format -> displayname ;
2012-10-18 16:03:11 +08:00
if ( $defaultformat === $format -> name ) {
$hideshow = $txt -> default ;
} else {
$hideshow = html_writer :: link ( $url -> out ( false , array ( 'action' => 'disable' )),
2012-11-19 13:06:41 +08:00
$OUTPUT -> pix_icon ( 't/hide' , $txt -> disable , 'moodle' , array ( 'class' => 'iconsmall' )));
2012-10-18 16:03:11 +08:00
}
} else {
2013-10-04 22:40:44 +02:00
$strformatname = $format -> displayname ;
$class = 'dimmed_text' ;
2012-10-18 16:03:11 +08:00
$hideshow = html_writer :: link ( $url -> out ( false , array ( 'action' => 'enable' )),
2012-11-19 13:06:41 +08:00
$OUTPUT -> pix_icon ( 't/show' , $txt -> enable , 'moodle' , array ( 'class' => 'iconsmall' )));
2012-10-18 16:03:11 +08:00
}
$updown = '' ;
if ( $cnt ) {
$updown .= html_writer :: link ( $url -> out ( false , array ( 'action' => 'up' )),
2012-11-15 11:44:18 +08:00
$OUTPUT -> pix_icon ( 't/up' , $txt -> up , 'moodle' , array ( 'class' => 'iconsmall' ))) . '' ;
2012-10-18 16:03:11 +08:00
} else {
$updown .= $spacer ;
}
if ( $cnt < count ( $formats ) - 1 ) {
$updown .= ' ' . html_writer :: link ( $url -> out ( false , array ( 'action' => 'down' )),
2012-11-15 11:44:18 +08:00
$OUTPUT -> pix_icon ( 't/down' , $txt -> down , 'moodle' , array ( 'class' => 'iconsmall' )));
2012-10-18 16:03:11 +08:00
} else {
$updown .= $spacer ;
}
$cnt ++ ;
$settings = '' ;
if ( $format -> get_settings_url ()) {
$settings = html_writer :: link ( $format -> get_settings_url (), $txt -> settings );
}
$uninstall = '' ;
2013-10-04 22:40:44 +02:00
if ( $uninstallurl = core_plugin_manager :: instance () -> get_uninstall_url ( 'format_' . $format -> name , 'manage' )) {
2013-06-26 13:56:24 +02:00
$uninstall = html_writer :: link ( $uninstallurl , $txt -> uninstall );
2012-10-18 16:03:11 +08:00
}
2013-10-04 22:40:44 +02:00
$row = new html_table_row ( array ( $strformatname , $hideshow , $updown , $uninstall , $settings ));
if ( $class ) {
$row -> attributes [ 'class' ] = $class ;
}
$table -> data [] = $row ;
2012-10-18 16:03:11 +08:00
}
$return .= html_writer :: table ( $table );
$link = html_writer :: link ( new moodle_url ( '/admin/settings.php' , array ( 'section' => 'coursesettings' )), new lang_string ( 'coursesettings' ));
$return .= html_writer :: tag ( 'p' , get_string ( 'manageformatsgotosettings' , 'admin' , $link ));
$return .= $OUTPUT -> box_end ();
return highlight ( $query , $return );
}
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Special class for filter administration .
2009-05-22 02:05:46 +00:00
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
2007-12-19 17:35:20 +00:00
*/
2009-04-13 07:15:50 +00:00
class admin_page_managefilters extends admin_externalpage {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
2009-04-13 07:15:50 +00:00
global $CFG ;
parent :: __construct ( 'managefilters' , get_string ( 'filtersettings' , 'admin' ), " $CFG->wwwroot / $CFG->admin /filters.php " );
2007-12-19 17:35:20 +00:00
}
2007-10-20 15:00:31 +00:00
2009-05-22 02:05:46 +00:00
/**
* Searches all installed filters for specified filter
*
* @ param string $query The filter ( string ) to search for
* @ param string $query
*/
2009-04-13 07:15:50 +00:00
public function search ( $query ) {
global $CFG ;
if ( $result = parent :: search ( $query )) {
return $result ;
2007-11-14 11:52:21 +00:00
}
2007-10-20 15:00:31 +00:00
2009-04-13 07:15:50 +00:00
$found = false ;
2009-03-30 08:33:13 +00:00
$filternames = filter_get_all_installed ();
foreach ( $filternames as $path => $strfiltername ) {
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $strfiltername ), $query ) !== false ) {
2009-04-13 07:15:50 +00:00
$found = true ;
break ;
2009-03-30 08:33:13 +00:00
}
2012-12-30 17:02:18 +01:00
if ( strpos ( $path , $query ) !== false ) {
2009-04-13 07:15:50 +00:00
$found = true ;
break ;
2007-11-14 11:52:21 +00:00
}
}
2007-10-20 15:00:31 +00:00
2009-04-13 07:15:50 +00:00
if ( $found ) {
$result = new stdClass ;
$result -> page = $this ;
$result -> settings = array ();
return array ( $this -> name => $result );
2009-04-13 07:15:19 +00:00
} else {
2009-04-13 07:15:50 +00:00
return array ();
2007-10-28 17:15:00 +00:00
}
2007-12-19 17:35:20 +00:00
}
2007-10-28 17:15:00 +00:00
}
2011-03-17 21:34:34 +01:00
2007-12-19 17:35:20 +00:00
/**
* Initialise admin page - this function does require login and permission
* checks specified in page definition .
2009-05-22 02:05:46 +00:00
*
2007-12-19 17:35:20 +00:00
* This function must be called on each admin page before other code .
2009-05-22 02:05:46 +00:00
*
2010-12-08 02:03:07 +00:00
* @ global moodle_page $PAGE
2011-02-14 16:39:08 +01:00
*
2007-12-19 17:35:20 +00:00
* @ param string $section name of page
2008-12-11 09:21:41 +00:00
* @ param string $extrabutton extra HTML that is added after the blocks editing on / off button .
2009-05-22 02:05:46 +00:00
* @ param array $extraurlparams an array paramname => paramvalue , or parameters that need to be
2008-12-11 09:21:41 +00:00
* added to the turn blocks editing on / off form , so this page reloads correctly .
* @ param string $actualurl if the actual page being viewed is not the normal one for this
2011-03-17 21:34:34 +01:00
* page ( e . g . admin / roles / allow . php , instead of admin / roles / manage . php , you can pass the alternate URL here .
2010-11-05 02:53:47 +00:00
* @ param array $options Additional options that can be specified for page setup .
* pagelayout - This option can be used to set a specific pagelyaout , admin is default .
2007-12-19 17:35:20 +00:00
*/
2010-11-05 02:53:47 +00:00
function admin_externalpage_setup ( $section , $extrabutton = '' , array $extraurlparams = null , $actualurl = '' , array $options = array ()) {
2010-02-27 22:45:29 +00:00
global $CFG , $PAGE , $USER , $SITE , $OUTPUT ;
2006-09-02 13:14:57 +00:00
2010-08-16 19:11:21 +00:00
$PAGE -> set_context ( null ); // hack - set context to something, by default to system context
2010-04-13 07:28:24 +00:00
2009-11-01 09:21:41 +00:00
$site = get_site ();
2010-01-20 08:41:07 +00:00
require_login ();
2006-09-02 13:14:57 +00:00
2012-03-02 16:12:45 +00:00
if ( ! empty ( $options [ 'pagelayout' ])) {
// A specific page layout has been requested.
$PAGE -> set_pagelayout ( $options [ 'pagelayout' ]);
} else if ( $section === 'upgradesettings' ) {
$PAGE -> set_pagelayout ( 'maintenance' );
} else {
$PAGE -> set_pagelayout ( 'admin' );
}
2009-01-11 16:42:19 +00:00
$adminroot = admin_get_root ( false , false ); // settings not required for external pages
2010-02-27 22:45:29 +00:00
$extpage = $adminroot -> locate ( $section , true );
2009-05-06 08:55:53 +00:00
2009-01-11 16:42:19 +00:00
if ( empty ( $extpage ) or ! ( $extpage instanceof admin_externalpage )) {
2012-05-03 10:46:28 +07:00
// The requested section isn't in the admin tree
// It could be because the user has inadequate capapbilities or because the section doesn't exist
if ( ! has_capability ( 'moodle/site:config' , context_system :: instance ())) {
// The requested section could depend on a different capability
// but most likely the user has inadequate capabilities
print_error ( 'accessdenied' , 'admin' );
} else {
print_error ( 'sectionerror' , 'admin' , " $CFG->wwwroot / $CFG->admin / " );
}
2006-09-02 13:14:57 +00:00
}
// this eliminates our need to authenticate on the actual pages
2010-02-27 22:45:29 +00:00
if ( ! $extpage -> check_access ()) {
2008-04-04 02:54:20 +00:00
print_error ( 'accessdenied' , 'admin' );
2006-09-02 13:14:57 +00:00
die ;
}
2006-09-20 21:00:45 +00:00
2013-10-11 09:07:26 +02:00
navigation_node :: require_admin_tree ();
2010-02-27 22:45:29 +00:00
// $PAGE->set_extra_button($extrabutton); TODO
2006-09-02 13:14:57 +00:00
2010-02-27 22:45:29 +00:00
if ( ! $actualurl ) {
$actualurl = $extpage -> url ;
}
2007-12-19 17:35:20 +00:00
2010-02-27 22:45:29 +00:00
$PAGE -> set_url ( $actualurl , $extraurlparams );
if ( strpos ( $PAGE -> pagetype , 'admin-' ) !== 0 ) {
$PAGE -> set_pagetype ( 'admin-' . $PAGE -> pagetype );
2007-12-19 17:35:20 +00:00
}
2006-09-02 13:14:57 +00:00
2009-07-09 07:35:03 +00:00
if ( empty ( $SITE -> fullname ) || empty ( $SITE -> shortname )) {
2010-02-27 22:45:29 +00:00
// During initial install.
2009-02-01 17:45:32 +00:00
$strinstallation = get_string ( 'installation' , 'install' );
$strsettings = get_string ( 'settings' );
2009-09-03 06:59:25 +00:00
$PAGE -> navbar -> add ( $strsettings );
$PAGE -> set_title ( $strinstallation );
$PAGE -> set_heading ( $strinstallation );
$PAGE -> set_cacheable ( false );
2009-07-09 07:35:03 +00:00
return ;
2006-09-12 09:22:27 +00:00
}
2011-02-14 16:39:08 +01:00
2010-12-08 02:03:07 +00:00
// Locate the current item on the navigation and make it active when found.
$path = $extpage -> path ;
$node = $PAGE -> settingsnav ;
while ( $node && count ( $path ) > 0 ) {
$node = $node -> get ( array_pop ( $path ));
}
if ( $node ) {
$node -> make_active ();
}
2006-09-02 13:14:57 +00:00
2009-07-09 07:35:03 +00:00
// Normal case.
2010-02-27 22:45:29 +00:00
$adminediting = optional_param ( 'adminedit' , - 1 , PARAM_BOOL );
if ( $PAGE -> user_allowed_editing () && $adminediting != - 1 ) {
$USER -> editing = $adminediting ;
}
2007-04-30 17:08:34 +00:00
2010-02-27 22:45:29 +00:00
$visiblepathtosection = array_reverse ( $extpage -> visiblepath );
2010-02-08 16:26:15 +00:00
2009-07-09 07:35:03 +00:00
if ( $PAGE -> user_allowed_editing ()) {
if ( $PAGE -> user_is_editing ()) {
$caption = get_string ( 'blockseditoff' );
2013-07-09 07:37:35 +02:00
$url = new moodle_url ( $PAGE -> url , array ( 'adminedit' => '0' , 'sesskey' => sesskey ()));
2009-07-09 07:35:03 +00:00
} else {
$caption = get_string ( 'blocksediton' );
2013-07-09 07:37:35 +02:00
$url = new moodle_url ( $PAGE -> url , array ( 'adminedit' => '1' , 'sesskey' => sesskey ()));
2007-08-07 07:34:21 +00:00
}
2010-02-27 22:45:29 +00:00
$PAGE -> set_button ( $OUTPUT -> single_button ( $url , $caption , 'get' ));
2009-07-09 07:35:03 +00:00
}
2007-08-17 07:25:47 +00:00
2010-02-27 22:45:29 +00:00
$PAGE -> set_title ( " $SITE->shortname : " . implode ( " : " , $visiblepathtosection ));
2009-09-03 06:59:25 +00:00
$PAGE -> set_heading ( $SITE -> fullname );
2010-02-27 22:45:29 +00:00
// prevent caching in nav block
$PAGE -> navigation -> clear_cache ();
}
2007-12-19 17:35:20 +00:00
/**
* Returns the reference to admin tree root
2009-05-22 02:05:46 +00:00
*
2011-03-17 21:34:34 +01:00
* @ return object admin_root object
2007-12-19 17:35:20 +00:00
*/
2009-01-11 09:41:48 +00:00
function admin_get_root ( $reload = false , $requirefulltree = true ) {
2009-06-29 09:19:53 +00:00
global $CFG , $DB , $OUTPUT ;
2006-09-02 13:14:57 +00:00
2007-12-19 17:35:20 +00:00
static $ADMIN = NULL ;
2009-01-11 16:42:19 +00:00
if ( is_null ( $ADMIN )) {
2009-09-09 07:55:03 +00:00
// create the admin tree!
2009-01-11 16:42:19 +00:00
$ADMIN = new admin_root ( $requirefulltree );
2007-12-19 17:35:20 +00:00
}
2009-01-11 16:42:19 +00:00
if ( $reload or ( $requirefulltree and ! $ADMIN -> fulltree )) {
$ADMIN -> purge_children ( $requirefulltree );
2007-12-19 17:35:20 +00:00
}
2006-09-02 13:14:57 +00:00
2009-01-11 16:42:19 +00:00
if ( ! $ADMIN -> loaded ) {
2009-09-09 07:55:03 +00:00
// we process this file first to create categories first and in correct order
2007-12-19 17:35:20 +00:00
require ( $CFG -> dirroot . '/' . $CFG -> admin . '/settings/top.php' );
// now we process all other files in admin/settings to build the admin tree
foreach ( glob ( $CFG -> dirroot . '/' . $CFG -> admin . '/settings/*.php' ) as $file ) {
2008-11-28 08:04:23 +00:00
if ( $file == $CFG -> dirroot . '/' . $CFG -> admin . '/settings/top.php' ) {
continue ;
}
if ( $file == $CFG -> dirroot . '/' . $CFG -> admin . '/settings/plugins.php' ) {
2009-09-09 07:55:03 +00:00
// plugins are loaded last - they may insert pages anywhere
2008-11-28 08:04:23 +00:00
continue ;
2006-09-02 13:14:57 +00:00
}
2009-01-11 09:41:48 +00:00
require ( $file );
2006-09-02 13:14:57 +00:00
}
2009-01-11 09:41:48 +00:00
require ( $CFG -> dirroot . '/' . $CFG -> admin . '/settings/plugins.php' );
2008-09-08 11:32:31 +00:00
2009-01-11 16:42:19 +00:00
$ADMIN -> loaded = true ;
2006-09-02 13:14:57 +00:00
}
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
2006-09-02 13:14:57 +00:00
return $ADMIN ;
}
2007-10-02 21:38:53 +00:00
/// settings utility functions
2006-09-02 13:14:57 +00:00
2007-10-02 21:38:53 +00:00
/**
* This function applies default settings .
2009-05-22 02:05:46 +00:00
*
* @ param object $node , NULL means complete tree , null by default
2010-05-21 19:06:38 +00:00
* @ param bool $unconditional if true overrides all values with defaults , null buy default
2007-10-02 21:38:53 +00:00
*/
2007-12-19 17:35:20 +00:00
function admin_apply_default_settings ( $node = NULL , $unconditional = true ) {
2006-09-02 13:14:57 +00:00
global $CFG ;
2007-12-19 17:35:20 +00:00
if ( is_null ( $node )) {
2013-10-04 22:40:44 +02:00
core_plugin_manager :: reset_caches ();
2009-01-11 09:41:48 +00:00
$node = admin_get_root ( true , true );
2007-12-19 17:35:20 +00:00
}
2009-01-11 16:42:19 +00:00
if ( $node instanceof admin_category ) {
2006-09-02 13:14:57 +00:00
$entries = array_keys ( $node -> children );
foreach ( $entries as $entry ) {
2007-12-19 17:35:20 +00:00
admin_apply_default_settings ( $node -> children [ $entry ], $unconditional );
2006-09-02 13:14:57 +00:00
}
2009-01-11 16:42:19 +00:00
} else if ( $node instanceof admin_settingpage ) {
2009-09-09 07:55:03 +00:00
foreach ( $node -> settings as $setting ) {
if ( ! $unconditional and ! is_null ( $setting -> get_setting ())) {
2007-10-02 21:38:53 +00:00
//do not override existing defaults
2009-09-09 07:55:03 +00:00
continue ;
}
$defaultsetting = $setting -> get_defaultsetting ();
if ( is_null ( $defaultsetting )) {
2007-10-02 21:38:53 +00:00
// no value yet - default maybe applied after admin user creation or in upgradesettings
2009-09-09 07:55:03 +00:00
continue ;
}
$setting -> write_setting ( $defaultsetting );
2013-06-13 12:46:45 +08:00
$setting -> write_setting_flags ( null );
2007-10-02 21:38:53 +00:00
}
2006-09-02 13:14:57 +00:00
}
2013-09-24 22:43:46 +02:00
// Just in case somebody modifies the list of active plugins directly.
2013-10-04 22:40:44 +02:00
core_plugin_manager :: reset_caches ();
2007-12-19 17:35:20 +00:00
}
/**
* Store changed settings , this function updates the errors variable in $ADMIN
2009-05-22 02:05:46 +00:00
*
2008-05-30 22:11:31 +00:00
* @ param object $formdata from form
2007-12-19 17:35:20 +00:00
* @ return int number of changed settings
*/
function admin_write_settings ( $formdata ) {
2009-07-01 05:54:26 +00:00
global $CFG , $SITE , $DB ;
2007-12-19 17:35:20 +00:00
$olddbsessions = ! empty ( $CFG -> dbsessions );
2008-05-30 22:11:31 +00:00
$formdata = ( array ) $formdata ;
2007-12-19 17:35:20 +00:00
$data = array ();
foreach ( $formdata as $fullname => $value ) {
if ( strpos ( $fullname , 's_' ) !== 0 ) {
continue ; // not a config value
}
$data [ $fullname ] = $value ;
}
2009-01-11 16:42:19 +00:00
$adminroot = admin_get_root ();
2007-12-19 17:35:20 +00:00
$settings = admin_find_write_settings ( $adminroot , $data );
$count = 0 ;
foreach ( $settings as $fullname => $setting ) {
2013-04-09 20:43:28 +02:00
/** @var $setting admin_setting */
$original = $setting -> get_setting ();
2007-12-19 17:35:20 +00:00
$error = $setting -> write_setting ( $data [ $fullname ]);
if ( $error !== '' ) {
2010-09-21 08:07:44 +00:00
$adminroot -> errors [ $fullname ] = new stdClass ();
2007-12-19 17:35:20 +00:00
$adminroot -> errors [ $fullname ] -> data = $data [ $fullname ];
$adminroot -> errors [ $fullname ] -> id = $setting -> get_id ();
$adminroot -> errors [ $fullname ] -> error = $error ;
2013-01-10 15:10:02 +08:00
} else {
$setting -> write_setting_flags ( $data );
2007-12-19 17:35:20 +00:00
}
2013-04-09 20:43:28 +02:00
if ( $setting -> post_write_settings ( $original )) {
2007-12-19 17:35:20 +00:00
$count ++ ;
}
}
if ( $olddbsessions != ! empty ( $CFG -> dbsessions )) {
require_logout ();
2006-09-02 13:14:57 +00:00
}
2009-07-01 05:54:26 +00:00
// Now update $SITE - just update the fields, in case other people have a
// a reference to it (e.g. $PAGE, $COURSE).
$newsite = $DB -> get_record ( 'course' , array ( 'id' => $SITE -> id ));
foreach ( get_object_vars ( $newsite ) as $field => $value ) {
$SITE -> $field = $value ;
}
2006-09-02 13:14:57 +00:00
2007-12-19 17:35:20 +00:00
// now reload all settings - some of them might depend on the changed
admin_get_root ( true );
return $count ;
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
/**
* Internal recursive function - finds all settings from submitted form
2009-05-22 02:05:46 +00:00
*
* @ param object $node Instance of admin_category , or admin_settingpage
* @ param array $data
* @ return array
2007-12-19 17:35:20 +00:00
*/
function admin_find_write_settings ( $node , $data ) {
$return = array ();
if ( empty ( $data )) {
return $return ;
}
2009-01-11 16:42:19 +00:00
if ( $node instanceof admin_category ) {
2007-12-19 17:35:20 +00:00
$entries = array_keys ( $node -> children );
foreach ( $entries as $entry ) {
$return = array_merge ( $return , admin_find_write_settings ( $node -> children [ $entry ], $data ));
}
2009-01-11 16:42:19 +00:00
} else if ( $node instanceof admin_settingpage ) {
2009-09-09 07:55:03 +00:00
foreach ( $node -> settings as $setting ) {
$fullname = $setting -> get_full_name ();
if ( array_key_exists ( $fullname , $data )) {
$return [ $fullname ] = $setting ;
}
2007-12-19 17:35:20 +00:00
}
2009-09-09 07:55:03 +00:00
}
2007-12-19 17:35:20 +00:00
return $return ;
}
2006-09-02 13:14:57 +00:00
2007-12-19 17:35:20 +00:00
/**
* Internal function - prints the search results
2009-05-22 02:05:46 +00:00
*
* @ param string $query String to search for
* @ return string empty or XHTML
2007-12-19 17:35:20 +00:00
*/
function admin_search_settings_html ( $query ) {
2009-08-06 08:19:21 +00:00
global $CFG , $OUTPUT ;
2006-09-02 13:14:57 +00:00
2013-08-06 20:58:28 +02:00
if ( core_text :: strlen ( $query ) < 2 ) {
2007-12-19 17:35:20 +00:00
return '' ;
}
2013-08-06 20:58:28 +02:00
$query = core_text :: strtolower ( $query );
2007-12-19 17:35:20 +00:00
2009-01-11 16:42:19 +00:00
$adminroot = admin_get_root ();
2007-12-19 17:35:20 +00:00
$findings = $adminroot -> search ( $query );
$return = '' ;
2007-12-29 16:49:26 +00:00
$savebutton = false ;
2007-12-19 17:35:20 +00:00
foreach ( $findings as $found ) {
$page = $found -> page ;
$settings = $found -> settings ;
2007-12-29 16:38:25 +00:00
if ( $page -> is_hidden ()) {
2009-09-09 07:55:03 +00:00
// hidden pages are not displayed in search results
2007-12-19 17:35:20 +00:00
continue ;
}
2009-01-11 16:42:19 +00:00
if ( $page instanceof admin_externalpage ) {
2009-08-06 08:19:21 +00:00
$return .= $OUTPUT -> heading ( get_string ( 'searchresults' , 'admin' ) . ' - <a href="' . $page -> url . '">' . highlight ( $query , $page -> visiblename ) . '</a>' , 2 , 'main' );
2009-01-11 16:42:19 +00:00
} else if ( $page instanceof admin_settingpage ) {
2009-09-09 07:55:03 +00:00
$return .= $OUTPUT -> heading ( get_string ( 'searchresults' , 'admin' ) . ' - <a href="' . $CFG -> wwwroot . '/' . $CFG -> admin . '/settings.php?section=' . $page -> name . '">' . highlight ( $query , $page -> visiblename ) . '</a>' , 2 , 'main' );
} else {
continue ;
}
2007-12-19 17:35:20 +00:00
if ( ! empty ( $settings )) {
$return .= '<fieldset class="adminsettings">' . " \n " ;
foreach ( $settings as $setting ) {
2010-02-08 16:26:15 +00:00
if ( empty ( $setting -> nosave )) {
$savebutton = true ;
}
2007-12-19 17:35:20 +00:00
$return .= '<div class="clearer"><!-- --></div>' . " \n " ;
$fullname = $setting -> get_full_name ();
if ( array_key_exists ( $fullname , $adminroot -> errors )) {
$data = $adminroot -> errors [ $fullname ] -> data ;
} else {
$data = $setting -> get_setting ();
2010-05-21 19:06:38 +00:00
// do not use defaults if settings not available - upgradesettings handles the defaults!
2007-12-19 17:35:20 +00:00
}
2008-01-01 15:51:54 +00:00
$return .= $setting -> output_html ( $data , $query );
2007-12-19 17:35:20 +00:00
}
$return .= '</fieldset>' ;
}
}
2007-12-29 16:49:26 +00:00
if ( $savebutton ) {
2009-09-09 07:55:03 +00:00
$return .= '<div class="form-buttons"><input class="form-submit" type="submit" value="' . get_string ( 'savechanges' , 'admin' ) . '" /></div>' ;
2007-12-29 16:49:26 +00:00
}
2007-12-19 17:35:20 +00:00
return $return ;
}
/**
2008-07-04 23:53:13 +00:00
* Internal function - returns arrays of html pages with uninitialised settings
2009-05-22 02:05:46 +00:00
*
* @ param object $node Instance of admin_category or admin_settingpage
* @ return array
2007-12-19 17:35:20 +00:00
*/
function admin_output_new_settings_by_page ( $node ) {
2009-08-06 08:19:21 +00:00
global $OUTPUT ;
2008-07-04 23:53:13 +00:00
$return = array ();
2007-12-19 17:35:20 +00:00
2009-01-11 16:42:19 +00:00
if ( $node instanceof admin_category ) {
2007-12-19 17:35:20 +00:00
$entries = array_keys ( $node -> children );
foreach ( $entries as $entry ) {
2008-07-04 23:53:13 +00:00
$return += admin_output_new_settings_by_page ( $node -> children [ $entry ]);
2007-12-19 17:35:20 +00:00
}
2009-01-11 16:42:19 +00:00
} else if ( $node instanceof admin_settingpage ) {
2009-09-09 07:55:03 +00:00
$newsettings = array ();
foreach ( $node -> settings as $setting ) {
if ( is_null ( $setting -> get_setting ())) {
$newsettings [] = $setting ;
}
2007-12-19 17:35:20 +00:00
}
2009-09-09 07:55:03 +00:00
if ( count ( $newsettings ) > 0 ) {
$adminroot = admin_get_root ();
$page = $OUTPUT -> heading ( get_string ( 'upgradesettings' , 'admin' ) . ' - ' . $node -> visiblename , 2 , 'main' );
$page .= '<fieldset class="adminsettings">' . " \n " ;
foreach ( $newsettings as $setting ) {
$fullname = $setting -> get_full_name ();
if ( array_key_exists ( $fullname , $adminroot -> errors )) {
$data = $adminroot -> errors [ $fullname ] -> data ;
} else {
$data = $setting -> get_setting ();
if ( is_null ( $data )) {
$data = $setting -> get_defaultsetting ();
}
2007-12-19 17:35:20 +00:00
}
2009-09-09 07:55:03 +00:00
$page .= '<div class="clearer"><!-- --></div>' . " \n " ;
$page .= $setting -> output_html ( $data );
2007-12-19 17:35:20 +00:00
}
2009-09-09 07:55:03 +00:00
$page .= '</fieldset>' ;
$return [ $node -> name ] = $page ;
2007-12-19 17:35:20 +00:00
}
}
2006-09-02 13:14:57 +00:00
2007-12-19 17:35:20 +00:00
return $return ;
}
/**
* Format admin settings
2009-05-22 02:05:46 +00:00
*
* @ param object $setting
2007-12-19 17:35:20 +00:00
* @ param string $title label element
2010-05-21 19:06:38 +00:00
* @ param string $form form fragment , html code - not highlighted automatically
2007-12-19 17:35:20 +00:00
* @ param string $description
2014-12-04 13:42:35 +13:00
* @ param mixed $label link label to id , true by default or string being the label to connect it to
2008-01-01 15:51:54 +00:00
* @ param string $warning warning text
2009-05-22 02:05:46 +00:00
* @ param sting $defaultinfo defaults info , null means nothing , '' is converted to " Empty " string , defaults to null
2008-01-01 15:51:54 +00:00
* @ param string $query search query to be highlighted
2009-05-22 02:05:46 +00:00
* @ return string XHTML
2007-12-19 17:35:20 +00:00
*/
2008-01-01 15:51:54 +00:00
function format_admin_setting ( $setting , $title = '' , $form = '' , $description = '' , $label = true , $warning = '' , $defaultinfo = NULL , $query = '' ) {
2007-12-19 17:35:20 +00:00
global $CFG ;
2009-05-29 07:56:52 +00:00
$name = empty ( $setting -> plugin ) ? $setting -> name : " $setting->plugin | $setting->name " ;
2007-12-19 17:35:20 +00:00
$fullname = $setting -> get_full_name ();
2007-07-27 13:38:06 +00:00
2007-02-06 08:24:37 +00:00
// sometimes the id is not id_s_name, but id_s_name_m or something, and this does not validate
2014-12-04 13:42:35 +13:00
if ( $label === true ) {
2007-12-19 17:35:20 +00:00
$labelfor = 'for = "' . $setting -> get_id () . '"' ;
2014-12-04 13:42:35 +13:00
} else if ( $label === false ) {
2007-07-27 13:38:06 +00:00
$labelfor = '' ;
2014-12-04 13:42:35 +13:00
} else {
$labelfor = 'for="' . $label . '"' ;
2007-02-06 08:24:37 +00:00
}
2013-01-10 15:10:02 +08:00
$form .= $setting -> output_setting_flags ();
2007-07-27 13:38:06 +00:00
2010-05-19 13:30:13 +00:00
$override = '' ;
if ( empty ( $setting -> plugin )) {
if ( array_key_exists ( $setting -> name , $CFG -> config_php_settings )) {
$override = '<div class="form-overridden">' . get_string ( 'configoverride' , 'admin' ) . '</div>' ;
}
2007-12-19 17:35:20 +00:00
} else {
2010-05-19 13:30:13 +00:00
if ( array_key_exists ( $setting -> plugin , $CFG -> forced_plugin_settings ) and array_key_exists ( $setting -> name , $CFG -> forced_plugin_settings [ $setting -> plugin ])) {
$override = '<div class="form-overridden">' . get_string ( 'configoverride' , 'admin' ) . '</div>' ;
}
2007-12-19 17:35:20 +00:00
}
2007-12-19 22:32:43 +00:00
if ( $warning !== '' ) {
$warning = '<div class="form-warning">' . $warning . '</div>' ;
}
2013-01-10 15:10:02 +08:00
$defaults = array ();
if ( ! is_null ( $defaultinfo )) {
2008-01-01 15:51:54 +00:00
if ( $defaultinfo === '' ) {
$defaultinfo = get_string ( 'emptysettingvalue' , 'admin' );
}
2013-01-10 15:10:02 +08:00
$defaults [] = $defaultinfo ;
}
$setting -> get_setting_flag_defaults ( $defaults );
if ( ! empty ( $defaults )) {
$defaultinfo = implode ( ', ' , $defaults );
2008-01-01 15:51:54 +00:00
$defaultinfo = highlight ( $query , nl2br ( s ( $defaultinfo )));
$defaultinfo = '<div class="form-defaultinfo">' . get_string ( 'defaultsettinginfo' , 'admin' , $defaultinfo ) . '</div>' ;
}
2015-01-08 14:14:37 +08:00
$adminroot = admin_get_root ();
$error = '' ;
if ( array_key_exists ( $fullname , $adminroot -> errors )) {
$error = '<div><span class="error">' . $adminroot -> errors [ $fullname ] -> error . '</span></div>' ;
}
2007-12-19 17:35:20 +00:00
$str = '
2007-12-27 21:00:00 +00:00
< div class = " form-item clearfix " id = " admin-'. $setting->name .' " >
2008-01-01 15:51:54 +00:00
< div class = " form-label " >
2012-09-04 18:12:26 +08:00
< label '.$labelfor.' > '.highlightfast($query, $title).$override.$warning.' </ label >
< span class = " form-shortname " > '.highlightfast($query, $name).' </ span >
2008-01-01 15:51:54 +00:00
</ div >
2015-01-08 14:14:37 +08:00
< div class = " form-setting " > '.$error.$form.$defaultinfo.' </ div >
2010-09-08 07:48:17 +00:00
< div class = " form-description " > '.highlight($query, markdown_to_html($description)).' </ div >
2007-12-19 17:35:20 +00:00
</ div > ' ;
2007-02-06 08:24:37 +00:00
return $str ;
2006-09-24 11:11:40 +00:00
}
2007-04-18 09:39:49 +00:00
/**
* Based on find_new_settings { @ link ()} in upgradesettings . php
* Looks to find any admin settings that have not been initialized . Returns 1 if it finds any .
*
2009-05-22 02:05:46 +00:00
* @ param object $node Instance of admin_category , or admin_settingpage
2010-05-21 19:06:38 +00:00
* @ return boolean true if any settings haven ' t been initialised , false if they all have
2007-04-18 09:39:49 +00:00
*/
2007-12-19 17:35:20 +00:00
function any_new_admin_settings ( $node ) {
2007-04-18 09:39:49 +00:00
2009-01-11 16:42:19 +00:00
if ( $node instanceof admin_category ) {
2007-04-18 09:39:49 +00:00
$entries = array_keys ( $node -> children );
foreach ( $entries as $entry ) {
2009-09-09 07:55:03 +00:00
if ( any_new_admin_settings ( $node -> children [ $entry ])) {
2007-12-19 17:35:20 +00:00
return true ;
2007-04-18 09:39:49 +00:00
}
}
2009-01-11 16:42:19 +00:00
} else if ( $node instanceof admin_settingpage ) {
2009-09-09 07:55:03 +00:00
foreach ( $node -> settings as $setting ) {
if ( $setting -> get_setting () === NULL ) {
return true ;
}
2007-04-18 09:39:49 +00:00
}
}
2007-12-19 17:35:20 +00:00
return false ;
2007-04-18 09:39:49 +00:00
}
2007-12-03 04:46:37 +00:00
/**
* Moved from admin / replace . php so that we can use this in cron
2009-05-22 02:05:46 +00:00
*
* @ param string $search string to look for
* @ param string $replace string to replace
* @ return bool success or fail
2007-12-03 04:46:37 +00:00
*/
function db_replace ( $search , $replace ) {
2011-03-14 00:51:42 +01:00
global $DB , $CFG , $OUTPUT ;
2007-12-19 17:35:20 +00:00
2011-03-14 00:51:42 +01:00
// TODO: this is horrible hack, we should do whitelisting and each plugin should be responsible for proper replacing...
2012-10-23 16:05:24 +08:00
$skiptables = array ( 'config' , 'config_plugins' , 'config_log' , 'upgrade_log' , 'log' ,
2011-03-14 00:51:42 +01:00
'filter_config' , 'sessions' , 'events_queue' , 'repository_instance_config' ,
2011-08-21 17:43:34 +02:00
'block_instances' , '' );
2007-12-19 17:35:20 +00:00
2011-03-14 00:51:42 +01:00
// Turn off time limits, sometimes upgrades can be slow.
2013-10-15 13:22:19 +01:00
core_php_time_limit :: raise ();
2007-12-19 17:35:20 +00:00
2008-05-15 21:40:00 +00:00
if ( ! $tables = $DB -> get_tables () ) { // No tables yet at all.
2007-12-03 04:46:37 +00:00
return false ;
}
foreach ( $tables as $table ) {
2007-12-19 17:35:20 +00:00
2011-03-14 00:51:42 +01:00
if ( in_array ( $table , $skiptables )) { // Don't process these
2007-12-03 04:46:37 +00:00
continue ;
}
2007-12-19 17:35:20 +00:00
2008-05-15 21:40:00 +00:00
if ( $columns = $DB -> get_columns ( $table )) {
$DB -> set_debug ( true );
2013-11-28 12:59:16 +08:00
foreach ( $columns as $column ) {
$DB -> replace_all_text ( $table , $column , $search , $replace );
2007-12-03 04:46:37 +00:00
}
2008-05-15 21:40:00 +00:00
$DB -> set_debug ( false );
2007-12-03 04:46:37 +00:00
}
}
2007-12-19 17:35:20 +00:00
2011-03-14 00:51:42 +01:00
// delete modinfo caches
rebuild_course_cache ( 0 , true );
2007-12-03 04:46:37 +00:00
2011-03-14 00:51:42 +01:00
// TODO: we should ask all plugins to do the search&replace, for now let's do only blocks...
2013-07-16 22:36:11 +02:00
$blocks = core_component :: get_plugin_list ( 'block' );
2011-03-14 00:51:42 +01:00
foreach ( $blocks as $blockname => $fullblock ) {
if ( $blockname === 'NEWBLOCK' ) { // Someone has unzipped the template, ignore it
continue ;
2008-01-24 08:40:36 +00:00
}
2011-03-14 00:51:42 +01:00
if ( ! is_readable ( $fullblock . '/lib.php' )) {
continue ;
2008-07-31 06:01:12 +00:00
}
2008-01-25 12:56:22 +00:00
2011-03-14 00:51:42 +01:00
$function = 'block_' . $blockname . '_global_db_replace' ;
include_once ( $fullblock . '/lib.php' );
if ( ! function_exists ( $function )) {
continue ;
2008-01-25 12:56:22 +00:00
}
2011-03-14 00:51:42 +01:00
echo $OUTPUT -> notification ( " Replacing in $blockname blocks... " , 'notifysuccess' );
$function ( $search , $replace );
echo $OUTPUT -> notification ( " ...finished " , 'notifysuccess' );
2008-01-23 22:48:54 +00:00
}
2008-07-31 06:01:12 +00:00
2013-11-28 12:59:16 +08:00
purge_all_caches ();
2007-12-03 04:46:37 +00:00
return true ;
2008-01-23 22:48:54 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Manage repository settings
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
2008-08-13 04:09:13 +00:00
class admin_setting_managerepository extends admin_setting {
2009-09-09 07:55:03 +00:00
/** @var string */
2008-08-13 04:09:13 +00:00
private $baseurl ;
2009-06-30 15:19:12 +00:00
2009-05-22 02:05:46 +00:00
/**
* calls parent :: __construct with specific arguments
*/
2009-01-11 16:42:19 +00:00
public function __construct () {
2008-08-13 04:09:13 +00:00
global $CFG ;
2010-04-11 09:41:25 +00:00
parent :: __construct ( 'managerepository' , get_string ( 'manage' , 'repository' ), '' , '' );
2008-08-13 04:09:13 +00:00
$this -> baseurl = $CFG -> wwwroot . '/' . $CFG -> admin . '/repository.php?sesskey=' . sesskey ();
}
2008-08-16 12:16:01 +00:00
2009-05-22 02:05:46 +00:00
/**
* Always returns true , does nothing
*
* @ return true
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2008-08-13 04:09:13 +00:00
return true ;
}
2009-05-22 02:05:46 +00:00
/**
* Always returns true does nothing
*
* @ return true
*/
2009-01-11 16:42:19 +00:00
public function get_defaultsetting () {
2008-08-13 04:09:13 +00:00
return true ;
}
2009-05-22 02:05:46 +00:00
/**
* Always returns s_managerepository
*
* @ return string Always return 's_managerepository'
*/
2009-01-11 16:42:19 +00:00
public function get_full_name () {
2008-08-13 04:09:13 +00:00
return 's_managerepository' ;
}
2009-05-22 02:05:46 +00:00
/**
* Always returns '' doesn ' t do anything
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2008-08-13 04:09:13 +00:00
$url = $this -> baseurl . '&new=' . $data ;
2009-01-13 19:02:00 +00:00
return '' ;
2009-09-09 07:55:03 +00:00
// TODO
// Should not use redirect and exit here
// Find a better way to do this.
// redirect($url);
// exit;
2008-08-13 04:09:13 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Searches repository plugins for one that matches $query
*
* @ param string $query The string to search for
* @ return bool true if found , false if not
*/
2009-01-11 16:42:19 +00:00
public function is_related ( $query ) {
2008-08-13 04:09:13 +00:00
if ( parent :: is_related ( $query )) {
return true ;
}
2013-07-16 22:36:11 +02:00
$repositories = core_component :: get_plugin_list ( 'repository' );
2009-06-19 14:25:56 +00:00
foreach ( $repositories as $p => $dir ) {
2008-08-13 04:09:13 +00:00
if ( strpos ( $p , $query ) !== false ) {
return true ;
}
}
2008-11-26 07:03:10 +00:00
foreach ( repository :: get_types () as $instance ) {
2008-09-02 08:58:53 +00:00
$title = $instance -> get_typename ();
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $title ), $query ) !== false ) {
2008-08-13 04:09:13 +00:00
return true ;
}
}
return false ;
}
2010-04-30 08:03:32 +00:00
/**
* Helper function that generates a moodle_url object
* relevant to the repository
*/
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
2010-04-30 08:03:32 +00:00
function repository_action_url ( $repository ) {
2010-06-28 06:02:55 +00:00
return new moodle_url ( $this -> baseurl , array ( 'sesskey' => sesskey (), 'repos' => $repository ));
2010-04-30 08:03:32 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Builds XHTML to display the control
*
* @ param string $data Unused
2009-06-30 15:19:12 +00:00
* @ param string $query
2009-05-22 02:05:46 +00:00
* @ return string XHTML
*/
2009-01-11 16:42:19 +00:00
public function output_html ( $data , $query = '' ) {
2009-07-03 06:19:25 +00:00
global $CFG , $USER , $OUTPUT ;
2010-04-30 08:03:32 +00:00
2010-06-28 06:02:55 +00:00
// Get strings that are used
$strshow = get_string ( 'on' , 'repository' );
$strhide = get_string ( 'off' , 'repository' );
$strdelete = get_string ( 'disabled' , 'repository' );
2010-04-30 08:03:32 +00:00
$actionchoicesforexisting = array (
2010-06-28 06:02:55 +00:00
'show' => $strshow ,
'hide' => $strhide ,
'delete' => $strdelete
2010-04-30 08:03:32 +00:00
);
$actionchoicesfornew = array (
2010-06-28 06:02:55 +00:00
'newon' => $strshow ,
'newoff' => $strhide ,
'delete' => $strdelete
2010-04-30 08:03:32 +00:00
);
$return = '' ;
$return .= $OUTPUT -> box_start ( 'generalbox' );
// Set strings that are used multiple times
2008-09-04 07:03:01 +00:00
$settingsstr = get_string ( 'settings' );
2010-04-30 08:03:32 +00:00
$disablestr = get_string ( 'disable' );
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
2010-04-30 08:03:32 +00:00
// Table to list plug-ins
2009-08-20 08:50:50 +00:00
$table = new html_table ();
2010-04-30 08:03:32 +00:00
$table -> head = array ( get_string ( 'name' ), get_string ( 'isactive' , 'repository' ), get_string ( 'order' ), $settingsstr );
$table -> align = array ( 'left' , 'center' , 'center' , 'center' , 'center' );
2008-08-13 04:09:13 +00:00
$table -> data = array ();
2009-05-01 06:55:10 +00:00
2010-04-30 08:03:32 +00:00
// Get list of used plug-ins
2013-04-03 11:25:03 +11:00
$repositorytypes = repository :: get_types ();
if ( ! empty ( $repositorytypes )) {
2010-04-30 08:03:32 +00:00
// Array to store plugins being used
$alreadyplugins = array ();
2013-04-03 11:25:03 +11:00
$totalrepositorytypes = count ( $repositorytypes );
2010-04-30 08:03:32 +00:00
$updowncount = 1 ;
2013-04-03 11:25:03 +11:00
foreach ( $repositorytypes as $i ) {
2010-04-30 08:03:32 +00:00
$settings = '' ;
$typename = $i -> get_typename ();
// Display edit link only if you can config the type or if it has multiple instances (e.g. has instance config)
$typeoptionnames = repository :: static_function ( $typename , 'get_type_option_names' );
$instanceoptionnames = repository :: static_function ( $typename , 'get_instance_option_names' );
if ( ! empty ( $typeoptionnames ) || ! empty ( $instanceoptionnames )) {
// Calculate number of instances in order to display them for the Moodle administrator
if ( ! empty ( $instanceoptionnames )) {
$params = array ();
2013-07-03 14:39:10 +08:00
$params [ 'context' ] = array ( context_system :: instance ());
2010-04-30 08:03:32 +00:00
$params [ 'onlyvisible' ] = false ;
$params [ 'type' ] = $typename ;
$admininstancenumber = count ( repository :: static_function ( $typename , 'get_instances' , $params ));
2010-09-21 10:09:14 +00:00
// site instances
$admininstancenumbertext = get_string ( 'instancesforsite' , 'repository' , $admininstancenumber );
2010-04-30 08:03:32 +00:00
$params [ 'context' ] = array ();
2010-09-21 10:09:14 +00:00
$instances = repository :: static_function ( $typename , 'get_instances' , $params );
$courseinstances = array ();
$userinstances = array ();
foreach ( $instances as $instance ) {
2013-04-03 11:25:03 +11:00
$repocontext = context :: instance_by_id ( $instance -> instance -> contextid );
if ( $repocontext -> contextlevel == CONTEXT_COURSE ) {
2010-09-21 10:09:14 +00:00
$courseinstances [] = $instance ;
2013-04-03 11:25:03 +11:00
} else if ( $repocontext -> contextlevel == CONTEXT_USER ) {
2010-09-21 10:09:14 +00:00
$userinstances [] = $instance ;
}
}
// course instances
$instancenumber = count ( $courseinstances );
$courseinstancenumbertext = get_string ( 'instancesforcourses' , 'repository' , $instancenumber );
// user private instances
$instancenumber = count ( $userinstances );
$userinstancenumbertext = get_string ( 'instancesforusers' , 'repository' , $instancenumber );
2010-04-30 08:03:32 +00:00
} else {
$admininstancenumbertext = " " ;
2010-09-21 10:09:14 +00:00
$courseinstancenumbertext = " " ;
$userinstancenumbertext = " " ;
2010-04-30 08:03:32 +00:00
}
2008-09-03 09:45:27 +00:00
2010-09-21 10:09:14 +00:00
$settings .= '<a href="' . $this -> baseurl . '&action=edit&repos=' . $typename . '">' . $settingsstr . '</a>' ;
$settings .= $OUTPUT -> container_start ( 'mdl-left' );
$settings .= '<br/>' ;
$settings .= $admininstancenumbertext ;
$settings .= '<br/>' ;
$settings .= $courseinstancenumbertext ;
$settings .= '<br/>' ;
$settings .= $userinstancenumbertext ;
$settings .= $OUTPUT -> container_end ();
2010-04-30 08:03:32 +00:00
}
// Get the current visibility
if ( $i -> get_visible ()) {
$currentaction = 'show' ;
} else {
$currentaction = 'hide' ;
}
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
2010-04-30 08:03:32 +00:00
$select = new single_select ( $this -> repository_action_url ( $typename , 'repos' ), 'action' , $actionchoicesforexisting , $currentaction , null , 'applyto' . basename ( $typename ));
2009-12-27 23:31:46 +00:00
2010-04-30 08:03:32 +00:00
// Display up/down link
$updown = '' ;
2012-11-15 11:44:18 +08:00
// Should be done with CSS instead.
$spacer = $OUTPUT -> spacer ( array ( 'height' => 15 , 'width' => 15 , 'class' => 'smallicon' ));
2008-09-03 09:45:27 +00:00
2010-04-30 08:03:32 +00:00
if ( $updowncount > 1 ) {
$updown .= " <a href= \" $this->baseurl &action=moveup&repos= " . $typename . " \" > " ;
2012-11-15 11:44:18 +08:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 't/up' ) . " \" alt= \" up \" class= \" iconsmall \" /></a> " ;
2010-04-30 08:03:32 +00:00
}
else {
$updown .= $spacer ;
}
2013-04-03 11:25:03 +11:00
if ( $updowncount < $totalrepositorytypes ) {
2010-04-30 08:03:32 +00:00
$updown .= " <a href= \" $this->baseurl &action=movedown&repos= " . $typename . " \" > " ;
2012-11-15 11:44:18 +08:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 't/down' ) . " \" alt= \" down \" class= \" iconsmall \" /></a> " ;
2010-04-30 08:03:32 +00:00
}
else {
$updown .= $spacer ;
}
2008-09-03 09:45:27 +00:00
2010-04-30 08:03:32 +00:00
$updowncount ++ ;
2008-09-04 03:41:23 +00:00
2010-04-30 08:03:32 +00:00
$table -> data [] = array ( $i -> get_readablename (), $OUTPUT -> render ( $select ), $updown , $settings );
2008-09-04 03:41:23 +00:00
2010-04-30 08:03:32 +00:00
if ( ! in_array ( $typename , $alreadyplugins )) {
$alreadyplugins [] = $typename ;
}
2008-09-02 08:58:53 +00:00
}
2008-08-13 04:09:13 +00:00
}
2010-04-30 08:03:32 +00:00
// Get all the plugins that exist on disk
2013-07-16 22:36:11 +02:00
$plugins = core_component :: get_plugin_list ( 'repository' );
2010-04-30 08:03:32 +00:00
if ( ! empty ( $plugins )) {
foreach ( $plugins as $plugin => $dir ) {
// Check that it has not already been listed
if ( ! in_array ( $plugin , $alreadyplugins )) {
$select = new single_select ( $this -> repository_action_url ( $plugin , 'repos' ), 'action' , $actionchoicesfornew , 'delete' , null , 'applyto' . basename ( $plugin ));
MDL-22984 using standard plugin name string for repositories
AMOS BEGIN
MOV [repositoryname,repository_alfresco],[pluginname,repository_alfresco]
MOV [repositoryname,repository_boxnet],[pluginname,repository_boxnet]
MOV [repositoryname,repository_dropbox],[pluginname,repository_dropbox]
MOV [repositoryname,repository_filesystem],[pluginname,repository_filesystem]
MOV [repositoryname,repository_flickr],[pluginname,repository_flickr]
MOV [repositoryname,repository_flickr_public],[pluginname,repository_flickr_public]
MOV [repositoryname,repository_googledocs],[pluginname,repository_googledocs]
MOV [repositoryname,repository_local],[pluginname,repository_local]
MOV [repositoryname,repository_merlot],[pluginname,repository_merlot]
MOV [repositoryname,repository_picasa],[pluginname,repository_picasa]
MOV [repositoryname,repository_recent],[pluginname,repository_recent]
MOV [repositoryname,repository_s3],[pluginname,repository_s3]
MOV [repositoryname,repository_upload],[pluginname,repository_upload]
MOV [repositoryname,repository_url],[pluginname,repository_url]
MOV [repositoryname,repository_user],[pluginname,repository_user]
MOV [repositoryname,repository_webdav],[pluginname,repository_webdav]
MOV [repositoryname,repository_wikimedia],[pluginname,repository_wikimedia]
MOV [repositoryname,repository_youtube],[pluginname,repository_youtube]
AMOS END
2010-07-04 12:52:10 +00:00
$table -> data [] = array ( get_string ( 'pluginname' , 'repository_' . $plugin ), $OUTPUT -> render ( $select ), '' , '' );
2010-04-30 08:03:32 +00:00
}
2008-09-02 08:58:53 +00:00
}
2008-08-13 04:09:13 +00:00
}
2010-04-30 08:03:32 +00:00
$return .= html_writer :: table ( $table );
$return .= $OUTPUT -> box_end ();
return highlight ( $query , $return );
2008-08-13 04:09:13 +00:00
}
}
2009-02-13 03:08:35 +00:00
2011-06-08 15:10:26 +08:00
/**
* Special checkbox for enable mobile web service
* If enable then we store the service id of the mobile service into config table
* If disable then we unstore the service id from the config table
*/
class admin_setting_enablemobileservice extends admin_setting_configcheckbox {
2012-10-18 15:13:58 +08:00
/** @var boolean True means that the capability 'webservice/xmlrpc:use' is set for authenticated user role */
private $xmlrpcuse ;
/** @var boolean True means that the capability 'webservice/rest:use' is set for authenticated user role */
private $restuse ;
2011-06-08 15:10:26 +08:00
/**
2012-10-18 15:13:58 +08:00
* Return true if Authenticated user role has the capability 'webservice/xmlrpc:use' and 'webservice/rest:use' , otherwise false .
*
2011-06-08 15:10:26 +08:00
* @ return boolean
*/
2012-10-18 15:13:58 +08:00
private function is_protocol_cap_allowed () {
2011-06-08 15:10:26 +08:00
global $DB , $CFG ;
2012-10-18 15:13:58 +08:00
// We keep xmlrpc enabled for backward compatibility.
// If the $this->xmlrpcuse variable is not set, it needs to be set.
2011-06-08 15:10:26 +08:00
if ( empty ( $this -> xmlrpcuse ) and $this -> xmlrpcuse !== false ) {
$params = array ();
$params [ 'permission' ] = CAP_ALLOW ;
$params [ 'roleid' ] = $CFG -> defaultuserroleid ;
$params [ 'capability' ] = 'webservice/xmlrpc:use' ;
$this -> xmlrpcuse = $DB -> record_exists ( 'role_capabilities' , $params );
}
2012-10-18 15:13:58 +08:00
// If the $this->restuse variable is not set, it needs to be set.
if ( empty ( $this -> restuse ) and $this -> restuse !== false ) {
$params = array ();
$params [ 'permission' ] = CAP_ALLOW ;
$params [ 'roleid' ] = $CFG -> defaultuserroleid ;
$params [ 'capability' ] = 'webservice/rest:use' ;
$this -> restuse = $DB -> record_exists ( 'role_capabilities' , $params );
}
return ( $this -> xmlrpcuse && $this -> restuse );
2011-06-08 15:10:26 +08:00
}
/**
2012-10-18 15:13:58 +08:00
* Set the 'webservice/xmlrpc:use' / 'webservice/rest:use' to the Authenticated user role ( allow or not )
2011-06-08 15:10:26 +08:00
* @ param type $status true to allow , false to not set
*/
2012-10-18 15:13:58 +08:00
private function set_protocol_cap ( $status ) {
2011-06-08 15:10:26 +08:00
global $CFG ;
2012-10-18 15:13:58 +08:00
if ( $status and ! $this -> is_protocol_cap_allowed ()) {
2011-06-08 15:10:26 +08:00
//need to allow the cap
$permission = CAP_ALLOW ;
$assign = true ;
2012-10-18 15:13:58 +08:00
} else if ( ! $status and $this -> is_protocol_cap_allowed ()){
2011-06-08 15:10:26 +08:00
//need to disallow the cap
$permission = CAP_INHERIT ;
$assign = true ;
}
if ( ! empty ( $assign )) {
2013-07-03 14:39:10 +08:00
$systemcontext = context_system :: instance ();
2011-06-08 15:10:26 +08:00
assign_capability ( 'webservice/xmlrpc:use' , $permission , $CFG -> defaultuserroleid , $systemcontext -> id , true );
2012-11-06 14:32:18 +13:00
assign_capability ( 'webservice/rest:use' , $permission , $CFG -> defaultuserroleid , $systemcontext -> id , true );
2011-06-08 15:10:26 +08:00
}
}
/**
* Builds XHTML to display the control .
* The main purpose of this overloading is to display a warning when https
* is not supported by the server
* @ param string $data Unused
* @ param string $query
* @ return string XHTML
*/
public function output_html ( $data , $query = '' ) {
global $CFG , $OUTPUT ;
$html = parent :: output_html ( $data , $query );
if (( string ) $data === $this -> yes ) {
require_once ( $CFG -> dirroot . " /lib/filelib.php " );
$curl = new curl ();
$httpswwwroot = str_replace ( 'http:' , 'https:' , $CFG -> wwwroot ); //force https url
$curl -> head ( $httpswwwroot . " /login/index.php " );
$info = $curl -> get_info ();
if ( empty ( $info [ 'http_code' ]) or ( $info [ 'http_code' ] >= 400 )) {
$html .= $OUTPUT -> notification ( get_string ( 'nohttpsformobilewarning' , 'admin' ));
}
}
return $html ;
}
/**
* Retrieves the current setting using the objects name
*
* @ return string
*/
public function get_setting () {
global $CFG ;
2011-06-09 15:08:03 +08:00
2015-09-24 19:56:15 +02:00
// First check if is not set.
$result = $this -> config_read ( $this -> name );
if ( is_null ( $result )) {
return null ;
}
2011-06-13 10:54:24 +08:00
// For install cli script, $CFG->defaultuserroleid is not set so return 0
// Or if web services aren't enabled this can't be,
if ( empty ( $CFG -> defaultuserroleid ) || empty ( $CFG -> enablewebservices )) {
2011-06-09 15:08:03 +08:00
return 0 ;
}
2011-06-08 15:10:26 +08:00
require_once ( $CFG -> dirroot . '/webservice/lib.php' );
$webservicemanager = new webservice ();
$mobileservice = $webservicemanager -> get_external_service_by_shortname ( MOODLE_OFFICIAL_MOBILE_SERVICE );
2012-10-18 15:13:58 +08:00
if ( $mobileservice -> enabled and $this -> is_protocol_cap_allowed ()) {
2015-09-24 19:56:15 +02:00
return $result ;
2011-06-08 15:10:26 +08:00
} else {
return 0 ;
}
}
/**
* Save the selected setting
*
* @ param string $data The selected site
* @ return string empty string or error message
*/
public function write_setting ( $data ) {
global $DB , $CFG ;
2011-06-09 15:08:03 +08:00
//for install cli script, $CFG->defaultuserroleid is not set so do nothing
if ( empty ( $CFG -> defaultuserroleid )) {
return '' ;
}
2011-06-08 15:10:26 +08:00
$servicename = MOODLE_OFFICIAL_MOBILE_SERVICE ;
require_once ( $CFG -> dirroot . '/webservice/lib.php' );
$webservicemanager = new webservice ();
2012-10-18 15:13:58 +08:00
$updateprotocol = false ;
2011-06-08 15:10:26 +08:00
if (( string ) $data === $this -> yes ) {
//code run when enable mobile web service
//enable web service systeme if necessary
set_config ( 'enablewebservices' , true );
//enable mobile service
$mobileservice = $webservicemanager -> get_external_service_by_shortname ( MOODLE_OFFICIAL_MOBILE_SERVICE );
$mobileservice -> enabled = 1 ;
$webservicemanager -> update_external_service ( $mobileservice );
//enable xml-rpc server
2011-06-08 17:34:17 +08:00
$activeprotocols = empty ( $CFG -> webserviceprotocols ) ? array () : explode ( ',' , $CFG -> webserviceprotocols );
2011-06-08 15:10:26 +08:00
2011-06-08 17:34:17 +08:00
if ( ! in_array ( 'xmlrpc' , $activeprotocols )) {
$activeprotocols [] = 'xmlrpc' ;
2012-10-18 15:13:58 +08:00
$updateprotocol = true ;
}
if ( ! in_array ( 'rest' , $activeprotocols )) {
$activeprotocols [] = 'rest' ;
$updateprotocol = true ;
}
if ( $updateprotocol ) {
2011-06-08 17:34:17 +08:00
set_config ( 'webserviceprotocols' , implode ( ',' , $activeprotocols ));
2011-06-08 15:10:26 +08:00
}
//allow xml-rpc:use capability for authenticated user
2012-10-18 15:13:58 +08:00
$this -> set_protocol_cap ( true );
2011-06-08 15:10:26 +08:00
} else {
//disable web service system if no other services are enabled
$otherenabledservices = $DB -> get_records_select ( 'external_services' ,
'enabled = :enabled AND (shortname != :shortname OR shortname IS NULL)' , array ( 'enabled' => 1 ,
'shortname' => MOODLE_OFFICIAL_MOBILE_SERVICE ));
if ( empty ( $otherenabledservices )) {
set_config ( 'enablewebservices' , false );
//also disable xml-rpc server
2011-06-08 17:34:17 +08:00
$activeprotocols = empty ( $CFG -> webserviceprotocols ) ? array () : explode ( ',' , $CFG -> webserviceprotocols );
$protocolkey = array_search ( 'xmlrpc' , $activeprotocols );
2011-06-08 15:10:26 +08:00
if ( $protocolkey !== false ) {
2011-06-08 17:34:17 +08:00
unset ( $activeprotocols [ $protocolkey ]);
2012-10-18 15:13:58 +08:00
$updateprotocol = true ;
}
$protocolkey = array_search ( 'rest' , $activeprotocols );
if ( $protocolkey !== false ) {
unset ( $activeprotocols [ $protocolkey ]);
$updateprotocol = true ;
}
if ( $updateprotocol ) {
2011-06-08 17:34:17 +08:00
set_config ( 'webserviceprotocols' , implode ( ',' , $activeprotocols ));
2011-06-08 15:10:26 +08:00
}
//disallow xml-rpc:use capability for authenticated user
2012-10-18 15:13:58 +08:00
$this -> set_protocol_cap ( false );
2011-06-08 15:10:26 +08:00
}
//disable the mobile service
$mobileservice = $webservicemanager -> get_external_service_by_shortname ( MOODLE_OFFICIAL_MOBILE_SERVICE );
$mobileservice -> enabled = 0 ;
$webservicemanager -> update_external_service ( $mobileservice );
}
return ( parent :: write_setting ( $data ));
}
}
2011-03-17 21:34:34 +01:00
2009-05-22 02:05:46 +00:00
/**
2009-10-12 21:46:16 +00:00
* Special class for management of external services
2009-06-30 15:19:12 +00:00
*
2009-10-12 21:46:16 +00:00
* @ author Petr Skoda ( skodak )
2009-05-22 02:05:46 +00:00
*/
2009-10-12 21:46:16 +00:00
class admin_setting_manageexternalservices extends admin_setting {
2009-05-22 02:05:46 +00:00
/**
* Calls parent :: __construct with specific arguments
*/
2009-02-13 03:08:35 +00:00
public function __construct () {
2010-02-08 16:26:15 +00:00
$this -> nosave = true ;
2009-10-12 21:46:16 +00:00
parent :: __construct ( 'webservicesui' , get_string ( 'externalservices' , 'webservice' ), '' , '' );
2009-02-13 03:08:35 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Always returns true , does nothing
2009-10-12 21:46:16 +00:00
*
2009-05-22 02:05:46 +00:00
* @ return true
*/
2009-02-13 03:08:35 +00:00
public function get_setting () {
return true ;
}
2009-04-16 07:16:44 +00:00
2009-05-22 02:05:46 +00:00
/**
2009-10-12 21:46:16 +00:00
* Always returns true , does nothing
*
* @ return true
*/
public function get_defaultsetting () {
return true ;
}
/**
* Always returns '' , does not write anything
2009-05-22 02:05:46 +00:00
*
* @ return string Always returns ''
*/
2009-02-13 03:08:35 +00:00
public function write_setting ( $data ) {
2009-10-12 21:46:16 +00:00
// do not write any setting
2009-02-13 03:08:35 +00:00
return '' ;
}
2009-05-22 02:05:46 +00:00
/**
2009-10-12 21:46:16 +00:00
* Checks if $query is one of the available external services
2009-05-22 02:05:46 +00:00
*
2009-10-12 21:46:16 +00:00
* @ param string $query The string to search for
* @ return bool Returns true if found , false if not
*/
public function is_related ( $query ) {
global $DB ;
if ( parent :: is_related ( $query )) {
return true ;
}
$services = $DB -> get_records ( 'external_services' , array (), 'id, name' );
foreach ( $services as $service ) {
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $service -> name ), $query ) !== false ) {
2009-10-12 21:46:16 +00:00
return true ;
}
}
return false ;
}
/**
* Builds the XHTML to display the control
*
* @ param string $data Unused
2009-05-22 02:05:46 +00:00
* @ param string $query
2009-10-12 21:46:16 +00:00
* @ return string
2009-05-22 02:05:46 +00:00
*/
2009-02-13 03:08:35 +00:00
public function output_html ( $data , $query = '' ) {
2009-10-12 21:46:16 +00:00
global $CFG , $OUTPUT , $DB ;
// display strings
$stradministration = get_string ( 'administration' );
$stredit = get_string ( 'edit' );
$strservice = get_string ( 'externalservice' , 'webservice' );
$strdelete = get_string ( 'delete' );
$strplugin = get_string ( 'plugin' , 'admin' );
$stradd = get_string ( 'add' );
$strfunctions = get_string ( 'functions' , 'webservice' );
2010-02-12 04:14:26 +00:00
$strusers = get_string ( 'users' );
2009-10-21 19:36:39 +00:00
$strserviceusers = get_string ( 'serviceusers' , 'webservice' );
2009-10-12 21:46:16 +00:00
2009-10-21 19:58:50 +00:00
$esurl = " $CFG->wwwroot / $CFG->admin /webservice/service.php " ;
$efurl = " $CFG->wwwroot / $CFG->admin /webservice/service_functions.php " ;
$euurl = " $CFG->wwwroot / $CFG->admin /webservice/service_users.php " ;
2009-10-12 21:46:16 +00:00
// built in services
2009-12-21 06:11:50 +00:00
$services = $DB -> get_records_select ( 'external_services' , 'component IS NOT NULL' , null , 'name' );
$return = " " ;
if ( ! empty ( $services )) {
$return .= $OUTPUT -> heading ( get_string ( 'servicesbuiltin' , 'webservice' ), 3 , 'main' );
2009-10-12 21:46:16 +00:00
2009-04-16 07:16:44 +00:00
2009-02-13 03:08:35 +00:00
2009-12-21 06:11:50 +00:00
$table = new html_table ();
$table -> head = array ( $strservice , $strplugin , $strfunctions , $strusers , $stredit );
2012-11-14 10:30:50 +08:00
$table -> colclasses = array ( 'leftalign service' , 'leftalign plugin' , 'centeralign functions' , 'centeralign users' , 'centeralign ' );
$table -> id = 'builtinservices' ;
$table -> attributes [ 'class' ] = 'admintable externalservices generaltable' ;
2009-12-21 06:11:50 +00:00
$table -> data = array ();
2009-02-13 03:08:35 +00:00
2009-12-21 06:11:50 +00:00
// iterate through auth plugins and add to the display table
foreach ( $services as $service ) {
$name = $service -> name ;
2009-02-13 03:08:35 +00:00
2009-12-21 06:11:50 +00:00
// hide/show link
if ( $service -> enabled ) {
$displayname = " <span> $name </span> " ;
} else {
$displayname = " <span class= \" dimmed_text \" > $name </span> " ;
}
2009-10-12 21:46:16 +00:00
2009-12-21 06:11:50 +00:00
$plugin = $service -> component ;
2009-10-12 21:46:16 +00:00
2009-12-21 06:11:50 +00:00
$functions = " <a href= \" $efurl ?id= $service->id\ " > $strfunctions </ a > " ;
2009-02-13 03:08:35 +00:00
2009-12-21 06:11:50 +00:00
if ( $service -> restrictedusers ) {
$users = " <a href= \" $euurl ?id= $service->id\ " > $strserviceusers </ a > " ;
} else {
2010-02-12 04:14:26 +00:00
$users = get_string ( 'allusers' , 'webservice' );
2009-12-21 06:11:50 +00:00
}
2009-06-30 15:19:12 +00:00
2009-12-21 06:11:50 +00:00
$edit = " <a href= \" $esurl ?id= $service->id\ " > $stredit </ a > " ;
// add a row to the table
$table -> data [] = array ( $displayname , $plugin , $functions , $users , $edit );
}
2010-03-20 22:15:54 +00:00
$return .= html_writer :: table ( $table );
2009-10-12 21:46:16 +00:00
}
2009-02-13 03:08:35 +00:00
2009-10-12 21:46:16 +00:00
// Custom services
2009-10-21 19:36:39 +00:00
$return .= $OUTPUT -> heading ( get_string ( 'servicescustom' , 'webservice' ), 3 , 'main' );
2009-10-12 21:46:16 +00:00
$services = $DB -> get_records_select ( 'external_services' , 'component IS NULL' , null , 'name' );
2009-02-13 03:08:35 +00:00
2009-10-12 21:46:16 +00:00
$table = new html_table ();
$table -> head = array ( $strservice , $strdelete , $strfunctions , $strusers , $stredit );
2012-11-14 10:30:50 +08:00
$table -> colclasses = array ( 'leftalign service' , 'leftalign plugin' , 'centeralign functions' , 'centeralign users' , 'centeralign ' );
$table -> id = 'customservices' ;
$table -> attributes [ 'class' ] = 'admintable externalservices generaltable' ;
2009-10-12 21:46:16 +00:00
$table -> data = array ();
2009-02-13 03:08:35 +00:00
2009-10-12 21:46:16 +00:00
// iterate through auth plugins and add to the display table
foreach ( $services as $service ) {
$name = $service -> name ;
// hide/show link
if ( $service -> enabled ) {
$displayname = " <span> $name </span> " ;
} else {
$displayname = " <span class= \" dimmed_text \" > $name </span> " ;
}
2009-02-13 03:08:35 +00:00
2009-10-12 21:46:16 +00:00
// delete link
$delete = " <a href= \" $esurl ?action=delete&sesskey= " . sesskey () . " &id= $service->id\ " > $strdelete </ a > " ;
2009-02-13 03:08:35 +00:00
2009-10-12 21:46:16 +00:00
$functions = " <a href= \" $efurl ?id= $service->id\ " > $strfunctions </ a > " ;
2009-02-13 03:08:35 +00:00
2009-10-12 21:46:16 +00:00
if ( $service -> restrictedusers ) {
2009-10-21 19:36:39 +00:00
$users = " <a href= \" $euurl ?id= $service->id\ " > $strserviceusers </ a > " ;
2009-10-12 21:46:16 +00:00
} else {
2010-02-12 04:14:26 +00:00
$users = get_string ( 'allusers' , 'webservice' );
2009-02-13 03:08:35 +00:00
}
2009-10-12 21:46:16 +00:00
$edit = " <a href= \" $esurl ?id= $service->id\ " > $stredit </ a > " ;
// add a row to the table
$table -> data [] = array ( $displayname , $delete , $functions , $users , $edit );
2009-02-13 03:08:35 +00:00
}
2009-10-12 21:46:16 +00:00
// add new custom service option
2010-03-20 22:15:54 +00:00
$return .= html_writer :: table ( $table );
2009-02-13 03:08:35 +00:00
2010-01-19 10:07:26 +00:00
$return .= '<br />' ;
// add a token to the table
$return .= " <a href= \" $esurl ?id=0 \" > $stradd </a> " ;
2009-10-12 21:46:16 +00:00
return highlight ( $query , $return );
2009-09-09 07:55:03 +00:00
}
}
2011-03-17 21:34:34 +01:00
2010-01-22 02:04:12 +00:00
/**
* Special class for overview of external services
*
* @ author Jerome Mouneyrac
*/
class admin_setting_webservicesoverview extends admin_setting {
2010-07-30 07:43:14 +00:00
2010-01-22 02:04:12 +00:00
/**
* Calls parent :: __construct with specific arguments
*/
public function __construct () {
2010-02-08 16:26:15 +00:00
$this -> nosave = true ;
2010-07-30 07:43:14 +00:00
parent :: __construct ( 'webservicesoverviewui' ,
get_string ( 'webservicesoverview' , 'webservice' ), '' , '' );
2010-01-22 02:04:12 +00:00
}
/**
* Always returns true , does nothing
*
* @ return true
*/
public function get_setting () {
return true ;
}
/**
* Always returns true , does nothing
*
* @ return true
*/
public function get_defaultsetting () {
return true ;
}
/**
* Always returns '' , does not write anything
*
* @ return string Always returns ''
*/
public function write_setting ( $data ) {
2010-07-30 07:43:14 +00:00
// do not write any setting
2010-01-22 02:04:12 +00:00
return '' ;
}
/**
* Builds the XHTML to display the control
*
* @ param string $data Unused
* @ param string $query
* @ return string
*/
public function output_html ( $data , $query = '' ) {
global $CFG , $OUTPUT ;
$return = " " ;
2010-07-30 07:43:14 +00:00
$brtag = html_writer :: empty_tag ( 'br' );
2010-01-22 02:04:12 +00:00
2011-08-19 11:45:18 +08:00
// Enable mobile web service
$enablemobile = new admin_setting_enablemobileservice ( 'enablemobilewebservice' ,
get_string ( 'enablemobilewebservice' , 'admin' ),
get_string ( 'configenablemobilewebservice' ,
'admin' , '' ), 0 ); //we don't want to display it but to know the ws mobile status
2015-01-30 13:11:14 +01:00
$manageserviceurl = new moodle_url ( " /admin/settings.php?section=mobile " );
2011-08-19 11:45:18 +08:00
$wsmobileparam = new stdClass ();
$wsmobileparam -> enablemobileservice = get_string ( 'enablemobilewebservice' , 'admin' );
$wsmobileparam -> manageservicelink = html_writer :: link ( $manageserviceurl ,
2015-01-30 13:11:14 +01:00
get_string ( 'mobile' , 'admin' ));
2011-08-19 11:45:18 +08:00
$mobilestatus = $enablemobile -> get_setting () ? get_string ( 'mobilewsenabled' , 'webservice' ) : get_string ( 'mobilewsdisabled' , 'webservice' );
$wsmobileparam -> wsmobilestatus = html_writer :: tag ( 'strong' , $mobilestatus );
$return .= $OUTPUT -> heading ( get_string ( 'enablemobilewebservice' , 'admin' ), 3 , 'main' );
$return .= $brtag . get_string ( 'enablemobilewsoverview' , 'webservice' , $wsmobileparam )
. $brtag . $brtag ;
/// One system controlling Moodle with Token
2010-01-22 02:04:12 +00:00
$return .= $OUTPUT -> heading ( get_string ( 'onesystemcontrolling' , 'webservice' ), 3 , 'main' );
$table = new html_table ();
2010-07-30 07:43:14 +00:00
$table -> head = array ( get_string ( 'step' , 'webservice' ), get_string ( 'status' ),
get_string ( 'description' ));
2012-11-14 10:30:50 +08:00
$table -> colclasses = array ( 'leftalign step' , 'leftalign status' , 'leftalign description' );
$table -> id = 'onesystemcontrol' ;
$table -> attributes [ 'class' ] = 'admintable wsoverview generaltable' ;
2010-07-30 07:43:14 +00:00
$table -> data = array ();
2010-01-22 02:04:12 +00:00
2010-07-30 07:43:14 +00:00
$return .= $brtag . get_string ( 'onesystemcontrollingdescription' , 'webservice' )
. $brtag . $brtag ;
2010-01-22 02:04:12 +00:00
/// 1. Enable Web Services
$row = array ();
2010-02-02 02:45:32 +00:00
$url = new moodle_url ( " /admin/search.php?query=enablewebservices " );
2010-07-30 07:43:14 +00:00
$row [ 0 ] = " 1. " . html_writer :: tag ( 'a' , get_string ( 'enablews' , 'webservice' ),
array ( 'href' => $url ));
$status = html_writer :: tag ( 'span' , get_string ( 'no' ), array ( 'class' => 'statuscritical' ));
2010-01-22 02:04:12 +00:00
if ( $CFG -> enablewebservices ) {
$status = get_string ( 'yes' );
}
$row [ 1 ] = $status ;
$row [ 2 ] = get_string ( 'enablewsdescription' , 'webservice' );
$table -> data [] = $row ;
/// 2. Enable protocols
$row = array ();
$url = new moodle_url ( " /admin/settings.php?section=webserviceprotocols " );
2010-07-30 07:43:14 +00:00
$row [ 0 ] = " 2. " . html_writer :: tag ( 'a' , get_string ( 'enableprotocols' , 'webservice' ),
array ( 'href' => $url ));
$status = html_writer :: tag ( 'span' , get_string ( 'none' ), array ( 'class' => 'statuscritical' ));
2010-01-22 02:04:12 +00:00
//retrieve activated protocol
2010-07-30 07:43:14 +00:00
$active_protocols = empty ( $CFG -> webserviceprotocols ) ?
array () : explode ( ',' , $CFG -> webserviceprotocols );
2010-01-22 02:04:12 +00:00
if ( ! empty ( $active_protocols )) {
$status = " " ;
2010-07-30 07:43:14 +00:00
foreach ( $active_protocols as $protocol ) {
$status .= $protocol . $brtag ;
2010-01-22 02:04:12 +00:00
}
}
$row [ 1 ] = $status ;
$row [ 2 ] = get_string ( 'enableprotocolsdescription' , 'webservice' );
$table -> data [] = $row ;
/// 3. Create user account
$row = array ();
$url = new moodle_url ( " /user/editadvanced.php?id=-1 " );
2010-07-30 07:43:14 +00:00
$row [ 0 ] = " 3. " . html_writer :: tag ( 'a' , get_string ( 'createuser' , 'webservice' ),
array ( 'href' => $url ));
2010-01-22 02:04:12 +00:00
$row [ 1 ] = " " ;
$row [ 2 ] = get_string ( 'createuserdescription' , 'webservice' );
$table -> data [] = $row ;
/// 4. Add capability to users
$row = array ();
$url = new moodle_url ( " /admin/roles/check.php?contextid=1 " );
2010-07-30 07:43:14 +00:00
$row [ 0 ] = " 4. " . html_writer :: tag ( 'a' , get_string ( 'checkusercapability' , 'webservice' ),
array ( 'href' => $url ));
2010-01-22 02:04:12 +00:00
$row [ 1 ] = " " ;
$row [ 2 ] = get_string ( 'checkusercapabilitydescription' , 'webservice' );
$table -> data [] = $row ;
2010-02-04 07:06:27 +00:00
/// 5. Select a web service
2010-01-22 02:04:12 +00:00
$row = array ();
2010-02-04 07:06:27 +00:00
$url = new moodle_url ( " /admin/settings.php?section=externalservices " );
2010-07-30 07:43:14 +00:00
$row [ 0 ] = " 5. " . html_writer :: tag ( 'a' , get_string ( 'selectservice' , 'webservice' ),
array ( 'href' => $url ));
2010-01-22 02:04:12 +00:00
$row [ 1 ] = " " ;
$row [ 2 ] = get_string ( 'createservicedescription' , 'webservice' );
$table -> data [] = $row ;
/// 6. Add functions
$row = array ();
$url = new moodle_url ( " /admin/settings.php?section=externalservices " );
2010-07-30 07:43:14 +00:00
$row [ 0 ] = " 6. " . html_writer :: tag ( 'a' , get_string ( 'addfunctions' , 'webservice' ),
array ( 'href' => $url ));
2010-01-22 02:04:12 +00:00
$row [ 1 ] = " " ;
$row [ 2 ] = get_string ( 'addfunctionsdescription' , 'webservice' );
$table -> data [] = $row ;
/// 7. Add the specific user
$row = array ();
$url = new moodle_url ( " /admin/settings.php?section=externalservices " );
2010-07-30 07:43:14 +00:00
$row [ 0 ] = " 7. " . html_writer :: tag ( 'a' , get_string ( 'selectspecificuser' , 'webservice' ),
array ( 'href' => $url ));
2010-01-22 02:04:12 +00:00
$row [ 1 ] = " " ;
$row [ 2 ] = get_string ( 'selectspecificuserdescription' , 'webservice' );
$table -> data [] = $row ;
/// 8. Create token for the specific user
$row = array ();
2010-07-30 07:43:14 +00:00
$url = new moodle_url ( " /admin/webservice/tokens.php?sesskey= " . sesskey () . " &action=create " );
$row [ 0 ] = " 8. " . html_writer :: tag ( 'a' , get_string ( 'createtokenforuser' , 'webservice' ),
array ( 'href' => $url ));
2010-01-22 02:04:12 +00:00
$row [ 1 ] = " " ;
$row [ 2 ] = get_string ( 'createtokenforuserdescription' , 'webservice' );
$table -> data [] = $row ;
/// 9. Enable the documentation
$row = array ();
2010-02-04 07:06:27 +00:00
$url = new moodle_url ( " /admin/search.php?query=enablewsdocumentation " );
2010-07-30 07:43:14 +00:00
$row [ 0 ] = " 9. " . html_writer :: tag ( 'a' , get_string ( 'enabledocumentation' , 'webservice' ),
array ( 'href' => $url ));
$status = '<span class="warning">' . get_string ( 'no' ) . '</span>' ;
2010-01-22 02:04:12 +00:00
if ( $CFG -> enablewsdocumentation ) {
$status = get_string ( 'yes' );
}
$row [ 1 ] = $status ;
$row [ 2 ] = get_string ( 'enabledocumentationdescription' , 'webservice' );
$table -> data [] = $row ;
2010-01-29 03:50:06 +00:00
/// 10. Test the service
$row = array ();
$url = new moodle_url ( " /admin/webservice/testclient.php " );
2010-07-30 07:43:14 +00:00
$row [ 0 ] = " 10. " . html_writer :: tag ( 'a' , get_string ( 'testwithtestclient' , 'webservice' ),
array ( 'href' => $url ));
2010-01-29 03:50:06 +00:00
$row [ 1 ] = " " ;
$row [ 2 ] = get_string ( 'testwithtestclientdescription' , 'webservice' );
$table -> data [] = $row ;
2010-02-08 16:26:15 +00:00
2010-03-20 22:15:54 +00:00
$return .= html_writer :: table ( $table );
2010-01-22 02:04:12 +00:00
2010-07-30 07:43:14 +00:00
/// Users as clients with token
$return .= $brtag . $brtag . $brtag ;
2010-01-22 02:04:12 +00:00
$return .= $OUTPUT -> heading ( get_string ( 'userasclients' , 'webservice' ), 3 , 'main' );
$table = new html_table ();
2010-07-30 07:43:14 +00:00
$table -> head = array ( get_string ( 'step' , 'webservice' ), get_string ( 'status' ),
get_string ( 'description' ));
2012-11-14 10:30:50 +08:00
$table -> colclasses = array ( 'leftalign step' , 'leftalign status' , 'leftalign description' );
$table -> id = 'userasclients' ;
$table -> attributes [ 'class' ] = 'admintable wsoverview generaltable' ;
2010-07-30 07:43:14 +00:00
$table -> data = array ();
2010-01-22 02:04:12 +00:00
2010-07-30 07:43:14 +00:00
$return .= $brtag . get_string ( 'userasclientsdescription' , 'webservice' ) .
$brtag . $brtag ;
2010-01-22 02:04:12 +00:00
/// 1. Enable Web Services
$row = array ();
2010-02-04 07:06:27 +00:00
$url = new moodle_url ( " /admin/search.php?query=enablewebservices " );
2010-07-30 07:43:14 +00:00
$row [ 0 ] = " 1. " . html_writer :: tag ( 'a' , get_string ( 'enablews' , 'webservice' ),
array ( 'href' => $url ));
$status = html_writer :: tag ( 'span' , get_string ( 'no' ), array ( 'class' => 'statuscritical' ));
2010-01-22 02:04:12 +00:00
if ( $CFG -> enablewebservices ) {
$status = get_string ( 'yes' );
}
$row [ 1 ] = $status ;
$row [ 2 ] = get_string ( 'enablewsdescription' , 'webservice' );
$table -> data [] = $row ;
/// 2. Enable protocols
$row = array ();
$url = new moodle_url ( " /admin/settings.php?section=webserviceprotocols " );
2010-07-30 07:43:14 +00:00
$row [ 0 ] = " 2. " . html_writer :: tag ( 'a' , get_string ( 'enableprotocols' , 'webservice' ),
array ( 'href' => $url ));
$status = html_writer :: tag ( 'span' , get_string ( 'none' ), array ( 'class' => 'statuscritical' ));
2010-01-22 02:04:12 +00:00
//retrieve activated protocol
2010-07-30 07:43:14 +00:00
$active_protocols = empty ( $CFG -> webserviceprotocols ) ?
array () : explode ( ',' , $CFG -> webserviceprotocols );
2010-01-22 02:04:12 +00:00
if ( ! empty ( $active_protocols )) {
$status = " " ;
2010-07-30 07:43:14 +00:00
foreach ( $active_protocols as $protocol ) {
$status .= $protocol . $brtag ;
2010-01-22 02:04:12 +00:00
}
}
$row [ 1 ] = $status ;
$row [ 2 ] = get_string ( 'enableprotocolsdescription' , 'webservice' );
$table -> data [] = $row ;
2010-02-04 07:06:27 +00:00
/// 3. Select a web service
2010-01-22 02:04:12 +00:00
$row = array ();
2010-02-04 07:06:27 +00:00
$url = new moodle_url ( " /admin/settings.php?section=externalservices " );
2010-07-30 07:43:14 +00:00
$row [ 0 ] = " 3. " . html_writer :: tag ( 'a' , get_string ( 'selectservice' , 'webservice' ),
array ( 'href' => $url ));
2010-01-22 02:04:12 +00:00
$row [ 1 ] = " " ;
$row [ 2 ] = get_string ( 'createserviceforusersdescription' , 'webservice' );
$table -> data [] = $row ;
/// 4. Add functions
$row = array ();
$url = new moodle_url ( " /admin/settings.php?section=externalservices " );
2010-07-30 07:43:14 +00:00
$row [ 0 ] = " 4. " . html_writer :: tag ( 'a' , get_string ( 'addfunctions' , 'webservice' ),
array ( 'href' => $url ));
2010-01-22 02:04:12 +00:00
$row [ 1 ] = " " ;
$row [ 2 ] = get_string ( 'addfunctionsdescription' , 'webservice' );
$table -> data [] = $row ;
/// 5. Add capability to users
$row = array ();
$url = new moodle_url ( " /admin/roles/check.php?contextid=1 " );
2010-07-30 07:43:14 +00:00
$row [ 0 ] = " 5. " . html_writer :: tag ( 'a' , get_string ( 'addcapabilitytousers' , 'webservice' ),
array ( 'href' => $url ));
2010-01-22 02:04:12 +00:00
$row [ 1 ] = " " ;
$row [ 2 ] = get_string ( 'addcapabilitytousersdescription' , 'webservice' );
$table -> data [] = $row ;
2010-01-29 03:50:06 +00:00
/// 6. Test the service
$row = array ();
$url = new moodle_url ( " /admin/webservice/testclient.php " );
2010-07-30 07:43:14 +00:00
$row [ 0 ] = " 6. " . html_writer :: tag ( 'a' , get_string ( 'testwithtestclient' , 'webservice' ),
array ( 'href' => $url ));
2010-01-29 03:50:06 +00:00
$row [ 1 ] = " " ;
$row [ 2 ] = get_string ( 'testauserwithtestclientdescription' , 'webservice' );
$table -> data [] = $row ;
2010-01-22 02:04:12 +00:00
2010-03-20 22:15:54 +00:00
$return .= html_writer :: table ( $table );
2010-01-22 02:04:12 +00:00
return highlight ( $query , $return );
}
2010-07-30 07:43:14 +00:00
2010-01-22 02:04:12 +00:00
}
2011-03-17 21:34:34 +01:00
2009-09-09 07:55:03 +00:00
/**
2009-10-12 21:46:16 +00:00
* Special class for web service protocol administration .
2009-09-09 07:55:03 +00:00
*
2009-10-12 21:46:16 +00:00
* @ author Petr Skoda ( skodak )
2009-09-09 07:55:03 +00:00
*/
2009-10-13 06:16:06 +00:00
class admin_setting_managewebserviceprotocols extends admin_setting {
2009-09-09 07:55:03 +00:00
/**
* Calls parent :: __construct with specific arguments
*/
public function __construct () {
2010-02-08 16:26:15 +00:00
$this -> nosave = true ;
2009-10-12 21:46:16 +00:00
parent :: __construct ( 'webservicesui' , get_string ( 'manageprotocols' , 'webservice' ), '' , '' );
2009-09-09 07:55:03 +00:00
}
/**
2009-10-12 21:46:16 +00:00
* Always returns true , does nothing
2009-09-09 07:55:03 +00:00
*
* @ return true
*/
public function get_setting () {
return true ;
}
/**
2009-10-12 21:46:16 +00:00
* Always returns true , does nothing
*
* @ return true
*/
public function get_defaultsetting () {
return true ;
}
/**
* Always returns '' , does not write anything
2009-09-09 07:55:03 +00:00
*
* @ return string Always returns ''
*/
public function write_setting ( $data ) {
2009-10-12 21:46:16 +00:00
// do not write any setting
2009-09-09 07:55:03 +00:00
return '' ;
}
/**
2009-10-12 21:46:16 +00:00
* Checks if $query is one of the available webservices
*
* @ param string $query The string to search for
* @ return bool Returns true if found , false if not
*/
public function is_related ( $query ) {
if ( parent :: is_related ( $query )) {
return true ;
}
2013-07-16 22:36:11 +02:00
$protocols = core_component :: get_plugin_list ( 'webservice' );
2009-10-12 21:46:16 +00:00
foreach ( $protocols as $protocol => $location ) {
if ( strpos ( $protocol , $query ) !== false ) {
return true ;
}
$protocolstr = get_string ( 'pluginname' , 'webservice_' . $protocol );
2013-08-06 20:58:28 +02:00
if ( strpos ( core_text :: strtolower ( $protocolstr ), $query ) !== false ) {
2009-10-12 21:46:16 +00:00
return true ;
}
}
return false ;
}
/**
* Builds the XHTML to display the control
2009-09-09 07:55:03 +00:00
*
* @ param string $data Unused
* @ param string $query
2009-10-12 21:46:16 +00:00
* @ return string
2009-09-09 07:55:03 +00:00
*/
public function output_html ( $data , $query = '' ) {
2009-10-12 21:46:16 +00:00
global $CFG , $OUTPUT ;
2009-09-09 07:55:03 +00:00
2009-10-12 21:46:16 +00:00
// display strings
$stradministration = get_string ( 'administration' );
$strsettings = get_string ( 'settings' );
$stredit = get_string ( 'edit' );
$strprotocol = get_string ( 'protocol' , 'webservice' );
$strenable = get_string ( 'enable' );
$strdisable = get_string ( 'disable' );
$strversion = get_string ( 'version' );
2009-09-09 07:55:03 +00:00
2013-07-16 22:36:11 +02:00
$protocols_available = core_component :: get_plugin_list ( 'webservice' );
2009-10-12 21:46:16 +00:00
$active_protocols = empty ( $CFG -> webserviceprotocols ) ? array () : explode ( ',' , $CFG -> webserviceprotocols );
ksort ( $protocols_available );
2009-09-09 07:55:03 +00:00
2009-10-12 21:46:16 +00:00
foreach ( $active_protocols as $key => $protocol ) {
if ( empty ( $protocols_available [ $protocol ])) {
unset ( $active_protocols [ $key ]);
2009-09-09 07:55:03 +00:00
}
2009-10-12 21:46:16 +00:00
}
2010-07-30 07:43:14 +00:00
$return = $OUTPUT -> heading ( get_string ( 'actwebserviceshhdr' , 'webservice' ), 3 , 'main' );
2009-10-12 21:46:16 +00:00
$return .= $OUTPUT -> box_start ( 'generalbox webservicesui' );
$table = new html_table ();
2013-04-22 12:02:39 +08:00
$table -> head = array ( $strprotocol , $strversion , $strenable , $strsettings );
2012-11-14 10:30:50 +08:00
$table -> colclasses = array ( 'leftalign' , 'centeralign' , 'centeralign' , 'centeralign' , 'centeralign' );
$table -> id = 'webserviceprotocols' ;
$table -> attributes [ 'class' ] = 'admintable generaltable' ;
2009-10-12 21:46:16 +00:00
$table -> data = array ();
// iterate through auth plugins and add to the display table
2009-10-21 19:58:50 +00:00
$url = " $CFG->wwwroot / $CFG->admin /webservice/protocols.php?sesskey= " . sesskey ();
2009-10-12 21:46:16 +00:00
foreach ( $protocols_available as $protocol => $location ) {
$name = get_string ( 'pluginname' , 'webservice_' . $protocol );
2010-09-21 08:07:44 +00:00
$plugin = new stdClass ();
2009-10-12 21:46:16 +00:00
if ( file_exists ( $CFG -> dirroot . '/webservice/' . $protocol . '/version.php' )) {
include ( $CFG -> dirroot . '/webservice/' . $protocol . '/version.php' );
2009-09-09 07:55:03 +00:00
}
2009-10-12 21:46:16 +00:00
$version = isset ( $plugin -> version ) ? $plugin -> version : '' ;
2009-09-09 07:55:03 +00:00
2009-10-12 21:46:16 +00:00
// hide/show link
if ( in_array ( $protocol , $active_protocols )) {
$hideshow = " <a href= \" $url &action=disable&webservice= $protocol\ " > " ;
2012-11-19 13:06:41 +08:00
$hideshow .= " <img src= \" " . $OUTPUT -> pix_url ( 't/hide' ) . " \" class= \" iconsmall \" alt= \" $strdisable\ " /></ a > " ;
2009-10-12 21:46:16 +00:00
$displayname = " <span> $name </span> " ;
} else {
$hideshow = " <a href= \" $url &action=enable&webservice= $protocol\ " > " ;
2012-11-19 13:06:41 +08:00
$hideshow .= " <img src= \" " . $OUTPUT -> pix_url ( 't/show' ) . " \" class= \" iconsmall \" alt= \" $strenable\ " /></ a > " ;
2009-10-12 21:46:16 +00:00
$displayname = " <span class= \" dimmed_text \" > $name </span> " ;
}
2009-09-09 07:55:03 +00:00
2009-10-12 21:46:16 +00:00
// settings link
if ( file_exists ( $CFG -> dirroot . '/webservice/' . $protocol . '/settings.php' )) {
$settings = " <a href= \" settings.php?section=webservicesetting $protocol\ " > $strsettings </ a > " ;
} else {
$settings = '' ;
}
2009-09-09 07:55:03 +00:00
2009-10-12 21:46:16 +00:00
// add a row to the table
2013-04-22 12:02:39 +08:00
$table -> data [] = array ( $displayname , $version , $hideshow , $settings );
2009-10-12 21:46:16 +00:00
}
2010-03-20 22:15:54 +00:00
$return .= html_writer :: table ( $table );
2010-01-19 08:36:16 +00:00
$return .= get_string ( 'configwebserviceplugins' , 'webservice' );
2009-10-12 21:46:16 +00:00
$return .= $OUTPUT -> box_end ();
2009-09-09 07:55:03 +00:00
2009-10-12 21:46:16 +00:00
return highlight ( $query , $return );
2009-02-13 03:08:35 +00:00
}
}
2010-01-06 09:33:05 +00:00
/**
* Special class for web service token administration .
*
* @ author Jerome Mouneyrac
*/
class admin_setting_managewebservicetokens extends admin_setting {
/**
* Calls parent :: __construct with specific arguments
*/
public function __construct () {
2010-02-08 16:26:15 +00:00
$this -> nosave = true ;
2010-01-06 09:33:05 +00:00
parent :: __construct ( 'webservicestokenui' , get_string ( 'managetokens' , 'webservice' ), '' , '' );
}
/**
* Always returns true , does nothing
*
* @ return true
*/
public function get_setting () {
return true ;
}
/**
* Always returns true , does nothing
*
* @ return true
*/
public function get_defaultsetting () {
return true ;
}
/**
* Always returns '' , does not write anything
*
* @ return string Always returns ''
*/
public function write_setting ( $data ) {
// do not write any setting
return '' ;
}
/**
* Builds the XHTML to display the control
*
* @ param string $data Unused
* @ param string $query
* @ return string
*/
public function output_html ( $data , $query = '' ) {
global $CFG , $OUTPUT , $DB , $USER ;
// display strings
$stroperation = get_string ( 'operation' , 'webservice' );
$strtoken = get_string ( 'token' , 'webservice' );
$strservice = get_string ( 'service' , 'webservice' );
$struser = get_string ( 'user' );
$strcontext = get_string ( 'context' , 'webservice' );
2010-01-11 08:23:39 +00:00
$strvaliduntil = get_string ( 'validuntil' , 'webservice' );
2010-01-25 02:43:23 +00:00
$striprestriction = get_string ( 'iprestriction' , 'webservice' );
2010-01-06 09:33:05 +00:00
2010-01-19 10:07:26 +00:00
$return = $OUTPUT -> box_start ( 'generalbox webservicestokenui' );
2010-01-06 09:33:05 +00:00
$table = new html_table ();
2010-07-23 06:17:06 +00:00
$table -> head = array ( $strtoken , $struser , $strservice , $striprestriction , $strvaliduntil , $stroperation );
2012-11-14 10:30:50 +08:00
$table -> colclasses = array ( 'leftalign' , 'leftalign' , 'leftalign' , 'centeralign' , 'centeralign' , 'centeralign' );
$table -> id = 'webservicetokens' ;
$table -> attributes [ 'class' ] = 'admintable generaltable' ;
2010-01-06 09:33:05 +00:00
$table -> data = array ();
$tokenpageurl = " $CFG->wwwroot / $CFG->admin /webservice/tokens.php?sesskey= " . sesskey ();
2010-01-11 08:23:39 +00:00
//TODO: in order to let the administrator delete obsolete token, split this request in multiple request or use LEFT JOIN
2010-01-06 09:33:05 +00:00
//here retrieve token list (including linked users firstname/lastname and linked services name)
2011-10-10 13:50:01 +08:00
$sql = " SELECT t.id, t.token, u.id AS userid, u.firstname, u.lastname, s.name, t.iprestriction, t.validuntil, s.id AS serviceid
2010-01-14 08:37:53 +00:00
FROM { external_tokens } t , { user } u , { external_services } s
WHERE t . creatorid = ? AND t . tokentype = ? AND s . id = t . externalserviceid AND t . userid = u . id " ;
$tokens = $DB -> get_records_sql ( $sql , array ( $USER -> id , EXTERNAL_TOKEN_PERMANENT ));
2010-01-06 09:33:05 +00:00
if ( ! empty ( $tokens )) {
foreach ( $tokens as $token ) {
//TODO: retrieve context
$delete = " <a href= \" " . $tokenpageurl . " &action=delete&tokenid= " . $token -> id . " \" > " ;
$delete .= get_string ( 'delete' ) . " </a> " ;
2010-01-11 08:23:39 +00:00
$validuntil = '' ;
if ( ! empty ( $token -> validuntil )) {
2013-05-03 14:09:34 +08:00
$validuntil = userdate ( $token -> validuntil , get_string ( 'strftimedatetime' , 'langconfig' ));
2010-01-11 08:23:39 +00:00
}
2010-01-06 09:33:05 +00:00
2010-01-25 02:43:23 +00:00
$iprestriction = '' ;
if ( ! empty ( $token -> iprestriction )) {
2010-02-08 16:26:15 +00:00
$iprestriction = $token -> iprestriction ;
2010-01-25 02:43:23 +00:00
}
2010-05-04 13:04:35 +00:00
$userprofilurl = new moodle_url ( '/user/profile.php?id=' . $token -> userid );
2010-02-12 04:14:26 +00:00
$useratag = html_writer :: start_tag ( 'a' , array ( 'href' => $userprofilurl ));
$useratag .= $token -> firstname . " " . $token -> lastname ;
$useratag .= html_writer :: end_tag ( 'a' );
2010-07-23 06:17:06 +00:00
//check user missing capabilities
require_once ( $CFG -> dirroot . '/webservice/lib.php' );
$webservicemanager = new webservice ();
$usermissingcaps = $webservicemanager -> get_missing_capabilities_by_users (
array ( array ( 'id' => $token -> userid )), $token -> serviceid );
2010-07-28 02:27:07 +00:00
if ( ! is_siteadmin ( $token -> userid ) and
2012-09-26 15:20:18 +08:00
array_key_exists ( $token -> userid , $usermissingcaps )) {
2012-02-13 10:43:30 +08:00
$missingcapabilities = implode ( ', ' ,
2010-07-23 06:17:06 +00:00
$usermissingcaps [ $token -> userid ]);
if ( ! empty ( $missingcapabilities )) {
$useratag .= html_writer :: tag ( 'div' ,
get_string ( 'usermissingcaps' , 'webservice' ,
$missingcapabilities )
. ' ' . $OUTPUT -> help_icon ( 'missingcaps' , 'webservice' ),
2010-07-30 07:43:14 +00:00
array ( 'class' => 'missingcaps' ));
2010-07-23 06:17:06 +00:00
}
}
$table -> data [] = array ( $token -> token , $useratag , $token -> name , $iprestriction , $validuntil , $delete );
2010-01-06 09:33:05 +00:00
}
2010-03-20 22:15:54 +00:00
$return .= html_writer :: table ( $table );
2010-01-06 09:33:05 +00:00
} else {
$return .= get_string ( 'notoken' , 'webservice' );
}
$return .= $OUTPUT -> box_end ();
// add a token to the table
$return .= " <a href= \" " . $tokenpageurl . " &action=create \" > " ;
$return .= get_string ( 'add' ) . " </a> " ;
return highlight ( $query , $return );
}
2010-02-02 02:45:32 +00:00
}
2010-06-16 08:36:06 +00:00
2011-03-17 21:34:34 +01:00
2010-06-16 08:36:06 +00:00
/**
* Colour picker
2010-07-03 09:42:30 +00:00
*
2010-06-16 08:36:06 +00:00
* @ copyright 2010 Sam Hemelryk
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_configcolourpicker extends admin_setting {
/**
* Information for previewing the colour
*
* @ var array | null
*/
protected $previewconfig = null ;
2014-04-02 17:20:55 +08:00
/**
* Use default when empty .
*/
protected $usedefaultwhenempty = true ;
2010-06-16 08:36:06 +00:00
/**
*
* @ param string $name
* @ param string $visiblename
* @ param string $description
* @ param string $defaultsetting
* @ param array $previewconfig Array ( 'selector' => '.some .css .selector' , 'style' => 'backgroundColor' );
*/
2014-04-02 17:20:55 +08:00
public function __construct ( $name , $visiblename , $description , $defaultsetting , array $previewconfig = null ,
$usedefaultwhenempty = true ) {
2010-06-16 08:36:06 +00:00
$this -> previewconfig = $previewconfig ;
2014-04-02 17:20:55 +08:00
$this -> usedefaultwhenempty = $usedefaultwhenempty ;
2010-06-16 08:36:06 +00:00
parent :: __construct ( $name , $visiblename , $description , $defaultsetting );
}
/**
* Return the setting
*
* @ return mixed returns config if successful else null
*/
public function get_setting () {
return $this -> config_read ( $this -> name );
}
/**
* Saves the setting
2010-07-03 09:42:30 +00:00
*
2010-06-16 08:36:06 +00:00
* @ param string $data
* @ return bool
*/
public function write_setting ( $data ) {
$data = $this -> validate ( $data );
if ( $data === false ) {
return get_string ( 'validateerror' , 'admin' );
}
return ( $this -> config_write ( $this -> name , $data ) ? '' : get_string ( 'errorsetting' , 'admin' ));
}
/**
* Validates the colour that was entered by the user
*
* @ param string $data
* @ return string | false
*/
protected function validate ( $data ) {
2012-12-04 13:22:24 +08:00
/**
* List of valid HTML colour names
*
* @ var array
*/
$colornames = array (
'aliceblue' , 'antiquewhite' , 'aqua' , 'aquamarine' , 'azure' ,
'beige' , 'bisque' , 'black' , 'blanchedalmond' , 'blue' ,
'blueviolet' , 'brown' , 'burlywood' , 'cadetblue' , 'chartreuse' ,
'chocolate' , 'coral' , 'cornflowerblue' , 'cornsilk' , 'crimson' ,
'cyan' , 'darkblue' , 'darkcyan' , 'darkgoldenrod' , 'darkgray' ,
'darkgrey' , 'darkgreen' , 'darkkhaki' , 'darkmagenta' ,
'darkolivegreen' , 'darkorange' , 'darkorchid' , 'darkred' ,
'darksalmon' , 'darkseagreen' , 'darkslateblue' , 'darkslategray' ,
'darkslategrey' , 'darkturquoise' , 'darkviolet' , 'deeppink' ,
'deepskyblue' , 'dimgray' , 'dimgrey' , 'dodgerblue' , 'firebrick' ,
'floralwhite' , 'forestgreen' , 'fuchsia' , 'gainsboro' ,
'ghostwhite' , 'gold' , 'goldenrod' , 'gray' , 'grey' , 'green' ,
'greenyellow' , 'honeydew' , 'hotpink' , 'indianred' , 'indigo' ,
'ivory' , 'khaki' , 'lavender' , 'lavenderblush' , 'lawngreen' ,
'lemonchiffon' , 'lightblue' , 'lightcoral' , 'lightcyan' ,
'lightgoldenrodyellow' , 'lightgray' , 'lightgrey' , 'lightgreen' ,
'lightpink' , 'lightsalmon' , 'lightseagreen' , 'lightskyblue' ,
'lightslategray' , 'lightslategrey' , 'lightsteelblue' , 'lightyellow' ,
'lime' , 'limegreen' , 'linen' , 'magenta' , 'maroon' ,
'mediumaquamarine' , 'mediumblue' , 'mediumorchid' , 'mediumpurple' ,
'mediumseagreen' , 'mediumslateblue' , 'mediumspringgreen' ,
'mediumturquoise' , 'mediumvioletred' , 'midnightblue' , 'mintcream' ,
'mistyrose' , 'moccasin' , 'navajowhite' , 'navy' , 'oldlace' , 'olive' ,
'olivedrab' , 'orange' , 'orangered' , 'orchid' , 'palegoldenrod' ,
'palegreen' , 'paleturquoise' , 'palevioletred' , 'papayawhip' ,
'peachpuff' , 'peru' , 'pink' , 'plum' , 'powderblue' , 'purple' , 'red' ,
'rosybrown' , 'royalblue' , 'saddlebrown' , 'salmon' , 'sandybrown' ,
'seagreen' , 'seashell' , 'sienna' , 'silver' , 'skyblue' , 'slateblue' ,
'slategray' , 'slategrey' , 'snow' , 'springgreen' , 'steelblue' , 'tan' ,
'teal' , 'thistle' , 'tomato' , 'turquoise' , 'violet' , 'wheat' , 'white' ,
'whitesmoke' , 'yellow' , 'yellowgreen'
);
if ( preg_match ( '/^#?([[:xdigit:]]{3}){1,2}$/' , $data )) {
2010-06-16 08:36:06 +00:00
if ( strpos ( $data , '#' ) !== 0 ) {
$data = '#' . $data ;
}
return $data ;
2012-12-04 13:22:24 +08:00
} else if ( in_array ( strtolower ( $data ), $colornames )) {
return $data ;
} else if ( preg_match ( '/rgb\(\d{0,3}%?\, ?\d{0,3}%?, ?\d{0,3}%?\)/i' , $data )) {
return $data ;
} else if ( preg_match ( '/rgba\(\d{0,3}%?\, ?\d{0,3}%?, ?\d{0,3}%?\, ?\d(\.\d)?\)/i' , $data )) {
return $data ;
} else if ( preg_match ( '/hsl\(\d{0,3}\, ?\d{0,3}%, ?\d{0,3}%\)/i' , $data )) {
return $data ;
} else if ( preg_match ( '/hsla\(\d{0,3}\, ?\d{0,3}%,\d{0,3}%\, ?\d(\.\d)?\)/i' , $data )) {
return $data ;
} else if (( $data == 'transparent' ) || ( $data == 'currentColor' ) || ( $data == 'inherit' )) {
2010-06-16 08:36:06 +00:00
return $data ;
2010-07-02 06:23:19 +00:00
} else if ( empty ( $data )) {
2014-04-02 17:20:55 +08:00
if ( $this -> usedefaultwhenempty ){
return $this -> defaultsetting ;
} else {
return '' ;
}
2010-06-16 08:36:06 +00:00
} else {
return false ;
}
}
/**
* Generates the HTML for the setting
*
* @ global moodle_page $PAGE
* @ global core_renderer $OUTPUT
* @ param string $data
* @ param string $query
*/
public function output_html ( $data , $query = '' ) {
global $PAGE , $OUTPUT ;
$PAGE -> requires -> js_init_call ( 'M.util.init_colour_picker' , array ( $this -> get_id (), $this -> previewconfig ));
$content = html_writer :: start_tag ( 'div' , array ( 'class' => 'form-colourpicker defaultsnext' ));
$content .= html_writer :: tag ( 'div' , $OUTPUT -> pix_icon ( 'i/loading' , get_string ( 'loading' , 'admin' ), 'moodle' , array ( 'class' => 'loadingicon' )), array ( 'class' => 'admin_colourpicker clearfix' ));
2013-01-23 22:23:29 +00:00
$content .= html_writer :: empty_tag ( 'input' , array ( 'type' => 'text' , 'id' => $this -> get_id (), 'name' => $this -> get_full_name (), 'value' => $data , 'size' => '12' ));
2010-06-16 08:36:06 +00:00
if ( ! empty ( $this -> previewconfig )) {
$content .= html_writer :: empty_tag ( 'input' , array ( 'type' => 'button' , 'id' => $this -> get_id () . '_preview' , 'value' => get_string ( 'preview' ), 'class' => 'admin_colourpicker_preview' ));
}
$content .= html_writer :: end_tag ( 'div' );
2014-12-19 14:26:18 +13:00
return format_admin_setting ( $this , $this -> visiblename , $content , $this -> description , true , '' , $this -> get_defaultsetting (), $query );
2010-06-16 08:36:06 +00:00
}
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
}
2011-04-11 11:22:32 +01:00
2013-04-09 20:43:28 +02:00
/**
* Class used for uploading of one file into file storage ,
* the file name is stored in config table .
*
* Please note you need to implement your own '_pluginfile' callback function ,
* this setting only stores the file , it does not deal with file serving .
*
* @ copyright 2013 Petr Skoda { @ link http :// skodak . org }
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_configstoredfile extends admin_setting {
/** @var array file area options - should be one file only */
protected $options ;
/** @var string name of the file area */
protected $filearea ;
/** @var int intemid */
protected $itemid ;
/** @var string used for detection of changes */
protected $oldhashes ;
/**
* Create new stored file setting .
*
* @ param string $name low level setting name
* @ param string $visiblename human readable setting name
* @ param string $description description of setting
* @ param mixed $filearea file area for file storage
* @ param int $itemid itemid for file storage
* @ param array $options file area options
*/
public function __construct ( $name , $visiblename , $description , $filearea , $itemid = 0 , array $options = null ) {
parent :: __construct ( $name , $visiblename , $description , '' );
$this -> filearea = $filearea ;
$this -> itemid = $itemid ;
$this -> options = ( array ) $options ;
}
/**
* Applies defaults and returns all options .
* @ return array
*/
protected function get_options () {
global $CFG ;
require_once ( " $CFG->libdir /filelib.php " );
require_once ( " $CFG->dirroot /repository/lib.php " );
$defaults = array (
'mainfile' => '' , 'subdirs' => 0 , 'maxbytes' => - 1 , 'maxfiles' => 1 ,
'accepted_types' => '*' , 'return_types' => FILE_INTERNAL , 'areamaxbytes' => FILE_AREA_MAX_BYTES_UNLIMITED ,
'context' => context_system :: instance ());
foreach ( $this -> options as $k => $v ) {
$defaults [ $k ] = $v ;
}
return $defaults ;
}
public function get_setting () {
return $this -> config_read ( $this -> name );
}
public function write_setting ( $data ) {
global $USER ;
// Let's not deal with validation here, this is for admins only.
$current = $this -> get_setting ();
2014-04-26 10:37:37 +08:00
if ( empty ( $data ) && $current === null ) {
// This will be the case when applying default settings (installation).
return ( $this -> config_write ( $this -> name , '' ) ? '' : get_string ( 'errorsetting' , 'admin' ));
} else if ( ! is_number ( $data )) {
2013-04-09 20:43:28 +02:00
// Draft item id is expected here!
return get_string ( 'errorsetting' , 'admin' );
}
$options = $this -> get_options ();
$fs = get_file_storage ();
$component = is_null ( $this -> plugin ) ? 'core' : $this -> plugin ;
$this -> oldhashes = null ;
if ( $current ) {
$hash = sha1 ( '/' . $options [ 'context' ] -> id . '/' . $component . '/' . $this -> filearea . '/' . $this -> itemid . $current );
if ( $file = $fs -> get_file_by_hash ( $hash )) {
$this -> oldhashes = $file -> get_contenthash () . $file -> get_pathnamehash ();
}
unset ( $file );
}
if ( $fs -> file_exists ( $options [ 'context' ] -> id , $component , $this -> filearea , $this -> itemid , '/' , '.' )) {
// Make sure the settings form was not open for more than 4 days and draft areas deleted in the meantime.
2014-04-23 12:33:56 +08:00
// But we can safely ignore that if the destination area is empty, so that the user is not prompt
// with an error because the draft area does not exist, as he did not use it.
2013-04-09 20:43:28 +02:00
$usercontext = context_user :: instance ( $USER -> id );
2014-04-23 12:33:56 +08:00
if ( ! $fs -> file_exists ( $usercontext -> id , 'user' , 'draft' , $data , '/' , '.' ) && $current !== '' ) {
2013-04-09 20:43:28 +02:00
return get_string ( 'errorsetting' , 'admin' );
}
}
file_save_draft_area_files ( $data , $options [ 'context' ] -> id , $component , $this -> filearea , $this -> itemid , $options );
$files = $fs -> get_area_files ( $options [ 'context' ] -> id , $component , $this -> filearea , $this -> itemid , 'sortorder,filepath,filename' , false );
$filepath = '' ;
if ( $files ) {
/** @var stored_file $file */
$file = reset ( $files );
$filepath = $file -> get_filepath () . $file -> get_filename ();
}
return ( $this -> config_write ( $this -> name , $filepath ) ? '' : get_string ( 'errorsetting' , 'admin' ));
}
public function post_write_settings ( $original ) {
$options = $this -> get_options ();
$fs = get_file_storage ();
$component = is_null ( $this -> plugin ) ? 'core' : $this -> plugin ;
$current = $this -> get_setting ();
$newhashes = null ;
if ( $current ) {
$hash = sha1 ( '/' . $options [ 'context' ] -> id . '/' . $component . '/' . $this -> filearea . '/' . $this -> itemid . $current );
if ( $file = $fs -> get_file_by_hash ( $hash )) {
$newhashes = $file -> get_contenthash () . $file -> get_pathnamehash ();
}
unset ( $file );
}
if ( $this -> oldhashes === $newhashes ) {
$this -> oldhashes = null ;
return false ;
}
$this -> oldhashes = null ;
$callbackfunction = $this -> updatedcallback ;
if ( ! empty ( $callbackfunction ) and function_exists ( $callbackfunction )) {
$callbackfunction ( $this -> get_full_name ());
}
return true ;
}
public function output_html ( $data , $query = '' ) {
global $PAGE , $CFG ;
$options = $this -> get_options ();
$id = $this -> get_id ();
$elname = $this -> get_full_name ();
$draftitemid = file_get_submitted_draft_itemid ( $elname );
$component = is_null ( $this -> plugin ) ? 'core' : $this -> plugin ;
file_prepare_draft_area ( $draftitemid , $options [ 'context' ] -> id , $component , $this -> filearea , $this -> itemid , $options );
// Filemanager form element implementation is far from optimal, we need to rework this if we ever fix it...
require_once ( " $CFG->dirroot /lib/form/filemanager.php " );
$fmoptions = new stdClass ();
$fmoptions -> mainfile = $options [ 'mainfile' ];
$fmoptions -> maxbytes = $options [ 'maxbytes' ];
$fmoptions -> maxfiles = $options [ 'maxfiles' ];
$fmoptions -> client_id = uniqid ();
$fmoptions -> itemid = $draftitemid ;
$fmoptions -> subdirs = $options [ 'subdirs' ];
$fmoptions -> target = $id ;
$fmoptions -> accepted_types = $options [ 'accepted_types' ];
$fmoptions -> return_types = $options [ 'return_types' ];
$fmoptions -> context = $options [ 'context' ];
$fmoptions -> areamaxbytes = $options [ 'areamaxbytes' ];
$fm = new form_filemanager ( $fmoptions );
$output = $PAGE -> get_renderer ( 'core' , 'files' );
$html = $output -> render ( $fm );
$html .= '<input value="' . $draftitemid . '" name="' . $elname . '" type="hidden" />' ;
$html .= '<input value="" id="' . $id . '" type="hidden" />' ;
return format_admin_setting ( $this , $this -> visiblename ,
'<div class="form-filemanager">' . $html . '</div>' , $this -> description , true , '' , '' , $query );
}
}
2011-05-31 14:25:52 +08:00
/**
* Administration interface for user specified regular expressions for device detection .
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_devicedetectregex extends admin_setting {
/**
2011-05-31 14:28:03 +08:00
* Calls parent :: __construct with specific args
*
* @ param string $name
* @ param string $visiblename
* @ param string $description
* @ param mixed $defaultsetting
*/
2011-05-31 14:25:52 +08:00
public function __construct ( $name , $visiblename , $description , $defaultsetting = '' ) {
global $CFG ;
parent :: __construct ( $name , $visiblename , $description , $defaultsetting );
}
/**
* Return the current setting ( s )
*
* @ return array Current settings array
*/
public function get_setting () {
global $CFG ;
$config = $this -> config_read ( $this -> name );
if ( is_null ( $config )) {
return null ;
}
return $this -> prepare_form_data ( $config );
}
/**
* Save selected settings
*
* @ param array $data Array of settings to save
* @ return bool
*/
public function write_setting ( $data ) {
if ( empty ( $data )) {
$data = array ();
}
if ( $this -> config_write ( $this -> name , $this -> process_form_data ( $data ))) {
return '' ; // success
} else {
return get_string ( 'errorsetting' , 'admin' ) . $this -> visiblename . html_writer :: empty_tag ( 'br' );
}
}
/**
* Return XHTML field ( s ) for regexes
*
* @ param array $data Array of options to set in HTML
* @ return string XHTML string for the fields and wrapping div ( s )
*/
public function output_html ( $data , $query = '' ) {
global $OUTPUT ;
2010-06-16 08:36:06 +00:00
2014-02-14 11:06:19 +00:00
$out = html_writer :: start_tag ( 'table' , array ( 'class' => 'generaltable' ));
2011-05-31 14:25:52 +08:00
$out .= html_writer :: start_tag ( 'thead' );
$out .= html_writer :: start_tag ( 'tr' );
$out .= html_writer :: tag ( 'th' , get_string ( 'devicedetectregexexpression' , 'admin' ));
$out .= html_writer :: tag ( 'th' , get_string ( 'devicedetectregexvalue' , 'admin' ));
$out .= html_writer :: end_tag ( 'tr' );
$out .= html_writer :: end_tag ( 'thead' );
$out .= html_writer :: start_tag ( 'tbody' );
if ( empty ( $data )) {
$looplimit = 1 ;
} else {
$looplimit = ( count ( $data ) / 2 ) + 1 ;
}
for ( $i = 0 ; $i < $looplimit ; $i ++ ) {
$out .= html_writer :: start_tag ( 'tr' );
$expressionname = 'expression' . $i ;
if ( ! empty ( $data [ $expressionname ])){
$expression = $data [ $expressionname ];
} else {
$expression = '' ;
}
$out .= html_writer :: tag ( 'td' ,
html_writer :: empty_tag ( 'input' ,
array (
'type' => 'text' ,
'class' => 'form-text' ,
'name' => $this -> get_full_name () . '[expression' . $i . ']' ,
'value' => $expression ,
)
), array ( 'class' => 'c' . $i )
);
$valuename = 'value' . $i ;
if ( ! empty ( $data [ $valuename ])){
$value = $data [ $valuename ];
} else {
$value = '' ;
}
$out .= html_writer :: tag ( 'td' ,
html_writer :: empty_tag ( 'input' ,
array (
'type' => 'text' ,
'class' => 'form-text' ,
'name' => $this -> get_full_name () . '[value' . $i . ']' ,
'value' => $value ,
)
), array ( 'class' => 'c' . $i )
);
$out .= html_writer :: end_tag ( 'tr' );
}
$out .= html_writer :: end_tag ( 'tbody' );
$out .= html_writer :: end_tag ( 'table' );
return format_admin_setting ( $this , $this -> visiblename , $out , $this -> description , false , '' , null , $query );
}
/**
* Converts the string of regexes
*
* @ see self :: process_form_data ()
* @ param $regexes string of regexes
* @ return array of form fields and their values
*/
protected function prepare_form_data ( $regexes ) {
$regexes = json_decode ( $regexes );
$form = array ();
$i = 0 ;
foreach ( $regexes as $value => $regex ) {
$expressionname = 'expression' . $i ;
$valuename = 'value' . $i ;
$form [ $expressionname ] = $regex ;
$form [ $valuename ] = $value ;
$i ++ ;
}
return $form ;
}
/**
* Converts the data from admin settings form into a string of regexes
*
* @ see self :: prepare_form_data ()
* @ param array $data array of admin form fields and values
* @ return false | string of regexes
*/
protected function process_form_data ( array $form ) {
$count = count ( $form ); // number of form field values
if ( $count % 2 ) {
// we must get five fields per expression
return false ;
}
$regexes = array ();
for ( $i = 0 ; $i < $count / 2 ; $i ++ ) {
$expressionname = " expression " . $i ;
$valuename = " value " . $i ;
$expression = trim ( $form [ 'expression' . $i ]);
$value = trim ( $form [ 'value' . $i ]);
if ( empty ( $expression )){
continue ;
}
$regexes [ $value ] = $expression ;
}
$regexes = json_encode ( $regexes );
return $regexes ;
}
MDL-21782 reworked enrolment framework, the core infrastructure is in place, the basic plugins are all implemented; see the tracker issue for list of unfinished bits, expect more changes and improvements during the next week
AMOS START
MOV [sendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage,enrol_self]
MOV [configsendcoursewelcomemessage,core_admin],[sendcoursewelcomemessage_desc,enrol_self]
MOV [enrolstartdate,core],[enrolstartdate,enrol_self]
MOV [enrolenddate,core],[enrolenddate,enrol_self]
CPY [welcometocourse,core],[welcometocourse,enrol_self]
CPY [welcometocoursetext,core],[welcometocoursetext,enrol_self]
MOV [notenrollable,core],[notenrollable,core_enrol]
MOV [enrolenddaterror,core],[enrolenddaterror,enrol_self]
MOV [enrolmentkeyhint,core],[passwordinvalidhint,enrol_self]
MOV [coursemanager,core_admin],[coursecontact,core_admin]
MOV [configcoursemanager,core_admin],[coursecontact_desc,core_admin]
MOV [enrolledincourserole,core],[enrolledincourserole,enrol_manual]
MOV [enrolme,core],[enrolme,core_enrol]
MOV [unenrol,core],[unenrol,core_enrol]
MOV [unenrolme,core],[unenrolme,core_enrol]
MOV [enrolmentnew,core],[enrolmentnew,core_enrol]
MOV [enrolmentnewuser,core],[enrolmentnewuser,core_enrol]
MOV [enrolments,core],[enrolments,core_enrol]
MOV [enrolperiod,core],[enrolperiod,core_enrol]
MOV [unenrolroleusers,core],[unenrolroleusers,core_enrol]
AMOS END
2010-06-21 15:30:49 +00:00
}
2011-04-17 16:06:19 +02:00
2011-04-11 11:22:32 +01:00
/**
* Multiselect for current modules
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_configmultiselect_modules extends admin_setting_configmultiselect {
2011-11-22 16:16:23 +00:00
private $excludesystem ;
2011-04-17 16:06:19 +02:00
/**
* Calls parent :: __construct - note array $choices is not required
*
* @ param string $name setting name
* @ param string $visiblename localised setting name
* @ param string $description setting description
2011-07-22 09:06:03 +01:00
* @ param array $defaultsetting a plain array of default module ids
2011-11-22 16:16:23 +00:00
* @ param bool $excludesystem If true , excludes modules with 'system' archetype
2011-04-17 16:06:19 +02:00
*/
2011-11-22 16:16:23 +00:00
public function __construct ( $name , $visiblename , $description , $defaultsetting = array (),
$excludesystem = true ) {
2011-07-22 09:06:03 +01:00
parent :: __construct ( $name , $visiblename , $description , $defaultsetting , null );
2011-11-22 16:16:23 +00:00
$this -> excludesystem = $excludesystem ;
2011-04-11 11:22:32 +01:00
}
/**
* Loads an array of current module choices
*
* @ return bool always return true
*/
public function load_choices () {
if ( is_array ( $this -> choices )) {
return true ;
}
$this -> choices = array ();
global $CFG , $DB ;
$records = $DB -> get_records ( 'modules' , array ( 'visible' => 1 ), 'name' );
foreach ( $records as $record ) {
2011-11-22 16:16:23 +00:00
// Exclude modules if the code doesn't exist
2011-04-11 11:22:32 +01:00
if ( file_exists ( " $CFG->dirroot /mod/ $record->name /lib.php " )) {
2011-11-22 16:16:23 +00:00
// Also exclude system modules (if specified)
if ( ! ( $this -> excludesystem &&
plugin_supports ( 'mod' , $record -> name , FEATURE_MOD_ARCHETYPE ) ===
MOD_ARCHETYPE_SYSTEM )) {
$this -> choices [ $record -> id ] = $record -> name ;
}
2011-04-11 11:22:32 +01:00
}
}
return true ;
}
}
2013-11-05 23:30:28 +08:00
/**
* Admin setting to show if a php extension is enabled or not .
*
* @ copyright 2013 Damyon Wiese
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_php_extension_enabled extends admin_setting {
/** @var string The name of the extension to check for */
private $extension ;
/**
* Calls parent :: __construct with specific arguments
*/
public function __construct ( $name , $visiblename , $description , $extension ) {
$this -> extension = $extension ;
$this -> nosave = true ;
parent :: __construct ( $name , $visiblename , $description , '' );
}
/**
* Always returns true , does nothing
*
* @ return true
*/
public function get_setting () {
return true ;
}
/**
* Always returns true , does nothing
*
* @ return true
*/
public function get_defaultsetting () {
return true ;
}
/**
* Always returns '' , does not write anything
*
* @ return string Always returns ''
*/
public function write_setting ( $data ) {
// Do not write any setting.
return '' ;
}
/**
* Outputs the html for this setting .
* @ return string Returns an XHTML string
*/
public function output_html ( $data , $query = '' ) {
global $OUTPUT ;
$o = '' ;
if ( ! extension_loaded ( $this -> extension )) {
$warning = $OUTPUT -> pix_icon ( 'i/warning' , '' , '' , array ( 'role' => 'presentation' )) . ' ' . $this -> description ;
$o .= format_admin_setting ( $this , $this -> visiblename , $warning );
}
return $o ;
}
}
2015-04-12 12:38:06 +12:00
/**
* Server timezone setting .
*
* @ copyright 2015 Totara Learning Solutions Ltd { @ link http :// www . totaralms . com / }
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
* @ author Petr Skoda < petr . skoda @ totaralms . com >
*/
class admin_setting_servertimezone extends admin_setting_configselect {
/**
* Constructor .
*/
public function __construct () {
$default = core_date :: get_default_php_timezone ();
if ( $default === 'UTC' ) {
// Nobody really wants UTC, so instead default selection to the country that is confused by the UTC the most.
$default = 'Europe/London' ;
}
parent :: __construct ( 'timezone' ,
new lang_string ( 'timezone' , 'core_admin' ),
new lang_string ( 'configtimezone' , 'core_admin' ), $default , null );
}
/**
* Lazy load timezone options .
* @ return bool true if loaded , false if error
*/
public function load_choices () {
global $CFG ;
if ( is_array ( $this -> choices )) {
return true ;
}
$current = isset ( $CFG -> timezone ) ? $CFG -> timezone : null ;
$this -> choices = core_date :: get_list_of_timezones ( $current , false );
if ( $current == 99 ) {
// Do not show 99 unless it is current value, we want to get rid of it over time.
$this -> choices [ '99' ] = new lang_string ( 'timezonephpdefault' , 'core_admin' ,
core_date :: get_default_php_timezone ());
}
return true ;
}
}
/**
* Forced user timezone setting .
*
* @ copyright 2015 Totara Learning Solutions Ltd { @ link http :// www . totaralms . com / }
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
* @ author Petr Skoda < petr . skoda @ totaralms . com >
*/
class admin_setting_forcetimezone extends admin_setting_configselect {
/**
* Constructor .
*/
public function __construct () {
parent :: __construct ( 'forcetimezone' ,
new lang_string ( 'forcetimezone' , 'core_admin' ),
new lang_string ( 'helpforcetimezone' , 'core_admin' ), '99' , null );
}
/**
* Lazy load timezone options .
* @ return bool true if loaded , false if error
*/
public function load_choices () {
global $CFG ;
if ( is_array ( $this -> choices )) {
return true ;
}
$current = isset ( $CFG -> forcetimezone ) ? $CFG -> forcetimezone : null ;
$this -> choices = core_date :: get_list_of_timezones ( $current , true );
$this -> choices [ '99' ] = new lang_string ( 'timezonenotforced' , 'core_admin' );
return true ;
}
}