Merge branch 'MDL-38807-master' of git://github.com/danpoltawski/moodle
authorDamyon Wiese <damyon@moodle.com>
Mon, 29 Apr 2013 06:17:53 +0000 (14:17 +0800)
committerDamyon Wiese <damyon@moodle.com>
Mon, 29 Apr 2013 06:17:53 +0000 (14:17 +0800)
449 files changed:
admin/mnet/peer_forms.php
admin/mnet/profilefields_form.php
admin/mnet/services_form.php
admin/plugins.php
admin/registration/forms.php
admin/renderer.php
admin/settings/courses.php
admin/tool/assignmentupgrade/upgradableassignmentsbatchform.php
admin/tool/dbtransfer/database_export_form.php
admin/tool/dbtransfer/database_transfer_form.php
admin/tool/qeupgradehelper/cronsetup_form.php
admin/tool/qeupgradehelper/extracttestcase_form.php
admin/tool/uploaduser/index.php
admin/webservice/forms.php
admin/webservice/testclient.php
admin/webservice/testclient_forms.php
auth/cas/auth.php
auth/cas/cli/sync_users.php
auth/cas/lang/en/auth_cas.php
auth/cas/version.php
auth/email/auth.php
auth/email/lang/en/auth_email.php
auth/email/version.php
auth/fc/auth.php
auth/fc/lang/en/auth_fc.php
auth/fc/version.php
auth/imap/auth.php
auth/imap/lang/en/auth_imap.php
auth/imap/version.php
auth/ldap/auth.php
auth/ldap/cli/sync_users.php
auth/ldap/lang/en/auth_ldap.php
auth/ldap/version.php
auth/manual/auth.php
auth/manual/db/upgrade.php
auth/manual/lang/en/auth_manual.php
auth/manual/version.php
auth/mnet/auth.php
auth/mnet/db/mnet.php
auth/mnet/db/upgrade.php
auth/mnet/jump.php
auth/mnet/land.php
auth/mnet/lang/en/auth_mnet.php
auth/mnet/version.php
auth/nntp/auth.php
auth/nntp/lang/en/auth_nntp.php
auth/nntp/version.php
auth/nologin/auth.php
auth/nologin/lang/en/auth_nologin.php
auth/nologin/version.php
auth/none/auth.php
auth/none/lang/en/auth_none.php
auth/none/version.php
auth/pam/auth.php
auth/pam/lang/en/auth_pam.php
auth/pam/version.php
auth/pop3/auth.php
auth/pop3/lang/en/auth_pop3.php
auth/pop3/version.php
auth/radius/auth.php
auth/radius/lang/en/auth_radius.php
auth/radius/version.php
auth/shibboleth/auth.php
auth/shibboleth/lang/en/auth_shibboleth.php
auth/shibboleth/version.php
auth/webservice/auth.php
auth/webservice/lang/en/auth_webservice.php
auth/webservice/version.php
backup/util/ui/base_moodleform.class.php
blocks/community/forms.php
blocks/dock.js
blocks/moodleblock.class.php
cache/README.md
cache/classes/definition.php
cache/classes/factory.php
cache/classes/helper.php
cache/classes/interfaces.php
cache/classes/loaders.php
cache/classes/store.php
cache/forms.php
cache/locallib.php
cache/stores/file/lib.php
cache/stores/session/lib.php
cache/tests/cache_test.php
cache/tests/fixtures/lib.php
comment/lib.php
course/edit_form.php
course/externallib.php
course/moodleform_mod.php
course/publish/forms.php
course/publish/index.php
course/renderer.php
course/tests/externallib_test.php
enrol/externallib.php
enrol/flatfile/lib.php
enrol/guest/lib.php
enrol/manual/ajax.php
enrol/manual/externallib.php
enrol/upgrade.txt
files/externallib.php
grade/export/grade_export_form.php
grade/import/grade_import_form.php
grade/lib.php
group/externallib.php
group/import_form.php
install/lang/ru/install.php
install/lang/sr_cr/install.php
install/lang/sr_lt/install.php
lang/en/admin.php
lang/en/block.php
lang/en/cache.php
lang/en/completion.php
lang/en/error.php
lang/en/grades.php
lang/en/moodle.php
lang/en/plugin.php
lang/en/repository.php
lib/blocklib.php
lib/coursecatlib.php
lib/cronlib.php
lib/csslib.php
lib/datalib.php
lib/db/caches.php
lib/db/install.xml
lib/db/upgrade.php
lib/ddl/tests/ddl_test.php
lib/editor/tinymce/lib.php
lib/editor/tinymce/yui/build/moodle-editor_tinymce-collapse/moodle-editor_tinymce-collapse-debug.js
lib/editor/tinymce/yui/build/moodle-editor_tinymce-collapse/moodle-editor_tinymce-collapse-min.js
lib/editor/tinymce/yui/build/moodle-editor_tinymce-collapse/moodle-editor_tinymce-collapse.js
lib/editor/tinymce/yui/src/collapse/js/collapse.js
lib/enrollib.php
lib/filestorage/file_storage.php
lib/filestorage/tests/file_storage_test.php
lib/form/select.php
lib/moodlelib.php
lib/outputrenderers.php
lib/outputrequirementslib.php
lib/pluginlib.php
lib/portfolio/caller.php
lib/portfolio/forms.php
lib/portfoliolib.php
lib/setup.php
lib/tests/csslib_test.php
lib/tests/fixtures/mockplugins/mod/new/version.php [new file with mode: 0644]
lib/tests/moodlelib_test.php
lib/tests/pluginlib_test.php
lib/thirdpartylibs.xml
lib/upgrade.txt
lib/xmldb/xmldb_table.php
lib/yui/build/moodle-core-tooltip/moodle-core-tooltip-debug.js
lib/yui/build/moodle-core-tooltip/moodle-core-tooltip-min.js
lib/yui/build/moodle-core-tooltip/moodle-core-tooltip.js
lib/yui/src/tooltip/js/tooltip.js
message/externallib.php
mod/assign/extensionform.php
mod/assign/feedback/file/batchuploadfilesform.php
mod/assign/feedback/file/importzipform.php
mod/assign/feedback/file/locallib.php
mod/assign/feedback/file/uploadzipform.php
mod/assign/feedback/offline/importgradesform.php
mod/assign/feedback/offline/uploadgradesform.php
mod/assign/gradingbatchoperationsform.php
mod/assign/locallib.php
mod/assign/mod_form.php
mod/assign/submission/comments/lib.php
mod/assign/submission/comments/locallib.php
mod/chat/lang/en/chat.php
mod/chat/mod_form.php
mod/data/field/file/field.class.php
mod/data/field/picture/field.class.php
mod/data/import_form.php
mod/data/preset.php
mod/data/preset_form.php
mod/folder/backup/moodle2/backup_folder_stepslib.php
mod/folder/backup/moodle2/restore_folder_stepslib.php
mod/folder/db/install.xml
mod/folder/db/upgrade.php
mod/folder/lang/en/folder.php
mod/folder/lib.php
mod/folder/mod_form.php
mod/folder/renderer.php
mod/folder/settings.php
mod/folder/version.php
mod/forum/lang/en/forum.php
mod/forum/lib.php
mod/forum/mod_form.php
mod/forum/post.php
mod/forum/post_form.php
mod/forum/upgrade.txt
mod/forum/view.php
mod/label/tests/generator/lib.php [new file with mode: 0644]
mod/label/tests/generator_test.php [new file with mode: 0644]
mod/lti/edit_form.php
mod/quiz/accessmanager.php
mod/quiz/accessmanager_form.php
mod/quiz/accessrule/accessrulebase.php
mod/quiz/lib.php
mod/quiz/mod_form.php
mod/quiz/module.js
mod/quiz/settings.php
mod/scorm/module.js
mod/scorm/player.php
mod/scorm/report/graphs/graph.php
mod/workshop/lang/en/workshop.php
mod/workshop/lib.php
mod/workshop/locallib.php
mod/workshop/mod_form.php
notes/externallib.php
pix/i/moodle_host.png [new file with mode: 0644]
portfolio/boxnet/lib.php
portfolio/flickr/lib.php
portfolio/mahara/lib.php
question/behaviour/adaptivenopenalty/renderer.php
question/behaviour/adaptivenopenalty/tests/walkthrough_test.php
question/format/blackboard_six/format.php
question/format/blackboard_six/formatpool.php
question/format/blackboard_six/formatqti.php
question/format/examview/format.php
question/format/gift/format.php
question/format/xml/format.php
question/type/multichoice/renderer.php
question/type/multichoice/styles.css
report/completion/index.php
report/progress/index.php
repository/coursefiles/pix/icon.png
repository/lib.php
repository/local/pix/icon.png
repository/recent/pix/icon.png
repository/upload/lib.php
repository/user/pix/icon.png
theme/afterburner/db/upgrade.php
theme/afterburner/settings.php
theme/afterburner/version.php
theme/anomaly/config.php
theme/anomaly/settings.php
theme/anomaly/version.php
theme/arialist/config.php
theme/arialist/lang/en/theme_arialist.php
theme/arialist/settings.php
theme/arialist/version.php
theme/base/config.php
theme/base/style/admin.css
theme/base/style/filemanager.css
theme/base/version.php
theme/binarius/config.php
theme/binarius/lang/en/theme_binarius.php
theme/binarius/version.php
theme/bootstrap/javascript/moodlebootstrap.js [deleted file]
theme/bootstrap/less/moodle/blocks.less [deleted file]
theme/bootstrap/less/moodle/recess.txt [deleted file]
theme/bootstrap/pix/screenshot.jpg [deleted file]
theme/bootstrap/style/README [deleted file]
theme/bootstrap/style/generated.css [deleted file]
theme/bootstrapbase/README.txt [moved from theme/bootstrap/README.txt with 97% similarity]
theme/bootstrapbase/config.php [moved from theme/bootstrap/config.php with 97% similarity]
theme/bootstrapbase/javascript/html5shiv.js [moved from theme/bootstrap/javascript/html5shiv.js with 100% similarity]
theme/bootstrapbase/javascript/moodlebootstrap.js [new file with mode: 0644]
theme/bootstrapbase/lang/en/theme_bootstrapbase.php [moved from theme/bootstrap/lang/en/theme_bootstrap.php with 97% similarity]
theme/bootstrapbase/layout/general.php [moved from theme/bootstrap/layout/general.php with 90% similarity]
theme/bootstrapbase/less/README [moved from theme/bootstrap/less/README with 85% similarity]
theme/bootstrapbase/less/bootstrap/accordion.less [moved from theme/bootstrap/less/bootstrap/accordion.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/alerts.less [moved from theme/bootstrap/less/bootstrap/alerts.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/bootstrap.less [moved from theme/bootstrap/less/bootstrap/bootstrap.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/breadcrumbs.less [moved from theme/bootstrap/less/bootstrap/breadcrumbs.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/button-groups.less [moved from theme/bootstrap/less/bootstrap/button-groups.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/buttons.less [moved from theme/bootstrap/less/bootstrap/buttons.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/carousel.less [moved from theme/bootstrap/less/bootstrap/carousel.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/close.less [moved from theme/bootstrap/less/bootstrap/close.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/code.less [moved from theme/bootstrap/less/bootstrap/code.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/component-animations.less [moved from theme/bootstrap/less/bootstrap/component-animations.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/dropdowns.less [moved from theme/bootstrap/less/bootstrap/dropdowns.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/forms.less [moved from theme/bootstrap/less/bootstrap/forms.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/grid.less [moved from theme/bootstrap/less/bootstrap/grid.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/hero-unit.less [moved from theme/bootstrap/less/bootstrap/hero-unit.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/labels-badges.less [moved from theme/bootstrap/less/bootstrap/labels-badges.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/layouts.less [moved from theme/bootstrap/less/bootstrap/layouts.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/media.less [moved from theme/bootstrap/less/bootstrap/media.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/mixins.less [moved from theme/bootstrap/less/bootstrap/mixins.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/modals.less [moved from theme/bootstrap/less/bootstrap/modals.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/navbar.less [moved from theme/bootstrap/less/bootstrap/navbar.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/navs.less [moved from theme/bootstrap/less/bootstrap/navs.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/pager.less [moved from theme/bootstrap/less/bootstrap/pager.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/pagination.less [moved from theme/bootstrap/less/bootstrap/pagination.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/popovers.less [moved from theme/bootstrap/less/bootstrap/popovers.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/progress-bars.less [moved from theme/bootstrap/less/bootstrap/progress-bars.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/reset.less [moved from theme/bootstrap/less/bootstrap/reset.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/responsive-1200px-min.less [moved from theme/bootstrap/less/bootstrap/responsive-1200px-min.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/responsive-767px-max.less [moved from theme/bootstrap/less/bootstrap/responsive-767px-max.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/responsive-768px-979px.less [moved from theme/bootstrap/less/bootstrap/responsive-768px-979px.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/responsive-navbar.less [moved from theme/bootstrap/less/bootstrap/responsive-navbar.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/responsive-utilities.less [moved from theme/bootstrap/less/bootstrap/responsive-utilities.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/responsive.less [moved from theme/bootstrap/less/bootstrap/responsive.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/scaffolding.less [moved from theme/bootstrap/less/bootstrap/scaffolding.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/sprites.less [moved from theme/bootstrap/less/bootstrap/sprites.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/tables.less [moved from theme/bootstrap/less/bootstrap/tables.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/thumbnails.less [moved from theme/bootstrap/less/bootstrap/thumbnails.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/tooltip.less [moved from theme/bootstrap/less/bootstrap/tooltip.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/type.less [moved from theme/bootstrap/less/bootstrap/type.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/utilities.less [moved from theme/bootstrap/less/bootstrap/utilities.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/variables.less [moved from theme/bootstrap/less/bootstrap/variables.less with 100% similarity]
theme/bootstrapbase/less/bootstrap/wells.less [moved from theme/bootstrap/less/bootstrap/wells.less with 100% similarity]
theme/bootstrapbase/less/editor.less [moved from theme/bootstrap/less/editor.less with 100% similarity]
theme/bootstrapbase/less/moodle.less [moved from theme/bootstrap/less/moodle.less with 100% similarity]
theme/bootstrapbase/less/moodle/admin.less [moved from theme/bootstrap/less/moodle/admin.less with 96% similarity]
theme/bootstrapbase/less/moodle/backup-restore.less [moved from theme/bootstrap/less/moodle/backup-restore.less with 100% similarity]
theme/bootstrapbase/less/moodle/blocks.less [new file with mode: 0644]
theme/bootstrapbase/less/moodle/buttons.less [moved from theme/bootstrap/less/moodle/buttons.less with 100% similarity]
theme/bootstrapbase/less/moodle/calendar.less [moved from theme/bootstrap/less/moodle/calendar.less with 100% similarity]
theme/bootstrapbase/less/moodle/core.less [moved from theme/bootstrap/less/moodle/core.less with 99% similarity]
theme/bootstrapbase/less/moodle/course.less [moved from theme/bootstrap/less/moodle/course.less with 99% similarity]
theme/bootstrapbase/less/moodle/debug.less [moved from theme/bootstrap/less/moodle/debug.less with 68% similarity]
theme/bootstrapbase/less/moodle/expendable.less [moved from theme/bootstrap/less/moodle/expendable.less with 100% similarity]
theme/bootstrapbase/less/moodle/filemanager.less [moved from theme/bootstrap/less/moodle/filemanager.less with 100% similarity]
theme/bootstrapbase/less/moodle/forms.less [moved from theme/bootstrap/less/moodle/forms.less with 97% similarity]
theme/bootstrapbase/less/moodle/grade.less [moved from theme/bootstrap/less/moodle/grade.less with 100% similarity]
theme/bootstrapbase/less/moodle/message.less [moved from theme/bootstrap/less/moodle/message.less with 100% similarity]
theme/bootstrapbase/less/moodle/modules.less [moved from theme/bootstrap/less/moodle/modules.less with 100% similarity]
theme/bootstrapbase/less/moodle/question.less [moved from theme/bootstrap/less/moodle/question.less with 100% similarity]
theme/bootstrapbase/less/moodle/responsive.less [moved from theme/bootstrap/less/moodle/responsive.less with 100% similarity]
theme/bootstrapbase/less/moodle/tables.less [moved from theme/bootstrap/less/moodle/tables.less with 100% similarity]
theme/bootstrapbase/less/moodle/tabs.less [moved from theme/bootstrap/less/moodle/tabs.less with 100% similarity]
theme/bootstrapbase/less/moodle/undo.less [moved from theme/bootstrap/less/moodle/undo.less with 97% similarity]
theme/bootstrapbase/less/moodle/user.less [moved from theme/bootstrap/less/moodle/user.less with 100% similarity]
theme/bootstrapbase/less/moodle/yui_fixes.less [moved from theme/bootstrap/less/moodle/yui_fixes.less with 100% similarity]
theme/bootstrapbase/pix/favicon.ico [moved from theme/bootstrap/pix/favicon.ico with 100% similarity]
theme/bootstrapbase/pix/fp/alias.png [moved from theme/bootstrap/pix/fp/alias.png with 100% similarity]
theme/bootstrapbase/pix/fp/alias_sm.png [moved from theme/bootstrap/pix/fp/alias_sm.png with 100% similarity]
theme/bootstrapbase/pix/fp/check.png [moved from theme/bootstrap/pix/fp/check.png with 100% similarity]
theme/bootstrapbase/pix/fp/cross.png [moved from theme/bootstrap/pix/fp/cross.png with 100% similarity]
theme/bootstrapbase/pix/fp/dnd_arrow.gif [moved from theme/bootstrap/pix/fp/dnd_arrow.gif with 100% similarity]
theme/bootstrapbase/pix/fp/link.png [moved from theme/bootstrap/pix/fp/link.png with 100% similarity]
theme/bootstrapbase/pix/fp/link_sm.png [moved from theme/bootstrap/pix/fp/link_sm.png with 100% similarity]
theme/bootstrapbase/pix/fp/path_folder.png [moved from theme/bootstrap/pix/fp/path_folder.png with 100% similarity]
theme/bootstrapbase/pix/fp/path_folder_rtl.png [moved from theme/bootstrap/pix/fp/path_folder_rtl.png with 100% similarity]
theme/bootstrapbase/pix/fp/view_icon_active.png [moved from theme/bootstrap/pix/fp/view_icon_active.png with 100% similarity]
theme/bootstrapbase/pix/fp/view_icon_inactive.png [moved from theme/bootstrap/pix/fp/view_icon_inactive.png with 100% similarity]
theme/bootstrapbase/pix/fp/view_icon_selected.png [moved from theme/bootstrap/pix/fp/view_icon_selected.png with 100% similarity]
theme/bootstrapbase/pix/fp/view_list_active.png [moved from theme/bootstrap/pix/fp/view_list_active.png with 100% similarity]
theme/bootstrapbase/pix/fp/view_list_inactive.png [moved from theme/bootstrap/pix/fp/view_list_inactive.png with 100% similarity]
theme/bootstrapbase/pix/fp/view_list_selected.png [moved from theme/bootstrap/pix/fp/view_list_selected.png with 100% similarity]
theme/bootstrapbase/pix/fp/view_tree_active.png [moved from theme/bootstrap/pix/fp/view_tree_active.png with 100% similarity]
theme/bootstrapbase/pix/fp/view_tree_inactive.png [moved from theme/bootstrap/pix/fp/view_tree_inactive.png with 100% similarity]
theme/bootstrapbase/pix/fp/view_tree_selected.png [moved from theme/bootstrap/pix/fp/view_tree_selected.png with 100% similarity]
theme/bootstrapbase/pix/glyphicons-halflings-white.png [moved from theme/bootstrap/pix/glyphicons-halflings-white.png with 100% similarity]
theme/bootstrapbase/pix/glyphicons-halflings.png [moved from theme/bootstrap/pix/glyphicons-halflings.png with 100% similarity]
theme/bootstrapbase/pix/header.jpg [moved from theme/bootstrap/pix/header.jpg with 100% similarity]
theme/bootstrapbase/pix/horizontal-menu-submenu-indicator.png [moved from theme/bootstrap/pix/horizontal-menu-submenu-indicator.png with 100% similarity]
theme/bootstrapbase/pix/screenshot.jpg [new file with mode: 0644]
theme/bootstrapbase/pix/sprite.png [moved from theme/bootstrap/pix/sprite.png with 100% similarity]
theme/bootstrapbase/pix/vertical-menu-submenu-indicator.png [moved from theme/bootstrap/pix/vertical-menu-submenu-indicator.png with 100% similarity]
theme/bootstrapbase/pix/yui2-treeview-sprite-rtl.gif [moved from theme/bootstrap/pix/yui2-treeview-sprite-rtl.gif with 100% similarity]
theme/bootstrapbase/readme_moodle.txt [moved from theme/bootstrap/readme_moodle.txt with 84% similarity]
theme/bootstrapbase/renderers.php [moved from theme/bootstrap/renderers.php with 96% similarity]
theme/bootstrapbase/renderers/core.php [moved from theme/bootstrap/renderers/core.php with 98% similarity]
theme/bootstrapbase/style/README [new file with mode: 0644]
theme/bootstrapbase/style/editor.css [moved from theme/bootstrap/style/editor.css with 100% similarity]
theme/bootstrapbase/style/moodle.css [new file with mode: 0644]
theme/bootstrapbase/version.php [moved from theme/bootstrap/version.php with 91% similarity]
theme/bootstrapbase/yui/build/moodle-theme_bootstrap-bootstrap/moodle-theme_bootstrap-bootstrap-debug.js [moved from theme/bootstrap/yui/build/moodle-theme_bootstrap-bootstrap/moodle-theme_bootstrap-bootstrap-debug.js with 100% similarity]
theme/bootstrapbase/yui/build/moodle-theme_bootstrap-bootstrap/moodle-theme_bootstrap-bootstrap-min.js [moved from theme/bootstrap/yui/build/moodle-theme_bootstrap-bootstrap/moodle-theme_bootstrap-bootstrap-min.js with 100% similarity]
theme/bootstrapbase/yui/build/moodle-theme_bootstrap-bootstrap/moodle-theme_bootstrap-bootstrap.js [moved from theme/bootstrap/yui/build/moodle-theme_bootstrap-bootstrap/moodle-theme_bootstrap-bootstrap.js with 100% similarity]
theme/bootstrapbase/yui/build/moodle-theme_bootstrapbase-bootstrap/moodle-theme_bootstrapbase-bootstrap-debug.js [new file with mode: 0644]
theme/bootstrapbase/yui/build/moodle-theme_bootstrapbase-bootstrap/moodle-theme_bootstrapbase-bootstrap-min.js [new file with mode: 0644]
theme/bootstrapbase/yui/build/moodle-theme_bootstrapbase-bootstrap/moodle-theme_bootstrapbase-bootstrap.js [new file with mode: 0644]
theme/bootstrapbase/yui/src/bootstrap/build.json [moved from theme/bootstrap/yui/src/bootstrap/build.json with 68% similarity]
theme/bootstrapbase/yui/src/bootstrap/js/bootstrap.js [moved from theme/bootstrap/yui/src/bootstrap/js/bootstrap.js with 95% similarity]
theme/bootstrapbase/yui/src/bootstrap/js/bootstrapcollapse.js [moved from theme/bootstrap/yui/src/bootstrap/js/bootstrapcollapse.js with 100% similarity]
theme/bootstrapbase/yui/src/bootstrap/js/bootstrapdropdown.js [moved from theme/bootstrap/yui/src/bootstrap/js/bootstrapdropdown.js with 100% similarity]
theme/bootstrapbase/yui/src/bootstrap/js/bootstrapengine.js [moved from theme/bootstrap/yui/src/bootstrap/js/bootstrapengine.js with 100% similarity]
theme/bootstrapbase/yui/src/bootstrap/meta/bootstrap.json [moved from theme/bootstrap/yui/src/bootstrap/meta/bootstrap.json with 62% similarity]
theme/boxxie/config.php
theme/boxxie/lang/en/theme_boxxie.php
theme/boxxie/version.php
theme/brick/config.php
theme/brick/lang/en/theme_brick.php
theme/brick/settings.php
theme/brick/version.php
theme/canvas/config.php
theme/canvas/version.php
theme/clean/README.txt [moved from theme/simple/README.txt with 78% similarity]
theme/clean/config.php [moved from theme/simple/config.php with 85% similarity]
theme/clean/lang/en/theme_clean.php [moved from theme/simple/lang/en/theme_simple.php with 82% similarity]
theme/clean/layout/general.php [moved from theme/simple/layout/general.php with 89% similarity]
theme/clean/lib.php [moved from theme/simple/lib.php with 79% similarity]
theme/clean/pix/favicon.ico [new file with mode: 0644]
theme/clean/pix/screenshot.jpg [moved from theme/simple/pix/screenshot.jpg with 100% similarity]
theme/clean/settings.php [moved from theme/simple/settings.php with 67% similarity]
theme/clean/style/custom.css [moved from theme/simple/style/custom.css with 100% similarity]
theme/clean/version.php [moved from theme/simple/version.php with 86% similarity]
theme/formal_white/config.php
theme/formal_white/db/install.php
theme/formal_white/db/upgrade.php
theme/formal_white/settings.php
theme/formal_white/version.php
theme/formfactor/config.php
theme/formfactor/lang/en/theme_formfactor.php
theme/formfactor/version.php
theme/fusion/config.php
theme/fusion/lang/en/theme_fusion.php
theme/fusion/settings.php
theme/fusion/version.php
theme/image.php
theme/index.php
theme/leatherbound/config.php
theme/leatherbound/lang/en/theme_leatherbound.php
theme/leatherbound/version.php
theme/magazine/settings.php
theme/magazine/version.php
theme/mymobile/config.php
theme/mymobile/lang/en/theme_mymobile.php
theme/mymobile/layout/embedded.php
theme/mymobile/layout/general.php
theme/mymobile/lib.php
theme/mymobile/renderers.php
theme/mymobile/settings.php
theme/mymobile/version.php
theme/nimble/config.php
theme/nimble/lang/en/theme_nimble.php
theme/nimble/settings.php
theme/nimble/version.php
theme/nonzero/config.php
theme/nonzero/lang/en/theme_nonzero.php
theme/nonzero/lib.php
theme/nonzero/settings.php
theme/nonzero/version.php
theme/overlay/config.php
theme/overlay/lang/en/theme_overlay.php
theme/overlay/settings.php
theme/overlay/version.php
theme/serenity/version.php
theme/sky_high/config.php
theme/sky_high/settings.php
theme/sky_high/version.php
theme/splash/settings.php
theme/splash/version.php
theme/standard/config.php
theme/standard/version.php
theme/standardold/config.php
theme/standardold/version.php
theme/styles.php
theme/styles_debug.php
theme/switchdevice.php
theme/upgrade.txt
theme/yui_combo.php
theme/yui_image.php
user/externallib.php
version.php
webservice/externallib.php

index 659a56c..1ff7293 100644 (file)
@@ -78,9 +78,13 @@ class mnet_review_host_form extends moodleform {
         $mnet_peer = $this->_customdata['peer'];
 
         $mform->addElement('hidden', 'last_connect_time');
+        $mform->setType('last_connect_time', PARAM_INT);
         $mform->addElement('hidden', 'id');
+        $mform->setType('id', PARAM_INT);
         $mform->addElement('hidden', 'applicationid');
+        $mform->setType('applicationid', PARAM_INT);
         $mform->addElement('hidden', 'oldpublickey');
+        $mform->setType('oldpublickey', PARAM_PEM);
 
         $mform->addElement('text', 'name', get_string('site'), array('maxlength' => 80, 'size' => 50));
         $mform->setType('name', PARAM_NOTAGS);
@@ -148,6 +152,7 @@ class mnet_review_host_form extends moodleform {
             $mform->addGroup($radioarray, 'radioar', get_string('deleted'), array(' ', ' '), false);
         } else {
             $mform->addElement('hidden', 'deleted');
+            $mform->setType('deleted', PARAM_BOOL);
         }
 
         // finished with static stuff, print save button
index 30b4b9e..8ef4456 100644 (file)
@@ -50,6 +50,8 @@ class mnet_profile_form extends moodleform {
         }
 
         $mform->addElement('hidden', 'hostid', $this->_customdata['hostid']);
+        $mform->setType('hostid', PARAM_INT);
+
         $fields = mnet_profile_field_options();
 
         // Fields to import ----------------------------------------------------
index 497eead..63607e1 100644 (file)
@@ -39,6 +39,7 @@ class mnet_services_form extends moodleform {
         $myservices = mnet_get_service_info($mnet_peer);
 
         $mform->addElement('hidden', 'hostid', $mnet_peer->id);
+        $mform->setType('hostid', PARAM_INT);
 
         $count = 0;
         foreach ($myservices as $name => $versions) {
@@ -55,6 +56,8 @@ class mnet_services_form extends moodleform {
             $mform->addElement('html', '<h3>' .  get_string($name.'_name', $langmodule , $mnet_peer->name) . '</h3>' . get_string($name.'_description', $langmodule, $mnet_peer->name));
 
             $mform->addElement('hidden', 'exists[' . $version['serviceid'] . ']', 1);
+            // Temporary fix until MDL-38885 gets integrated.
+            $mform->setType('exists', PARAM_BOOL);
 
             $pubstr = get_string('publish','mnet');
             if (!empty($version['hostsubscribes'])) {
index 972bf51..08157df 100644 (file)
@@ -152,7 +152,7 @@ if ($fetchremote) {
 $deployer = available_update_deployer::instance();
 if ($deployer->enabled()) {
     $myurl = new moodle_url($PAGE->url, array('updatesonly' => $updatesonly, 'contribonly' => $contribonly));
-    $deployer->initialize($myurl, $myurl);
+    $deployer->initialize($myurl, new moodle_url('/admin'));
 
     $deploydata = $deployer->submitted_data();
     if (!empty($deploydata)) {
index 863af66..9e28f03 100644 (file)
@@ -49,8 +49,10 @@ class site_unregistration_form extends moodleform {
         $unregisterlabel = get_string('unregister', 'hub');
         $mform->addElement('checkbox', 'unpublishalladvertisedcourses', '',
                 ' ' . get_string('unpublishalladvertisedcourses', 'hub'));
+        $mform->setType('unpublishalladvertisedcourses', PARAM_INT);
         $mform->addElement('checkbox', 'unpublishalluploadedcourses', '',
                 ' ' . get_string('unpublishalluploadedcourses', 'hub'));
+        $mform->setType('unpublishalluploadedcourses', PARAM_INT);
 
         $mform->addElement('hidden', 'confirm', 1);
         $mform->setType('confirm', PARAM_INT);
@@ -82,7 +84,6 @@ class site_clean_registration_data_form extends moodleform {
         $unregisterlabel = get_string('forceunregister', 'hub');
         $mform->addElement('static', '', get_string('warning', 'hub'), get_string('forceunregisterconfirmation', 'hub', $hubname));
 
-
         $mform->addElement('hidden', 'confirm', 1);
         $mform->setType('confirm', PARAM_INT);
         $mform->addElement('hidden', 'unregistration', 1);
@@ -149,6 +150,7 @@ class hub_selector_form extends moodleform {
         if (!empty($hubs)) {
             $mform->addElement('select', 'publichub', get_string('publichub', 'hub'),
                     $options, array("size" => 15));
+            $mform->setType('publichub', PARAM_URL);
         }
 
         $mform->addElement('static', 'or', '', get_string('orenterprivatehub', 'hub'));
@@ -156,8 +158,10 @@ class hub_selector_form extends moodleform {
         //Private hub
         $mform->addElement('text', 'unlistedurl', get_string('privatehuburl', 'hub'),
                 array('class' => 'registration_textfield'));
+        $mform->setType('unlistedurl', PARAM_URL);
         $mform->addElement('text', 'password', get_string('password'),
                 array('class' => 'registration_textfield'));
+        $mform->setType('password', PARAM_RAW);
 
         $this->add_action_buttons(false, get_string('selecthub', 'hub'));
     }
@@ -171,11 +175,8 @@ class hub_selector_form extends moodleform {
 
         $unlistedurl = $this->_form->_submitValues['unlistedurl'];
 
-        if (!empty($unlistedurl)) {
-            $unlistedurltotest = clean_param($unlistedurl, PARAM_URL);
-            if (empty($unlistedurltotest)) {
-                $errors['unlistedurl'] = get_string('badurlformat', 'hub');
-            }
+        if (empty($unlistedurl)) {
+            $errors['unlistedurl'] = get_string('badurlformat', 'hub');
         }
 
         return $errors;
@@ -272,6 +273,7 @@ class site_registration_form extends moodleform {
         $options[HUB_SITELINKPUBLISHED] = $registrationmanager->get_site_privacy_string(HUB_SITELINKPUBLISHED);
         $mform->addElement('select', 'privacy', get_string('siteprivacy', 'hub'), $options);
         $mform->setDefault('privacy', $privacy);
+        $mform->setType('privacy', PARAM_ALPHA);
         $mform->addHelpButton('privacy', 'privacy', 'hub');
         unset($options);
 
@@ -305,11 +307,13 @@ class site_registration_form extends moodleform {
         $countries = get_string_manager()->get_list_of_countries();
         $mform->addElement('select', 'countrycode', get_string('sitecountry', 'hub'), $countries);
         $mform->setDefault('countrycode', $country);
+        $mform->setType('countrycode', PARAM_ALPHANUMEXT);
         $mform->addHelpButton('countrycode', 'sitecountry', 'hub');
 
         $mform->addElement('text', 'geolocation', get_string('sitegeolocation', 'hub'),
                 array('class' => 'registration_textfield'));
         $mform->setDefault('geolocation', $geolocation);
+        $mform->setType('geolocation', PARAM_RAW);
         $mform->addHelpButton('geolocation', 'sitegeolocation', 'hub');
 
         $mform->addElement('text', 'contactname', get_string('siteadmin', 'hub'),
@@ -327,7 +331,7 @@ class site_registration_form extends moodleform {
         $mform->addElement('text', 'contactemail', get_string('siteemail', 'hub'),
                 array('class' => 'registration_textfield'));
         $mform->addRule('contactemail', $strrequired, 'required', null, 'client');
-        $mform->setType('contactemail', PARAM_TEXT);
+        $mform->setType('contactemail', PARAM_EMAIL);
         $mform->setDefault('contactemail', $contactemail);
         $mform->addHelpButton('contactemail', 'siteemail', 'hub');
 
@@ -336,6 +340,7 @@ class site_registration_form extends moodleform {
         $options[1] = get_string("registrationcontactyes");
         $mform->addElement('select', 'contactable', get_string('siteregistrationcontact', 'hub'), $options);
         $mform->setDefault('contactable', $contactable);
+        $mform->setType('contactable', PARAM_INT);
         $mform->addHelpButton('contactable', 'siteregistrationcontact', 'hub');
         unset($options);
 
@@ -344,6 +349,7 @@ class site_registration_form extends moodleform {
         $options[1] = get_string("registrationyes");
         $mform->addElement('select', 'emailalert', get_string('siteregistrationemail', 'hub'), $options);
         $mform->setDefault('emailalert', $emailalert);
+        $mform->setType('emailalert', PARAM_INT);
         $mform->addHelpButton('emailalert', 'siteregistrationemail', 'hub');
         unset($options);
 
@@ -381,79 +387,89 @@ class site_registration_form extends moodleform {
         if (HUB_MOODLEORGHUBURL != $huburl) {
             $mform->addElement('checkbox', 'courses', get_string('sendfollowinginfo', 'hub'),
                     " " . get_string('coursesnumber', 'hub', $coursecount));
-            $mform->setDefault('courses', true);
+            $mform->setDefault('courses', 1);
+            $mform->setType('courses', PARAM_INT);
             $mform->addHelpButton('courses', 'sendfollowinginfo', 'hub');
 
             $mform->addElement('checkbox', 'users', '',
                     " " . get_string('usersnumber', 'hub', $usercount));
-            $mform->setDefault('users', true);
+            $mform->setDefault('users', 1);
+            $mform->setType('users', PARAM_INT);
 
             $mform->addElement('checkbox', 'roleassignments', '',
                     " " . get_string('roleassignmentsnumber', 'hub', $roleassigncount));
-            $mform->setDefault('roleassignments', true);
+            $mform->setDefault('roleassignments', 1);
+            $mform->setType('roleassignments', PARAM_INT);
 
             $mform->addElement('checkbox', 'posts', '',
                     " " . get_string('postsnumber', 'hub', $postcount));
-            $mform->setDefault('posts', true);
+            $mform->setDefault('posts', 1);
+            $mform->setType('posts', PARAM_INT);
 
             $mform->addElement('checkbox', 'questions', '',
                     " " . get_string('questionsnumber', 'hub', $questioncount));
-            $mform->setDefault('questions', true);
+            $mform->setDefault('questions', 1);
+            $mform->setType('questions', PARAM_INT);
 
             $mform->addElement('checkbox', 'resources', '',
                     " " . get_string('resourcesnumber', 'hub', $resourcecount));
-            $mform->setDefault('resources', true);
+            $mform->setDefault('resources', 1);
+            $mform->setType('resources', PARAM_INT);
 
             $mform->addElement('checkbox', 'badges', '',
                     " " . get_string('badgesnumber', 'hub', $badges));
-            $mform->setDefault('badges', true);
+            $mform->setDefault('badges', 1);
+            $mform->setType('resources', PARAM_INT);
 
             $mform->addElement('checkbox', 'issuedbadges', '',
                     " " . get_string('issuedbadgesnumber', 'hub', $issuedbadges));
-            $mform->setDefault('issuedbadges', true);
+            $mform->setDefault('issuedbadges', 1);
+            $mform->setType('resources', PARAM_INT);
 
             $mform->addElement('checkbox', 'participantnumberaverage', '',
                     " " . get_string('participantnumberaverage', 'hub', $participantnumberaverage));
-            $mform->setDefault('participantnumberaverage', true);
+            $mform->setDefault('participantnumberaverage', 1);
+            $mform->setType('participantnumberaverage', PARAM_FLOAT);
 
             $mform->addElement('checkbox', 'modulenumberaverage', '',
                     " " . get_string('modulenumberaverage', 'hub', $modulenumberaverage));
-            $mform->setDefault('modulenumberaverage', true);
+            $mform->setDefault('modulenumberaverage', 1);
+            $mform->setType('modulenumberaverage', PARAM_FLOAT);
         } else {
             $mform->addElement('static', 'courseslabel', get_string('sendfollowinginfo', 'hub'),
                     " " . get_string('coursesnumber', 'hub', $coursecount));
-            $mform->addElement('hidden', 'courses', true);
-            $mform->setType('courses', PARAM_FLOAT);
+            $mform->addElement('hidden', 'courses', 1);
+            $mform->setType('courses', PARAM_INT);
             $mform->addHelpButton('courseslabel', 'sendfollowinginfo', 'hub');
 
             $mform->addElement('static', 'userslabel', '',
                     " " . get_string('usersnumber', 'hub', $usercount));
-            $mform->addElement('hidden', 'users', true);
-            $mform->setType('users', PARAM_FLOAT);
+            $mform->addElement('hidden', 'users', 1);
+            $mform->setType('users', PARAM_INT);
 
             $mform->addElement('static', 'roleassignmentslabel', '',
                     " " . get_string('roleassignmentsnumber', 'hub', $roleassigncount));
-            $mform->addElement('hidden', 'roleassignments', true);
-            $mform->setType('roleassignments', PARAM_FLOAT);
+            $mform->addElement('hidden', 'roleassignments', 1);
+            $mform->setType('roleassignments', PARAM_INT);
 
             $mform->addElement('static', 'postslabel', '',
                     " " . get_string('postsnumber', 'hub', $postcount));
-            $mform->addElement('hidden', 'posts', true);
-            $mform->setType('posts', PARAM_FLOAT);
+            $mform->addElement('hidden', 'posts', 1);
+            $mform->setType('posts', PARAM_INT);
 
             $mform->addElement('static', 'questionslabel', '',
                     " " . get_string('questionsnumber', 'hub', $questioncount));
-            $mform->addElement('hidden', 'questions', true);
-            $mform->setType('questions', PARAM_FLOAT);
+            $mform->addElement('hidden', 'questions', 1);
+            $mform->setType('questions', PARAM_INT);
 
             $mform->addElement('static', 'resourceslabel', '',
                     " " . get_string('resourcesnumber', 'hub', $resourcecount));
-            $mform->addElement('hidden', 'resources', true);
-            $mform->setType('resources', PARAM_FLOAT);
+            $mform->addElement('hidden', 'resources', 1);
+            $mform->setType('resources', PARAM_INT);
 
             $mform->addElement('static', 'badgeslabel', '',
                     " " . get_string('badgesnumber', 'hub', $badges));
-            $mform->addElement('hidden', 'badges', true);
+            $mform->addElement('hidden', 'badges', 1);
             $mform->setType('badges', PARAM_INT);
 
             $mform->addElement('static', 'issuedbadgeslabel', '',
@@ -463,12 +479,12 @@ class site_registration_form extends moodleform {
 
             $mform->addElement('static', 'participantnumberaveragelabel', '',
                     " " . get_string('participantnumberaverage', 'hub', $participantnumberaverage));
-            $mform->addElement('hidden', 'participantnumberaverage', true);
+            $mform->addElement('hidden', 'participantnumberaverage', 1);
             $mform->setType('participantnumberaverage', PARAM_FLOAT);
 
             $mform->addElement('static', 'modulenumberaveragelabel', '',
                     " " . get_string('modulenumberaverage', 'hub', $modulenumberaverage));
-            $mform->addElement('hidden', 'modulenumberaverage', true);
+            $mform->addElement('hidden', 'modulenumberaverage', 1);
             $mform->setType('modulenumberaverage', PARAM_FLOAT);
         }
 
index 5f96325..9f53ead 100644 (file)
@@ -279,10 +279,10 @@ class core_admin_renderer extends plugin_renderer_base {
             $output .= $this->output->container(get_string('updatepluginconfirmexternal', 'core_plugin', $repotype), 'updatepluginconfirmexternal');
         }
 
-        $widget = $deployer->make_execution_widget($data['updateinfo']);
+        $widget = $deployer->make_execution_widget($data['updateinfo'], $data['returnurl']);
         $output .= $this->output->render($widget);
 
-        $output .= $this->output->single_button($data['returnurl'], get_string('cancel', 'core'), 'get');
+        $output .= $this->output->single_button($data['callerurl'], get_string('cancel', 'core'), 'get');
 
         $output .= $this->container_end();
         $output .= $this->footer();
@@ -896,7 +896,7 @@ class core_admin_renderer extends plugin_renderer_base {
                         continue;
                     }
 
-                } else if ($isstandard and $statusisboring and $dependenciesok and empty($availableupdates)) {
+                } else if ($statusisboring and $dependenciesok and empty($availableupdates)) {
                     // no change is going to happen to the plugin - display it only
                     // if the user wants to see the full list
                     if (empty($options['full'])) {
@@ -1179,9 +1179,12 @@ class core_admin_renderer extends plugin_renderer_base {
                 } else {
                     $icon = $this->output->pix_icon('spacer', '', 'moodle', array('class' => 'icon pluginicon noicon'));
                 }
-                if ($plugin->get_status() === plugin_manager::PLUGIN_STATUS_MISSING) {
-                    $msg = html_writer::tag('span', get_string('status_missing', 'core_plugin'), array('class' => 'notifyproblem'));
-                    $row->attributes['class'] .= ' missingfromdisk';
+                $status = $plugin->get_status();
+                $row->attributes['class'] .= ' status-'.$status;
+                if ($status === plugin_manager::PLUGIN_STATUS_MISSING) {
+                    $msg = html_writer::tag('span', get_string('status_missing', 'core_plugin'), array('class' => 'statusmsg'));
+                } else if ($status === plugin_manager::PLUGIN_STATUS_NEW) {
+                    $msg = html_writer::tag('span', get_string('status_new', 'core_plugin'), array('class' => 'statusmsg'));
                 } else {
                     $msg = '';
                 }
index 9100567..e751525 100644 (file)
@@ -11,30 +11,77 @@ if ($hassiteconfig
     $ADMIN->add('courses', new admin_externalpage('coursemgmt', new lang_string('coursemgmt', 'admin'), $CFG->wwwroot . '/course/manage.php',
             array('moodle/category:manage', 'moodle/course:create')));
 
-/// Course Default Settings Page
-/// NOTE: these settings must be applied after all other settings because they depend on them
-    ///main course settings
+    // Course Default Settings Page.
+    // NOTE: these settings must be applied after all other settings because they depend on them.
+
+
+    // Main course settings.
     $temp = new admin_settingpage('coursesettings', new lang_string('coursesettings'));
     require_once($CFG->dirroot.'/course/lib.php');
+
+    $choices = array();
+    $choices['0'] = new lang_string('hide');
+    $choices['1'] = new lang_string('show');
+    $temp->add(new admin_setting_configselect('moodlecourse/visible', new lang_string('visible'), new lang_string('visible_help'),
+        1, $choices));
+
+
+    // Course format.
+    $temp->add(new admin_setting_heading('courseformathdr', new lang_string('type_format', 'plugin'), ''));
+
     $courseformats = get_sorted_course_formats(true);
     $formcourseformats = array();
     foreach ($courseformats as $courseformat) {
         $formcourseformats[$courseformat] = new lang_string('pluginname', "format_$courseformat");
     }
-    $temp->add(new admin_setting_configselect('moodlecourse/format', new lang_string('format'), new lang_string('coursehelpformat'), 'weeks',$formcourseformats));
+    $temp->add(new admin_setting_configselect('moodlecourse/format', new lang_string('format'), new lang_string('coursehelpformat'),
+        'weeks',$formcourseformats));
 
-    $temp->add(new admin_setting_configtext('moodlecourse/maxsections', new lang_string('maxnumberweeks'), new lang_string('maxnumberweeks_desc'), 52));
+    $temp->add(new admin_setting_configtext('moodlecourse/maxsections', new lang_string('maxnumberweeks'),
+        new lang_string('maxnumberweeks_desc'), 52));
 
-    $temp->add(new admin_settings_num_course_sections('moodlecourse/numsections', new lang_string('numberweeks'), new lang_string('coursehelpnumberweeks'), 10));
+    $temp->add(new admin_settings_num_course_sections('moodlecourse/numsections', new lang_string('numberweeks'),
+        new lang_string('coursehelpnumberweeks'), 10));
 
     $choices = array();
     $choices['0'] = new lang_string('hiddensectionscollapsed');
     $choices['1'] = new lang_string('hiddensectionsinvisible');
-    $temp->add(new admin_setting_configselect('moodlecourse/hiddensections', new lang_string('hiddensections'), new lang_string('coursehelphiddensections'), 0,$choices));
+    $temp->add(new admin_setting_configselect('moodlecourse/hiddensections', new lang_string('hiddensections'),
+        new lang_string('coursehelphiddensections'), 0, $choices));
+
+    $choices = array();
+    $choices[COURSE_DISPLAY_SINGLEPAGE] = new lang_string('coursedisplay_single');
+    $choices[COURSE_DISPLAY_MULTIPAGE] = new lang_string('coursedisplay_multi');
+    $temp->add(new admin_setting_configselect('moodlecourse/coursedisplay', new lang_string('coursedisplay'),
+        new lang_string('coursedisplay_help'), COURSE_DISPLAY_SINGLEPAGE, $choices));
+
+
+    // Appearance.
+    $temp->add(new admin_setting_heading('appearancehdr', new lang_string('appearance'), ''));
+
+    $languages = array();
+    $languages[''] = new lang_string('forceno');
+    $languages += get_string_manager()->get_list_of_translations();
+    $temp->add(new admin_setting_configselect('moodlecourse/lang', new lang_string('forcelanguage'), '', key($languages),
+        $languages));
+
     $options = range(0, 10);
-    $temp->add(new admin_setting_configselect('moodlecourse/newsitems', new lang_string('newsitemsnumber'), new lang_string('coursehelpnewsitemsnumber'), 5,$options));
-    $temp->add(new admin_setting_configselect('moodlecourse/showgrades', new lang_string('showgrades'), new lang_string('coursehelpshowgrades'), 1,array(0 => new lang_string('no'), 1 => new lang_string('yes'))));
-    $temp->add(new admin_setting_configselect('moodlecourse/showreports', new lang_string('showreports'), '', 0,array(0 => new lang_string('no'), 1 => new lang_string('yes'))));
+    $temp->add(new admin_setting_configselect('moodlecourse/newsitems', new lang_string('newsitemsnumber'),
+        new lang_string('coursehelpnewsitemsnumber'), 5, $options));
+    $temp->add(new admin_setting_configselect('moodlecourse/showgrades', new lang_string('showgrades'),
+        new lang_string('coursehelpshowgrades'), 1, array(0 => new lang_string('no'), 1 => new lang_string('yes'))));
+    $temp->add(new admin_setting_configselect('moodlecourse/showreports', new lang_string('showreports'), '', 0,
+        array(0 => new lang_string('no'), 1 => new lang_string('yes'))));
+
+
+    // Files and uploads.
+    $temp->add(new admin_setting_heading('filesanduploadshdr', new lang_string('filesanduploads'), ''));
+
+    if (!empty($CFG->legacyfilesinnewcourses)) {
+        $choices = array('0'=>new lang_string('no'), '2'=>new lang_string('yes'));
+        $temp->add(new admin_setting_configselect('moodlecourse/legacyfiles', new lang_string('courselegacyfiles'),
+            new lang_string('courselegacyfiles_help'), key($choices), $choices));
+    }
 
     $currentmaxbytes = get_config('moodlecourse', 'maxbytes');
     if (isset($CFG->maxbytes)) {
@@ -42,18 +89,17 @@ if ($hassiteconfig
     } else {
         $choices = get_max_upload_sizes(0, 0, 0, $currentmaxbytes);
     }
-    $temp->add(new admin_setting_configselect('moodlecourse/maxbytes', new lang_string('maximumupload'), new lang_string('coursehelpmaximumupload'), key($choices), $choices));
+    $temp->add(new admin_setting_configselect('moodlecourse/maxbytes', new lang_string('maximumupload'),
+        new lang_string('coursehelpmaximumupload'), key($choices), $choices));
 
-    if (!empty($CFG->legacyfilesinnewcourses)) {
-        $choices = array('0'=>new lang_string('no'), '2'=>new lang_string('yes'));
-        $temp->add(new admin_setting_configselect('moodlecourse/legacyfiles', new lang_string('courselegacyfiles'), new lang_string('courselegacyfiles_help'), key($choices), $choices));
-    }
 
-    $choices = array();
-    $choices[COURSE_DISPLAY_SINGLEPAGE] = new lang_string('coursedisplay_single');
-    $choices[COURSE_DISPLAY_MULTIPAGE] = new lang_string('coursedisplay_multi');
-    $temp->add(new admin_setting_configselect('moodlecourse/coursedisplay', new lang_string('coursedisplay'), new lang_string('coursedisplay_help'), COURSE_DISPLAY_SINGLEPAGE, $choices));
+    // Completion tracking.
+    $temp->add(new admin_setting_heading('progress', new lang_string('completion','completion'), ''));
+    $temp->add(new admin_setting_configselect('moodlecourse/enablecompletion', new lang_string('completion', 'completion'),
+        new lang_string('enablecompletion_help', 'completion'), 0, array(0 => new lang_string('no'), 1 => new lang_string('yes'))));
+
 
+    // Groups.
     $temp->add(new admin_setting_heading('groups', new lang_string('groups', 'group'), ''));
     $choices = array();
     $choices[NOGROUPS] = new lang_string('groupsnone', 'group');
@@ -62,27 +108,10 @@ if ($hassiteconfig
     $temp->add(new admin_setting_configselect('moodlecourse/groupmode', new lang_string('groupmode'), '', key($choices),$choices));
     $temp->add(new admin_setting_configselect('moodlecourse/groupmodeforce', new lang_string('force'), new lang_string('coursehelpforce'), 0,array(0 => new lang_string('no'), 1 => new lang_string('yes'))));
 
-
-    $temp->add(new admin_setting_heading('availability', new lang_string('availability'), ''));
-    $choices = array();
-    $choices['0'] = new lang_string('courseavailablenot');
-    $choices['1'] = new lang_string('courseavailable');
-    $temp->add(new admin_setting_configselect('moodlecourse/visible', new lang_string('visible'), '', 1,$choices));
-
-
-    $temp->add(new admin_setting_heading('language', new lang_string('language'), ''));
-    $languages=array();
-    $languages[''] = new lang_string('forceno');
-    $languages += get_string_manager()->get_list_of_translations();
-    $temp->add(new admin_setting_configselect('moodlecourse/lang', new lang_string('forcelanguage'), '',key($languages),$languages));
-
-    $temp->add(new admin_setting_heading('progress', new lang_string('progress','completion'), ''));
-    $temp->add(new admin_setting_configselect('moodlecourse/enablecompletion', new lang_string('completion','completion'), '',
-        0, array(0 => new lang_string('completiondisabled','completion'), 1 => new lang_string('completionenabled','completion'))));
-
     $ADMIN->add('courses', $temp);
 
-/// "courserequests" settingpage
+
+    // "courserequests" settingpage.
     $temp = new admin_settingpage('courserequest', new lang_string('courserequest'));
     $temp->add(new admin_setting_configcheckbox('enablecourserequests', new lang_string('enablecourserequests', 'admin'), new lang_string('configenablecourserequests', 'admin'), 0));
     $temp->add(new admin_settings_coursecat_select('defaultrequestcategory', new lang_string('defaultrequestcategory', 'admin'), new lang_string('configdefaultrequestcategory', 'admin'), 1));
index a9aeb58..291329d 100644 (file)
@@ -44,6 +44,7 @@ class tool_assignmentupgrade_batchoperations_form extends moodleform {
         $mform->addElement('header', 'general', get_string('batchoperations', 'tool_assignmentupgrade'));
         // Visible elements.
         $mform->addElement('hidden', 'selectedassignments', '', array('class'=>'selectedassignments'));
+        $mform->setType('selectedassignments', PARAM_SEQUENCE);
 
         $mform->addElement('submit', 'upgradeselected', get_string('upgradeselected', 'tool_assignmentupgrade'));
         $mform->addElement('submit', 'upgradeall', get_string('upgradeall', 'tool_assignmentupgrade'));
index 1fb8b9c..715c116 100644 (file)
@@ -43,6 +43,7 @@ class database_export_form extends moodleform {
 
         $mform->addElement('header', 'database', get_string('dbexport', 'tool_dbtransfer'));
         $mform->addElement('textarea', 'description', get_string('description'), array('rows'=>5, 'cols'=>60));
+        $mform->setType('description', PARAM_TEXT);
 
         $this->add_action_buttons(false, get_string('exportdata', 'tool_dbtransfer'));
     }
index d8a9923..3b408e4 100644 (file)
@@ -52,17 +52,32 @@ class database_transfer_form extends moodleform {
         $drivers = array_reverse($drivers, true);
 
         $mform->addElement('select', 'driver', get_string('dbtype', 'install'), $drivers);
+        $mform->setType('driver', PARAM_RAW);
+
         $mform->addElement('text', 'dbhost', get_string('databasehost', 'install'));
+        $mform->setType('dbhost', PARAM_HOST);
+
         $mform->addElement('text', 'dbname', get_string('databasename', 'install'));
+        $mform->setType('dbname', PARAM_ALPHANUMEXT);
+
         $mform->addElement('text', 'dbuser', get_string('databaseuser', 'install'));
+        $mform->setType('dbuser', PARAM_ALPHANUMEXT);
+
         $mform->addElement('passwordunmask', 'dbpass', get_string('databasepass', 'install'));
+        $mform->setType('dbpass', PARAM_RAW);
+
         $mform->addElement('text', 'prefix', get_string('dbprefix', 'install'));
+        $mform->setType('prefix', PARAM_ALPHANUMEXT);
+
         $mform->addElement('text', 'dbport', get_string('dbport', 'install'));
+        $mform->setType('dbport', PARAM_INT);
+
         if ($CFG->ostype !== 'WINDOWS') {
             $mform->addElement('text', 'dbsocket', get_string('databasesocket', 'install'));
         } else {
             $mform->addElement('hidden', 'dbsocket');
         }
+        $mform->setType('dbsocket', PARAM_RAW);
 
         $mform->addRule('driver', get_string('required'), 'required', null);
         $mform->addRule('dbhost', get_string('required'), 'required', null);
@@ -76,6 +91,7 @@ class database_transfer_form extends moodleform {
         $mform->addElement('header', 'database', get_string('options', 'tool_dbtransfer'));
 
         $mform->addElement('advcheckbox', 'enablemaintenance', get_string('enablemaintenance', 'tool_dbtransfer'));
+        $mform->setType('enablemaintenance', PARAM_BOOL);
         $mform->addHelpButton('enablemaintenance', 'enablemaintenance', 'tool_dbtransfer');
 
         $this->add_action_buttons(false, get_string('transferdata', 'tool_dbtransfer'));
index ec41f8e..60473f5 100644 (file)
@@ -40,17 +40,21 @@ class tool_qeupgradehelper_cron_setup_form extends moodleform {
 
         $mform->addElement('selectyesno', 'cronenabled',
                 get_string('cronenabled', 'tool_qeupgradehelper'));
+        $mform->setType('cronenabled', PARAM_BOOL);
 
         $mform->addElement('select', 'starthour',
                 get_string('cronstarthour', 'tool_qeupgradehelper'), range(0, 23));
+        $mform->setType('starthour', PARAM_INT);
 
         $mform->addElement('select', 'stophour',
                 get_string('cronstophour', 'tool_qeupgradehelper'),
                 array_combine(range(1, 24), range(1, 24)));
+        $mform->setType('stophour', PARAM_INT);
         $mform->setDefault('stophour', 24);
 
         $mform->addElement('duration', 'procesingtime',
                 get_string('cronprocesingtime', 'tool_qeupgradehelper'));
+        $mform->setType('procesingtime', PARAM_INT);
         $mform->setDefault('procesingtime', 60);
 
         $mform->disabledIf('starthour', 'cronenabled', 'eq', 0);
index cced4bc..d9c568b 100644 (file)
@@ -51,12 +51,23 @@ class tool_qeupgradehelper_extract_options_form extends moodleform {
 
         $mform->addElement('header', 'h1', 'Either extract a specific question_session');
         $mform->addElement('text', 'attemptid', 'Quiz attempt id', array('size' => '10'));
+        $mform->setType('attemptid', PARAM_INT);
+
         $mform->addElement('text', 'questionid', 'Question id', array('size' => '10'));
+        $mform->setType('questionid', PARAM_INT);
+
         $mform->addElement('header', 'h2', 'Or find and extract an example by type');
         $mform->addElement('select', 'behaviour', 'Behaviour', $behaviour);
+        $mform->setType('behaviour', PARAM_ALPHA);
+
         $mform->addElement('text', 'statehistory', 'State history', array('size' => '10'));
+        $mform->setType('statehistory', PARAM_RAW);
+
         $mform->addElement('select', 'qtype', 'Question type', $qtypes);
+        $mform->setType('qtype', PARAM_PLUGIN);
+
         $mform->addElement('text', 'extratests', 'Extra conditions', array('size' => '50'));
+        $mform->setType('extratests', PARAM_RAW);
         $this->add_action_buttons(false, 'Create test case');
     }
 }
index 88aaeda..dd1baec 100644 (file)
@@ -900,7 +900,28 @@ if ($formdata = $mform2->is_cancelled()) {
                 }
             }
 
-            if ($manual and $manualcache[$courseid]) {
+            if ($courseid == SITEID) {
+                // Technically frontpage does not have enrolments, but only role assignments,
+                // let's not invent new lang strings here for this rarely used feature.
+
+                if (!empty($user->{'role'.$i})) {
+                    $addrole = $user->{'role'.$i};
+                    if (array_key_exists($addrole, $rolecache)) {
+                        $rid = $rolecache[$addrole]->id;
+                    } else {
+                        $upt->track('enrolments', get_string('unknownrole', 'error', s($addrole)), 'error');
+                        continue;
+                    }
+
+                    role_assign($rid, $user->id, context_course::instance($courseid));
+
+                    $a = new stdClass();
+                    $a->course = $shortname;
+                    $a->role   = $rolecache[$rid]->name;
+                    $upt->track('enrolments', get_string('enrolledincourserole', 'enrol_manual', $a));
+                }
+
+            } else if ($manual and $manualcache[$courseid]) {
 
                 // find role
                 $rid = false;
index 745e9e1..6a1cc49 100644 (file)
@@ -40,10 +40,12 @@ class external_service_authorised_user_settings_form extends moodleform {
         $mform->addElement('text', 'iprestriction',
                 get_string('iprestriction', 'webservice'));
         $mform->addHelpButton('iprestriction', 'iprestriction', 'webservice');
+        $mform->setType('iprestriction', PARAM_RAW_TRIMMED);
 
         $mform->addElement('date_selector', 'validuntil',
                 get_string('validuntil', 'webservice'), array('optional' => true));
         $mform->addHelpButton('validuntil', 'validuntil', 'webservice');
+        $mform->setType('validuntil', PARAM_INT);
 
         $this->add_action_buttons(true, get_string('updateusersettings', 'webservice'));
 
@@ -65,14 +67,17 @@ class external_service_form extends moodleform {
         $mform->addRule('name', get_string('required'), 'required', null, 'client');
         $mform->setType('name', PARAM_TEXT);
         $mform->addElement('advcheckbox', 'enabled', get_string('enabled', 'webservice'));
+        $mform->setType('enabled', PARAM_BOOL);
         $mform->addElement('advcheckbox', 'restrictedusers',
                 get_string('restrictedusers', 'webservice'));
         $mform->addHelpButton('restrictedusers', 'restrictedusers', 'webservice');
+        $mform->setType('restrictedusers', PARAM_BOOL);
 
         //can users download files
         $mform->addElement('advcheckbox', 'downloadfiles', get_string('downloadfiles', 'webservice'));
         $mform->setAdvanced('downloadfiles');
         $mform->addHelpButton('downloadfiles', 'downloadfiles', 'webservice');
+        $mform->setType('downloadfiles', PARAM_BOOL);
 
         /// needed to select automatically the 'No required capability" option
         $currentcapabilityexist = false;
@@ -100,6 +105,7 @@ class external_service_form extends moodleform {
                 get_string('requiredcapability', 'webservice'), $capabilitychoices);
         $mform->addHelpButton('requiredcapability', 'requiredcapability', 'webservice');
         $mform->setAdvanced('requiredcapability');
+        $mform->setType('requiredcapability', PARAM_RAW);
 /// display notification error if the current requiredcapability doesn't exist anymore
         if (empty($currentcapabilityexist)) {
             global $OUTPUT;
@@ -209,9 +215,11 @@ class web_service_token_form extends moodleform {
                     $options[$userid] = fullname($user);
                 }
                 $mform->addElement('searchableselector', 'user', get_string('user'), $options);
+                $mform->setType('user', PARAM_INT);
             } else {
                 //simple text box for username or user id (if two username exists, a form error is displayed)
                 $mform->addElement('text', 'user', get_string('usernameorid', 'webservice'));
+                $mform->setType('user', PARAM_RAW_TRIMMED);
             }
             $mform->addRule('user', get_string('required'), 'required', null, 'client');
         }
@@ -231,12 +239,14 @@ class web_service_token_form extends moodleform {
         }
         $mform->addElement('select', 'service', get_string('service', 'webservice'), $options);
         $mform->addRule('service', get_string('required'), 'required', null, 'client');
-
+        $mform->setType('service', PARAM_INT);
 
         $mform->addElement('text', 'iprestriction', get_string('iprestriction', 'webservice'));
+        $mform->setType('iprestriction', PARAM_RAW_TRIMMED);
 
         $mform->addElement('date_selector', 'validuntil',
                 get_string('validuntil', 'webservice'), array('optional' => true));
+        $mform->setType('validuntil', PARAM_INT);
 
         $mform->addElement('hidden', 'action');
         $mform->setType('action', PARAM_ALPHANUMEXT);
index 228c7b7..dd9dc48 100644 (file)
@@ -29,9 +29,9 @@ require_once($CFG->libdir.'/adminlib.php');
 require_once("$CFG->libdir/externallib.php");
 require_once($CFG->dirroot . "/" . $CFG->admin . "/webservice/testclient_forms.php");
 
-$function = optional_param('function', '', PARAM_SAFEDIR);
-$protocol = optional_param('protocol', '', PARAM_SAFEDIR);
-$authmethod = optional_param('authmethod', '', PARAM_SAFEDIR);
+$function = optional_param('function', '', PARAM_PLUGIN);
+$protocol = optional_param('protocol', '', PARAM_ALPHA);
+$authmethod = optional_param('authmethod', '', PARAM_ALPHA);
 
 $PAGE->set_url('/' . $CFG->admin . '/webservice/testclient.php');
 $PAGE->navbar->ignore_active(true);
index 04cc360..ab88e23 100644 (file)
@@ -14,10 +14,13 @@ class webservice_test_client_form extends moodleform {
 
         $authmethod = array('simple' => 'simple', 'token' => 'token');
         $mform->addElement('select', 'authmethod', get_string('authmethod', 'webservice'), $authmethod);
+        $mform->setType('simple', PARAM_ALPHA);
 
         $mform->addElement('select', 'protocol', get_string('protocol', 'webservice'), $protocols);
+        $mform->setType('protocol', PARAM_ALPHA);
 
         $mform->addElement('select', 'function', get_string('function', 'webservice'), $functions);
+        $mform->setType('function', PARAM_PLUGIN);
 
         $this->add_action_buttons(false, get_string('select'));
     }
@@ -38,9 +41,12 @@ class moodle_user_create_users_form extends moodleform {
         $data = $this->_customdata;
         if ($data['authmethod'] == 'simple') {
             $mform->addElement('text', 'wsusername', 'wsusername');
+            $mform->setType('wsusername', PARAM_USERNAME);
             $mform->addElement('text', 'wspassword', 'wspassword');
-        } else  if ($data['authmethod'] == 'token') {
+            $mform->setType('wspassword', PARAM_RAW);
+        } else if ($data['authmethod'] == 'token') {
             $mform->addElement('text', 'token', 'token');
+            $mform->setType('token', PARAM_RAW_TRIMMED);
         }
 
         $mform->addElement('hidden', 'authmethod', $data['authmethod']);
@@ -48,19 +54,26 @@ class moodle_user_create_users_form extends moodleform {
 
         /// specific to the create users function
         $mform->addElement('text', 'username', 'username');
+        $mform->setType('username', PARAM_USERNAME);
         $mform->addElement('text', 'password', 'password');
+        $mform->setType('password', PARAM_RAW);
         $mform->addElement('text', 'firstname', 'firstname');
+        $mform->setType('firstname', PARAM_RAW);
         $mform->addElement('text', 'lastname', 'lastname');
+        $mform->setType('lastname', PARAM_RAW);
         $mform->addElement('text', 'email', 'email');
+        $mform->setType('email', PARAM_EMAIL);
 
         $mform->addElement('text', 'customfieldtype', 'customfieldtype');
+        $mform->setType('customfieldtype', PARAM_RAW);
         $mform->addElement('text', 'customfieldvalue', 'customfieldvalue');
+        $mform->setType('customfieldvalue', PARAM_RAW);
 
         $mform->addElement('hidden', 'function');
-        $mform->setType('function', PARAM_SAFEDIR);
+        $mform->setType('function', PARAM_PLUGIN);
 
         $mform->addElement('hidden', 'protocol');
-        $mform->setType('protocol', PARAM_SAFEDIR);
+        $mform->setType('protocol', PARAM_ALPHA);
 
 
 
@@ -112,32 +125,43 @@ class moodle_user_update_users_form extends moodleform {
         $data = $this->_customdata;
         if ($data['authmethod'] == 'simple') {
             $mform->addElement('text', 'wsusername', 'wsusername');
+            $mform->setType('wsusername', PARAM_USERNAME);
             $mform->addElement('text', 'wspassword', 'wspassword');
-        } else  if ($data['authmethod'] == 'token') {
+            $mform->setType('wspassword', PARAM_RAW);
+        } else if ($data['authmethod'] == 'token') {
             $mform->addElement('text', 'token', 'token');
+            $mform->setType('token', PARAM_RAW_TRIMMED);
         }
 
         $mform->addElement('hidden', 'authmethod', $data['authmethod']);
-        $mform->setType('authmethod', PARAM_SAFEDIR);
+        $mform->setType('authmethod', PARAM_ALPHA);
 
         /// specific to the create users function
         $mform->addElement('text', 'id', 'id');
         $mform->addRule('id', get_string('required'), 'required', null, 'client');
+        $mform->setType('id', PARAM_INT);
         $mform->addElement('text', 'username', 'username');
+        $mform->setType('username', PARAM_USERNAME);
         $mform->addElement('text', 'password', 'password');
+        $mform->setType('password', PARAM_RAW);
         $mform->addElement('text', 'firstname', 'firstname');
+        $mform->setType('firstname', PARAM_RAW);
         $mform->addElement('text', 'lastname', 'lastname');
+        $mform->setType('lastname', PARAM_RAW);
         $mform->addElement('text', 'email', 'email');
+        $mform->setType('email', PARAM_EMAIL);
 
 
         $mform->addElement('text', 'customfieldtype', 'customfieldtype');
+        $mform->setType('customfieldtype', PARAM_RAW);
         $mform->addElement('text', 'customfieldvalue', 'customfieldvalue');
+        $mform->setType('customfieldvalue', PARAM_RAW);
 
         $mform->addElement('hidden', 'function');
-        $mform->setType('function', PARAM_SAFEDIR);
+        $mform->setType('function', PARAM_PLUGIN);
 
         $mform->addElement('hidden', 'protocol');
-        $mform->setType('protocol', PARAM_SAFEDIR);
+        $mform->setType('protocol', PARAM_ALPHA);
 
 
 
@@ -195,28 +219,30 @@ class moodle_user_delete_users_form extends moodleform {
         $data = $this->_customdata;
         if ($data['authmethod'] == 'simple') {
             $mform->addElement('text', 'wsusername', 'wsusername');
+            $mform->setType('wsusername', PARAM_USERNAME);
             $mform->addElement('text', 'wspassword', 'wspassword');
-        } else  if ($data['authmethod'] == 'token') {
+            $mform->setType('wspassword', PARAM_RAW);
+        } else if ($data['authmethod'] == 'token') {
             $mform->addElement('text', 'token', 'token');
+            $mform->setType('token', PARAM_RAW_TRIMMED);
         }
 
         $mform->addElement('hidden', 'authmethod', $data['authmethod']);
-        $mform->setType('authmethod', PARAM_SAFEDIR);
+        $mform->setType('authmethod', PARAM_ALPHA);
 
         /// beginning of specific code to the create users function
         $mform->addElement('text', 'userids[0]', 'userids[0]');
         $mform->addElement('text', 'userids[1]', 'userids[1]');
         $mform->addElement('text', 'userids[2]', 'userids[2]');
         $mform->addElement('text', 'userids[3]', 'userids[3]');
+        $mform->setType('userids', PARAM_INT);
         /// end of specific code to the create users function
 
         $mform->addElement('hidden', 'function');
-        $mform->setType('function', PARAM_SAFEDIR);
+        $mform->setType('function', PARAM_PLUGIN);
 
         $mform->addElement('hidden', 'protocol');
-        $mform->setType('protocol', PARAM_SAFEDIR);
-
-
+        $mform->setType('protocol', PARAM_ALPHA);
 
         $mform->addElement('static', 'warning', '', get_string('executewarnign', 'webservice'));
 
@@ -265,26 +291,30 @@ class moodle_user_get_users_by_id_form extends moodleform {
         $data = $this->_customdata;
         if ($data['authmethod'] == 'simple') {
             $mform->addElement('text', 'wsusername', 'wsusername');
+            $mform->setType('wsusername', PARAM_USERNAME);
             $mform->addElement('text', 'wspassword', 'wspassword');
-        } else  if ($data['authmethod'] == 'token') {
+            $mform->setType('wspassword', PARAM_RAW);
+        } else if ($data['authmethod'] == 'token') {
             $mform->addElement('text', 'token', 'token');
+            $mform->setType('token', PARAM_RAW_TRIMMED);
         }
 
         $mform->addElement('hidden', 'authmethod', $data['authmethod']);
-        $mform->setType('authmethod', PARAM_SAFEDIR);
+        $mform->setType('authmethod', PARAM_ALPHA);
 
         /// beginning of specific code to the create users function
         $mform->addElement('text', 'userids[0]', 'userids[0]');
         $mform->addElement('text', 'userids[1]', 'userids[1]');
         $mform->addElement('text', 'userids[2]', 'userids[2]');
         $mform->addElement('text', 'userids[3]', 'userids[3]');
+        $mform->setType('userids', PARAM_INT);
         /// end of specific code to the create users function
 
         $mform->addElement('hidden', 'function');
-        $mform->setType('function', PARAM_SAFEDIR);
+        $mform->setType('function', PARAM_PLUGIN);
 
         $mform->addElement('hidden', 'protocol');
-        $mform->setType('protocol', PARAM_SAFEDIR);
+        $mform->setType('protocol', PARAM_ALPHA);
 
 
 
@@ -334,24 +364,31 @@ class moodle_group_create_groups_form extends moodleform {
         $data = $this->_customdata;
         if ($data['authmethod'] == 'simple') {
             $mform->addElement('text', 'wsusername', 'wsusername');
+            $mform->setType('wsusername', PARAM_USERNAME);
             $mform->addElement('text', 'wspassword', 'wspassword');
-        } else  if ($data['authmethod'] == 'token') {
+            $mform->setType('wspassword', PARAM_RAW);
+        } else if ($data['authmethod'] == 'token') {
             $mform->addElement('text', 'token', 'token');
+            $mform->setType('token', PARAM_RAW_TRIMMED);
         }
 
         $mform->addElement('hidden', 'authmethod', $data['authmethod']);
-        $mform->setType('authmethod', PARAM_SAFEDIR);
+        $mform->setType('authmethod', PARAM_ALPHA);
 
         $mform->addElement('text', 'courseid', 'courseid');
+        $mform->setType('courseid', PARAM_INT);
         $mform->addElement('text', 'name', 'name');
+        $mform->setType('name', PARAM_TEXT);
         $mform->addElement('text', 'description', 'description');
+        $mform->setType('description', PARAM_TEXT);
         $mform->addElement('text', 'enrolmentkey', 'enrolmentkey');
+        $mform->setType('enrolmentkey', PARAM_RAW);
 
         $mform->addElement('hidden', 'function');
-        $mform->setType('function', PARAM_SAFEDIR);
+        $mform->setType('function', PARAM_PLUGIN);
 
         $mform->addElement('hidden', 'protocol');
-        $mform->setType('protocol', PARAM_SAFEDIR);
+        $mform->setType('protocol', PARAM_ALPHA);
 
 
 
@@ -393,23 +430,27 @@ class moodle_group_get_groups_form extends moodleform {
         $data = $this->_customdata;
         if ($data['authmethod'] == 'simple') {
             $mform->addElement('text', 'wsusername', 'wsusername');
+            $mform->setType('wsusername', PARAM_USERNAME);
             $mform->addElement('text', 'wspassword', 'wspassword');
-        } else  if ($data['authmethod'] == 'token') {
+            $mform->setType('wspassword', PARAM_RAW);
+        } else if ($data['authmethod'] == 'token') {
             $mform->addElement('text', 'token', 'token');
+            $mform->setType('token', PARAM_RAW_TRIMMED);
         }
 
         $mform->addElement('hidden', 'authmethod', $data['authmethod']);
-        $mform->setType('authmethod', PARAM_SAFEDIR);
+        $mform->setType('authmethod', PARAM_ALPHA);
         $mform->addElement('text', 'groupids[0]', 'groupids[0]');
         $mform->addElement('text', 'groupids[1]', 'groupids[1]');
         $mform->addElement('text', 'groupids[2]', 'groupids[2]');
         $mform->addElement('text', 'groupids[3]', 'groupids[3]');
+        $mform->setType('groupids', PARAM_INT);
 
         $mform->addElement('hidden', 'function');
-        $mform->setType('function', PARAM_SAFEDIR);
+        $mform->setType('function', PARAM_PLUGIN);
 
         $mform->addElement('hidden', 'protocol');
-        $mform->setType('protocol', PARAM_SAFEDIR);
+        $mform->setType('protocol', PARAM_ALPHA);
 
         $this->add_action_buttons(true, get_string('execute', 'webservice'));
     }
@@ -452,20 +493,23 @@ class moodle_group_get_course_groups_form extends moodleform {
         $data = $this->_customdata;
         if ($data['authmethod'] == 'simple') {
             $mform->addElement('text', 'wsusername', 'wsusername');
+            $mform->setType('wsusername', PARAM_USERNAME);
             $mform->addElement('text', 'wspassword', 'wspassword');
-        } else  if ($data['authmethod'] == 'token') {
+            $mform->setType('wspassword', PARAM_RAW);
+        } else if ($data['authmethod'] == 'token') {
             $mform->addElement('text', 'token', 'token');
+            $mform->setType('token', PARAM_RAW_TRIMMED);
         }
 
         $mform->addElement('hidden', 'authmethod', $data['authmethod']);
-        $mform->setType('authmethod', PARAM_SAFEDIR);
+        $mform->setType('authmethod', PARAM_ALPHA);
         $mform->addElement('text', 'courseid', 'courseid');
 
         $mform->addElement('hidden', 'function');
-        $mform->setType('function', PARAM_SAFEDIR);
+        $mform->setType('function', PARAM_PLUGIN);
 
         $mform->addElement('hidden', 'protocol');
-        $mform->setType('protocol', PARAM_SAFEDIR);
+        $mform->setType('protocol', PARAM_ALPHA);
 
         $this->add_action_buttons(true, get_string('execute', 'webservice'));
     }
@@ -502,23 +546,27 @@ class moodle_group_delete_groups_form extends moodleform {
         $data = $this->_customdata;
         if ($data['authmethod'] == 'simple') {
             $mform->addElement('text', 'wsusername', 'wsusername');
+            $mform->setType('wsusername', PARAM_USERNAME);
             $mform->addElement('text', 'wspassword', 'wspassword');
-        } else  if ($data['authmethod'] == 'token') {
+            $mform->setType('wspassword', PARAM_RAW);
+        } else if ($data['authmethod'] == 'token') {
             $mform->addElement('text', 'token', 'token');
+            $mform->setType('token', PARAM_RAW_TRIMMED);
         }
 
         $mform->addElement('hidden', 'authmethod', $data['authmethod']);
-        $mform->setType('authmethod', PARAM_SAFEDIR);
+        $mform->setType('authmethod', PARAM_ALPHA);
         $mform->addElement('text', 'groupids[0]', 'groupids[0]');
         $mform->addElement('text', 'groupids[1]', 'groupids[1]');
         $mform->addElement('text', 'groupids[2]', 'groupids[2]');
         $mform->addElement('text', 'groupids[3]', 'groupids[3]');
+        $mform->setType('groupids', PARAM_INT);
 
         $mform->addElement('hidden', 'function');
-        $mform->setType('function', PARAM_SAFEDIR);
+        $mform->setType('function', PARAM_PLUGIN);
 
         $mform->addElement('hidden', 'protocol');
-        $mform->setType('protocol', PARAM_SAFEDIR);
+        $mform->setType('protocol', PARAM_ALPHA);
 
         $mform->addElement('static', 'warning', '', get_string('executewarnign', 'webservice'));
 
@@ -563,23 +611,27 @@ class moodle_group_get_groupmembers_form extends moodleform {
         $data = $this->_customdata;
         if ($data['authmethod'] == 'simple') {
             $mform->addElement('text', 'wsusername', 'wsusername');
+            $mform->setType('wsusername', PARAM_USERNAME);
             $mform->addElement('text', 'wspassword', 'wspassword');
-        } else  if ($data['authmethod'] == 'token') {
+            $mform->setType('wspassword', PARAM_RAW);
+        } else if ($data['authmethod'] == 'token') {
             $mform->addElement('text', 'token', 'token');
+            $mform->setType('token', PARAM_RAW_TRIMMED);
         }
 
         $mform->addElement('hidden', 'authmethod', $data['authmethod']);
-        $mform->setType('authmethod', PARAM_SAFEDIR);
+        $mform->setType('authmethod', PARAM_ALPHA);
         $mform->addElement('text', 'groupids[0]', 'groupids[0]');
         $mform->addElement('text', 'groupids[1]', 'groupids[1]');
         $mform->addElement('text', 'groupids[2]', 'groupids[2]');
         $mform->addElement('text', 'groupids[3]', 'groupids[3]');
+        $mform->setType('groupids', PARAM_INT);
 
         $mform->addElement('hidden', 'function');
-        $mform->setType('function', PARAM_SAFEDIR);
+        $mform->setType('function', PARAM_PLUGIN);
 
         $mform->addElement('hidden', 'protocol');
-        $mform->setType('protocol', PARAM_SAFEDIR);
+        $mform->setType('protocol', PARAM_ALPHA);
 
         $this->add_action_buttons(true, get_string('execute', 'webservice'));
     }
@@ -622,9 +674,12 @@ class moodle_group_add_groupmembers_form extends moodleform {
         $data = $this->_customdata;
         if ($data['authmethod'] == 'simple') {
             $mform->addElement('text', 'wsusername', 'wsusername');
+            $mform->setType('wsusername', PARAM_USERNAME);
             $mform->addElement('text', 'wspassword', 'wspassword');
-        } else  if ($data['authmethod'] == 'token') {
+            $mform->setType('wspassword', PARAM_RAW);
+        } else if ($data['authmethod'] == 'token') {
             $mform->addElement('text', 'token', 'token');
+            $mform->setType('token', PARAM_RAW_TRIMMED);
         }
 
         $mform->addElement('hidden', 'authmethod', $data['authmethod']);
@@ -633,12 +688,14 @@ class moodle_group_add_groupmembers_form extends moodleform {
         $mform->addElement('text', 'groupid[0]', 'groupid[0]');
         $mform->addElement('text', 'userid[1]', 'userid[1]');
         $mform->addElement('text', 'groupid[1]', 'groupid[1]');
+        $mform->setType('userid', PARAM_INT);
+        $mform->setType('groupids', PARAM_INT);
 
         $mform->addElement('hidden', 'function');
-        $mform->setType('function', PARAM_SAFEDIR);
+        $mform->setType('function', PARAM_PLUGIN);
 
         $mform->addElement('hidden', 'protocol');
-        $mform->setType('protocol', PARAM_SAFEDIR);
+        $mform->setType('protocol', PARAM_ALPHA);
 
         $this->add_action_buttons(true, get_string('execute', 'webservice'));
     }
@@ -681,23 +738,28 @@ class moodle_group_delete_groupmembers_form extends moodleform {
         $data = $this->_customdata;
         if ($data['authmethod'] == 'simple') {
             $mform->addElement('text', 'wsusername', 'wsusername');
+            $mform->setType('wsusername', PARAM_USERNAME);
             $mform->addElement('text', 'wspassword', 'wspassword');
-        } else  if ($data['authmethod'] == 'token') {
+            $mform->setType('wspassword', PARAM_RAW);
+        } else if ($data['authmethod'] == 'token') {
             $mform->addElement('text', 'token', 'token');
+            $mform->setType('token', PARAM_RAW_TRIMMED);
         }
 
         $mform->addElement('hidden', 'authmethod', $data['authmethod']);
-        $mform->setType('authmethod', PARAM_SAFEDIR);
+        $mform->setType('authmethod', PARAM_ALPHA);
         $mform->addElement('text', 'userid[0]', 'userid[0]');
         $mform->addElement('text', 'groupid[0]', 'groupid[0]');
         $mform->addElement('text', 'userid[1]', 'userid[1]');
         $mform->addElement('text', 'groupid[1]', 'groupid[1]');
+        $mform->setType('userid', PARAM_INT);
+        $mform->setType('groupids', PARAM_INT);
 
         $mform->addElement('hidden', 'function');
-        $mform->setType('function', PARAM_SAFEDIR);
+        $mform->setType('function', PARAM_PLUGIN);
 
         $mform->addElement('hidden', 'protocol');
-        $mform->setType('protocol', PARAM_SAFEDIR);
+        $mform->setType('protocol', PARAM_ALPHA);
 
         $this->add_action_buttons(true, get_string('execute', 'webservice'));
     }
@@ -750,13 +812,16 @@ class core_course_create_categories_form extends moodleform {
         $data = $this->_customdata;
         if ($data['authmethod'] == 'simple') {
             $mform->addElement('text', 'wsusername', 'wsusername');
+            $mform->setType('wsusername', PARAM_USERNAME);
             $mform->addElement('text', 'wspassword', 'wspassword');
+            $mform->setType('wspassword', PARAM_RAW);
         } else if ($data['authmethod'] == 'token') {
             $mform->addElement('text', 'token', 'token');
+            $mform->setType('token', PARAM_RAW_TRIMMED);
         }
 
         $mform->addElement('hidden', 'authmethod', $data['authmethod']);
-        $mform->setType('authmethod', PARAM_SAFEDIR);
+        $mform->setType('authmethod', PARAM_ALPHA);
         $mform->addElement('text', 'name[0]', 'name[0]');
         $mform->addElement('text', 'parent[0]', 'parent[0]');
         $mform->addElement('text', 'idnumber[0]', 'idnumber[0]');
@@ -765,12 +830,16 @@ class core_course_create_categories_form extends moodleform {
         $mform->addElement('text', 'parent[1]', 'parent[1]');
         $mform->addElement('text', 'idnumber[1]', 'idnumber[1]');
         $mform->addElement('text', 'description[1]', 'description[1]');
+        $mform->setType('name', PARAM_TEXT);
+        $mform->setType('parent', PARAM_INT);
+        $mform->setType('idnumber', PARAM_RAW);
+        $mform->setType('description', PARAM_TEXT);
 
         $mform->addElement('hidden', 'function');
-        $mform->setType('function', PARAM_SAFEDIR);
+        $mform->setType('function', PARAM_PLUGIN);
 
         $mform->addElement('hidden', 'protocol');
-        $mform->setType('protocol', PARAM_SAFEDIR);
+        $mform->setType('protocol', PARAM_ALPHA);
 
         $this->add_action_buttons(true, get_string('execute', 'webservice'));
     }
@@ -827,25 +896,31 @@ class core_course_delete_categories_form extends moodleform {
         $data = $this->_customdata;
         if ($data['authmethod'] == 'simple') {
             $mform->addElement('text', 'wsusername', 'wsusername');
+            $mform->setType('wsusername', PARAM_USERNAME);
             $mform->addElement('text', 'wspassword', 'wspassword');
+            $mform->setType('wspassword', PARAM_RAW);
         } else if ($data['authmethod'] == 'token') {
             $mform->addElement('text', 'token', 'token');
+            $mform->setType('token', PARAM_RAW_TRIMMED);
         }
 
         $mform->addElement('hidden', 'authmethod', $data['authmethod']);
-        $mform->setType('authmethod', PARAM_SAFEDIR);
+        $mform->setType('authmethod', PARAM_ALPHA);
         $mform->addElement('text', 'id[0]', 'id[0]');
         $mform->addElement('text', 'newparent[0]', 'newparent[0]');
         $mform->addElement('text', 'recursive[0]', 'recursive[0]');
         $mform->addElement('text', 'id[1]', 'id[1]');
         $mform->addElement('text', 'newparent[1]', 'newparent[1]');
         $mform->addElement('text', 'recursive[1]', 'recursive[1]');
+        $mform->setType('id', PARAM_INT);
+        $mform->setType('newparent', PARAM_INT);
+        $mform->setType('recursive', PARAM_BOOL);
 
         $mform->addElement('hidden', 'function');
-        $mform->setType('function', PARAM_SAFEDIR);
+        $mform->setType('function', PARAM_PLUGIN);
 
         $mform->addElement('hidden', 'protocol');
-        $mform->setType('protocol', PARAM_SAFEDIR);
+        $mform->setType('protocol', PARAM_ALPHA);
 
         $this->add_action_buttons(true, get_string('execute', 'webservice'));
     }
@@ -909,13 +984,16 @@ class core_course_update_categories_form extends moodleform {
         $data = $this->_customdata;
         if ($data['authmethod'] == 'simple') {
             $mform->addElement('text', 'wsusername', 'wsusername');
+            $mform->setType('wsusername', PARAM_USERNAME);
             $mform->addElement('text', 'wspassword', 'wspassword');
+            $mform->setType('wspassword', PARAM_RAW);
         } else if ($data['authmethod'] == 'token') {
             $mform->addElement('text', 'token', 'token');
+            $mform->setType('token', PARAM_RAW_TRIMMED);
         }
 
         $mform->addElement('hidden', 'authmethod', $data['authmethod']);
-        $mform->setType('authmethod', PARAM_SAFEDIR);
+        $mform->setType('authmethod', PARAM_ALPHA);
         $mform->addElement('text', 'id[0]', 'id[0]');
         $mform->addElement('text', 'name[0]', 'name[0]');
         $mform->addElement('text', 'parent[0]', 'parent[0]');
@@ -926,12 +1004,17 @@ class core_course_update_categories_form extends moodleform {
         $mform->addElement('text', 'parent[1]', 'parent[1]');
         $mform->addElement('text', 'idnumber[1]', 'idnumber[1]');
         $mform->addElement('text', 'description[1]', 'description[1]');
+        $mform->setType('id', PARAM_INT);
+        $mform->setType('name', PARAM_TEXT);
+        $mform->setType('parent', PARAM_INT);
+        $mform->setType('idnumber', PARAM_RAW);
+        $mform->setType('description', PARAM_TEXT);
 
         $mform->addElement('hidden', 'function');
-        $mform->setType('function', PARAM_SAFEDIR);
+        $mform->setType('function', PARAM_PLUGIN);
 
         $mform->addElement('hidden', 'protocol');
-        $mform->setType('protocol', PARAM_SAFEDIR);
+        $mform->setType('protocol', PARAM_ALPHA);
 
         $this->add_action_buttons(true, get_string('execute', 'webservice'));
     }
index 6b22044..7e8e5d0 100644 (file)
@@ -1,22 +1,32 @@
 <?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * @author Martin Dougiamas
- * @author Jerome GUTIERREZ
- * @author Iñaki Arenaza
- * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- * @package moodle multiauth
- *
  * Authentication Plugin: CAS Authentication
  *
  * Authentication using CAS (Central Authentication Server).
  *
- * 2006-08-28  File created.
+ * @author Martin Dougiamas
+ * @author Jerome GUTIERREZ
+ * @author Iñaki Arenaza
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+ * @package auth_cas
  */
 
-if (!defined('MOODLE_INTERNAL')) {
-    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
-}
+defined('MOODLE_INTERNAL') || die();
 
 require_once($CFG->dirroot.'/auth/ldap/auth.php');
 require_once($CFG->dirroot.'/auth/cas/CAS/CAS.php');
index 0369963..33cf33a 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -38,8 +37,7 @@
  * We have optimized it as best as we could for PostgreSQL and MySQL, with 27K students
  * we have seen this take 10 minutes.
  *
- * @package    auth
- * @subpackage CAS
+ * @package    auth_cas
  * @copyright  2007 Jerome Gutierrez - based on code by Martin Langhoff
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index 70a82a0..c30522c 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -16,7 +15,7 @@
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * Strings for component 'auth_cas', language 'en', branch 'MOODLE_20_STABLE'
+ * Strings for component 'auth_cas', language 'en'.
  *
  * @package   auth_cas
  * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
index 11b32ca..6a22514 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Version details
  *
- * @package    auth
- * @subpackage cas
+ * @package    auth_cas
  * @author     Martin Dougiamas
  * @author     Jerome GUTIERREZ
  * @author     Iñaki Arenaza
index 777fe9f..9ac59bd 100644 (file)
@@ -1,20 +1,28 @@
 <?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * @author Martin Dougiamas
- * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- * @package moodle multiauth
- *
  * Authentication Plugin: Email Authentication
  *
- * Standard authentication function.
- *
- * 2006-08-28  File created.
+ * @author Martin Dougiamas
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+ * @package auth_email
  */
 
-if (!defined('MOODLE_INTERNAL')) {
-    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
-}
+defined('MOODLE_INTERNAL') || die();
 
 require_once($CFG->libdir.'/authlib.php');
 
index e1dbb71..6104551 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -16,7 +15,7 @@
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * Strings for component 'auth_email', language 'en', branch 'MOODLE_20_STABLE'
+ * Strings for component 'auth_email', language 'en'.
  *
  * @package   auth_email
  * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
index e5e074d..a82ce53 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Version details
  *
- * @package    auth
- * @subpackage email
+ * @package    auth_email
  * @copyright  1999 onwards Martin Dougiamas (http://dougiamas.com)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index 73e803d..75c8bd0 100644 (file)
@@ -1,19 +1,29 @@
 <?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
 /**
- * @author Martin Dougiamas
- * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- * @package moodle multiauth
- *
  * Authentication Plugin: FirstClass Authentication
- *
  * Authentication using a FirstClass server.
- *
- * 2006-08-28  File created.
+
+ * @package auth_fc
+ * @author Martin Dougiamas
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  */
 
-if (!defined('MOODLE_INTERNAL')) {
-    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
-}
+defined('MOODLE_INTERNAL') || die();
 
 require_once($CFG->libdir.'/authlib.php');
 
index 7bc3498..46e75fc 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -16,7 +15,7 @@
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * Strings for component 'auth_fc', language 'en', branch 'MOODLE_20_STABLE'
+ * Strings for component 'auth_fc', language 'en'.
  *
  * @package   auth_fc
  * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
index 0d52794..a44ec3f 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Version details
  *
- * @package    auth
- * @subpackage fc
+ * @package    auth_fc
  * @copyright  1999 onwards Martin Dougiamas (http://dougiamas.com)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index 17df433..442f93e 100644 (file)
@@ -1,20 +1,29 @@
 <?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * @author Martin Dougiamas
- * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- * @package moodle multiauth
- *
  * Authentication Plugin: IMAP Authentication
- *
  * Authenticates against an IMAP server.
  *
- * 2006-08-31  File created.
+ * @package auth_imap
+ * @author Martin Dougiamas
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  */
 
-if (!defined('MOODLE_INTERNAL')) {
-    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
-}
+defined('MOODLE_INTERNAL') || die();
 
 require_once($CFG->libdir.'/authlib.php');
 
index a13b8be..ccfe27b 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -16,7 +15,7 @@
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * Strings for component 'auth_imap', language 'en', branch 'MOODLE_20_STABLE'
+ * Strings for component 'auth_imap', language 'en'.
  *
  * @package   auth_imap
  * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
index c88fe31..af54d8c 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Version details
  *
- * @package    auth
- * @subpackage imap
+ * @package    auth_imap
  * @copyright  1999 onwards Martin Dougiamas (http://dougiamas.com)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index 00f0bf9..d32f6bd 100644 (file)
@@ -1,21 +1,30 @@
 <?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * @author Martin Dougiamas
- * @author Iñaki Arenaza
- * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- * @package moodle multiauth
- *
  * Authentication Plugin: LDAP Authentication
- *
  * Authentication using LDAP (Lightweight Directory Access Protocol).
  *
- * 2006-08-28  File created.
+ * @package auth_ldap
+ * @author Martin Dougiamas
+ * @author Iñaki Arenaza
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  */
 
-if (!defined('MOODLE_INTERNAL')) {
-    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
-}
+defined('MOODLE_INTERNAL') || die();
 
 // See http://support.microsoft.com/kb/305144 to interprete these values.
 if (!defined('AUTH_AD_ACCOUNTDISABLE')) {
index 57637ca..ee15538 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -42,8 +41,7 @@
  * We have optimized it as best as we could for PostgreSQL and MySQL, with 27K students
  * we have seen this take 10 minutes.
  *
- * @package    auth
- * @subpackage ldap
+ * @package    auth_ldap
  * @copyright  2004 Martin Langhoff
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index 00d7015..54c174b 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -16,7 +15,7 @@
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * Strings for component 'auth_ldap', language 'en', branch 'MOODLE_20_STABLE'
+ * Strings for component 'auth_ldap', language 'en'.
  *
  * @package   auth_ldap
  * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
index 40e9fb5..1b13eb8 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Version details
  *
- * @package    auth
- * @subpackage ldap
+ * @package    auth_ldap
  * @author     Martin Dougiamas
  * @author     Iñaki Arenaza
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
index 0c521e8..3b4fdae 100644 (file)
@@ -18,8 +18,7 @@
  * Authentication Plugin: Manual Authentication
  * Just does a simple check against the moodle database.
  *
- * @package    auth
- * @subpackage manual
+ * @package    auth_manual
  * @copyright  1999 onwards Martin Dougiamas (http://dougiamas.com)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index 0c37b61..ab21ba6 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Manual authentication plugin upgrade code
  *
- * @package    auth
- * @subpackage manual
+ * @package    auth_manual
  * @copyright  2011 Petr Skoda (http://skodak.org)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index 69f6cd0..53d8909 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -16,7 +15,7 @@
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * Strings for component 'auth_manual', language 'en', branch 'MOODLE_20_STABLE'
+ * Strings for component 'auth_manual', language 'en'.
  *
  * @package   auth_manual
  * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
index ce33730..25deabd 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Manual authentication plugin version information
  *
- * @package    auth
- * @subpackage manual
+ * @package    auth_manual
  * @copyright  2011 Petr Skoda (http://skodak.org)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index 203d161..db7328b 100644 (file)
@@ -1,20 +1,29 @@
 <?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * @author Martin Dougiamas
- * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- * @package moodle multiauth
- *
  * Authentication Plugin: Moodle Network Authentication
- *
  * Multiple host authentication support for Moodle Network.
  *
- * 2006-11-01  File created.
+ * @package auth_mnet
+ * @author Martin Dougiamas
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  */
 
-if (!defined('MOODLE_INTERNAL')) {
-    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
-}
+defined('MOODLE_INTERNAL') || die();
 
 require_once($CFG->libdir.'/authlib.php');
 
index 743f1ff..8a371d3 100644 (file)
 // You should have received a copy of the GNU General Public License
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
-
 /**
  * This file contains the mnet services for the mnet authentication plugin
  *
  * @since 2.0
- * @package moodlecore
- * @subpackage auth
+ * @package auth_mnet
  * @copyright 2010 Penny Leach
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index 2f65822..4147bff 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -18,8 +17,7 @@
 /**
  * Keeps track of upgrades to the auth_mnet plugin
  *
- * @package    auth
- * @subpackage mnet
+ * @package    auth_mnet
  * @copyright  2010 David Mudrak <david@moodle.com>
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index d44d058..d72e206 100644 (file)
@@ -1,15 +1,26 @@
 <?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * @author Martin Dougiamas
- * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- * @package moodle multiauth
- *
  * Authentication Plugin: Moodle Network Authentication
- *
  * Multiple host authentication support for Moodle Network.
  *
- * 2006-11-01  File created.
+ * @package auth_mnet
+ * @author Martin Dougiamas
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  */
 
 require_once dirname(dirname(dirname(__FILE__))) . '/config.php';
index 1bcd01e..59adbf3 100644 (file)
@@ -1,15 +1,26 @@
 <?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * @author Martin Dougiamas
- * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- * @package moodle multiauth
- *
  * Authentication Plugin: Moodle Network Authentication
- *
  * Multiple host authentication support for Moodle Network.
  *
- * 2006-11-01  File created.
+ * @package auth_mnet
+ * @author Martin Dougiamas
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  */
 
 require_once dirname(dirname(dirname(__FILE__))) . '/config.php';
index 915b4c2..7084050 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -16,7 +15,7 @@
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * Strings for component 'auth_mnet', language 'en', branch 'MOODLE_20_STABLE'
+ * Strings for component 'auth_mnet', language 'en'.
  *
  * @package   auth_mnet
  * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
index a091fa2..bc5d118 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Manual authentication plugin version information
  *
- * @package    auth
- * @subpackage mnet
+ * @package    auth_mnet
  * @copyright  1999 onwards Martin Dougiamas (http://dougiamas.com)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index 495b505..c2ad283 100644 (file)
@@ -1,20 +1,29 @@
 <?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * @author Martin Dougiamas
- * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- * @package moodle multiauth
- *
  * Authentication Plugin: NNTP Authentication
- *
  * Authenticates against an NNTP server.
  *
- * 2006-08-31  File created.
+ * @package auth_nntp
+ * @author Martin Dougiamas
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  */
 
-if (!defined('MOODLE_INTERNAL')) {
-    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
-}
+defined('MOODLE_INTERNAL') || die();
 
 require_once($CFG->libdir.'/authlib.php');
 
index 096f7f7..fa10cac 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -16,7 +15,7 @@
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * Strings for component 'auth_nntp', language 'en', branch 'MOODLE_20_STABLE'
+ * Strings for component 'auth_nntp', language 'en'.
  *
  * @package   auth_nntp
  * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
index 5a533dc..2875379 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Version information
  *
- * @package    auth
- * @subpackage nntp
+ * @package    auth_nntp
  * @copyright  1999 onwards Martin Dougiamas (http://dougiamas.com)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index 72f5fa8..29f018e 100644 (file)
@@ -1,20 +1,28 @@
 <?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
+ * Nologin authentication login - prevents user login.
+ *
+ * @package auth_nologin
  * @author Petr Skoda
  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- * @package moodle multiauth
- *
- * Authentication Plugin: No Authentication
- *
- * No authentication at all. This method approves everything!
- *
- * 2007-02-18  File created.
  */
 
-if (!defined('MOODLE_INTERNAL')) {
-    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
-}
+defined('MOODLE_INTERNAL') || die();
 
 require_once($CFG->libdir.'/authlib.php');
 
index ad4ba16..edb4c79 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -16,7 +15,7 @@
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * Strings for component 'auth_nologin', language 'en', branch 'MOODLE_20_STABLE'
+ * Strings for component 'auth_nologin', language 'en'.
  *
  * @package   auth_nologin
  * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
index a9879ce..2d7a060 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Version information
  *
- * @package    auth
- * @subpackage nologin
+ * @package    auth_nologin
  * @copyright  2011 Petr Skoda (http://skodak.org)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index 00eaf04..9d3bfc2 100644 (file)
@@ -1,20 +1,28 @@
 <?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
+ * Anobody can login with any password.
+ *
+ * @package auth_none
  * @author Martin Dougiamas
  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- * @package moodle multiauth
- *
- * Authentication Plugin: No Authentication
- *
- * No authentication at all. This method approves everything!
- *
- * 2006-08-31  File created.
  */
 
-if (!defined('MOODLE_INTERNAL')) {
-    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
-}
+defined('MOODLE_INTERNAL') || die();
 
 require_once($CFG->libdir.'/authlib.php');
 
index d5cf02b..a65dbd5 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -16,7 +15,7 @@
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * Strings for component 'auth_none', language 'en', branch 'MOODLE_20_STABLE'
+ * Strings for component 'auth_none', language 'en'.
  *
  * @package   auth_none
  * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
index 80b43e1..de9eda6 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Version information
  *
- * @package    auth
- * @subpackage none
+ * @package    auth_none
  * @copyright  2011 Petr Skoda (http://skodak.org)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index c0afbe0..fd76a09 100644 (file)
@@ -1,10 +1,20 @@
 <?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * @author Martin Dougiamas
- * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- * @package moodle multiauth
- *
  * Authentication Plugin: PAM Authentication
  *
  * PAM (Pluggable Authentication Modules) for Moodle
  * Website 1: http://elearning.zhwin.ch/
  * Website 2: http://birdy1976.com/
  *
- * License:  GPL License v2
- *
- * 2006-08-31  File created.
+ * @package auth_pam
+ * @author Martin Dougiamas
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  */
 
-if (!defined('MOODLE_INTERNAL')) {
-    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
-}
+defined('MOODLE_INTERNAL') || die();
 
 require_once($CFG->libdir.'/authlib.php');
 
index 3f9fee1..f8d5375 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -16,7 +15,7 @@
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * Strings for component 'auth_pam', language 'en', branch 'MOODLE_20_STABLE'
+ * Strings for component 'auth_pam', language 'en'.
  *
  * @package   auth_pam
  * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
index 6c7ba3d..79e310c 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Version information
  *
- * @package    auth
- * @subpackage pam
+ * @package    auth_pam
  * @copyright  1999 onwards Martin Dougiamas (http://dougiamas.com)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index 8fe4f94..6b4bdff 100644 (file)
@@ -1,20 +1,29 @@
 <?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * @author Martin Dougiamas
- * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- * @package moodle multiauth
- *
  * Authentication Plugin: POP3 Authentication
- *
  * Authenticates against a POP3 server.
  *
- * 2006-08-31  File created.
+ * @package auth_pop3
+ * @author Martin Dougiamas
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  */
 
-if (!defined('MOODLE_INTERNAL')) {
-    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
-}
+defined('MOODLE_INTERNAL') || die();
 
 require_once($CFG->libdir.'/authlib.php');
 
index 87a05dc..4aa257a 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -16,7 +15,7 @@
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * Strings for component 'auth_pop3', language 'en', branch 'MOODLE_20_STABLE'
+ * Strings for component 'auth_pop3', language 'en'.
  *
  * @package   auth_pop3
  * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
index 57b4856..fc028d2 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Version information
  *
- * @package    auth
- * @subpackage pop3
+ * @package    auth_pop3
  * @copyright  1999 onwards Martin Dougiamas (http://dougiamas.com)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index 5897b01..a74369e 100644 (file)
@@ -1,23 +1,32 @@
 <?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * @author Martin Dougiamas
- * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- * @package moodle multiauth
- *
  * Authentication Plugin: RADIUS Authentication
  *
  * Authenticates against a RADIUS server.
  * Contributed by Clive Gould <clive@ce.bromley.ac.uk>
  * CHAP support contributed by Stanislav Tsymbalov http://www.tsymbalov.net/
  *
- * 2006-08-31  File created.
- * 2008-03-12  CHAP support added by Stanislav Tsymbalov.
+ * @package auth_radius
+ * @author Martin Dougiamas
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  */
 
-if (!defined('MOODLE_INTERNAL')) {
-    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
-}
+defined('MOODLE_INTERNAL') || die();
 
 require_once($CFG->libdir.'/authlib.php');
 
index fb98f3d..e2b0815 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -16,7 +15,7 @@
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * Strings for component 'auth_radius', language 'en', branch 'MOODLE_20_STABLE'
+ * Strings for component 'auth_radius', language 'en'.
  *
  * @package   auth_radius
  * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
index 83e3b7f..60bc1ea 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Version information
  *
- * @package    auth
- * @subpackage radius
+ * @package    auth_radius
  * @copyright  1999 onwards Martin Dougiamas (http://dougiamas.com)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index 842b735..02b3529 100644 (file)
@@ -1,31 +1,32 @@
 <?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
 /**
- * @author Martin Dougiamas
- * @author Lukas Haemmerle
- * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- * @package moodle multiauth
- *
  * Authentication Plugin: Shibboleth Authentication
- *
  * Authentication using Shibboleth.
  *
  * Distributed under GPL (c)Markus Hagman 2004-2006
  *
- * 10.2004     SHIBBOLETH Authentication functions v.0.1
- * 05.2005     Various extensions and fixes by Lukas Haemmerle
- * 10.2005     Added better error messags
- * 05.2006     Added better handling of mutli-valued attributes
- * 2006-08-28  File created, code imported from lib.php
- * 2006-10-27  Upstream 1.7 changes merged in, added above credits from lib.php :-)
- * 2007-03-09  Fixed authentication but may need some other changes
- * 2007-10-03  Removed requirement for email address, surname and given name on request of Markus Hagman
-  * 2008-01-21 Added WAYF functionality
-
+ * @package auth_shibboleth
+ * @author Martin Dougiamas
+ * @author Lukas Haemmerle
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  */
 
-if (!defined('MOODLE_INTERNAL')) {
-    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
-}
+defined('MOODLE_INTERNAL') || die();
 
 require_once($CFG->libdir.'/authlib.php');
 
index ea8980d..552bb6c 100644 (file)
@@ -16,7 +16,7 @@
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * Strings for component 'auth_shibboleth', language 'en', branch 'MOODLE_20_STABLE'
+ * Strings for component 'auth_shibboleth', language 'en'.
  *
  * @package   auth_shibboleth
  * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
index 33f8965..d30ecd0 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Version information
  *
- * @package    auth
- * @subpackage shibboleth
+ * @package    auth_shibboleth
  * @author     Martin Dougiamas
  * @author     Lukas Haemmerle
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
index 59e1603..1fc1e99 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
  * Web service auth plugin, reserves username, prevents normal login.
  * TODO: add IP restrictions and some other features - MDL-17135
  *
- * @package    moodlecore
- * @subpackage webservice
+ * @package    auth_webservice
  * @copyright  2008 Petr Skoda (http://skodak.org)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-if (!defined('MOODLE_INTERNAL')) {
-    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
-}
+defined('MOODLE_INTERNAL') || die();
 
 require_once($CFG->libdir.'/authlib.php');
 
index a2fb854..105fb9b 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -16,7 +15,7 @@
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * Strings for component 'auth_webservice', language 'en', branch 'MOODLE_20_STABLE'
+ * Strings for component 'auth_webservice', language 'en'.
  *
  * @package   auth_webservice
  * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
index 12c6613..cd590a9 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Version information
  *
- * @package    auth
- * @subpackage webservice
+ * @package    auth_webservice
  * @copyright  2011 Petr Skoda (http://skodak.org)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index f0604a5..04ccc81 100644 (file)
@@ -97,6 +97,10 @@ abstract class base_moodleform extends moodleform {
                 $stage = $mform->addElement('hidden', $name, $value);
                 if (in_array($name, $intparams)) {
                     $mform->setType($name, PARAM_INT);
+                } else {
+                    // Adding setType() to avoid missing setType() warnings.
+                    // MDL-39126: support $mform->setType() for additional backup parameters.
+                    $mform->setType($name, PARAM_RAW);
                 }
             }
         }
index 3e00e62..cb8d7d3 100644 (file)
@@ -93,7 +93,9 @@ class community_hub_search_form extends moodleform {
 
         //add the course id (of the context)
         $mform->addElement('hidden', 'courseid', $this->_customdata['courseid']);
+        $mform->setType('courseid', PARAM_INT);
         $mform->addElement('hidden', 'executesearch', 1);
+        $mform->setType('executesearch', PARAM_INT);
 
         //retrieve the hub list on the hub directory by web service
         $function = 'hubdirectory_get_hubs';
@@ -298,7 +300,7 @@ class community_hub_search_form extends moodleform {
             $mform->addElement('text', 'search', get_string('keywords', 'block_community'),
                 array('size' => 30));
             $mform->addHelpButton('search', 'keywords', 'block_community');
-
+            $mform->setType('search', PARAM_NOTAGS);
 
             $mform->addElement('submit', 'submitbutton', get_string('search', 'block_community'));
         }
index d555668..bb2fa22 100644 (file)
@@ -836,7 +836,8 @@ M.core_dock.genericblock.prototype = {
         }
 
         // Must set the image src seperatly of we get an error with XML strict headers
-        var moveto = Y.Node.create('<input type="image" class="moveto customcommand requiresjs" alt="'+M.str.block.addtodock+'" title="'+M.str.block.addtodock+'" />');
+        var moveto = Y.Node.create('<input type="image" class="moveto customcommand requiresjs" alt="'+M.str.block.addtodock+'" title="'+
+            Y.Escape.html(M.util.get_string('dockblock', 'block', node.one('.header .title h2').getHTML())) +'" />');
         var icon = 't/block_to_dock';
         if (right_to_left()) {
             icon = 't/block_to_dock_rtl';
@@ -906,7 +907,8 @@ M.core_dock.genericblock.prototype = {
         }
 
         // Must set the image src seperatly of we get an error with XML strict headers
-        var movetoimg = Y.Node.create('<img alt="'+M.str.block.undockitem+'" title="'+M.util.get_string('undockblock', 'block', blocktitle.innerHTML)+'" />');
+        var movetoimg = Y.Node.create('<img alt="'+Y.Escape.html(M.str.block.undockitem)+'" title="'+
+            Y.Escape.html(M.util.get_string('undockblock', 'block', blocktitle.innerHTML)) +'" />');
         var icon = 't/dock_to_block';
         if (right_to_left()) {
             icon = 't/dock_to_block_rtl';
index 236c103..4a54754 100644 (file)
@@ -59,6 +59,12 @@ class block_base {
      */
     var $title         = NULL;
 
+    /**
+     * The name of the block to be displayed in the block title area if the title is empty.
+     * @var string arialabel
+     */
+    var $arialabel         = NULL;
+
     /**
      * The type of content that this block creates. Currently support options - BLOCK_TYPE_LIST, BLOCK_TYPE_TEXT
      * @var int $content_type
@@ -240,8 +246,10 @@ class block_base {
         if (!$this->hide_header()) {
             $bc->title = $this->title;
         }
+
         if (empty($bc->title)) {
             $bc->arialabel = new lang_string('pluginname', get_class($this));
+            $this->arialabel = $bc->arialabel;
         }
 
         if ($this->page->user_is_editing()) {
index 621c09c..3868c90 100644 (file)
@@ -18,6 +18,7 @@ A definition:
             'requiremultipleidentifiers' => false,    // Optional
             'requirelockingread' => false,            // Optional
             'requirelockingwrite' => false,           // Optional
+            'requiresearchable' => false,             // Optional
             'maxsize' => null,                        // Optional
             'overrideclass' => null,                  // Optional
             'overrideclassfile' => null,              // Optional
@@ -135,6 +136,7 @@ The following optional settings can also be defined:
 * requiremultipleidentifiers - If set to true then only stores that support multiple identifiers will be used.
 * requirelockingread - If set to true a lock will be acquired for reading. Don't use this setting unless you have a REALLY good reason to.
 * requirelockingwrite - If set to true a lock will be acquired before writing to the cache. Avoid this unless necessary.
+* requiresearchable - If set to true only stores that support key searching will be used for this definition. Its not recommended to use this unless absolutely unavoidable.
 * maxsize - This gives a cache an indication about the maximum items it should store. Cache stores don't have to use this, it is up to them to decide if its required.
 * overrideclass - If provided this class will be used for the loader. It must extend one of the core loader classes (based upon mode).
 * overrideclassfile - Included if required when using the overrideclass param.
@@ -236,4 +238,4 @@ The following snippet illustates how to configure the three core cache stores th
 
     define('TEST_CACHESTORE_MEMCACHE_TESTSERVERS', '127.0.0.1:11211');
     define('TEST_CACHESTORE_MEMCACHED_TESTSERVERS', '127.0.0.1:11211');
-    define('TEST_CACHESTORE_MONGODB_TESTSERVER', 'mongodb://localhost:27017');
\ No newline at end of file
+    define('TEST_CACHESTORE_MONGODB_TESTSERVER', 'mongodb://localhost:27017');
index 8c5a16a..62732f7 100644 (file)
@@ -183,6 +183,13 @@ class cache_definition {
      */
     protected $requirelockingwrite = false;
 
+    /**
+     * Gets set to true if this definition requires searchable stores.
+     * @since 2.4.4
+     * @var bool
+     */
+    protected $requiresearchable = false;
+
     /**
      * Sets the maximum number of items that can exist in the cache.
      * Please note this isn't a hard limit, and doesn't need to be enforced by the caches. They can choose to do so optionally.
@@ -307,6 +314,7 @@ class cache_definition {
         $requiremultipleidentifiers = false;
         $requirelockingread = false;
         $requirelockingwrite = false;
+        $requiresearchable = ($mode === cache_store::MODE_SESSION) ? true : false;
         $maxsize = null;
         $overrideclass = null;
         $overrideclassfile = null;
@@ -342,6 +350,10 @@ class cache_definition {
         }
         $requirelocking = $requirelockingwrite || $requirelockingread;
 
+        if (array_key_exists('requiresearchable', $definition)) {
+            $requiresearchable = (bool)$definition['requiresearchable'];
+        }
+
         if (array_key_exists('maxsize', $definition)) {
             $maxsize = (int)$definition['maxsize'];
         }
@@ -433,6 +445,7 @@ class cache_definition {
         $cachedefinition->requirelocking = $requirelocking;
         $cachedefinition->requirelockingread = $requirelockingread;
         $cachedefinition->requirelockingwrite = $requirelockingwrite;
+        $cachedefinition->requiresearchable = $requiresearchable;
         $cachedefinition->maxsize = $maxsize;
         $cachedefinition->overrideclass = $overrideclass;
         $cachedefinition->overrideclassfile = $overrideclassfile;
@@ -633,6 +646,15 @@ class cache_definition {
         return $this->requirelockingwrite;
     }
 
+    /**
+     * Returns true if this definition requires a searchable cache.
+     * @since 2.4.4
+     * @return bool
+     */
+    public function require_searchable() {
+        return $this->requiresearchable;
+    }
+
     /**
      * Returns true if this definition has an associated data source.
      * @return bool
@@ -686,6 +708,9 @@ class cache_definition {
         if ($this->require_multiple_identifiers()) {
             $requires += cache_store::SUPPORTS_MULTIPLE_IDENTIFIERS;
         }
+        if ($this->require_searchable()) {
+            $requires += cache_store::IS_SEARCHABLE;
+        }
         return $requires;
     }
 
@@ -694,7 +719,7 @@ class cache_definition {
      * @return bool
      */
     public function should_be_persistent() {
-        return $this->persistent;
+        return $this->persistent || $this->mode === cache_store::MODE_SESSION;
     }
 
     /**
index 9eee85a..e57d6ef 100644 (file)
@@ -207,9 +207,7 @@ class cache_factory {
         if (array_key_exists($key, $this->cachesfromparams)) {
             return $this->cachesfromparams[$key];
         }
-        // Get the class. Note this is a late static binding so we need to use get_called_class.
         $definition = cache_definition::load_adhoc($mode, $component, $area, $options);
-        $config = $this->create_config_instance();
         $definition->set_identifiers($identifiers);
         $cache = $this->create_cache($definition, $identifiers);
         if ($definition->should_be_persistent()) {
index 075dc41..be329f7 100644 (file)
@@ -244,10 +244,9 @@ class cache_helper {
             if ($definition->invalidates_on_event($event)) {
                 // OK at this point we know that the definition has information to invalidate on the event.
                 // There are two routes, either its an application cache in which case we can invalidate it now.
-                // or it is a session cache in which case we need to set something to the "Event invalidation" definition.
-                // No need to deal with request caches, we don't want to change data half way through a request.
-                if ($definition->get_mode() === cache_store::MODE_APPLICATION) {
-                    $cache = $factory->create_cache($definition);
+                // or it is a persistent cache that also needs to be invalidated now.
+                if ($definition->get_mode() === cache_store::MODE_APPLICATION || $definition->should_be_persistent()) {
+                    $cache = $factory->create_cache_from_definition($definition->get_component(), $definition->get_area());
                     $cache->delete_many($keys);
                 }
 
@@ -568,4 +567,64 @@ class cache_helper {
         global $CFG;
         return (string)$CFG->version;
     }
+
+    /**
+     * Runs cron routines for MUC.
+     */
+    public static function cron() {
+        self::clean_old_session_data(true);
+    }
+
+    /**
+     * Cleans old session data from cache stores used for session based definitions.
+     *
+     * @param bool $output If set to true output will be given.
+     */
+    public static function clean_old_session_data($output = false) {
+        global $CFG;
+        if ($output) {
+            mtrace('Cleaning up stale session data from cache stores.');
+        }
+        $factory = cache_factory::instance();
+        $config = $factory->create_config_instance();
+        $definitions = $config->get_definitions();
+        $purgetime = time() - $CFG->sessiontimeout;
+        foreach ($definitions as $definitionarray) {
+            // We are only interested in session caches.
+            if (!($definitionarray['mode'] & cache_store::MODE_SESSION)) {
+                continue;
+            }
+            $definition = $factory->create_definition($definitionarray['component'], $definitionarray['area']);
+            $stores = $config->get_stores_for_definition($definition);
+            // Turn them into store instances.
+            $stores = self::initialise_cachestore_instances($stores, $definition);
+            // Initialise all of the stores used for that definition.
+            foreach ($stores as $store) {
+                // If the store doesn't support searching we can skip it.
+                if (!($store instanceof cache_is_searchable)) {
+                    debugging('Cache stores used for session definitions should ideally be searchable.', DEBUG_DEVELOPER);
+                    continue;
+                }
+                // Get all of the keys.
+                $keys = $store->find_by_prefix(cache_session::KEY_PREFIX);
+                $todelete = array();
+                foreach ($store->get_many($keys) as $key => $value) {
+                    if (strpos($key, cache_session::KEY_PREFIX) !== 0 || !is_array($value) || !isset($value['lastaccess'])) {
+                        continue;
+                    }
+                    if ((int)$value['lastaccess'] < $purgetime || true) {
+                        $todelete[] = $key;
+                    }
+                }
+                if (count($todelete)) {
+                    $outcome = (int)$store->delete_many($todelete);
+                    if ($output) {
+                        $strdef = s($definition->get_id());
+                        $strstore = s($store->my_name());
+                        mtrace("- Removed {$outcome} old {$strdef} sessions from the '{$strstore}' cache store.");
+                    }
+                }
+            }
+        }
+    }
 }
index d548349..24996ed 100644 (file)
@@ -338,6 +338,30 @@ interface cache_is_key_aware {
     public function has_all(array $keys);
 }
 
+/**
+ * Cache store feature: keys are searchable.
+ *
+ * Cache stores can choose to implement this interface.
+ * In order for a store to be usable as a session cache it must implement this interface.
+ *
+ * @since 2.4.4
+ */
+interface cache_is_searchable {
+    /**
+     * Finds all of the keys being used by the cache store.
+     *
+     * @return array.
+     */
+    public function find_all();
+
+    /**
+     * Finds all of the keys whose keys start with the given prefix.
+     *
+     * @param string $prefix
+     */
+    public function find_by_prefix($prefix);
+}
+
 /**
  * Cache store feature: configurable.
  *
index fd1a340..9f7dc79 100644 (file)
@@ -141,7 +141,7 @@ class cache implements cache_loader {
      * and having it here helps speed up processing.
      * @var strubg
      */
-    private $storetype = 'unknown';
+    protected $storetype = 'unknown';
 
     /**
      * Gets set to true if we want to collect performance information about the cache API.
@@ -365,6 +365,7 @@ class cache implements cache_loader {
      */
     public function get_many(array $keys, $strictness = IGNORE_MISSING) {
 
+        $keysparsed = array();
         $parsedkeys = array();
         $resultpersist = array();
         $resultstore = array();
@@ -374,6 +375,7 @@ class cache implements cache_loader {
         $isusingpersist = $this->is_using_persist_cache();
         foreach ($keys as $key) {
             $pkey = $this->parse_key($key);
+            $keysparsed[$key] = $pkey;
             $parsedkeys[$pkey] = $key;
             $keystofind[$pkey] = $key;
             if ($isusingpersist) {
@@ -426,9 +428,11 @@ class cache implements cache_loader {
                     $resultmissing = $this->datasource->load_many_for_cache($missingkeys);
                 }
                 foreach ($resultmissing as $key => $value) {
-                    $result[$key] = $value;
+                    $pkey = ($usingloader) ? $key : $keysparsed[$key];
+                    $realkey = ($usingloader) ? $parsedkeys[$key] : $key;
+                    $result[$pkey] = $value;
                     if ($value !== false) {
-                        $this->set($parsedkeys[$key], $value);
+                        $this->set($realkey, $value);
                     }
                 }
                 unset($resultmissing);
@@ -748,7 +752,7 @@ class cache implements cache_loader {
     public function delete($key, $recurse = true) {
         $parsedkey = $this->parse_key($key);
         $this->delete_from_persist_cache($parsedkey);
-        if ($recurse && !empty($this->loader)) {
+        if ($recurse && $this->loader !== false) {
             // Delete from the bottom of the stack first.
             $this->loader->delete($key, $recurse);
         }
@@ -770,7 +774,7 @@ class cache implements cache_loader {
                 $this->delete_from_persist_cache($parsedkey);
             }
         }
-        if ($recurse && !empty($this->loader)) {
+        if ($recurse && $this->loader !== false) {
             // Delete from the bottom of the stack first.
             $this->loader->delete_many($keys, $recurse);
         }
@@ -848,6 +852,26 @@ class cache implements cache_loader {
         return $this->store;
     }
 
+    /**
+     * Returns the loader associated with this instance.
+     *
+     * @since 2.4.4
+     * @return cache_loader|false
+     */
+    protected function get_loader() {
+        return $this->loader;
+    }
+
+    /**
+     * Returns the data source associated with this cache.
+     *
+     * @since 2.4.4
+     * @return cache_data_source|false
+     */
+    protected function get_datasource() {
+        return $this->datasource;
+    }
+
     /**
      * Returns true if the store supports key awareness.
      *
@@ -1396,6 +1420,18 @@ class cache_application extends cache implements cache_loader_with_locking {
  *
  * This class is used for session caches returned by the cache::make methods.
  *
+ * It differs from the application loader in a couple of noteable ways:
+ *    1. Sessions are always expected to be persistent.
+ *       Because of this we don't ever use the persist cache and instead a session array
+ *       containing all of the data is maintained by this object.
+ *    2. Session data for a loader instance (store + definition) is consolidate into a
+ *       single array for storage within the store.
+ *       Along with this we embed a lastaccessed time with the data. This way we can
+ *       check sessions for a last access time.
+ *    3. Session stores are required to support key searching and must
+ *       implement cache_is_searchable. This ensures stores used for the cache can be
+ *       targetted for garbage collection of session data.
+ *
  * This cache class should never be interacted with directly. Instead you should always use the cache::make methods.
  * It is technically possible to call those methods through this class however there is no guarantee that you will get an
  * instance of this class back again.
@@ -1421,6 +1457,24 @@ class cache_session extends cache {
      * @var int
      */
     protected $currentuserid = null;
+
+    /**
+     * The session id we are currently using.
+     * @var array
+     */
+    protected $sessionid = null;
+
+    /**
+     * The session data for the above session id.
+     * @var array
+     */
+    protected $session = null;
+
+    /**
+     * Constant used to prefix keys.
+     */
+    const KEY_PREFIX = 'sess_';
+
     /**
      * Override the cache::construct method.
      *
@@ -1494,12 +1548,16 @@ class cache_session extends cache {
      * This function is called for every operation that uses keys. For this reason we use this function to also check
      * that the current user is the same as the user who last used this cache.
      *
+     * On top of that if prepends the string 'sess_' to the start of all keys. The _ ensures things are easily identifiable.
+     *
      * @param string|int $key As passed to get|set|delete etc.
      * @return string|array String unless the store supports multi-identifiers in which case an array if returned.
      */
     protected function parse_key($key) {
-        $this->check_tracked_user();
-        return parent::parse_key($key);
+        if ($key === 'lastaccess') {
+            $key = '__lastaccess__';
+        }
+        return 'sess_'.parent::parse_key($key);
     }
 
     /**
@@ -1514,11 +1572,13 @@ class cache_session extends cache {
             $new = 0;
         }
         if ($new !== self::$loadeduserid) {
-            // The current user doesn't match the tracker userid for this request.
+            // The current user doesn't match the tracked userid for this request.
             if (!is_null(self::$loadeduserid)) {
                 // Purge the data we have for the old user.
                 // This way we don't bloat the session.
                 $this->purge();
+                // Update the session id just in case!
+                $this->sessionid = session_id();
             }
             self::$loadeduserid = $new;
             $this->currentuserid = $new;
@@ -1526,7 +1586,426 @@ class cache_session extends cache {
             // The current user matches the loaded user but not the user last used by this cache.
             $this->purge();
             $this->currentuserid = $new;
+            // Update the session id just in case!
+            $this->sessionid = session_id();
+        }
+    }
+
+    /**
+     * Gets the session data.
+     *
+     * @param bool $force If true the session data will be loaded from the store again.
+     * @return array An array of session data.
+     */
+    protected function get_session_data($force = false) {
+        if ($this->sessionid === null) {
+            $this->sessionid = session_id();
+        }
+        if (is_array($this->session) && !$force) {
+            return $this->session;
+        }
+        $session = parent::get($this->sessionid);
+        if ($session === false) {
+            $session = array();
+        }
+        // We have to write here to ensure that the lastaccess time is recorded.
+        // And also in order to ensure the session entry exists as when we save it on __destruct
+        // $CFG is likely to have already been destroyed.
+        $this->save_session($session);
+        return $this->session;
+    }
+
+    /**
+     * Saves the session data.
+     *
+     * This function also updates the last access time.
+     *
+     * @param array $session
+     * @return bool
+     */
+    protected function save_session(array $session) {
+        $session['lastaccess'] = time();
+        $this->session = $session;
+        return parent::set($this->sessionid, $this->session);
+    }
+
+    /**
+     * Retrieves the value for the given key from the cache.
+     *
+     * @param string|int $key The key for the data being requested.
+     *      It can be any structure although using a scalar string or int is recommended in the interests of performance.
+     *      In advanced cases an array may be useful such as in situations requiring the multi-key functionality.
+     * @param int $strictness One of IGNORE_MISSING | MUST_EXIST
+     * @return mixed|false The data from the cache or false if the key did not exist within the cache.
+     * @throws moodle_exception
+     */
+    public function get($key, $strictness = IGNORE_MISSING) {
+        // Check the tracked user.
+        $this->check_tracked_user();
+        // 2. Parse the key.
+        $parsedkey = $this->parse_key($key);
+        // 3. Get it from the store.
+        $result = false;
+        $session = $this->get_session_data();
+        if (array_key_exists($parsedkey, $session)) {
+            $result = $session[$parsedkey];
+            if ($result instanceof cache_ttl_wrapper) {
+                if ($result->has_expired()) {
+                    $this->get_store()->delete($parsedkey);
+                    $result = false;
+                } else {
+                    $result = $result->data;
+                }
+            }
+            if ($result instanceof cache_cached_object) {
+                $result = $result->restore_object();
+            }
+        }
+        // 4. Load if from the loader/datasource if we don't already have it.
+        $setaftervalidation = false;
+        if ($result === false) {
+            if ($this->perfdebug) {
+                cache_helper::record_cache_miss('**static session**', $this->get_definition()->get_id());
+            }
+            if ($this->get_loader() !== false) {
+                // We must pass the original (unparsed) key to the next loader in the chain.
+                // The next loader will parse the key as it sees fit. It may be parsed differently
+                // depending upon the capabilities of the store associated with the loader.
+                $result = $this->get_loader()->get($key);
+            } else if ($this->get_datasource() !== false) {
+                $result = $this->get_datasource()->load_for_cache($key);
+            }
+            $setaftervalidation = ($result !== false);
+        } else if ($this->perfdebug) {
+            cache_helper::record_cache_hit('**static session**', $this->get_definition()->get_id());
+        }
+        // 5. Validate strictness.
+        if ($strictness === MUST_EXIST && $result === false) {
+            throw new moodle_exception('Requested key did not exist in any cache stores and could not be loaded.');
         }
+        // 6. Set it to the store if we got it from the loader/datasource.
+        if ($setaftervalidation) {
+            $this->set($key, $result);
+        }
+        // 7. Make sure we don't pass back anything that could be a reference.
+        //    We don't want people modifying the data in the cache.
+        if (!is_scalar($result)) {
+            // If data is an object it will be a reference.
+            // If data is an array if may contain references.
+            // We want to break references so that the cache cannot be modified outside of itself.
+            // Call the function to unreference it (in the best way possible).
+            $result = $this->unref($result);
+        }
+        return $result;
+    }
+
+    /**
+     * Sends a key => value pair to the cache.
+     *
+     * <code>
+     * // This code will add four entries to the cache, one for each url.
+     * $cache->set('main', 'http://moodle.org');
+     * $cache->set('docs', 'http://docs.moodle.org');
+     * $cache->set('tracker', 'http://tracker.moodle.org');
+     * $cache->set('qa', 'http://qa.moodle.net');
+     * </code>
+     *
+     * @param string|int $key The key for the data being requested.
+     *      It can be any structure although using a scalar string or int is recommended in the interests of performance.
+     *      In advanced cases an array may be useful such as in situations requiring the multi-key functionality.
+     * @param mixed $data The data to set against the key.
+     * @return bool True on success, false otherwise.
+     */
+    public function set($key, $data) {
+        $this->check_tracked_user();
+        if ($this->perfdebug) {
+            cache_helper::record_cache_set('**static session**', $this->get_definition()->get_id());
+        }
+        if (is_object($data) && $data instanceof cacheable_object) {
+            $data = new cache_cached_object($data);
+        } else if (!is_scalar($data)) {
+            // If data is an object it will be a reference.
+            // If data is an array if may contain references.
+            // We want to break references so that the cache cannot be modified outside of itself.
+            // Call the function to unreference it (in the best way possible).
+            $data = $this->unref($data);
+        }
+        // We dont' support native TTL here as we consolidate data for sessions.
+        if ($this->has_a_ttl()) {
+            $data = new cache_ttl_wrapper($data, $this->get_definition()->get_ttl());
+        }
+        $session = $this->get_session_data();
+        $session[$this->parse_key($key)] = $data;
+        return $this->save_session($session);
+    }
+
+    /**
+     * Delete the given key from the cache.
+     *
+     * @param string|int $key The key to delete.
+     * @param bool $recurse When set to true the key will also be deleted from all stacked cache loaders and their stores.
+     *     This happens by default and ensure that all the caches are consistent. It is NOT recommended to change this.
+     * @return bool True of success, false otherwise.
+     */
+    public function delete($key, $recurse = true) {
+        $this->check_tracked_user();
+        $parsedkey = $this->parse_key($key);
+        if ($recurse && $this->get_loader() !== false) {
+            // Delete from the bottom of the stack first.
+            $this->get_loader()->delete($key, $recurse);
+        }
+        $session = $this->get_session_data();
+        unset($session[$parsedkey]);
+        return $this->save_session($session);
+    }
+
+    /**
+     * Retrieves an array of values for an array of keys.
+     *
+     * Using this function comes with potential performance implications.
+     * Not all cache stores will support get_many/set_many operations and in order to replicate this functionality will call
+     * the equivalent singular method for each item provided.
+     * This should not deter you from using this function as there is a performance benefit in situations where the cache store
+     * does support it, but you should be aware of this fact.
+     *
+     * @param array $keys The keys of the data being requested.
+     *      Each key can be any structure although using a scalar string or int is recommended in the interests of performance.
+     *      In advanced cases an array may be useful such as in situations requiring the multi-key functionality.
+     * @param int $strictness One of IGNORE_MISSING or MUST_EXIST.
+     * @return array An array of key value pairs for the items that could be retrieved from the cache.
+     *      If MUST_EXIST was used and not all keys existed within the cache then an exception will be thrown.
+     *      Otherwise any key that did not exist will have a data value of false within the results.
+     * @throws moodle_exception
+     */
+    public function get_many(array $keys, $strictness = IGNORE_MISSING) {
+        $this->check_tracked_user();
+        $return = array();
+        foreach ($keys as $key) {
+            $return[$key] = $this->get($key, $strictness);
+        }
+        return $return;
+    }
+
+    /**
+     * Delete all of the given keys from the cache.
+     *
+     * @param array $keys The key to delete.
+     * @param bool $recurse When set to true the key will also be deleted from all stacked cache loaders and their stores.
+     *     This happens by default and ensure that all the caches are consistent. It is NOT recommended to change this.
+     * @return int The number of items successfully deleted.
+     */
+    public function delete_many(array $keys, $recurse = true) {
+        $this->check_tracked_user();
+        $parsedkeys = array_map(array($this, 'parse_key'), $keys);
+        if ($recurse && $this->get_loader() !== false) {
+            // Delete from the bottom of the stack first.
+            $this->get_loader()->delete_many($keys, $recurse);
+        }
+        $session = $this->get_session_data();
+        foreach ($parsedkeys as $parsedkey) {
+            unset($session[$parsedkey]);
+        }
+        $this->save_session($session);
+        return count($keys);
+    }
+
+    /**
+     * Sends several key => value pairs to the cache.
+     *
+     * Using this function comes with potential performance implications.
+     * Not all cache stores will support get_many/set_many operations and in order to replicate this functionality will call
+     * the equivalent singular method for each item provided.
+     * This should not deter you from using this function as there is a performance benefit in situations where the cache store
+     * does support it, but you should be aware of this fact.
+     *
+     * <code>
+     * // This code will add four entries to the cache, one for each url.
+     * $cache->set_many(array(
+     *     'main' => 'http://moodle.org',
+     *     'docs' => 'http://docs.moodle.org',
+     *     'tracker' => 'http://tracker.moodle.org',
+     *     'qa' => ''http://qa.moodle.net'
+     * ));
+     * </code>
+     *
+     * @param array $keyvaluearray An array of key => value pairs to send to the cache.
+     * @return int The number of items successfully set. It is up to the developer to check this matches the number of items.
+     *      ... if they care that is.
+     */
+    public function set_many(array $keyvaluearray) {
+        $this->check_tracked_user();
+        $session = $this->get_session_data();
+        $simulatettl = $this->has_a_ttl();
+        foreach ($keyvaluearray as $key => $value) {
+            if (is_object($value) && $value instanceof cacheable_object) {
+                $value = new cache_cached_object($value);
+            } else if (!is_scalar($value)) {
+                // If data is an object it will be a reference.
+                // If data is an array if may contain references.
+                // We want to break references so that the cache cannot be modified outside of itself.
+                // Call the function to unreference it (in the best way possible).
+                $value = $this->unref($value);
+            }
+            if ($simulatettl) {
+                $value = new cache_ttl_wrapper($value, $this->get_definition()->get_ttl());
+            }
+            $parsedkey = $this->parse_key($key);
+            $session[$parsedkey] = $value;
+        }
+        if ($this->perfdebug) {
+            cache_helper::record_cache_set($this->storetype, $this->get_definition()->get_id());
+        }
+        $this->save_session($session);
+        return count($keyvaluearray);
+    }
+
+    /**
+     * Purges the cache store, and loader if there is one.
+     *
+     * @return bool True on success, false otherwise
+     */
+    public function purge() {
+        // 1. Purge the session object.
+        $this->session = array();
+        // 2. Delete the record for this users session from the store.
+        $this->get_store()->delete($this->sessionid);
+        // 3. Optionally purge any stacked loaders in the same way.
+        if ($this->get_loader()) {
+            $this->get_loader()->delete($this->sessionid);
+        }
+        return true;
+    }
+
+    /**
+     * Test is a cache has a key.
+     *
+     * The use of the has methods is strongly discouraged. In a high load environment the cache may well change between the
+     * test and any subsequent action (get, set, delete etc).
+     * Instead it is recommended to write your code in such a way they it performs the following steps:
+     * <ol>
+     * <li>Attempt to retrieve the information.</li>
+     * <li>Generate the information.</li>
+     * <li>Attempt to set the information</li>
+     * </ol>
+     *
+     * Its also worth mentioning that not all stores support key tests.
+     * For stores that don't support key tests this functionality is mimicked by using the equivalent get method.
+     * Just one more reason you should not use these methods unless you have a very good reason to do so.
+     *
+     * @param string|int $key
+     * @param bool $tryloadifpossible If set to true, the cache doesn't contain the key, and there is another cache loader or
+     *      data source then the code will try load the key value from the next item in the chain.
+     * @return bool True if the cache has the requested key, false otherwise.
+     */
+    public function has($key, $tryloadifpossible = false) {
+        $this->check_tracked_user();
+        $parsedkey = $this->parse_key($key);
+        $session = $this->get_session_data();
+        $has = false;
+        if ($this->has_a_ttl()) {
+            // The data has a TTL and the store doesn't support it natively.
+            // We must fetch the data and expect a ttl wrapper.
+            if (array_key_exists($parsedkey, $session)) {
+                $data = $session[$parsedkey];
+                $has = ($data instanceof cache_ttl_wrapper && !$data->has_expired());
+            }
+        } else {
+            $has = array_key_exists($parsedkey, $session);
+        }
+        if (!$has && $tryloadifpossible) {
+            if ($this->get_loader() !== false) {
+                $result = $this->get_loader()->get($key);
+            } else if ($this->get_datasource() !== null) {
+                $result = $this->get_datasource()->load_for_cache($key);
+            }
+            $has = ($result !== null);
+            if ($has) {
+                $this->set($key, $result);
+            }
+        }
+        return $has;
+    }
+
+    /**
+     * Test is a cache has all of the given keys.
+     *
+     * It is strongly recommended to avoid the use of this function if not absolutely required.
+     * In a high load environment the cache may well change between the test and any subsequent action (get, set, delete etc).
+     *
+     * Its also worth mentioning that not all stores support key tests.
+     * For stores that don't support key tests this functionality is mimicked by using the equivalent get method.
+     * Just one more reason you should not use these methods unless you have a very good reason to do so.
+     *
+     * @param array $keys
+     * @return bool True if the cache has all of the given keys, false otherwise.
+     */
+    public function has_all(array $keys) {
+        $this->check_tracked_user();
+        $session = $this->get_session_data();
+        foreach ($keys as $key) {
+            $has = false;
+            $parsedkey = $this->parse_key($key);
+            if ($this->has_a_ttl()) {
+                // The data has a TTL and the store doesn't support it natively.
+                // We must fetch the data and expect a ttl wrapper.
+                if (array_key_exists($parsedkey, $session)) {
+                    $data = $session[$parsedkey];
+                    $has = ($data instanceof cache_ttl_wrapper && !$data->has_expired());
+                }
+            } else {
+                $has = array_key_exists($parsedkey, $session);
+            }
+            if (!$has) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Test if a cache has at least one of the given keys.
+     *
+     * It is strongly recommended to avoid the use of this function if not absolutely required.
+     * In a high load environment the cache may well change between the test and any subsequent action (get, set, delete etc).
+     *
+     * Its also worth mentioning that not all stores support key tests.
+     * For stores that don't support key tests this functionality is mimicked by using the equivalent get method.
+     * Just one more reason you should not use these methods unless you have a very good reason to do so.
+     *
+     * @param array $keys
+     * @return bool True if the cache has at least one of the given keys
+     */
+    public function has_any(array $keys) {
+        $this->check_tracked_user();
+        $session = $this->get_session_data();
+        foreach ($keys as $key) {
+            $has = false;
+            $parsedkey = $this->parse_key($key);
+            if ($this->has_a_ttl()) {
+                // The data has a TTL and the store doesn't support it natively.
+                // We must fetch the data and expect a ttl wrapper.
+                if (array_key_exists($parsedkey, $session)) {
+                    $data = $session[$parsedkey];
+                    $has = ($data instanceof cache_ttl_wrapper && !$data->has_expired());
+                }
+            } else {
+                $has = array_key_exists($parsedkey, $session);
+            }
+            if ($has) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * The session loader never uses the persist cache.
+     * Instead it stores things in the static $session variable. Shared between all session loaders.
+     *
+     * @return bool
+     */
+    protected function is_using_persist_cache() {
+        return false;
     }
 }
 
index 5bb26e4..d757157 100644 (file)
@@ -110,6 +110,11 @@ abstract class cache_store implements cache_store_interface {
      */
     const SUPPORTS_NATIVE_TTL = 4;
 
+    /**
+     * The cache is searchable by key.
+     */
+    const IS_SEARCHABLE = 8;
+
     // Constants for the modes of a cache store
 
     /**
@@ -307,6 +312,15 @@ abstract class cache_store implements cache_store_interface {
         return $this::get_supported_features() & self::SUPPORTS_NATIVE_TTL;
     }
 
+    /**
+     * Returns true if the store instance is searchable.
+     *
+     * @return bool
+     */
+    public function is_searchable() {
+        return in_array('cache_is_searchable', class_implements($this));
+    }
+
     /**
      * Creates a clone of this store instance ready to be initialised.
      *
index 9708a01..2c12884 100644 (file)
@@ -57,19 +57,20 @@ class cachestore_addinstance_form extends moodleform {
             $form->addElement('text', 'name', get_string('storename', 'cache'));
             $form->addHelpButton('name', 'storename', 'cache');
             $form->addRule('name', get_string('required'), 'required');
-            $form->setType('name', PARAM_TEXT);
+            $form->setType('name', PARAM_NOTAGS);
         } else {
             $form->addElement('hidden', 'name', $store);
             $form->addElement('static', 'name-value', get_string('storename', 'cache'), $store);
-            $form->setType('name', PARAM_TEXT);
+            $form->setType('name', PARAM_NOTAGS);
         }
 
         if (is_array($locks)) {
             $form->addElement('select', 'lock', get_string('lockmethod', 'cache'), $locks);
             $form->addHelpButton('lock', 'lockmethod', 'cache');
-            $form->setType('lock', PARAM_TEXT);
+            $form->setType('lock', PARAM_PLUGIN);
         } else {
             $form->addElement('hidden', 'lock', '');
+            $form->setType('lock', PARAM_PLUGIN);
             $form->addElement('static', 'lock-value', get_string('lockmethod', 'cache'),
                     '<em>'.get_string('nativelocking', 'cache').'</em>');
         }
@@ -139,7 +140,9 @@ class cache_definition_mappings_form extends moodleform {
                 cache_administration_helper::get_definition_store_options($component, $area);
 
         $form->addElement('hidden', 'definition', $definition);
+        $form->setType('definition', PARAM_SAFEPATH);
         $form->addElement('hidden', 'action', 'editdefinitionmapping');
+        $form->setType('action', PARAM_ALPHA);
 
         $requiredoptions = max(3, count($currentstores)+1);
         $requiredoptions = min($requiredoptions, count($storeoptions));
@@ -200,7 +203,7 @@ class cache_mode_mappings_form extends moodleform {
         );
         foreach ($stores as $storename => $store) {
             foreach ($store['modes'] as $mode => $enabled) {
-                if ($enabled) {
+                if ($enabled && ($mode !== cache_store::MODE_SESSION || $store['supports']['searchable'])) {
                     if (empty($store['default'])) {
                         $options[$mode][$storename] = $store['name'];
                     } else {
@@ -211,6 +214,7 @@ class cache_mode_mappings_form extends moodleform {
         }
 
         $form->addElement('hidden', 'action', 'editmodemappings');
+        $form->setType('action', PARAM_ALPHA);
         foreach ($options as $mode => $optionset) {
             $form->addElement('select', 'mode_'.$mode, get_string('mode_'.$mode, 'cache'), $optionset);
         }
index e2b498e..f52570e 100644 (file)
@@ -340,32 +340,7 @@ class cache_config_writer extends cache_config {
         require_once($CFG->dirroot.'/cache/stores/static/lib.php');
 
         $writer = new self;
-        $writer->configstores = array(
-            'default_application' => array(
-                'name' => 'default_application',
-                'plugin' => 'file',
-                'configuration' => array(),
-                'features' => cachestore_file::get_supported_features(),
-                'modes' => cache_store::MODE_APPLICATION,
-                'default' => true,
-            ),
-            'default_session' => array(
-                'name' => 'default_session',
-                'plugin' => 'session',
-                'configuration' => array(),
-                'features' => cachestore_session::get_supported_features(),
-                'modes' => cache_store::MODE_SESSION,
-                'default' => true,
-            ),
-            'default_request' => array(
-                'name' => 'default_request',
-                'plugin' => 'static',
-                'configuration' => array(),
-                'features' => cachestore_static::get_supported_features(),
-                'modes' => cache_store::MODE_REQUEST,
-                'default' => true,
-            )
-        );
+        $writer->configstores = self::get_default_stores();
         $writer->configdefinitions = self::locate_definitions();
         $writer->configmodemappings = array(
             array(
@@ -404,6 +379,52 @@ class cache_config_writer extends cache_config {
         return true;
     }
 
+    /**
+     * Returns an array of default stores for use.
+     *
+     * @return array
+     */
+    protected static function get_default_stores() {
+        return array(
+            'default_application' => array(
+                'name' => 'default_application',
+                'plugin' => 'file',
+                'configuration' => array(),
+                'features' => cachestore_file::get_supported_features(),
+                'modes' => cachestore_file::get_supported_modes(),
+                'default' => true,
+            ),
+            'default_session' => array(
+                'name' => 'default_session',
+                'plugin' => 'session',
+                'configuration' => array(),
+                'features' => cachestore_session::get_supported_features(),
+                'modes' => cachestore_session::get_supported_modes(),
+                'default' => true,
+            ),
+            'default_request' => array(
+                'name' => 'default_request',
+                'plugin' => 'static',
+                'configuration' => array(),
+                'features' => cachestore_static::get_supported_features(),
+                'modes' => cachestore_static::get_supported_modes(),
+                'default' => true,
+            )
+        );
+    }
+
+    /**
+     * Updates the default stores within the MUC config file.
+     */
+    public static function update_default_config_stores() {
+        $factory = cache_factory::instance();
+        $factory->updating_started();
+        $config = $factory->create_config_instance(true);
+        $config->configstores = array_merge($config->configstores, self::get_default_stores());
+        $config->config_save();
+        $factory->updating_finished();
+    }
+
     /**
      * Updates the definition in the configuration from those found in the cache files.
      *
@@ -581,6 +602,7 @@ abstract class cache_administration_helper extends cache_helper {
                     'nativettl' => $store->supports_native_ttl(),
                     'nativelocking' => ($store instanceof cache_is_lockable),
                     'keyawareness' => ($store instanceof cache_is_key_aware),
+                    'searchable' => ($store instanceof cache_is_searchable)
                 )
             );
             if (empty($details['default'])) {
index 855a223..54dfe93 100644 (file)
@@ -37,7 +37,7 @@
  * @copyright  2012 Sam Hemelryk
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
-class cachestore_file extends cache_store implements cache_is_key_aware, cache_is_configurable  {
+class cachestore_file extends cache_store implements cache_is_key_aware, cache_is_configurable, cache_is_searchable  {
 
     /**
      * The name of the store.
@@ -190,7 +190,8 @@ class cachestore_file extends cache_store implements cache_is_key_aware, cache_i
      */
     public static function get_supported_features(array $configuration = array()) {
         $supported = self::SUPPORTS_DATA_GUARANTEE +
-                     self::SUPPORTS_NATIVE_TTL;
+                     self::SUPPORTS_NATIVE_TTL +
+                     self::IS_SEARCHABLE;
         return $supported;
     }
 
@@ -257,13 +258,15 @@ class cachestore_file extends cache_store implements cache_is_key_aware, cache_i
 
     /**
      * Gets a pattern suitable for use with glob to find all keys in the cache.
+     *
+     * @param string $prefix A prefix to use.
      * @return string The pattern.
      */
-    protected function glob_keys_pattern() {
+    protected function glob_keys_pattern($prefix = '') {
         if ($this->singledirectory) {
-            return $this->path . '/*.cache';
+            return $this->path . '/'.$prefix.'*.cache';
         } else {
-            return $this->path . '/*/*.cache';
+            return $this->path . '/*/'.$prefix.'*.cache';
         }
     }
 
@@ -365,7 +368,6 @@ class cachestore_file extends cache_store implements cache_is_key_aware, cache_i
     public function delete($key) {
         $filename = $key.'.cache';
         $file = $this->file_path_for_key($key);
-
         if (@unlink($file)) {
             unset($this->keys[$filename]);
             return true;
@@ -687,4 +689,42 @@ class cachestore_file extends cache_store implements cache_is_key_aware, cache_i
     public function my_name() {
         return $this->name;
     }
+
+    /**
+     * Finds all of the keys being used by this cache store instance.
+     *
+     * @return array
+     */
+    public function find_all() {
+        $this->ensure_path_exists();
+        $files = glob($this->glob_keys_pattern(), GLOB_MARK | GLOB_NOSORT);
+        $return = array();
+        if ($files === false) {
+            return $return;
+        }
+        foreach ($files as $file) {
+            $return[] = substr(basename($file), 0, -6);
+        }
+        return $return;
+    }
+
+    /**
+     * Finds all of the keys whose keys start with the given prefix.
+     *
+     * @param string $prefix
+     */
+    public function find_by_prefix($prefix) {
+        $this->ensure_path_exists();
+        $prefix = preg_replace('#(\*|\?|\[)#', '[$1]', $prefix);
+        $files = glob($this->glob_keys_pattern($prefix), GLOB_MARK | GLOB_NOSORT);
+        $return = array();
+        if ($files === false) {
+            return $return;
+        }
+        foreach ($files as $file) {
+            // Trim off ".cache" from the end.
+            $return[] = substr(basename($file), 0, -6);
+        }
+        return $return;
+    }
 }
index 441bd70..39ebbf3 100644 (file)
@@ -90,7 +90,7 @@ abstract class session_data_store extends cache_store {
  * @copyright  2012 Sam Hemelryk
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
-class cachestore_session extends session_data_store implements cache_is_key_aware {
+class cachestore_session extends session_data_store implements cache_is_key_aware, cache_is_searchable {
 
     /**
      * The name of the store
@@ -137,7 +137,8 @@ class cachestore_session extends session_data_store implements cache_is_key_awar
      */
     public static function get_supported_features(array $configuration = array()) {
         return self::SUPPORTS_DATA_GUARANTEE +
-               self::SUPPORTS_NATIVE_TTL;
+               self::SUPPORTS_NATIVE_TTL +
+               self::IS_SEARCHABLE;
     }
 
     /**
@@ -403,4 +404,28 @@ class cachestore_session extends session_data_store implements cache_is_key_awar
     public function my_name() {
         return $this->name;
     }
+
+    /**
+     * Finds all of the keys being stored in the cache store instance.
+     *
+     * @return array
+     */
+    public function find_all() {
+        return array_keys($this->store);
+    }
+
+    /**
+     * Finds all of the keys whose keys start with the given prefix.
+     *
+     * @param string $prefix
+     */
+    public function find_by_prefix($prefix) {
+        $return = array();
+        foreach ($this->find_all() as $key) {
+            if (strpos($key, $prefix) === 0) {
+                $return[] = $key;
+            }
+        }
+        return $return;
+    }
 }
\ No newline at end of file
index ba8115f..b13a4b5 100644 (file)
@@ -126,6 +126,18 @@ class cache_phpunit_tests extends advanced_testcase {
         $cache = cache::make_from_params(cache_store::MODE_APPLICATION, 'phpunit', 'applicationtest');
         $this->assertInstanceOf('cache_application', $cache);
         $this->run_on_cache($cache);
+
+        $instance = cache_config_phpunittest::instance(true);
+        $instance->phpunit_add_definition('phpunit/test_default_application_cache', array(
+            'mode' => cache_store::MODE_APPLICATION,
+            'component' => 'phpunit',
+            'area' => 'test_default_application_cache',
+            'persistent' => true,
+            'persistentmaxsize' => 1
+        ));
+        $cache = cache::make('phpunit', 'test_default_application_cache');
+        $this->assertInstanceOf('cache_application', $cache);
+        $this->run_on_cache($cache);
     }
 
     /**
@@ -231,7 +243,7 @@ class cache_phpunit_tests extends advanced_testcase {
         $this->assertEquals('red_ptc_wfc', $result->property1);
         $this->assertEquals('blue_ptc_wfc', $result->property2);
 
-        // Test array of objects
+        // Test array of objects.
         $specobject = new cache_phpunit_dummy_object('red', 'blue');
         $data = new cacheable_object_array(array(
             clone($specobject),
@@ -255,6 +267,18 @@ class cache_phpunit_tests extends advanced_testcase {
         $this->assertTrue($cache->delete('key1'));
         $this->assertTrue($cache->delete('key2'));
 
+        $cache->set_many(array(
+            'key1' => array(1, 2, 3),
+            'key2' => array(3, 2, 1),
+        ));
+        $this->assertInternalType('array', $cache->get('key1'));
+        $this->assertInternalType('array', $cache->get('key2'));
+        $this->assertCount(3, $cache->get('key1'));
+        $this->assertCount(3, $cache->get('key2'));
+        $this->assertInternalType('array', $cache->get_many(array('key1', 'key2')));
+        $this->assertCount(2, $cache->get_many(array('key1', 'key2')));
+        $this->assertEquals(2, $cache->delete_many(array('key1', 'key2')));
+
         // Test delete many.
         $this->assertTrue($cache->set('key1', 'data1'));
         $this->assertTrue($cache->set('key2', 'data2'));
@@ -333,6 +357,27 @@ class cache_phpunit_tests extends advanced_testcase {
         $this->assertEquals('value', $var2->key);
 
         $this->assertTrue($cache->delete('obj'));
+
+        // Test strictness exceptions.
+        try {
+            $cache->get('exception', MUST_EXIST);
+            $this->fail('Exception expected from cache::get using MUST_EXIST');
+        } catch (Exception $e) {
+            $this->assertTrue(true);
+        }
+        try {
+            $cache->get_many(array('exception1', 'exception2'), MUST_EXIST);
+            $this->fail('Exception expected from cache::get_many using MUST_EXIST');
+        } catch (Exception $e) {
+            $this->assertTrue(true);
+        }
+        $cache->set('test', 'test');
+        try {
+            $cache->get_many(array('test', 'exception'), MUST_EXIST);
+            $this->fail('Exception expected from cache::get_many using MUST_EXIST');
+        } catch (Exception $e) {
+            $this->assertTrue(true);
+        }
     }
 
     /**
@@ -355,13 +400,25 @@ class cache_phpunit_tests extends advanced_testcase {
         $this->assertTrue($cache->purge());
         // It won't be there yet.
         $this->assertFalse($cache->has('Test'));
-
         // It should load it ;).
         $this->assertTrue($cache->has('Test', true));
 
         // Purge it to be sure.
         $this->assertTrue($cache->purge());
         $this->assertEquals('Test has no value really.', $cache->get('Test'));
+
+        // Test multiple values.
+        $this->assertTrue($cache->purge());
+        $this->assertTrue($cache->set('b', 'B'));
+        $result = $cache->get_many(array('a', 'b', 'c'));
+        $this->assertInternalType('array', $result);
+        $this->assertCount(3, $result);
+        $this->assertArrayHasKey('a', $result);
+        $this->assertArrayHasKey('b', $result);
+        $this->assertArrayHasKey('c', $result);
+        $this->assertEquals('a has no value really.', $result['a']);
+        $this->assertEquals('B', $result['b