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' );
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
*
* @ 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 ;
2010-04-04 19:58:03 +00:00
// recursively uninstall all module subplugins first
if ( $type === 'mod' ) {
2010-09-17 07:43:26 +00:00
if ( file_exists ( " $CFG->dirroot /mod/ $name /db/subplugins.php " )) {
2010-04-04 19:58:03 +00:00
$subplugins = array ();
2010-09-17 07:43:26 +00:00
include ( " $CFG->dirroot /mod/ $name /db/subplugins.php " );
2010-04-04 19:58:03 +00:00
foreach ( $subplugins as $subplugintype => $dir ) {
$instances = get_plugin_list ( $subplugintype );
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 );
$plugindirectory = get_plugin_directory ( $type , $name );
$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 )) {
2009-09-01 09:26:43 +00:00
if ( ! $uninstallfunction ()) {
2009-08-31 15:23:02 +00:00
echo $OUTPUT -> notification ( 'Encountered a problem running uninstall function for ' . $pluginname );
}
}
}
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 ( $type === 'mod' ) {
2011-03-17 21:34:34 +01:00
// perform cleanup tasks specific for activity modules
2009-08-31 15:23:02 +00:00
if ( ! $module = $DB -> get_record ( 'modules' , array ( 'name' => $name ))) {
print_error ( 'moduledoesnotexist' , 'error' );
}
// delete all the relevant instances from all course sections
if ( $coursemods = $DB -> get_records ( 'course_modules' , array ( 'module' => $module -> id ))) {
foreach ( $coursemods as $coursemod ) {
if ( ! delete_mod_from_section ( $coursemod -> id , $coursemod -> section )) {
echo $OUTPUT -> notification ( " Could not delete the $strpluginname with id = $coursemod->id from section $coursemod->section " );
}
}
}
// clear course.modinfo for courses that used this module
$sql = " UPDATE { course}
SET modinfo = ''
WHERE id IN ( SELECT DISTINCT course
FROM { course_modules }
WHERE module = ? ) " ;
$DB -> execute ( $sql , array ( $module -> id ));
// delete all the course module records
2009-09-01 09:26:43 +00:00
$DB -> delete_records ( 'course_modules' , array ( 'module' => $module -> id ));
2009-08-31 15:23:02 +00:00
// delete module contexts
if ( $coursemods ) {
foreach ( $coursemods as $coursemod ) {
if ( ! delete_context ( CONTEXT_MODULE , $coursemod -> id )) {
echo $OUTPUT -> notification ( " Could not delete the context for $strpluginname with id = $coursemod->id " );
}
}
}
// delete the module entry itself
2009-09-01 09:26:43 +00:00
$DB -> delete_records ( 'modules' , array ( 'name' => $module -> name ));
2009-08-31 15:23:02 +00:00
// cleanup the gradebook
require_once ( $CFG -> libdir . '/gradelib.php' );
grade_uninstalled_module ( $module -> name );
// Perform any custom uninstall tasks
if ( file_exists ( $CFG -> dirroot . '/mod/' . $module -> name . '/lib.php' )) {
require_once ( $CFG -> dirroot . '/mod/' . $module -> name . '/lib.php' );
$uninstallfunction = $module -> name . '_uninstall' ;
if ( function_exists ( $uninstallfunction )) {
debugging ( " { $uninstallfunction } () has been deprecated. Use the plugin's db/uninstall.php instead " , DEBUG_DEVELOPER );
2009-09-01 09:26:43 +00:00
if ( ! $uninstallfunction ()) {
2009-08-31 15:23:02 +00:00
echo $OUTPUT -> notification ( 'Encountered a problem running uninstall function for ' . $module -> 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 ( $type === 'enrol' ) {
// NOTE: this is a bit brute force way - it will not trigger events and hooks properly
// nuke all role assignments
role_unassign_all ( array ( 'component' => $component ));
// purge participants
$DB -> delete_records_select ( 'user_enrolments' , " enrolid IN (SELECT id FROM { enrol} WHERE enrol = ?) " , array ( $name ));
// purge enrol instances
$DB -> delete_records ( 'enrol' , array ( 'enrol' => $name ));
// tweak enrol settings
if ( ! empty ( $CFG -> enrol_plugins_enabled )) {
$enabledenrols = explode ( ',' , $CFG -> enrol_plugins_enabled );
$enabledenrols = array_unique ( $enabledenrols );
$enabledenrols = array_flip ( $enabledenrols );
unset ( $enabledenrols [ $name ]);
$enabledenrols = array_flip ( $enabledenrols );
if ( is_array ( $enabledenrols )) {
set_config ( 'enrol_plugins_enabled' , implode ( ',' , $enabledenrols ));
}
}
2009-08-31 15:23:02 +00:00
}
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
// 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
// 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
2009-09-01 09:26:43 +00:00
unset_all_config_for_plugin ( $pluginname );
2009-08-31 15:23:02 +00:00
// delete the plugin tables
$xmldbfilepath = $plugindirectory . '/db/install.xml' ;
drop_plugin_tables ( $pluginname , $xmldbfilepath , false );
// 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 );
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 ;
list ( $type , $name ) = normalize_component ( $component );
// 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' ) {
return $DB -> get_field ( 'modules' , 'version' , array ( 'name' => $name ));
} else {
$mods = 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 {
$module = new stdclass ();
2010-09-17 07:46:03 +00:00
include ( $mods [ $name ] . '/version.php' );
2010-08-23 14:24:38 +00:00
return $module -> version ;
}
}
}
// block
if ( $type === 'block' ) {
if ( $source === 'installed' ) {
return $DB -> get_field ( 'block' , 'version' , array ( 'name' => $name ));
} else {
$blocks = get_plugin_list ( 'block' );
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 {
$plugins = get_plugin_list ( $type );
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 ) {
$table_names [] = strtolower ( $table -> name );
}
}
}
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' ;
2009-09-09 07:55:03 +00:00
/// Then, all the ones defined by get_plugin_types()
2009-06-19 14:25:56 +00:00
$plugintypes = get_plugin_types ();
foreach ( $plugintypes as $plugintype => $pluginbasedir ) {
if ( $plugins = get_plugin_list ( $plugintype )) {
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 ;
if ( ! has_capability ( 'moodle/site:config' , get_context_instance ( CONTEXT_SYSTEM ))) {
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' );
}
$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
/// 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 .
*
* @ 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 .
*/
2009-01-11 16:42:19 +00:00
public function add ( $destinationname , $something );
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
2011-02-14 16:39:08 +01:00
/** @var mixed An array of part_of_admin_tree objects that are this object's children */
2009-01-11 16:42:19 +00:00
public $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 ;
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 ) {
2011-02-14 16:39:08 +01:00
if ( is_array ( $this -> category_cache ) and ! isset ( $this -> category_cache [ $this -> name ])) {
// 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
if ( ! $findpath and is_array ( $this -> category_cache ) and isset ( $this -> category_cache [ $name ])) {
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 ();
foreach ( $this -> 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
if ( is_array ( $this -> category_cache )) {
while ( $this -> category_cache ) {
// delete the cache, but keep the original array address
array_pop ( $this -> category_cache );
}
}
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 .
*
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 .
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
*/
2009-01-11 16:42:19 +00:00
public function add ( $parentname , $something ) {
$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
}
2007-12-19 17:35:20 +00:00
$parent -> children [] = $something ;
2011-02-14 16:39:08 +01:00
if ( is_array ( $this -> category_cache ) and ( $something instanceof admin_category )) {
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 ;
}
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
$textlib = textlib_get_instance ();
$found = false ;
if ( strpos ( strtolower ( $this -> name ), $query ) !== false ) {
$found = true ;
} else if ( strpos ( $textlib -> 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 ;
2007-01-29 21:29:27 +00:00
$context = empty ( $this -> context ) ? get_context_instance ( CONTEXT_SYSTEM ) : $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 );
}
$textlib = textlib_get_instance ();
$found = false ;
if ( strpos ( strtolower ( $this -> name ), $query ) !== false ) {
$found = true ;
} else if ( strpos ( $textlib -> 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 ;
2007-01-29 21:29:27 +00:00
$context = empty ( $this -> context ) ? get_context_instance ( CONTEXT_SYSTEM ) : $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 ;
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
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 );
}
2009-01-13 19:02:00 +00:00
// log change
2010-09-21 08:07:44 +00:00
$log = new stdClass ();
2009-06-24 09:17:56 +00:00
$log -> userid = during_initial_install () ? 0 : $USER -> id ; // 0 as user id during install
2009-01-13 19:02:00 +00:00
$log -> timemodified = time ();
$log -> plugin = $this -> plugin ;
$log -> name = $name ;
$log -> value = $value ;
$log -> oldvalue = $oldvalue ;
$DB -> insert_record ( 'config_log' , $log );
return true ; // BC only
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 ;
}
/**
* 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 ;
}
$textlib = textlib_get_instance ();
if ( strpos ( $textlib -> strtolower ( $this -> visiblename ), $query ) !== false ) {
return true ;
}
if ( strpos ( $textlib -> strtolower ( $this -> description ), $query ) !== false ) {
return true ;
}
2008-01-01 15:51:54 +00:00
$current = $this -> get_setting ();
if ( ! is_null ( $current )) {
if ( is_string ( $current )) {
if ( strpos ( $textlib -> strtolower ( $current ), $query ) !== false ) {
return true ;
}
}
}
$default = $this -> get_defaultsetting ();
if ( ! is_null ( $default )) {
if ( is_string ( $default )) {
if ( strpos ( $textlib -> strtolower ( $default ), $query ) !== false ) {
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
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
}
}
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 ,
2009-09-09 07:55:03 +00:00
'<div class="form-textarea" ><textarea rows="' . $this -> rows . '" cols="' . $this -> cols . '" id="' . $this -> get_id () . '" name="' . $this -> get_full_name () . '">' . s ( $data ) . '</textarea></div>' ,
$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 );
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 ,
2009-09-09 07:55:03 +00:00
'<div class="form-textarea"><textarea rows="' . $this -> rows . '" cols="' . $this -> cols . '" id="' . $this -> get_id () . '" name="' . $this -> get_full_name () . '">' . s ( $data ) . '</textarea></div>' ,
$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
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
}
}
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 = '' ) {
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 = '' ;
}
return format_admin_setting ( $this , $this -> visiblename ,
2009-09-09 07:55:03 +00:00
'<div class="form-file defaultsnext"><input type="text" size="' . $this -> size . '" id="' . $this -> get_id () . '" name="' . $this -> get_full_name () . '" value="' . s ( $data ) . '" />' . $executable . '</div>' ,
$this -> description , true , '' , $default , $query );
2007-04-26 07:08:12 +00:00
}
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 = '' ) {
2008-01-01 22:25:11 +00:00
$default = $this -> get_defaultsetting ();
if ( $data ) {
if ( file_exists ( $data ) and is_executable ( $data )) {
$executable = '<span class="pathok">✔</span>' ;
} else {
$executable = '<span class="patherror">✘</span>' ;
}
} else {
$executable = '' ;
}
return format_admin_setting ( $this , $this -> visiblename ,
2009-09-09 07:55:03 +00:00
'<div class="form-file defaultsnext"><input type="text" size="' . $this -> size . '" id="' . $this -> get_id () . '" name="' . $this -> get_full_name () . '" value="' . s ( $data ) . '" />' . $executable . '</div>' ,
$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 = '' ) {
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 = '' ;
}
2007-07-27 13:38:06 +00:00
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-file defaultsnext"><input type="text" size="' . $this -> size . '" id="' . $this -> get_id () . '" name="' . $this -> get_full_name () . '" value="' . s ( $data ) . '" />' . $executable . '</div>' ,
$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 ;
}
$textlib = textlib_get_instance ();
foreach ( $this -> choices as $desc ) {
if ( strpos ( $textlib -> strtolower ( $desc ), $query ) !== false ) {
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 ;
}
$textlib = textlib_get_instance ();
foreach ( $this -> choices as $key => $value ) {
if ( strpos ( $textlib -> strtolower ( $key ), $query ) !== false ) {
return true ;
}
if ( strpos ( $textlib -> strtolower ( $value ), $query ) !== false ) {
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 ;
}
$textlib = textlib_get_instance ();
foreach ( $this -> choices as $desc ) {
if ( strpos ( $textlib -> strtolower ( $desc ), $query ) !== false ) {
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
2008-01-01 15:51:54 +00:00
$return = '<div class="form-time defaultsnext">' .
2009-09-09 07:55:03 +00:00
'<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 ++ ) {
$return .= '<option value="' . $i . '"' . ( $i == $data [ 'h' ] ? ' selected="selected"' : '' ) . '>' . $i . '</option>' ;
2006-09-02 13:14:57 +00:00
}
2007-12-19 17:35:20 +00:00
$return .= '</select>:<select id="' . $this -> get_id () . 'm" name="' . $this -> get_full_name () . '[m]">' ;
for ( $i = 0 ; $i < 60 ; $i += 5 ) {
$return .= '<option value="' . $i . '"' . ( $i == $data [ 'm' ] ? ' selected="selected"' : '' ) . '>' . $i . '</option>' ;
}
2008-01-01 15:51:54 +00:00
$return .= '</select></div>' ;
return format_admin_setting ( $this , $this -> visiblename , $return , $this -> description , false , '' , $defaultinfo , $query );
2006-09-02 13:14:57 +00:00
}
}
2011-03-17 21:34:34 +01:00
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
*/
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 ;
}
2009-01-08 07:07:00 +00:00
$users = get_users_by_capability ( get_context_instance ( CONTEXT_SYSTEM ),
2009-09-09 07:55:03 +00:00
$this -> capability , 'u.id,u.username,u.firstname,u.lastname' , 'u.lastname,u.firstname' );
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 ;
unset ( $SESSION -> cal_courses_shown );
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 () {
2009-03-26 08:56:08 +00:00
$site = get_site ();
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 ) {
2009-03-26 08:56:08 +00:00
global $DB , $SITE ;
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 ();
2009-03-26 08:56:08 +00:00
// update $SITE
$SITE -> { $this -> name } = $data ;
2008-05-15 21:40:00 +00:00
return ( $DB -> update_record ( 'course' , $record ) ? '' : get_string ( 'errorsetting' , 'admin' ));
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 ;
2009-09-15 07:19:03 +00:00
if ( $data [ 'bloglevel' ] == 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' );
$defaults = array ( FRONTPAGECOURSELIST );
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 () {
2008-06-02 21:47:31 +00:00
global $DB ;
2007-12-19 17:35:20 +00:00
if ( is_array ( $this -> choices )) {
return true ;
}
$this -> choices = array ( FRONTPAGENEWS => get_string ( 'frontpagenews' ),
2009-09-09 07:55:03 +00:00
FRONTPAGECOURSELIST => get_string ( 'frontpagecourselist' ),
FRONTPAGECATEGORYNAMES => get_string ( 'frontpagecategorynames' ),
FRONTPAGECATEGORYCOMBO => get_string ( 'frontpagecategorycombo' ),
'none' => get_string ( 'none' ));
2008-06-02 21:47:31 +00:00
if ( $this -> name == 'frontpage' and $DB -> count_records ( 'course' ) > FRONTPAGECOURSELIMIT ) {
2007-12-19 17:35:20 +00:00
unset ( $this -> choices [ FRONTPAGECOURSELIST ]);
}
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 () {
2009-03-26 08:56:08 +00:00
$site = get_site ();
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 ) {
2009-03-26 08:56:08 +00:00
global $DB , $SITE ;
2010-09-21 08:07:44 +00:00
$record = new stdClass ();
2007-12-19 17:35:20 +00:00
$record -> id = SITEID ;
$record -> { $this -> name } = ( $data == '1' ? 1 : 0 );
$record -> timemodified = time ();
2009-03-26 08:56:08 +00:00
// update $SITE
$SITE -> { $this -> name } = $data ;
2008-05-15 21:40:00 +00:00
return ( $DB -> update_record ( 'course' , $record ) ? '' : get_string ( 'errorsetting' , 'admin' ));
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 () {
2009-03-26 08:56:08 +00:00
$site = get_site ();
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 ) {
2008-06-09 16:53:30 +00:00
$cleaned = clean_param ( $data , PARAM_MULTILANG );
2007-12-30 17:59:17 +00:00
if ( $cleaned === '' ) {
return get_string ( 'required' );
}
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 ) {
2009-03-26 08:56:08 +00:00
global $DB , $SITE ;
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 ();
2007-12-19 17:35:20 +00:00
$record -> id = SITEID ;
2008-05-15 21:40:00 +00:00
$record -> { $this -> name } = $data ;
2007-12-19 17:35:20 +00:00
$record -> timemodified = time ();
2009-03-26 08:56:08 +00:00
// update $SITE
$SITE -> { $this -> name } = $data ;
2008-05-15 21:40:00 +00:00
return ( $DB -> update_record ( 'course' , $record ) ? '' : get_string ( 'dbupdatefailed' , 'error' ));
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 () {
2009-03-26 08:56:08 +00:00
$site = get_site ();
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 ) {
2009-03-26 08:56:08 +00:00
global $DB , $SITE ;
2010-09-21 08:07:44 +00:00
$record = new stdClass ();
2007-12-19 17:35:20 +00:00
$record -> id = SITEID ;
2008-05-15 21:40:00 +00:00
$record -> { $this -> name } = $data ;
2007-10-03 10:35:34 +00:00
$record -> timemodified = time ();
2009-03-26 08:56:08 +00:00
$SITE -> { $this -> name } = $data ;
2009-03-11 02:42:28 +00:00
return ( $DB -> update_record ( 'course' , $record ) ? '' : get_string ( 'errorsetting' , 'admin' ));
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
2007-12-19 17:35:20 +00:00
$CFG -> adminusehtmleditor = can_use_html_editor ();
2008-06-11 08:37:26 +00:00
$return = '<div class="form-htmlarea">' . print_textarea ( $CFG -> adminusehtmleditor , 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
2010-10-23 18:40:11 +00:00
$out = html_writer :: start_tag ( 'table' , array ( 'border' => 1 , 'class' => 'generaltable' ));
$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 );
$emoticon -> imagecomponent = clean_param ( trim ( $form [ 'imagecomponent' . $i ]), PARAM_SAFEDIR );
$emoticon -> altidentifier = clean_param ( trim ( $form [ 'altidentifier' . $i ]), PARAM_STRINGID );
$emoticon -> altcomponent = clean_param ( trim ( $form [ 'altcomponent' . $i ]), PARAM_SAFEDIR );
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
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
}
}
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' );
$this -> choices = question_engine :: get_archetypal_behaviours ();
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 ()) {
2007-12-19 17:35:20 +00:00
$this -> choices = array ();
foreach ( $roles as $role ) {
$this -> choices [ $role -> id ] = format_string ( $role -> name );
2006-11-08 02:42:48 +00:00
}
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
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 ) {
parent :: __construct ( $name , $visiblename , $description , $defaultsetting , $paramtype , $size );
2008-08-26 01:05:01 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Loads the current setting and returns array
*
2009-06-30 16:55:56 +00:00
* @ return array Returns array value => xx , __construct => xx
2009-05-22 02:05:46 +00:00
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2008-08-26 01:05:01 +00:00
$value = parent :: get_setting ();
2009-06-30 16:55:56 +00:00
$adv = $this -> config_read ( $this -> name . '_adv' );
if ( is_null ( $value ) or is_null ( $adv )) {
2008-08-26 01:05:01 +00:00
return NULL ;
}
2009-06-30 16:55:56 +00:00
return array ( 'value' => $value , 'adv' => $adv );
2008-08-26 01:05:01 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Saves the new settings passed in $data
*
* @ todo Add vartype handling to ensure $data is an array
* @ param array $data
* @ return mixed string or Array
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2008-08-26 01:05:01 +00:00
$error = parent :: write_setting ( $data [ 'value' ]);
if ( ! $error ) {
2009-06-30 16:55:56 +00:00
$value = empty ( $data [ 'adv' ]) ? 0 : 1 ;
$this -> config_write ( $this -> name . '_adv' , $value );
2008-08-26 01:05:01 +00:00
}
return $error ;
}
2009-05-22 02:05:46 +00:00
/**
* Return XHTML for the control
*
* @ param array $data Default data array
* @ param string $query
* @ return string XHTML to display control
*/
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 ();
$defaultinfo = array ();
2009-03-10 06:43:07 +00:00
if ( isset ( $default [ 'value' ])) {
if ( $default [ 'value' ] === '' ) {
$defaultinfo [] = " '' " ;
} else {
$defaultinfo [] = $default [ 'value' ];
}
2008-08-26 01:05:01 +00:00
}
2009-06-30 16:55:56 +00:00
if ( ! empty ( $default [ 'adv' ])) {
2008-08-26 01:05:01 +00:00
$defaultinfo [] = get_string ( 'advanced' );
}
$defaultinfo = implode ( ', ' , $defaultinfo );
2009-06-30 16:55:56 +00:00
$adv = ! empty ( $data [ 'adv' ]);
2008-09-02 08:58:53 +00:00
$return = '<div class="form-text defaultsnext">' .
2009-09-09 07:55:03 +00:00
'<input type="text" size="' . $this -> size . '" id="' . $this -> get_id () .
'" name="' . $this -> get_full_name () . '[value]" value="' . s ( $data [ 'value' ]) . '" />' .
' <input type="checkbox" class="form-checkbox" id="' .
$this -> get_id () . '_adv" name="' . $this -> get_full_name () .
'[adv]" value="1" ' . ( $adv ? 'checked="checked"' : '' ) . ' />' .
' <label for="' . $this -> get_id () . '_adv">' .
get_string ( 'advanced' ) . '</label></div>' ;
2008-08-26 01:05:01 +00:00
return format_admin_setting ( $this , $this -> visiblename , $return ,
2009-09-09 07:55:03 +00:00
$this -> description , true , '' , $defaultinfo , $query );
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' ) {
parent :: __construct ( $name , $visiblename , $description , $defaultsetting , $yes , $no );
}
/**
* Loads the current setting and returns array
*
* @ return array Returns array value => xx , adv => xx
*/
public function get_setting () {
$value = parent :: get_setting ();
$adv = $this -> config_read ( $this -> name . '_adv' );
if ( is_null ( $value ) or is_null ( $adv )) {
return NULL ;
}
return array ( 'value' => $value , 'adv' => $adv );
}
/**
* 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
*/
public function write_setting ( $data ) {
$error = parent :: write_setting ( $data [ 'value' ]);
if ( ! $error ) {
$value = empty ( $data [ 'adv' ]) ? 0 : 1 ;
$this -> config_write ( $this -> name . '_adv' , $value );
}
return $error ;
}
/**
* Returns an XHTML checkbox field and with extra advanced cehckbox
*
* @ param string $data If $data matches yes then checkbox is checked
* @ param string $query
* @ return string XHTML field
*/
public function output_html ( $data , $query = '' ) {
$defaults = $this -> get_defaultsetting ();
$defaultinfo = array ();
if ( ! is_null ( $defaults )) {
if (( string ) $defaults [ 'value' ] === $this -> yes ) {
$defaultinfo [] = get_string ( 'checkboxyes' , 'admin' );
} else {
$defaultinfo [] = get_string ( 'checkboxno' , 'admin' );
}
if ( ! empty ( $defaults [ 'adv' ])) {
$defaultinfo [] = get_string ( 'advanced' );
}
}
$defaultinfo = implode ( ', ' , $defaultinfo );
if (( string ) $data [ 'value' ] === $this -> yes ) { // convert to strings before comparison
$checked = 'checked="checked"' ;
} else {
$checked = '' ;
}
if ( ! empty ( $data [ 'adv' ])) {
$advanced = 'checked="checked"' ;
} else {
$advanced = '' ;
}
$fullname = $this -> get_full_name ();
$novalue = s ( $this -> no );
$yesvalue = s ( $this -> yes );
$id = $this -> get_id ();
$stradvanced = get_string ( 'advanced' );
$return = <<< EOT
< div class = " form-checkbox defaultsnext " >
< input type = " hidden " name = " { $fullname } [value] " value = " $novalue " />
< input type = " checkbox " id = " $id " name = " { $fullname } [value] " value = " $yesvalue " $checked />
< input type = " checkbox " class = " form-checkbox " id = " { $id } _adv " name = " { $fullname } [adv] " value = " 1 " $advanced />
< label for = " { $id } _adv " > $stradvanced </ label >
</ div >
EOT ;
return format_admin_setting ( $this , $this -> visiblename , $return , $this -> description ,
2009-09-09 07:55:03 +00:00
true , '' , $defaultinfo , $query );
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' ) {
parent :: __construct ( $name , $visiblename , $description , $defaultsetting , $yes , $no );
}
/**
* Loads the current setting and returns array
*
* @ return array Returns array value => xx , adv => xx
*/
public function get_setting () {
$value = parent :: get_setting ();
$locked = $this -> config_read ( $this -> name . '_locked' );
if ( is_null ( $value ) or is_null ( $locked )) {
return NULL ;
}
return array ( 'value' => $value , 'locked' => $locked );
}
/**
* 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
*/
public function write_setting ( $data ) {
$error = parent :: write_setting ( $data [ 'value' ]);
if ( ! $error ) {
$value = empty ( $data [ 'locked' ]) ? 0 : 1 ;
$this -> config_write ( $this -> name . '_locked' , $value );
}
return $error ;
}
/**
* Returns an XHTML checkbox field and with extra locked checkbox
*
* @ param string $data If $data matches yes then checkbox is checked
* @ param string $query
* @ return string XHTML field
*/
public function output_html ( $data , $query = '' ) {
$defaults = $this -> get_defaultsetting ();
$defaultinfo = array ();
if ( ! is_null ( $defaults )) {
if (( string ) $defaults [ 'value' ] === $this -> yes ) {
$defaultinfo [] = get_string ( 'checkboxyes' , 'admin' );
} else {
$defaultinfo [] = get_string ( 'checkboxno' , 'admin' );
}
if ( ! empty ( $defaults [ 'locked' ])) {
$defaultinfo [] = get_string ( 'locked' , 'admin' );
}
}
$defaultinfo = implode ( ', ' , $defaultinfo );
$fullname = $this -> get_full_name ();
$novalue = s ( $this -> no );
$yesvalue = s ( $this -> yes );
$id = $this -> get_id ();
$checkboxparams = array ( 'type' => 'checkbox' , 'id' => $id , 'name' => $fullname . '[value]' , 'value' => $yesvalue );
if (( string ) $data [ 'value' ] === $this -> yes ) { // convert to strings before comparison
$checkboxparams [ 'checked' ] = 'checked' ;
}
$lockcheckboxparams = array ( 'type' => 'checkbox' , 'id' => $id . '_locked' , 'name' => $fullname . '[locked]' , 'value' => 1 , 'class' => 'form-checkbox' );
if ( ! empty ( $data [ 'locked' ])) { // convert to strings before comparison
$lockcheckboxparams [ 'checked' ] = 'checked' ;
}
$return = html_writer :: start_tag ( 'div' , array ( 'class' => 'form-checkbox defaultsnext' ));
$return .= html_writer :: empty_tag ( 'input' , array ( 'type' => 'hidden' , 'name' => $fullname . '[value]' , 'value' => $novalue ));
$return .= html_writer :: empty_tag ( 'input' , $checkboxparams );
$return .= html_writer :: empty_tag ( 'input' , $lockcheckboxparams );
$return .= html_writer :: tag ( 'label' , get_string ( 'locked' , 'admin' ), array ( 'for' => $id . '_locked' ));
$return .= html_writer :: end_tag ( 'div' );
return format_admin_setting ( $this , $this -> visiblename , $return , $this -> description , true , '' , $defaultinfo , $query );
}
}
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 ) {
parent :: __construct ( $name , $visiblename , $description , $defaultsetting , $choices );
2008-08-26 01:05:01 +00:00
}
2009-06-30 15:19:12 +00:00
2009-05-22 02:05:46 +00:00
/**
* Loads the current setting and returns array
*
2009-06-30 16:55:56 +00:00
* @ return array Returns array value => xx , adv => xx
2009-05-22 02:05:46 +00:00
*/
2009-01-11 16:42:19 +00:00
public function get_setting () {
2008-08-26 01:05:01 +00:00
$value = parent :: get_setting ();
2009-06-30 16:55:56 +00:00
$adv = $this -> config_read ( $this -> name . '_adv' );
if ( is_null ( $value ) or is_null ( $adv )) {
2008-08-26 01:05:01 +00:00
return NULL ;
}
2009-06-30 16:55:56 +00:00
return array ( 'value' => $value , 'adv' => $adv );
2008-08-26 01:05:01 +00:00
}
2009-05-22 02:05:46 +00:00
/**
* Saves the new settings passed in $data
*
* @ todo Add vartype handling to ensure $data is an array
* @ param array $data
* @ return mixed string or Array
*/
2009-01-11 16:42:19 +00:00
public function write_setting ( $data ) {
2008-08-26 01:05:01 +00:00
$error = parent :: write_setting ( $data [ 'value' ]);
if ( ! $error ) {
2009-06-30 16:55:56 +00:00
$value = empty ( $data [ 'adv' ]) ? 0 : 1 ;
$this -> config_write ( $this -> name . '_adv' , $value );
2008-08-26 01:05:01 +00:00
}
return $error ;
}
2009-05-22 02:05:46 +00:00
/**
* Return XHTML for the control
*
* @ param array $data Default data array
* @ param string $query
* @ return string XHTML to display control
*/
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 [ 'value' ],
2009-09-09 07:55:03 +00:00
$current [ 'value' ], $default [ 'value' ], '[value]' );
2008-08-26 01:05:01 +00:00
if ( ! $selecthtml ) {
return '' ;
}
if ( ! is_null ( $default ) and array_key_exists ( $default [ 'value' ], $this -> choices )) {
$defaultinfo = array ();
if ( isset ( $this -> choices [ $default [ 'value' ]])) {
$defaultinfo [] = $this -> choices [ $default [ 'value' ]];
}
2009-06-30 16:55:56 +00:00
if ( ! empty ( $default [ 'adv' ])) {
2008-08-26 01:05:01 +00:00
$defaultinfo [] = get_string ( 'advanced' );
}
$defaultinfo = implode ( ', ' , $defaultinfo );
} else {
$defaultinfo = '' ;
}
2009-06-30 16:55:56 +00:00
$adv = ! empty ( $data [ 'adv' ]);
2008-09-02 08:58:53 +00:00
$return = '<div class="form-select defaultsnext">' . $selecthtml .
2009-09-09 07:55:03 +00:00
' <input type="checkbox" class="form-checkbox" id="' .
$this -> get_id () . '_adv" name="' . $this -> get_full_name () .
'[adv]" value="1" ' . ( $adv ? 'checked="checked"' : '' ) . ' />' .
' <label for="' . $this -> get_id () . '_adv">' .
get_string ( 'advanced' ) . '</label></div>' ;
2008-08-26 01:05:01 +00:00
return format_admin_setting ( $this , $this -> visiblename , $return , $this -> description , true , $warning , $defaultinfo , $query );
}
}
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' ));
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' ));
}
}
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 ();
2009-06-19 14:25:56 +00:00
if ( $plugins = get_plugin_list ( 'gradeexport' )) {
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
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' );
2009-06-19 14:25:56 +00:00
foreach ( get_plugin_list ( 'gradereport' ) as $plugin => $plugindir ) {
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
}
}
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
$textlib = textlib_get_instance ();
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 );
if ( strpos ( $textlib -> strtolower ( $strmodulename ), $query ) !== false ) {
$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
}
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
$textlib = textlib_get_instance ();
$query = $textlib -> strtolower ( $query );
$enrols = enrol_get_plugins ( false );
foreach ( $enrols as $name => $enrol ) {
$localised = get_string ( 'pluginname' , 'enrol_' . $name );
if ( strpos ( $textlib -> strtolower ( $name ), $query ) !== false ) {
return true ;
}
if ( strpos ( $textlib -> strtolower ( $localised ), $query ) !== false ) {
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 = '' ) {
global $CFG , $OUTPUT , $DB ;
// display strings
$strup = get_string ( 'up' );
$strdown = get_string ( 'down' );
$strsettings = get_string ( 'settings' );
$strenable = get_string ( 'enable' );
$strdisable = get_string ( 'disable' );
$struninstall = get_string ( 'uninstallplugin' , 'admin' );
$strusage = get_string ( 'enrolusage' , 'enrol' );
$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 ;
}
// now find all borked plugins and at least allow then to uninstall
$borked = array ();
$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 ();
$table -> head = array ( get_string ( 'name' ), $strusage , $strenable , $strup . '/' . $strdown , $strsettings , $struninstall );
$table -> align = array ( 'left' , 'center' , 'center' , 'center' , 'center' , 'center' );
$table -> width = '90%' ;
$table -> data = array ();
// iterate through enrol plugins and add to the display table
$updowncount = 1 ;
$enrolcount = count ( $active_enrols );
$url = new moodle_url ( '/admin/enrol.php' , array ( 'sesskey' => sesskey ()));
$printed = array ();
foreach ( $allenrols as $enrol => $unused ) {
if ( get_string_manager () -> string_exists ( 'pluginname' , 'enrol_' . $enrol )) {
$name = get_string ( 'pluginname' , 'enrol_' . $enrol );
} else {
$name = $enrol ;
}
//usage
$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 " ;
// hide/show link
if ( isset ( $active_enrols [ $enrol ])) {
$aurl = new moodle_url ( $url , array ( 'action' => 'disable' , 'enrol' => $enrol ));
$hideshow = " <a href= \" $aurl\ " > " ;
$hideshow .= " <img src= \" " . $OUTPUT -> pix_url ( 'i/hide' ) . " \" class= \" icon \" alt= \" $strdisable\ " /></ a > " ;
$enabled = true ;
$displayname = " <span> $name </span> " ;
} else if ( isset ( $enrols_available [ $enrol ])) {
$aurl = new moodle_url ( $url , array ( 'action' => 'enable' , 'enrol' => $enrol ));
$hideshow = " <a href= \" $aurl\ " > " ;
$hideshow .= " <img src= \" " . $OUTPUT -> pix_url ( 'i/show' ) . " \" class= \" icon \" alt= \" $strenable\ " /></ a > " ;
$enabled = false ;
$displayname = " <span class= \" dimmed_text \" > $name </span> " ;
} else {
$hideshow = '' ;
$enabled = false ;
$displayname = '<span class="notifyproblem">' . $name . '</span>' ;
}
// up/down link (only if enrol is enabled)
$updown = '' ;
if ( $enabled ) {
if ( $updowncount > 1 ) {
$aurl = new moodle_url ( $url , array ( 'action' => 'up' , 'enrol' => $enrol ));
$updown .= " <a href= \" $aurl\ " > " ;
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 't/up' ) . " \" alt= \" $strup\ " /></ a >& nbsp ; " ;
} else {
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 'spacer' ) . " \" class= \" icon \" 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\ " > " ;
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 't/down' ) . " \" alt= \" $strdown\ " /></ a > " ;
} else {
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 'spacer' ) . " \" class= \" icon \" 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
// settings link
if ( isset ( $active_enrols [ $enrol ]) or file_exists ( $CFG -> dirroot . '/enrol/' . $enrol . '/settings.php' )) {
$surl = new moodle_url ( '/admin/settings.php' , array ( 'section' => 'enrolsettings' . $enrol ));
$settings = " <a href= \" $surl\ " > $strsettings </ a > " ;
} else {
$settings = '' ;
}
// uninstall
$aurl = new moodle_url ( $url , array ( 'action' => 'uninstall' , 'enrol' => $enrol ));
$uninstall = " <a href= \" $aurl\ " > $struninstall </ a > " ;
// add a row to the table
$table -> data [] = array ( $displayname , $usage , $hideshow , $updown , $settings , $uninstall );
$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
$textlib = textlib_get_instance ();
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 );
2007-12-19 17:35:20 +00:00
if ( strpos ( $textlib -> strtolower ( $strblockname ), $query ) !== false ) {
$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-03-17 21:34:34 +01:00
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 ;
parent :: __construct ( 'manageqtypes' , get_string ( 'manageqtypes' , 'admin' ), " $CFG->wwwroot / $CFG->admin /qtypes.php " );
}
2009-05-22 02:05:46 +00:00
/**
* Search QTYPES for the specified string
*
* @ param string $query The string to search for in QTYPES
* @ 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 ;
$textlib = textlib_get_instance ();
2011-02-10 20:44:47 +00:00
require_once ( $CFG -> dirroot . '/question/engine/bank.php' );
foreach ( question_bank :: get_all_qtypes () as $qtype ) {
2008-09-09 08:57:51 +00:00
if ( strpos ( $textlib -> strtolower ( $qtype -> local_name ()), $query ) !== false ) {
$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 ;
$textlib = textlib_get_instance ();
$portfolios = get_plugin_list ( 'portfolio' );
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' );
if ( strpos ( $textlib -> strtolower ( $title ), $query ) !== false ) {
$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 ;
$textlib = textlib_get_instance ();
$repositories = get_plugin_list ( 'repository' );
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 ();
if ( strpos ( $textlib -> strtolower ( $title ), $query ) !== false ) {
$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
2007-12-19 17:35:20 +00:00
$textlib = textlib_get_instance ();
2009-06-19 14:25:56 +00:00
$authsavailable = get_plugin_list ( 'auth' );
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 ();
2007-12-19 17:35:20 +00:00
if ( strpos ( $textlib -> strtolower ( $authtitle ), $query ) !== false ) {
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 = '' ) {
2009-07-03 06:19:25 +00:00
global $CFG , $OUTPUT ;
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' ,
'up' , 'down' , 'none' ));
2007-12-19 17:35:20 +00:00
$txt -> updown = " $txt->up / $txt->down " ;
2006-12-21 04:30:03 +00:00
2009-06-19 14:25:56 +00:00
$authsavailable = 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 ;
foreach ( $authsenabled as $auth ) {
$authplugin = get_auth_plugin ( $auth );
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 );
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 ();
2007-12-19 17:35:20 +00:00
$table -> head = array ( $txt -> name , $txt -> enable , $txt -> updown , $txt -> settings );
$table -> align = array ( 'left' , 'center' , 'center' , 'center' );
$table -> data = array ();
2010-03-25 06:38:21 +00:00
$table -> attributes [ 'class' ] = 'manageauthtable generaltable' ;
2006-12-21 04:30:03 +00:00
2007-12-19 17:35:20 +00:00
//add always enabled plugins first
$displayname = " <span> " . $displayauths [ 'manual' ] . " </span> " ;
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>";
2007-12-19 17:35:20 +00:00
$table -> data [] = array ( $displayname , '' , '' , $settings );
$displayname = " <span> " . $displayauths [ 'nologin' ] . " </span> " ;
$settings = " <a href= \" auth_config.php?auth=nologin \" > { $txt -> settings } </a> " ;
$table -> data [] = array ( $displayname , '' , '' , $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 ;
}
// hide/show link
if ( in_array ( $auth , $authsenabled )) {
$hideshow = " <a href= \" $url &action=disable&auth= $auth\ " > " ;
2009-12-16 21:50:45 +00:00
$hideshow .= " <img src= \" " . $OUTPUT -> pix_url ( 'i/hide' ) . " \" class= \" icon \" 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 ;
$displayname = " <span> $name </span> " ;
}
else {
$hideshow = " <a href= \" $url &action=enable&auth= $auth\ " > " ;
2009-12-16 21:50:45 +00:00
$hideshow .= " <img src= \" " . $OUTPUT -> pix_url ( 'i/show' ) . " \" class= \" icon \" 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 ;
$displayname = " <span class= \" dimmed_text \" > $name </span> " ;
}
2007-11-14 11:52:21 +00:00
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\ " > " ;
2009-12-16 21:50:45 +00:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 't/up' ) . " \" alt= \" up \" /></a> " ;
2007-12-19 17:35:20 +00:00
}
else {
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 .= " <img src= \" " . $OUTPUT -> pix_url ( 'spacer' ) . " \" class= \" icon \" alt= \" \" /> " ;
2007-12-19 17:35:20 +00:00
}
if ( $updowncount < $authcount ) {
$updown .= " <a href= \" $url &action=down&auth= $auth\ " > " ;
2009-12-16 21:50:45 +00:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 't/down' ) . " \" alt= \" down \" /></a> " ;
2007-12-19 17:35:20 +00:00
}
else {
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 .= " <img src= \" " . $OUTPUT -> pix_url ( 'spacer' ) . " \" class= \" icon \" 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
2007-12-19 17:35:20 +00:00
// add a row to the table
$table -> data [] = array ( $displayname , $hideshow , $updown , $settings );
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 ;
}
$textlib = textlib_get_instance ();
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 ;
}
if ( strpos ( $textlib -> strtolower ( $editorstr ), $query ) !== false ) {
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' ));
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 ();
2009-05-17 21:10:06 +00:00
$table -> head = array ( $txt -> name , $txt -> enable , $txt -> updown , $txt -> settings );
$table -> align = array ( 'left' , 'center' , 'center' , 'center' );
$table -> width = '90%' ;
$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
2009-05-17 21:10:06 +00:00
if ( in_array ( $editor , $active_editors )) {
$hideshow = " <a href= \" $url &action=disable&editor= $editor\ " > " ;
2009-12-16 21:50:45 +00:00
$hideshow .= " <img src= \" " . $OUTPUT -> pix_url ( 'i/hide' ) . " \" class= \" icon \" 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 ;
$displayname = " <span> $name </span> " ;
}
else {
$hideshow = " <a href= \" $url &action=enable&editor= $editor\ " > " ;
2009-12-16 21:50:45 +00:00
$hideshow .= " <img src= \" " . $OUTPUT -> pix_url ( 'i/show' ) . " \" class= \" icon \" 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 ;
$displayname = " <span class= \" dimmed_text \" > $name </span> " ;
}
// up/down link (only if auth is enabled)
$updown = '' ;
if ( $enabled ) {
if ( $updowncount > 1 ) {
$updown .= " <a href= \" $url &action=up&editor= $editor\ " > " ;
2009-12-16 21:50:45 +00:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 't/up' ) . " \" alt= \" up \" /></a> " ;
2009-05-17 21:10:06 +00:00
}
else {
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 .= " <img src= \" " . $OUTPUT -> pix_url ( 'spacer' ) . " \" class= \" icon \" alt= \" \" /> " ;
2009-05-17 21:10:06 +00:00
}
if ( $updowncount < $editorcount ) {
$updown .= " <a href= \" $url &action=down&editor= $editor\ " > " ;
2009-12-16 21:50:45 +00:00
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 't/down' ) . " \" alt= \" down \" /></a> " ;
2009-05-17 21:10:06 +00:00
}
else {
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 .= " <img src= \" " . $OUTPUT -> pix_url ( 'spacer' ) . " \" class= \" icon \" 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 = '' ;
}
// add a row to the table
$table -> data [] = array ( $displayname , $hideshow , $updown , $settings );
}
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 );
$table -> align = array ( 'left' , 'center' );
$table -> width = '100%' ;
$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 ,
2010-03-29 03:39:08 +00:00
html_writer :: tag ( 'img' , '' , array ( 'src' => $OUTPUT -> pix_url ( 'i/hide' ), 'class' => 'icon' , 'alt' => 'disable' )));
} else {
2010-04-04 19:58:03 +00:00
$hideshow = html_writer :: link ( $url . '&action=enable&license=' . $value -> shortname ,
2010-03-29 03:39:08 +00:00
html_writer :: tag ( 'img' , '' , array ( 'src' => $OUTPUT -> pix_url ( 'i/show' ), 'class' => 'icon' , 'alt' => 'enable' )));
}
2010-04-09 19:40:23 +00:00
if ( $value -> shortname == $CFG -> sitedefaultlicense ) {
$displayname .= ' ' . html_writer :: tag ( 'img' , '' , array ( 'src' => $OUTPUT -> pix_url ( 'i/lock' ), 'class' => 'icon' , 'alt' => get_string ( 'default' ), 'title' => get_string ( 'default' )));
$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
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 ();
2007-12-19 17:35:20 +00:00
$textlib = textlib_get_instance ();
2009-03-30 08:33:13 +00:00
foreach ( $filternames as $path => $strfiltername ) {
if ( strpos ( $textlib -> strtolower ( $strfiltername ), $query ) !== false ) {
2009-04-13 07:15:50 +00:00
$found = true ;
break ;
2009-03-30 08:33:13 +00:00
}
list ( $type , $filter ) = explode ( '/' , $path );
if ( strpos ( $filter , $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
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 )) {
2008-04-04 02:54:20 +00:00
print_error ( 'sectionerror' , 'admin' , " $CFG->wwwroot / $CFG->admin / " );
2006-09-02 13:14:57 +00:00
die ;
}
// 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
2010-11-05 02:53:47 +00:00
if ( ! empty ( $options [ 'pagelayout' ])) {
// A specific page layout has been requested.
$PAGE -> set_pagelayout ( $options [ 'pagelayout' ]);
} else if ( $section === 'upgradesettings' ) {
2010-02-27 22:45:29 +00:00
$PAGE -> set_pagelayout ( 'maintenance' );
} else {
$PAGE -> set_pagelayout ( 'admin' );
2006-09-02 13:14:57 +00:00
}
2009-10-12 05:39:32 +00:00
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' );
2010-02-27 22:45:29 +00:00
$url = new moodle_url ( $PAGE -> url , array ( 'adminedit' => '0' ));
2009-07-09 07:35:03 +00:00
} else {
$caption = get_string ( 'blocksediton' );
2010-02-27 22:45:29 +00:00
$url = new moodle_url ( $PAGE -> url , array ( 'adminedit' => '1' ));
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 )) {
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 );
2007-10-02 21:38:53 +00:00
}
2006-09-02 13:14:57 +00:00
}
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 ) {
$original = serialize ( $setting -> get_setting ()); // comparison must work for arrays too
$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 ;
}
2009-03-24 11:01:45 +00:00
if ( $original !== serialize ( $setting -> get_setting ())) {
2007-12-19 17:35:20 +00:00
$count ++ ;
$callbackfunction = $setting -> updatedcallback ;
if ( function_exists ( $callbackfunction )) {
$callbackfunction ( $fullname );
}
}
}
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
2007-12-19 17:35:20 +00:00
$textlib = textlib_get_instance ();
if ( $textlib -> strlen ( $query ) < 2 ) {
return '' ;
}
$query = $textlib -> strtolower ( $query );
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
2009-05-22 02:05:46 +00:00
* @ param bool $label link label to id , true by default
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
if ( $label ) {
2007-12-19 17:35:20 +00:00
$labelfor = 'for = "' . $setting -> get_id () . '"' ;
2007-02-06 08:24:37 +00:00
} else {
2007-07-27 13:38:06 +00:00
$labelfor = '' ;
2007-02-06 08:24:37 +00:00
}
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>' ;
}
2008-01-01 15:51:54 +00:00
if ( is_null ( $defaultinfo )) {
$defaultinfo = '' ;
} else {
if ( $defaultinfo === '' ) {
$defaultinfo = get_string ( 'emptysettingvalue' , 'admin' );
}
$defaultinfo = highlight ( $query , nl2br ( s ( $defaultinfo )));
$defaultinfo = '<div class="form-defaultinfo">' . get_string ( 'defaultsettinginfo' , 'admin' , $defaultinfo ) . '</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 " >
< label '.$labelfor.' > '.highlightfast($query, $title).' < span class = " form-shortname " > '.highlightfast($query, $name).' </ span >
'.$override.$warning.'
</ label >
</ div >
< div class = " form-setting " > '.$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 > ' ;
2009-01-11 16:42:19 +00:00
$adminroot = admin_get_root ();
2007-12-19 17:35:20 +00:00
if ( array_key_exists ( $fullname , $adminroot -> errors )) {
$str = '<fieldset class="error"><legend>' . $adminroot -> errors [ $fullname ] -> error . '</legend>' . $str . '</fieldset>' ;
}
2007-07-27 13:38:06 +00:00
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...
$skiptables = array ( 'config' , 'config_plugins' , 'config_log' , 'upgrade_log' ,
'filter_config' , 'sessions' , 'events_queue' , 'repository_instance_config' ,
'block_instances' , 'block_pinned_old' , 'block_instance_old' , '' );
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.
2007-12-03 04:46:37 +00:00
@ set_time_limit ( 0 );
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 );
2007-12-03 04:46:37 +00:00
foreach ( $columns as $column => $data ) {
2008-05-15 21:40:00 +00:00
if ( in_array ( $data -> meta_type , array ( 'C' , 'X' ))) { // Text stuff only
2011-03-14 00:51:42 +01:00
//TODO: this should be definitively moved to DML driver to do the actual replace, this is not going to work for MSSQL and Oracle...
2008-06-05 20:35:28 +00:00
$DB -> execute ( " UPDATE { " . $table . " } SET $column = REPLACE( $column , ?, ?) " , array ( $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...
$blocks = get_plugin_list ( 'block' );
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
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 ;
}
$textlib = textlib_get_instance ();
2009-06-19 14:25:56 +00:00
$repositories = get_plugin_list ( 'repository' );
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 ();
2008-08-13 04:09:13 +00:00
if ( strpos ( $textlib -> strtolower ( $title ), $query ) !== false ) {
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
$instances = repository :: get_types ();
if ( ! empty ( $instances )) {
// Array to store plugins being used
$alreadyplugins = array ();
$totalinstances = count ( $instances );
$updowncount = 1 ;
foreach ( $instances as $i ) {
$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 ();
$params [ 'context' ] = array ( get_system_context ());
$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 ) {
if ( $instance -> context -> contextlevel == CONTEXT_COURSE ) {
$courseinstances [] = $instance ;
} else if ( $instance -> context -> contextlevel == CONTEXT_USER ) {
$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 = '' ;
$spacer = $OUTPUT -> spacer ( array ( 'height' => 15 , 'width' => 15 )); // should be done with CSS instead
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 . " \" > " ;
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 't/up' ) . " \" alt= \" up \" /></a> " ;
}
else {
$updown .= $spacer ;
}
if ( $updowncount < $totalinstances ) {
$updown .= " <a href= \" $this->baseurl &action=movedown&repos= " . $typename . " \" > " ;
$updown .= " <img src= \" " . $OUTPUT -> pix_url ( 't/down' ) . " \" alt= \" down \" /></a> " ;
}
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
$plugins = get_plugin_list ( 'repository' );
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-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 ;
}
$textlib = textlib_get_instance ();
$services = $DB -> get_records ( 'external_services' , array (), 'id, name' );
foreach ( $services as $service ) {
if ( strpos ( $textlib -> strtolower ( $service -> name ), $query ) !== false ) {
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 );
$table -> align = array ( 'left' , 'left' , 'center' , 'center' , 'center' );
$table -> size = array ( '30%' , '20%' , '20%' , '20%' , '10%' );
$table -> width = '100%' ;
$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 );
$table -> align = array ( 'left' , 'center' , 'center' , 'center' , 'center' );
$table -> size = array ( '30%' , '20%' , '20%' , '20%' , '10%' );
$table -> width = '100%' ;
$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-09-20 07:32:31 +00:00
/**
* Special class for plagiarism administration .
*
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
class admin_setting_manageplagiarism extends admin_setting {
2011-03-17 21:34:34 +01:00
/**
* Calls parent :: __construct with specific arguments
*/
2010-09-20 07:32:31 +00:00
public function __construct () {
$this -> nosave = true ;
parent :: __construct ( 'plagiarismui' , get_string ( 'plagiarismsettings' , 'plagiarism' ), '' , '' );
}
/**
* 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
*
* @ return string Always returns ''
*/
public function write_setting ( $data ) {
2011-03-17 21:34:34 +01:00
// do not write any setting
2010-09-20 07:32:31 +00:00
return '' ;
}
/**
* Return XHTML to display control
*
* @ param mixed $data Unused
* @ param string $query
* @ return string highlight
*/
public function output_html ( $data , $query = '' ) {
global $CFG , $OUTPUT ;
// display strings
$txt = get_strings ( array ( 'settings' , 'name' ));
$plagiarismplugins = get_plugin_list ( 'plagiarism' );
if ( empty ( $plagiarismplugins )) {
return get_string ( 'nopluginsinstalled' , 'plagiarism' );
}
$return = $OUTPUT -> heading ( get_string ( 'availableplugins' , 'plagiarism' ), 3 , 'main' );
$return .= $OUTPUT -> box_start ( 'generalbox authsui' );
$table = new html_table ();
$table -> head = array ( $txt -> name , $txt -> settings );
$table -> align = array ( 'left' , 'center' );
$table -> data = array ();
$table -> attributes [ 'class' ] = 'manageplagiarismtable generaltable' ;
// iterate through auth plugins and add to the display table
$authcount = count ( $plagiarismplugins );
foreach ( $plagiarismplugins as $plugin => $dir ) {
if ( file_exists ( $dir . '/settings.php' )) {
$displayname = " <span> " . get_string ( $plugin , 'plagiarism_' . $plugin ) . " </span> " ;
// settings link
$settings = " <a href= \" $CFG->wwwroot /plagiarism/ $plugin /settings.php \" > { $txt -> settings } </a> " ;
// add a row to the table
$table -> data [] = array ( $displayname , $settings );
}
}
$return .= html_writer :: table ( $table );
$return .= get_string ( 'configplagiarismplugins' , 'plagiarism' );
$return .= $OUTPUT -> box_end ();
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
/// One system controlling Moodle with Token
$brtag = html_writer :: empty_tag ( 'br' );
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' ));
$table -> size = array ( '30%' , '10%' , '60%' );
2010-01-22 02:04:12 +00:00
$table -> align = array ( 'left' , 'left' , 'left' );
$table -> width = '90%' ;
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' ));
$table -> size = array ( '30%' , '10%' , '60%' );
2010-01-22 02:04:12 +00:00
$table -> align = array ( 'left' , 'left' , 'left' );
$table -> width = '90%' ;
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 ;
}
$textlib = textlib_get_instance ();
$protocols = get_plugin_list ( 'webservice' );
foreach ( $protocols as $protocol => $location ) {
if ( strpos ( $protocol , $query ) !== false ) {
return true ;
}
$protocolstr = get_string ( 'pluginname' , 'webservice_' . $protocol );
if ( strpos ( $textlib -> strtolower ( $protocolstr ), $query ) !== false ) {
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' );
$struninstall = get_string ( 'uninstallplugin' , 'admin' );
2009-09-09 07:55:03 +00:00
2009-10-12 21:46:16 +00:00
$protocols_available = get_plugin_list ( 'webservice' );
$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 ();
$table -> head = array ( $strprotocol , $strversion , $strenable , $struninstall , $strsettings );
$table -> align = array ( 'left' , 'center' , 'center' , 'center' , 'center' );
$table -> width = '100%' ;
$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\ " > " ;
2009-12-16 21:50:45 +00:00
$hideshow .= " <img src= \" " . $OUTPUT -> pix_url ( 'i/hide' ) . " \" class= \" icon \" alt= \" $strdisable\ " /></ a > " ;
2009-10-12 21:46:16 +00:00
$displayname = " <span> $name </span> " ;
} else {
$hideshow = " <a href= \" $url &action=enable&webservice= $protocol\ " > " ;
2009-12-16 21:50:45 +00:00
$hideshow .= " <img src= \" " . $OUTPUT -> pix_url ( 'i/show' ) . " \" class= \" icon \" 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
// delete link
$uninstall = " <a href= \" $url &action=uninstall&webservice= $protocol\ " > $struninstall </ a > " ;
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
$table -> data [] = array ( $displayname , $version , $hideshow , $uninstall , $settings );
}
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 );
$table -> align = array ( 'left' , 'left' , 'left' , 'center' , 'center' , 'center' );
2010-01-06 09:33:05 +00:00
$table -> width = '100%' ;
$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)
2010-07-23 06:17:06 +00:00
$sql = " SELECT t.id, t.token, u.id AS userid, u.firstname, u.lastname, s.name, 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 )) {
$validuntil = date ( " F j, Y " ); //TODO: language support (look for moodle function)
}
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
key_exists ( $token -> userid , $usermissingcaps )) {
2010-07-23 06:17:06 +00:00
$missingcapabilities = implode ( ',' ,
$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 ;
/**
*
* @ param string $name
* @ param string $visiblename
* @ param string $description
* @ param string $defaultsetting
* @ param array $previewconfig Array ( 'selector' => '.some .css .selector' , 'style' => 'backgroundColor' );
*/
public function __construct ( $name , $visiblename , $description , $defaultsetting , array $previewconfig = null ) {
$this -> previewconfig = $previewconfig ;
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 ) {
if ( preg_match ( '/^#?([a-fA-F0-9]{3}){1,2}$/' , $data )) {
if ( strpos ( $data , '#' ) !== 0 ) {
$data = '#' . $data ;
}
return $data ;
2010-07-02 06:23:19 +00:00
} else if ( preg_match ( '/^[a-zA-Z]{3, 25}$/' , $data )) {
2010-06-16 08:36:06 +00:00
return $data ;
2010-07-02 06:23:19 +00:00
} else if ( empty ( $data )) {
2010-07-02 08:29:49 +00:00
return $this -> defaultsetting ;
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' ));
$content .= html_writer :: empty_tag ( 'input' , array ( 'type' => 'text' , 'id' => $this -> get_id (), 'name' => $this -> get_full_name (), 'value' => $this -> get_setting (), 'size' => '12' ));
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' );
return format_admin_setting ( $this , $this -> visiblename , $content , $this -> description , false , '' , $this -> get_defaultsetting (), $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
}
2011-04-11 11:22:32 +01: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-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-04-11 11:22:32 +01:00
public function __construct ( $name , $visiblename , $description ) {
parent :: __construct ( $name , $visiblename , $description , array (), null );
}
/**
* 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 ) {
if ( file_exists ( " $CFG->dirroot /mod/ $record->name /lib.php " )) {
$this -> choices [ $record -> id ] = $record -> name ;
}
}
return true ;
}
}