Merge branch 'MDL-36680_hidden' of git://github.com/andyjdavis/moodle
authorDan Poltawski <dan@moodle.com>
Mon, 10 Dec 2012 01:56:09 +0000 (09:56 +0800)
committerDan Poltawski <dan@moodle.com>
Mon, 10 Dec 2012 01:56:09 +0000 (09:56 +0800)
768 files changed:
admin/blocks.php
admin/cli/install.php
admin/filters.php
admin/index.php
admin/modules.php
admin/qbehaviours.php
admin/qtypes.php
admin/renderer.php
admin/tool/assignmentupgrade/version.php
admin/tool/capability/version.php
admin/tool/customlang/version.php
admin/tool/dbtransfer/version.php
admin/tool/generator/version.php
admin/tool/health/version.php
admin/tool/innodb/version.php
admin/tool/langimport/version.php
admin/tool/multilangupgrade/version.php
admin/tool/phpunit/version.php
admin/tool/profiling/version.php
admin/tool/qeupgradehelper/version.php
admin/tool/replace/version.php
admin/tool/spamcleaner/version.php
admin/tool/timezoneimport/version.php
admin/tool/unsuproles/version.php
admin/tool/uploaduser/version.php
admin/tool/xmldb/version.php
auth/cas/version.php
auth/db/version.php
auth/email/version.php
auth/fc/version.php
auth/imap/version.php
auth/ldap/version.php
auth/manual/version.php
auth/mnet/version.php
auth/nntp/version.php
auth/nologin/version.php
auth/none/version.php
auth/pam/version.php
auth/pop3/version.php
auth/radius/version.php
auth/shibboleth/version.php
auth/webservice/version.php
backup/backup.class.php
backup/moodle2/backup_activity_task.class.php
backup/moodle2/restore_activity_task.class.php
backup/moodle2/restore_stepslib.php
backup/util/ui/backup_ui_setting.class.php
backup/util/ui/renderer.php
blocks/activity_modules/version.php
blocks/admin_bookmarks/version.php
blocks/blog_menu/version.php
blocks/blog_recent/version.php
blocks/blog_tags/version.php
blocks/calendar_month/version.php
blocks/calendar_upcoming/version.php
blocks/comments/version.php
blocks/community/version.php
blocks/completionstatus/version.php
blocks/course_list/styles.css
blocks/course_list/version.php
blocks/course_overview/version.php
blocks/course_summary/version.php
blocks/dock.js
blocks/feedback/version.php
blocks/glossary_random/version.php
blocks/html/version.php
blocks/login/version.php
blocks/mentees/version.php
blocks/messages/version.php
blocks/mnet_hosts/version.php
blocks/moodleblock.class.php
blocks/myprofile/version.php
blocks/navigation/styles.css
blocks/navigation/version.php
blocks/news_items/version.php
blocks/online_users/styles.css
blocks/online_users/version.php
blocks/participants/version.php
blocks/private_files/version.php
blocks/quiz_results/version.php
blocks/recent_activity/version.php
blocks/rss_client/version.php
blocks/search_forums/version.php
blocks/section_links/version.php
blocks/selfcompletion/version.php
blocks/settings/version.php
blocks/site_main_menu/version.php
blocks/social_activities/version.php
blocks/tag_flickr/version.php
blocks/tag_youtube/version.php
blocks/tags/version.php
blog/external_blogs.php
cache/README.md
cache/classes/config.php
cache/classes/dummystore.php
cache/classes/factory.php
cache/classes/interfaces.php
cache/classes/loaders.php
cache/classes/store.php [new file with mode: 0644]
cache/disabledlib.php [new file with mode: 0644]
cache/lib.php
cache/locallib.php
cache/renderer.php
cache/stores/file/lib.php
cache/stores/file/version.php
cache/stores/memcache/lib.php
cache/stores/memcache/version.php
cache/stores/memcached/lib.php
cache/stores/memcached/version.php
cache/stores/mongodb/lib.php
cache/stores/mongodb/version.php
cache/stores/session/lib.php
cache/stores/session/version.php
cache/stores/static/lib.php
cache/stores/static/version.php
cache/tests/cache_test.php
cache/tests/fixtures/lib.php
cache/tests/locallib_test.php
calendar/lib.php
calendar/managesubscriptions_form.php
calendar/yui/eventmanager/eventmanager.js
completion/criteria/completion_criteria_grade.php
course/category.php
course/dndupload.js
course/edit.php
course/format/scorm/version.php
course/format/social/version.php
course/format/topics/lib.php
course/format/topics/styles.css
course/format/topics/version.php
course/format/weeks/lib.php
course/format/weeks/styles.css
course/format/weeks/version.php
course/lib.php
course/recent_form.php
course/rest.php
course/search.php
course/yui/toolboxes/toolboxes.js
enrol/authorize/version.php
enrol/category/version.php
enrol/cohort/version.php
enrol/database/version.php
enrol/flatfile/version.php
enrol/guest/pix/withoutpassword.png [new file with mode: 0644]
enrol/guest/pix/withoutpassword.svg [new file with mode: 0644]
enrol/guest/pix/withpassword.png [new file with mode: 0644]
enrol/guest/pix/withpassword.svg [new file with mode: 0644]
enrol/guest/version.php
enrol/imsenterprise/version.php
enrol/ldap/version.php
enrol/manual/version.php
enrol/manual/yui/quickenrolment/assets/skins/sam/quickenrolment.css
enrol/manual/yui/quickenrolment/quickenrolment.js
enrol/meta/version.php
enrol/mnet/version.php
enrol/paypal/lib.php
enrol/paypal/version.php
enrol/self/pix/withkey.png [new file with mode: 0644]
enrol/self/pix/withkey.svg [new file with mode: 0644]
enrol/self/pix/withoutkey.png [new file with mode: 0644]
enrol/self/pix/withoutkey.svg [new file with mode: 0644]
enrol/self/version.php
files/renderer.php
filter/activitynames/version.php
filter/algebra/version.php
filter/censor/version.php
filter/data/version.php
filter/emailprotect/version.php
filter/emoticon/version.php
filter/glossary/version.php
filter/mediaplugin/version.php
filter/multilang/version.php
filter/tex/version.php
filter/tidy/version.php
filter/urltolink/version.php
grade/export/ods/version.php
grade/export/txt/version.php
grade/export/xls/version.php
grade/export/xml/version.php
grade/grading/form/guide/pix/icon.png
grade/grading/form/guide/pix/icon.svg [new file with mode: 0644]
grade/grading/form/guide/styles.css
grade/grading/form/guide/version.php
grade/grading/form/rubric/pix/icon.png
grade/grading/form/rubric/pix/icon.svg [new file with mode: 0644]
grade/grading/form/rubric/styles.css
grade/grading/form/rubric/version.php
grade/import/csv/version.php
grade/import/xml/version.php
grade/lib.php
grade/report/grader/index.php
grade/report/grader/lib.php
grade/report/grader/quickedit_item.php
grade/report/grader/styles.css
grade/report/grader/version.php
grade/report/lib.php
grade/report/outcomes/version.php
grade/report/overview/version.php
grade/report/user/version.php
install.php
install/lang/es/install.php
install/lang/es_mx/langconfig.php
install/lang/zh_tw/admin.php
lang/en/cache.php
lang/en/message.php
lang/en/plugin.php
lang/en/webservice.php
lib/accesslib.php
lib/adminlib.php
lib/ajax/blocks.php
lib/completionlib.php
lib/db/caches.php
lib/db/services.php
lib/db/upgrade.php
lib/ddl/oracle_sql_generator.php
lib/editor/textarea/version.php
lib/editor/tinymce/adminlib.php
lib/editor/tinymce/plugins/dragmath/version.php
lib/editor/tinymce/plugins/moodleemoticon/version.php
lib/editor/tinymce/plugins/moodleimage/version.php
lib/editor/tinymce/plugins/moodlemedia/version.php
lib/editor/tinymce/plugins/moodlenolink/version.php
lib/editor/tinymce/plugins/spellchecker/version.php
lib/editor/tinymce/version.php
lib/external/externallib.php [new file with mode: 0644]
lib/external/tests/externallib_test.php [new file with mode: 0644]
lib/formslib.php
lib/grade/grade_category.php
lib/javascript-static.js
lib/navigationlib.php
lib/outputlib.php
lib/outputrenderers.php
lib/pluginlib.php
lib/portfolio/formats/leap2a/lib.php
lib/portfoliolib.php
lib/questionlib.php
lib/setup.php
lib/setuplib.php
lib/upgrade.txt
lib/upgradelib.php
lib/yui/blocks/blocks.js
lib/yui/formautosubmit/formautosubmit.js [new file with mode: 0644]
login/index_form.html
mdeploy.php
mdeploytest.php
message/edit.php
message/lib.php
message/output/email/version.php
message/output/jabber/version.php
message/output/popup/version.php
message/renderer.php
mnet/service/enrol/version.php
mod/assign/adminlib.php
mod/assign/feedback/comments/version.php
mod/assign/feedback/file/locallib.php
mod/assign/feedback/file/version.php
mod/assign/feedback/offline/version.php
mod/assign/gradingtable.php
mod/assign/lang/en/assign.php
mod/assign/locallib.php
mod/assign/mod_form.php
mod/assign/pix/gradefeedback.png [new file with mode: 0644]
mod/assign/pix/gradefeedback.svg [new file with mode: 0644]
mod/assign/settings.php
mod/assign/styles.css
mod/assign/submission/comments/version.php
mod/assign/submission/file/version.php
mod/assign/submission/onlinetext/version.php
mod/assign/upgradelib.php
mod/assign/version.php
mod/assignment/type/offline/version.php
mod/assignment/type/online/version.php
mod/assignment/type/upload/version.php
mod/assignment/type/uploadsingle/version.php
mod/assignment/version.php
mod/book/locallib.php
mod/book/pix/add.png
mod/book/pix/add.svg [new file with mode: 0644]
mod/book/pix/nav_exit.png
mod/book/pix/nav_exit.svg [new file with mode: 0644]
mod/book/pix/nav_next.png
mod/book/pix/nav_next.svg [new file with mode: 0644]
mod/book/pix/nav_next_dis.png [new file with mode: 0644]
mod/book/pix/nav_next_dis.svg [new file with mode: 0644]
mod/book/pix/nav_prev.png
mod/book/pix/nav_prev.svg [new file with mode: 0644]
mod/book/pix/nav_prev_dis.png
mod/book/pix/nav_prev_dis.svg [new file with mode: 0644]
mod/book/styles.css
mod/book/tool/exportimscp/version.php
mod/book/tool/importhtml/version.php
mod/book/tool/print/pix/book.png
mod/book/tool/print/pix/book.svg [new file with mode: 0644]
mod/book/tool/print/pix/chapter.png
mod/book/tool/print/pix/chapter.svg [new file with mode: 0644]
mod/book/tool/print/version.php
mod/book/version.php
mod/book/view.php
mod/chat/version.php
mod/choice/lib.php
mod/choice/version.php
mod/data/field/checkbox/version.php
mod/data/field/date/version.php
mod/data/field/file/version.php
mod/data/field/latlong/kml.php
mod/data/field/latlong/version.php
mod/data/field/menu/version.php
mod/data/field/multimenu/version.php
mod/data/field/number/version.php
mod/data/field/picture/version.php
mod/data/field/radiobutton/version.php
mod/data/field/text/version.php
mod/data/field/textarea/version.php
mod/data/field/url/version.php
mod/data/lib.php
mod/data/preset/imagegallery/version.php
mod/data/styles.css
mod/data/version.php
mod/data/view.php
mod/feedback/analysis_course.php
mod/feedback/item/captcha/captcha_form.php
mod/feedback/item/multichoice/multichoice_form.php
mod/feedback/item/multichoicerated/multichoicerated_form.php
mod/feedback/item/numeric/numeric_form.php
mod/feedback/item/textarea/textarea_form.php
mod/feedback/item/textfield/textfield_form.php
mod/feedback/pix/notrequired.png [new file with mode: 0644]
mod/feedback/pix/notrequired.svg [new file with mode: 0644]
mod/feedback/pix/required.png [new file with mode: 0644]
mod/feedback/pix/required.svg [new file with mode: 0644]
mod/feedback/version.php
mod/folder/version.php
mod/forum/index.php
mod/forum/lib.php
mod/forum/styles.css
mod/forum/version.php
mod/glossary/lib.php
mod/glossary/pix/export.png [new file with mode: 0644]
mod/glossary/pix/export.svg [new file with mode: 0644]
mod/glossary/settings.php
mod/glossary/styles.css
mod/glossary/version.php
mod/imscp/version.php
mod/label/version.php
mod/lesson/report.php
mod/lesson/version.php
mod/lti/backup/moodle2/backup_lti_stepslib.php
mod/lti/backup/moodle2/restore_lti_stepslib.php
mod/lti/locallib.php
mod/lti/mod_form.php
mod/lti/version.php
mod/page/version.php
mod/quiz/accessmanager.php
mod/quiz/accessrule/accessrulebase.php
mod/quiz/accessrule/delaybetweenattempts/tests/rule_test.php
mod/quiz/accessrule/delaybetweenattempts/version.php
mod/quiz/accessrule/ipaddress/tests/rule_test.php
mod/quiz/accessrule/ipaddress/version.php
mod/quiz/accessrule/numattempts/tests/rule_test.php
mod/quiz/accessrule/numattempts/version.php
mod/quiz/accessrule/openclosedate/rule.php
mod/quiz/accessrule/openclosedate/tests/rule_test.php
mod/quiz/accessrule/openclosedate/version.php
mod/quiz/accessrule/password/tests/rule_test.php
mod/quiz/accessrule/password/version.php
mod/quiz/accessrule/safebrowser/tests/rule_test.php
mod/quiz/accessrule/safebrowser/version.php
mod/quiz/accessrule/securewindow/tests/rule_test.php
mod/quiz/accessrule/securewindow/version.php
mod/quiz/accessrule/timelimit/rule.php
mod/quiz/accessrule/timelimit/tests/rule_test.php
mod/quiz/accessrule/timelimit/version.php
mod/quiz/accessrule/upgrade.txt
mod/quiz/attemptlib.php
mod/quiz/backup/moodle2/backup_quiz_stepslib.php
mod/quiz/backup/moodle2/restore_quiz_stepslib.php
mod/quiz/cronlib.php
mod/quiz/db/events.php
mod/quiz/db/install.xml
mod/quiz/db/upgrade.php
mod/quiz/lib.php
mod/quiz/locallib.php
mod/quiz/module.js
mod/quiz/overrideedit.php
mod/quiz/processattempt.php
mod/quiz/renderer.php
mod/quiz/report/attemptsreport_table.php
mod/quiz/report/grading/version.php
mod/quiz/report/overview/version.php
mod/quiz/report/responses/version.php
mod/quiz/report/statistics/version.php
mod/quiz/startattempt.php
mod/quiz/styles.css
mod/quiz/tests/attempts_test.php [new file with mode: 0644]
mod/quiz/tests/generator/lib.php
mod/quiz/tests/generator_test.php [new file with mode: 0644]
mod/quiz/version.php
mod/resource/lib.php
mod/resource/version.php
mod/scorm/lang/en/scorm.php
mod/scorm/report/basic/version.php
mod/scorm/report/graphs/version.php
mod/scorm/report/interactions/version.php
mod/scorm/request.js
mod/scorm/version.php
mod/survey/download.php
mod/survey/version.php
mod/url/version.php
mod/wiki/pagelib.php
mod/wiki/version.php
mod/wiki/view.php
mod/workshop/allocation/manual/version.php
mod/workshop/allocation/random/version.php
mod/workshop/allocation/scheduled/settings_form.php
mod/workshop/allocation/scheduled/version.php
mod/workshop/eval/best/version.php
mod/workshop/form/accumulative/version.php
mod/workshop/form/comments/version.php
mod/workshop/form/numerrors/version.php
mod/workshop/form/rubric/version.php
mod/workshop/pix/userplan/task-done.png [new file with mode: 0644]
mod/workshop/pix/userplan/task-done.svg [new file with mode: 0644]
mod/workshop/pix/userplan/task-fail.png [new file with mode: 0644]
mod/workshop/pix/userplan/task-fail.svg [new file with mode: 0644]
mod/workshop/pix/userplan/task-info.png [new file with mode: 0644]
mod/workshop/pix/userplan/task-info.svg [new file with mode: 0644]
mod/workshop/pix/userplan/task-todo.png [new file with mode: 0644]
mod/workshop/pix/userplan/task-todo.svg [new file with mode: 0644]
mod/workshop/styles.css
mod/workshop/version.php
mod/workshop/view.php
pix/c/course.png [new file with mode: 0644]
pix/c/course.svg [new file with mode: 0644]
pix/c/group.png [new file with mode: 0644]
pix/c/group.svg [new file with mode: 0644]
pix/c/site.png [new file with mode: 0644]
pix/c/site.svg [new file with mode: 0644]
pix/c/user.png [new file with mode: 0644]
pix/c/user.svg [new file with mode: 0644]
pix/i/agg_mean.png [new file with mode: 0644]
pix/i/agg_mean.svg [new file with mode: 0644]
pix/i/agg_sum.png [new file with mode: 0644]
pix/i/agg_sum.svg [new file with mode: 0644]
pix/i/approve.png [new file with mode: 0644]
pix/i/approve.svg [new file with mode: 0644]
pix/i/assignroles.png
pix/i/assignroles.svg
pix/i/calc.png [new file with mode: 0644]
pix/i/calc.svg [new file with mode: 0644]
pix/i/calendar.png [new file with mode: 0644]
pix/i/calendar.svg [new file with mode: 0644]
pix/i/caution.png [new file with mode: 0644]
pix/i/caution.svg [new file with mode: 0644]
pix/i/completion-auto-enabled.png
pix/i/completion-auto-enabled.svg [new file with mode: 0644]
pix/i/completion-auto-fail.png
pix/i/completion-auto-fail.svg [new file with mode: 0644]
pix/i/completion-auto-n.png
pix/i/completion-auto-n.svg [new file with mode: 0644]
pix/i/completion-auto-pass.png
pix/i/completion-auto-pass.svg [new file with mode: 0644]
pix/i/completion-auto-y.png
pix/i/completion-auto-y.svg [new file with mode: 0644]
pix/i/completion-manual-enabled.png
pix/i/completion-manual-enabled.svg [new file with mode: 0644]
pix/i/completion-manual-n.png
pix/i/completion-manual-n.svg [new file with mode: 0644]
pix/i/completion-manual-y.png
pix/i/completion-manual-y.svg [new file with mode: 0644]
pix/i/configlock.png [new file with mode: 0644]
pix/i/configlock.svg [new file with mode: 0644]
pix/i/course.png [new file with mode: 0644]
pix/i/course.svg [new file with mode: 0644]
pix/i/courseevent.png [new file with mode: 0644]
pix/i/courseevent.svg [new file with mode: 0644]
pix/i/cross_red_big.png [new file with mode: 0644]
pix/i/cross_red_big.svg [new file with mode: 0644]
pix/i/cross_red_small.png [new file with mode: 0644]
pix/i/cross_red_small.svg [new file with mode: 0644]
pix/i/db.png [new file with mode: 0644]
pix/i/db.svg [new file with mode: 0644]
pix/i/enrolmentsuspended.png [new file with mode: 0644]
pix/i/enrolmentsuspended.svg [new file with mode: 0644]
pix/i/enrolusers.png
pix/i/enrolusers.svg
pix/i/files.png [new file with mode: 0644]
pix/i/files.svg [new file with mode: 0644]
pix/i/folder.png [new file with mode: 0644]
pix/i/folder.svg [new file with mode: 0644]
pix/i/grade_correct.png [new file with mode: 0644]
pix/i/grade_correct.svg [new file with mode: 0644]
pix/i/grade_incorrect.png [new file with mode: 0644]
pix/i/grade_incorrect.svg [new file with mode: 0644]
pix/i/grade_partiallycorrect.png [new file with mode: 0644]
pix/i/grade_partiallycorrect.svg [new file with mode: 0644]
pix/i/groupevent.png [new file with mode: 0644]
pix/i/groupevent.svg [new file with mode: 0644]
pix/i/hierarchylock.png [new file with mode: 0644]
pix/i/hierarchylock.svg [new file with mode: 0644]
pix/i/invalid.png [new file with mode: 0644]
pix/i/invalid.svg [new file with mode: 0644]
pix/i/manual_item.png [new file with mode: 0644]
pix/i/manual_item.svg [new file with mode: 0644]
pix/i/mnethost.png [new file with mode: 0644]
pix/i/mnethost.svg [new file with mode: 0644]
pix/i/permissionlock.png [new file with mode: 0644]
pix/i/permissionlock.svg [new file with mode: 0644]
pix/i/preview.png [new file with mode: 0644]
pix/i/preview.svg [new file with mode: 0644]
pix/i/reload.png [new file with mode: 0644]
pix/i/reload.svg [new file with mode: 0644]
pix/i/risk_config.png [new file with mode: 0644]
pix/i/risk_config.svg [new file with mode: 0644]
pix/i/risk_dataloss.png [new file with mode: 0644]
pix/i/risk_dataloss.svg [new file with mode: 0644]
pix/i/risk_managetrust.png [new file with mode: 0644]
pix/i/risk_managetrust.svg [new file with mode: 0644]
pix/i/risk_personal.png [new file with mode: 0644]
pix/i/risk_personal.svg [new file with mode: 0644]
pix/i/risk_spam.png [new file with mode: 0644]
pix/i/risk_spam.svg [new file with mode: 0644]
pix/i/risk_xss.png [new file with mode: 0644]
pix/i/risk_xss.svg [new file with mode: 0644]
pix/i/roles.png [new file with mode: 0644]
pix/i/roles.svg [new file with mode: 0644]
pix/i/scales.png
pix/i/scales.svg
pix/i/scheduled.png
pix/i/scheduled.svg [new file with mode: 0644]
pix/i/search.png [new file with mode: 0644]
pix/i/search.svg [new file with mode: 0644]
pix/i/siteevent.png [new file with mode: 0644]
pix/i/siteevent.svg [new file with mode: 0644]
pix/i/switchrole.png
pix/i/switchrole.svg
pix/i/tick_amber_big.png [new file with mode: 0644]
pix/i/tick_amber_big.svg [new file with mode: 0644]
pix/i/tick_amber_small.png [new file with mode: 0644]
pix/i/tick_amber_small.svg [new file with mode: 0644]
pix/i/tick_green_big.png [new file with mode: 0644]
pix/i/tick_green_big.svg [new file with mode: 0644]
pix/i/tick_green_small.png [new file with mode: 0644]
pix/i/tick_green_small.svg [new file with mode: 0644]
pix/i/twoway.png [new file with mode: 0644]
pix/i/twoway.svg [new file with mode: 0644]
pix/i/userevent.png [new file with mode: 0644]
pix/i/userevent.svg [new file with mode: 0644]
pix/i/valid.png [new file with mode: 0644]
pix/i/valid.svg [new file with mode: 0644]
pix/t/addcontact.png [new file with mode: 0644]
pix/t/addcontact.svg [new file with mode: 0644]
pix/t/addgreen.png [new file with mode: 0644]
pix/t/addgreen.svg [new file with mode: 0644]
pix/t/approve.png [new file with mode: 0644]
pix/t/approve.svg [new file with mode: 0644]
pix/t/assignroles.png
pix/t/assignroles.svg
pix/t/block.png [new file with mode: 0644]
pix/t/block.svg [new file with mode: 0644]
pix/t/calc.png [new file with mode: 0644]
pix/t/calc.svg [new file with mode: 0644]
pix/t/calc_off.png [new file with mode: 0644]
pix/t/calc_off.svg [new file with mode: 0644]
pix/t/check.png [new file with mode: 0644]
pix/t/check.svg [new file with mode: 0644]
pix/t/clear.png [new file with mode: 0644]
pix/t/clear.svg [new file with mode: 0644]
pix/t/contextmenu.png [new file with mode: 0644]
pix/t/contextmenu.svg [new file with mode: 0644]
pix/t/email.png [new file with mode: 0644]
pix/t/email.svg [new file with mode: 0644]
pix/t/emailno.png [new file with mode: 0644]
pix/t/emailno.svg [new file with mode: 0644]
pix/t/enrolusers.png
pix/t/enrolusers.svg
pix/t/go.png [new file with mode: 0644]
pix/t/go.svg [new file with mode: 0644]
pix/t/grades.png [new file with mode: 0644]
pix/t/grades.svg [new file with mode: 0644]
pix/t/lock.png [new file with mode: 0644]
pix/t/lock.svg [new file with mode: 0644]
pix/t/locked.png [new file with mode: 0644]
pix/t/locked.svg [new file with mode: 0644]
pix/t/locktime.png [new file with mode: 0644]
pix/t/locktime.svg [new file with mode: 0644]
pix/t/manual_item.png [new file with mode: 0644]
pix/t/manual_item.svg [new file with mode: 0644]
pix/t/markasread.png [new file with mode: 0644]
pix/t/markasread.svg [new file with mode: 0644]
pix/t/message.png [new file with mode: 0644]
pix/t/message.svg [new file with mode: 0644]
pix/t/messages.png [new file with mode: 0644]
pix/t/messages.svg [new file with mode: 0644]
pix/t/portfolioadd.png [new file with mode: 0644]
pix/t/portfolioadd.svg [new file with mode: 0644]
pix/t/preview.png [new file with mode: 0644]
pix/t/preview.svg [new file with mode: 0644]
pix/t/print.png [new file with mode: 0644]
pix/t/print.svg [new file with mode: 0644]
pix/t/removecontact.png [new file with mode: 0644]
pix/t/removecontact.svg [new file with mode: 0644]
pix/t/sort.png [new file with mode: 0644]
pix/t/sort.svg [new file with mode: 0644]
pix/t/stop.png [new file with mode: 0644]
pix/t/stop.svg [new file with mode: 0644]
pix/t/switch_whole.png [new file with mode: 0644]
pix/t/switch_whole.svg [new file with mode: 0644]
pix/t/unblock.png [new file with mode: 0644]
pix/t/unblock.svg [new file with mode: 0644]
pix/t/unlock.png [new file with mode: 0644]
pix/t/unlock.svg [new file with mode: 0644]
pix/t/unlock_gray.png [new file with mode: 0644]
pix/t/unlock_gray.svg [new file with mode: 0644]
pix/t/unlocked.png [new file with mode: 0644]
pix/t/unlocked.svg [new file with mode: 0644]
pix/t/user.png [new file with mode: 0644]
pix/t/user.svg [new file with mode: 0644]
pix/t/userblue.png [new file with mode: 0644]
pix/t/userblue.svg [new file with mode: 0644]
pix/y/ln.png [deleted file]
portfolio/boxnet/version.php
portfolio/download/version.php
portfolio/flickr/version.php
portfolio/googledocs/version.php
portfolio/mahara/version.php
portfolio/picasa/version.php
portfolio/upgrade.txt
question/behaviour/adaptive/version.php
question/behaviour/adaptivenopenalty/version.php
question/behaviour/deferredcbm/version.php
question/behaviour/deferredfeedback/version.php
question/behaviour/immediatecbm/version.php
question/behaviour/immediatefeedback/version.php
question/behaviour/informationitem/version.php
question/behaviour/interactive/version.php
question/behaviour/interactivecountback/version.php
question/behaviour/manualgraded/version.php
question/behaviour/missing/version.php
question/behaviour/upgrade.txt
question/editlib.php
question/engine/renderer.php
question/format/aiken/version.php
question/format/blackboard/version.php
question/format/blackboard_six/version.php
question/format/examview/version.php
question/format/gift/version.php
question/format/learnwise/version.php
question/format/missingword/version.php
question/format/multianswer/version.php
question/format/upgrade.txt
question/format/webct/version.php
question/format/xhtml/version.php
question/format/xml/version.php
question/previewlib.php
question/type/calculated/version.php
question/type/calculatedmulti/version.php
question/type/calculatedsimple/version.php
question/type/description/version.php
question/type/essay/version.php
question/type/match/version.php
question/type/missingtype/version.php
question/type/multianswer/version.php
question/type/multichoice/version.php
question/type/numerical/edit_numerical_form.php
question/type/numerical/version.php
question/type/random/version.php
question/type/randomsamatch/version.php
question/type/rendererbase.php
question/type/shortanswer/version.php
question/type/truefalse/version.php
report/backups/version.php
report/completion/version.php
report/configlog/version.php
report/courseoverview/version.php
report/log/index.php
report/log/version.php
report/loglive/version.php
report/outline/version.php
report/participation/version.php
report/progress/version.php
report/questioninstances/version.php
report/security/version.php
report/stats/version.php
repository/alfresco/version.php
repository/boxnet/version.php
repository/coursefiles/version.php
repository/dropbox/version.php
repository/equella/version.php
repository/filesystem/version.php
repository/flickr/version.php
repository/flickr_public/version.php
repository/googledocs/version.php
repository/local/version.php
repository/merlot/version.php
repository/picasa/version.php
repository/recent/version.php
repository/s3/version.php
repository/upload/version.php
repository/url/version.php
repository/user/version.php
repository/webdav/version.php
repository/wikimedia/version.php
repository/youtube/version.php
theme/afterburner/version.php
theme/anomaly/version.php
theme/arialist/style/core.css
theme/arialist/version.php
theme/base/style/admin.css
theme/base/style/blocks.css
theme/base/style/calendar.css
theme/base/style/core.css
theme/base/style/course.css
theme/base/style/dock.css
theme/base/style/filemanager.css
theme/base/style/grade.css
theme/base/style/message.css
theme/base/style/question.css
theme/base/version.php
theme/binarius/version.php
theme/boxxie/style/core.css
theme/boxxie/version.php
theme/brick/version.php
theme/canvas/version.php
theme/formal_white/version.php
theme/formfactor/version.php
theme/fusion/version.php
theme/leatherbound/version.php
theme/magazine/style/core.css
theme/magazine/version.php
theme/mymobile/config.php
theme/mymobile/javascript/custom.js
theme/mymobile/javascript/jquery.mobile-1.1.1.js [moved from theme/mymobile/javascript/jquery.mobile-1.1.0.js with 94% similarity]
theme/mymobile/readme_moodle.txt [new file with mode: 0644]
theme/mymobile/renderers.php
theme/mymobile/style/core.css
theme/mymobile/version.php
theme/nimble/version.php
theme/nonzero/version.php
theme/overlay/version.php
theme/serenity/version.php
theme/sky_high/style/admin.css
theme/sky_high/version.php
theme/splash/version.php
theme/standard/style/blocks.css
theme/standard/style/calendar.css
theme/standard/style/core.css
theme/standard/style/course.css
theme/standard/style/css3.css
theme/standard/style/modules.css
theme/standard/version.php
theme/standardold/layout/frontpage.php
theme/standardold/version.php
theme/styles.php
theme/styles_debug.php
theme/upgrade.txt
user/filters/yesno.php
user/message.html
user/portfoliologs.php
user/profile/field/checkbox/version.php
user/profile/field/datetime/version.php
user/profile/field/menu/version.php
user/profile/field/text/version.php
user/profile/field/textarea/version.php
version.php
webservice/amf/version.php
webservice/rest/version.php
webservice/soap/version.php
webservice/xmlrpc/version.php

index 34e8e4e..e703ee8 100644 (file)
             $visible = '';
         } else if ($blocks[$blockid]->visible) {
             $visible = '<a href="blocks.php?hide='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strhide.'">'.
-                       '<img src="'.$OUTPUT->pix_url('i/hide') . '" class="icon" alt="'.$strhide.'" /></a>';
+                       '<img src="'.$OUTPUT->pix_url('t/hide') . '" class="iconsmall" alt="'.$strhide.'" /></a>';
         } else {
             $visible = '<a href="blocks.php?show='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strshow.'">'.
-                       '<img src="'.$OUTPUT->pix_url('i/show') . '" class="icon" alt="'.$strshow.'" /></a>';
+                       '<img src="'.$OUTPUT->pix_url('t/show') . '" class="iconsmall" alt="'.$strshow.'" /></a>';
             $class = ' class="dimmed_text"'; // Leading space required!
         }
 
             $undeletable = '';
         } else if (in_array($blockname, $undeletableblocktypes)) {
             $undeletable = '<a href="blocks.php?unprotect='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strunprotect.'">'.
-                       '<img src="'.$OUTPUT->pix_url('t/unlock') . '" class="icon" alt="'.$strunprotect.'" /></a>';
+                       '<img src="'.$OUTPUT->pix_url('t/unlock') . '" class="iconsmall" alt="'.$strunprotect.'" /></a>';
         } else {
             $undeletable = '<a href="blocks.php?protect='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strprotect.'">'.
-                       '<img src="'.$OUTPUT->pix_url('t/unlock_gray') . '" class="icon" alt="'.$strprotect.'" /></a>';
+                       '<img src="'.$OUTPUT->pix_url('t/lock') . '" class="iconsmall" alt="'.$strprotect.'" /></a>';
         }
 
         $row = array(
index 858571f..ca8aaef 100644 (file)
@@ -127,6 +127,9 @@ if (function_exists('date_default_timezone_set') and function_exists('date_defau
 /** Used by library scripts to check they are being called by Moodle */
 define('MOODLE_INTERNAL', true);
 
+// Disables caching.. just in case.
+define('CACHE_DISABLE_ALL', true);
+
 // Check that PHP is of a sufficient version
 if (version_compare(phpversion(), "5.3.2") < 0) {
     $phpversion = phpversion();
index 5f58bc7..c102666 100644 (file)
@@ -247,15 +247,15 @@ function get_table_row($filterinfo, $isfirstrow, $islastactive, $applytostrings)
 
     // Re-order
     $updown = '';
-    $spacer = '<img src="' . $OUTPUT->pix_url('spacer') . '" class="iconsmall" alt="" /> ';
+    $spacer = '<img src="' . $OUTPUT->pix_url('spacer') . '" class="iconsmall" alt="" />';
     if ($filterinfo->active != TEXTFILTER_DISABLED) {
         if (!$isfirstrow) {
-            $updown .= $OUTPUT->action_icon(filters_action_url($filter, 'up'), new pix_icon('t/up', get_string('up')));
+            $updown .= $OUTPUT->action_icon(filters_action_url($filter, 'up'), new pix_icon('t/up', get_string('up'), '', array('class' => 'iconsmall')));
         } else {
             $updown .= $spacer;
         }
         if (!$islastactive) {
-            $updown .= $OUTPUT->action_icon(filters_action_url($filter, 'down'), new pix_icon('t/down', get_string('down')));
+            $updown .= $OUTPUT->action_icon(filters_action_url($filter, 'down'), new pix_icon('t/down', get_string('down'), '', array('class' => 'iconsmall')));
         } else {
             $updown .= $spacer;
         }
index bbd528d..d75e364 100644 (file)
@@ -193,6 +193,7 @@ if (empty($CFG->version)) {
 
 if ($version > $CFG->version) {  // upgrade
     purge_all_caches();
+
     $PAGE->set_pagelayout('maintenance');
     $PAGE->set_popup_notification_allowed(false);
 
index 2290612..3ad0a72 100644 (file)
             $class   = '';
         } else if ($module->visible) {
             $visible = "<a href=\"modules.php?hide=$module->name&amp;sesskey=".sesskey()."\" title=\"$strhide\">".
-                       "<img src=\"" . $OUTPUT->pix_url('i/hide') . "\" class=\"icon\" alt=\"$strhide\" /></a>";
+                       "<img src=\"" . $OUTPUT->pix_url('t/hide') . "\" class=\"iconsmall\" alt=\"$strhide\" /></a>";
             $class   = '';
         } else {
             $visible = "<a href=\"modules.php?show=$module->name&amp;sesskey=".sesskey()."\" title=\"$strshow\">".
-                       "<img src=\"" . $OUTPUT->pix_url('i/show') . "\" class=\"icon\" alt=\"$strshow\" /></a>";
+                       "<img src=\"" . $OUTPUT->pix_url('t/show') . "\" class=\"iconsmall\" alt=\"$strshow\" /></a>";
             $class =   ' class="dimmed_text"';
         }
         if ($module->name == "forum") {
index 1e72afa..3dd14a0 100644 (file)
@@ -258,7 +258,7 @@ foreach ($sortedbehaviours as $behaviour => $behaviourname) {
             $rowclass = 'dimmed_text';
         }
     } else {
-        $icons = $OUTPUT->spacer() . ' ';
+        $icons = $OUTPUT->spacer(array('class' => 'iconsmall'));
     }
 
     // Move icons.
@@ -284,10 +284,10 @@ echo $OUTPUT->footer();
 
 function question_behaviour_enable_disable_icons($behaviour, $enabled) {
     if ($enabled) {
-        return question_behaviour_icon_html('disable', $behaviour, 'i/hide',
+        return question_behaviour_icon_html('disable', $behaviour, 't/hide',
                 get_string('enabled', 'question'), get_string('disable'));
     } else {
-        return question_behaviour_icon_html('enable', $behaviour, 'i/show',
+        return question_behaviour_icon_html('enable', $behaviour, 't/show',
                 get_string('disabled', 'question'), get_string('enable'));
     }
 }
@@ -296,7 +296,7 @@ function question_behaviour_icon_html($action, $behaviour, $icon, $alt, $tip) {
     global $OUTPUT;
     return $OUTPUT->action_icon(new moodle_url('/admin/qbehaviours.php',
             array($action => $behaviour, 'sesskey' => sesskey())),
-            new pix_icon($icon, $alt, 'moodle', array('title' => '')),
-            null, array('title' => $tip)) . ' ';
+            new pix_icon($icon, $alt, 'moodle', array('title' => '', 'class' => 'iconsmall')),
+            null, array('title' => $tip));
 }
 
index a37725c..1b35c43 100644 (file)
@@ -257,7 +257,7 @@ foreach ($sortedqtypes as $qtypename => $localname) {
             $rowclass = 'dimmed_text';
         }
     } else {
-        $icons = $OUTPUT->spacer() . ' ';
+        $icons = $OUTPUT->spacer();
     }
 
     // Move icons.
@@ -294,10 +294,10 @@ echo $OUTPUT->footer();
 
 function question_types_enable_disable_icons($qtypename, $createable) {
     if ($createable) {
-        return question_type_icon_html('disable', $qtypename, 'i/hide',
+        return question_type_icon_html('disable', $qtypename, 't/hide',
                 get_string('enabled', 'question'), get_string('disable'));
     } else {
-        return question_type_icon_html('enable', $qtypename, 'i/show',
+        return question_type_icon_html('enable', $qtypename, 't/show',
                 get_string('disabled', 'question'), get_string('enable'));
     }
 }
@@ -306,7 +306,7 @@ function question_type_icon_html($action, $qtypename, $icon, $alt, $tip) {
     global $OUTPUT;
     return $OUTPUT->action_icon(new moodle_url('/admin/qtypes.php',
             array($action => $qtypename, 'sesskey' => sesskey())),
-            new pix_icon($icon, $alt, 'moodle', array('title' => '')),
-            null, array('title' => $tip)) . ' ';
+            new pix_icon($icon, $alt, 'moodle', array('title' => '', 'class' => 'iconsmall')),
+            null, array('title' => $tip));
 }
 
index 7ca6ea2..8d49636 100644 (file)
@@ -691,7 +691,7 @@ class core_admin_renderer extends plugin_renderer_base {
     function upgrade_reload($url) {
         return html_writer::empty_tag('br') .
                 html_writer::tag('div',
-                    html_writer::link($url, $this->pix_icon('i/reload', '') .
+                    html_writer::link($url, $this->pix_icon('i/reload', '', '', array('class' => 'icon icon-pre')) .
                             get_string('reload'), array('title' => get_string('reload'))),
                 array('class' => 'continuebutton')) . html_writer::empty_tag('br');
     }
@@ -1092,9 +1092,9 @@ class core_admin_renderer extends plugin_renderer_base {
                 $row->attributes['class'] = 'type-' . $plugin->type . ' name-' . $plugin->type . '_' . $plugin->name;
 
                 if ($this->page->theme->resolve_image_location('icon', $plugin->type . '_' . $plugin->name)) {
-                    $icon = $this->output->pix_icon('icon', '', $plugin->type . '_' . $plugin->name, array('class' => 'smallicon pluginicon'));
+                    $icon = $this->output->pix_icon('icon', '', $plugin->type . '_' . $plugin->name, array('class' => 'icon pluginicon'));
                 } else {
-                    $icon = $this->output->pix_icon('spacer', '', 'moodle', array('class' => 'smallicon pluginicon noicon'));
+                    $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'));
@@ -1102,7 +1102,7 @@ class core_admin_renderer extends plugin_renderer_base {
                 } else {
                     $msg = '';
                 }
-                $pluginname  = html_writer::tag('div', $icon . ' ' . $plugin->displayname . ' ' . $msg, array('class' => 'displayname')).
+                $pluginname  = html_writer::tag('div', $icon . '' . $plugin->displayname . ' ' . $msg, array('class' => 'displayname')).
                                html_writer::tag('div', $plugin->component, array('class' => 'componentname'));
                 $pluginname  = new html_table_cell($pluginname);
 
@@ -1211,8 +1211,13 @@ class core_admin_renderer extends plugin_renderer_base {
             if (empty($impediments)) {
                 $widget = $deployer->make_confirm_widget($updateinfo);
                 $box .= $this->output->render($widget);
-            } else if (isset($impediments['notwritable'])) {
-                $box .= $this->output->help_icon('notwritable', 'core_plugin', get_string('notwritable', 'core_plugin'));
+            } else {
+                if (isset($impediments['notwritable'])) {
+                    $box .= $this->output->help_icon('notwritable', 'core_plugin', get_string('notwritable', 'core_plugin'));
+                }
+                if (isset($impediments['notdownloadable'])) {
+                    $box .= $this->output->help_icon('notdownloadable', 'core_plugin', get_string('notdownloadable', 'core_plugin'));
+                }
             }
         }
 
index 5cb37a7..8d18b1f 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;
-$plugin->requires  = 2012061700;
+$plugin->version   = 2012112900;
+$plugin->requires  = 2012112900;
 $plugin->component = 'tool_assignmentupgrade';
-$plugin->dependencies = array('mod_assign' => 2012061700);
+$plugin->dependencies = array('mod_assign' => 2012112900);
index 4b72d3b..0162c96 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700; // Requires this Moodle version
+$plugin->version   = 2012112900; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900; // Requires this Moodle version
 $plugin->component = 'tool_capability'; // Full name of the plugin (used for diagnostics)
index ac03031..89c4cf2 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;
-$plugin->requires  = 2012061700;
+$plugin->version   = 2012112900;
+$plugin->requires  = 2012112900;
 $plugin->component = 'tool_customlang'; // Full name of the plugin (used for diagnostics)
index 59bafe5..75d1f5f 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012062200; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2012061700; // Requires this Moodle version.
+$plugin->version   = 2012112900; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2012112900; // Requires this Moodle version.
 $plugin->component = 'tool_dbtransfer'; // Full name of the plugin (used for diagnostics).
index 9ba23e0..69970eb 100644 (file)
@@ -25,8 +25,8 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700; // Requires this Moodle version
+$plugin->version   = 2012112900; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900; // Requires this Moodle version
 $plugin->component = 'tool_generator'; // Full name of the plugin (used for diagnostics)
 
 $plugin->maturity  = MATURITY_ALPHA; // this version's maturity level
index 02bd6a0..35741ed 100644 (file)
@@ -25,8 +25,8 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700; // Requires this Moodle version
+$plugin->version   = 2012112900; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900; // Requires this Moodle version
 $plugin->component = 'tool_health'; // Full name of the plugin (used for diagnostics)
 
 $plugin->maturity  = MATURITY_ALPHA; // this version's maturity level
index 7671f70..de2204f 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700; // Requires this Moodle version
+$plugin->version   = 2012112900; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900; // Requires this Moodle version
 $plugin->component = 'tool_innodb'; // Full name of the plugin (used for diagnostics)
index fea0e39..0cb98e6 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700; // Requires this Moodle version
+$plugin->version   = 2012112900; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900; // Requires this Moodle version
 $plugin->component = 'tool_langimport'; // Full name of the plugin (used for diagnostics)
index 317ee55..62a091a 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700; // Requires this Moodle version
+$plugin->version   = 2012112900; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900; // Requires this Moodle version
 $plugin->component = 'tool_multilangupgrade'; // Full name of the plugin (used for diagnostics)
 
index 2f3d2ba..a993604 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700; // Requires this Moodle version
+$plugin->version   = 2012112900; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900; // Requires this Moodle version
 $plugin->component = 'tool_phpunit'; // Full name of the plugin (used for diagnostics)
 
index 2bbbdc8..3db930c 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700; // Requires this Moodle version
+$plugin->version   = 2012112900; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900; // Requires this Moodle version
 $plugin->component = 'tool_profiling'; // Full name of the plugin (used for diagnostics)
index f87b2aa..16ece8b 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;
-$plugin->requires  = 2012061700;
+$plugin->version   = 2012112900;
+$plugin->requires  = 2012112900;
 $plugin->component = 'tool_qeupgradehelper'; // Full name of the plugin (used for diagnostics)
index ceb7134..aeb5cd7 100644 (file)
@@ -25,8 +25,8 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700; // Requires this Moodle version
+$plugin->version   = 2012112900; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900; // Requires this Moodle version
 $plugin->component = 'tool_replace'; // Full name of the plugin (used for diagnostics)
 
 $plugin->maturity  = MATURITY_ALPHA; // this version's maturity level
index 762e277..00b29d6 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;
-$plugin->requires  = 2012061700;
+$plugin->version   = 2012112900;
+$plugin->requires  = 2012112900;
 $plugin->component = 'tool_spamcleaner'; // Full name of the plugin (used for diagnostics)
 
index 38c1933..c43391f 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;
-$plugin->requires  = 2012061700;
+$plugin->version   = 2012112900;
+$plugin->requires  = 2012112900;
 $plugin->component = 'tool_timezoneimport'; // Full name of the plugin (used for diagnostics)
 
index 2dfcf35..edd9eb8 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700; // Requires this Moodle version
+$plugin->version   = 2012112900; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900; // Requires this Moodle version
 $plugin->component = 'tool_unsuproles'; // Full name of the plugin (used for diagnostics)
 
index fba1f83..25e0749 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700; // Requires this Moodle version
+$plugin->version   = 2012112900; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900; // Requires this Moodle version
 $plugin->component = 'tool_uploaduser'; // Full name of the plugin (used for diagnostics)
 
index ddfc858..ae5a6b4 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700; // Requires this Moodle version
+$plugin->version   = 2012112900; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900; // Requires this Moodle version
 $plugin->component = 'tool_xmldb'; // Full name of the plugin (used for diagnostics)
 
index e603db8..5f8e3c3 100644 (file)
@@ -27,6 +27,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012110700;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'auth_cas';        // Full name of the plugin (used for diagnostics)
index 39d88ff..4cecc7e 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'auth_db';         // Full name of the plugin (used for diagnostics)
index 3695923..e5e074d 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die;
 
-$plugin->version   = 2012061700;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'auth_email';      // Full name of the plugin (used for diagnostics)
index 1de3fc0..0d52794 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'auth_fc';         // Full name of the plugin (used for diagnostics)
index ee6a905..c88fe31 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'auth_imap';       // Full name of the plugin (used for diagnostics)
index e05dfde..cb72168 100644 (file)
@@ -26,6 +26,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012110700;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'auth_ldap';       // Full name of the plugin (used for diagnostics)
index 996a322..ce33730 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'auth_manual';     // Full name of the plugin (used for diagnostics)
index 96a618a..a091fa2 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'auth_mnet';       // Full name of the plugin (used for diagnostics)
index cd9e101..5a533dc 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'auth_nntp';       // Full name of the plugin (used for diagnostics)
index 33d5426..a9879ce 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'auth_nologin';    // Full name of the plugin (used for diagnostics)
index ac511bb..80b43e1 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'auth_none';       // Full name of the plugin (used for diagnostics)
index 40a0e19..6c7ba3d 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'auth_pam';       // Full name of the plugin (used for diagnostics)
index d95d1c9..57b4856 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'auth_pop3';       // Full name of the plugin (used for diagnostics)
index d3dc4b0..83e3b7f 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'auth_radius';     // Full name of the plugin (used for diagnostics)
index 0cb3a3a..33f8965 100644 (file)
@@ -26,6 +26,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'auth_shibboleth'; // Full name of the plugin (used for diagnostics)
index 279fafa..12c6613 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'auth_webservice'; // Full name of the plugin (used for diagnostics)
index 642708f..d60142f 100644 (file)
@@ -109,8 +109,8 @@ abstract class backup implements checksumable {
     const OPERATION_RESTORE ='restore';// We are performing one restore
 
     // Version (to keep CFG->backup_version (and release) updated automatically)
-    const VERSION = 2012061800;
-    const RELEASE = '2.3';
+    const VERSION = 2012112900;
+    const RELEASE = '2.5';
 }
 
 /*
index a597425..a1ada38 100644 (file)
@@ -258,7 +258,8 @@ abstract class backup_activity_task extends backup_task {
         // - section_included setting (if exists)
         $settingname = $settingprefix . 'included';
         $activity_included = new backup_activity_generic_setting($settingname, base_setting::IS_BOOLEAN, true);
-        $activity_included->get_ui()->set_icon(new pix_icon('icon', get_string('pluginname', $this->modulename), $this->modulename));
+        $activity_included->get_ui()->set_icon(new pix_icon('icon', get_string('pluginname', $this->modulename),
+            $this->modulename, array('class' => 'iconlarge icon-post')));
         $this->add_setting($activity_included);
         // Look for "activities" root setting
         $activities = $this->plan->get_setting('activities');
index 5838a8e..cac6824 100644 (file)
@@ -278,7 +278,8 @@ abstract class restore_activity_task extends restore_task {
         // - section_included setting (if exists)
         $settingname = $settingprefix . 'included';
         $activity_included = new restore_activity_generic_setting($settingname, base_setting::IS_BOOLEAN, true);
-        $activity_included->get_ui()->set_icon(new pix_icon('icon', get_string('pluginname', $this->modulename), $this->modulename));
+        $activity_included->get_ui()->set_icon(new pix_icon('icon', get_string('pluginname', $this->modulename),
+            $this->modulename, array('class' => 'iconlarge icon-post')));
         $this->add_setting($activity_included);
         // Look for "activities" root setting
         $activities = $this->plan->get_setting('activities');
index fe4f504..86c2dac 100644 (file)
@@ -190,6 +190,15 @@ class restore_gradebook_structure_step extends restore_structure_step {
                 $data->id = $newitemid = $existinggradeitem->id;
                 $DB->update_record('grade_items', $data);
             }
+        } else if ($data->itemtype == 'manual') {
+            // Manual items aren't assigned to a cm, so don't go duplicating them in the target if one exists.
+            $gi = array(
+                'itemtype' => $data->itemtype,
+                'courseid' => $data->courseid,
+                'itemname' => $data->itemname,
+                'categoryid' => $data->categoryid,
+            );
+            $newitemid = $DB->get_field('grade_items', 'id', $gi);
         }
 
         if (empty($newitemid)) {
index c18d463..e660c4a 100644 (file)
@@ -329,7 +329,7 @@ class backup_setting_ui_text extends backup_setting_ui {
         $icon = $this->get_icon();
         $label = $this->get_label($task);
         if (!empty($icon)) {
-            $label .= '&nbsp;'.$output->render($icon);
+            $label .= $output->render($icon);
         }
         // name, label, attributes
         return $this->apply_options(array('element'=>'text','name'=>self::NAME_PREFIX.$this->name, 'label'=>$label, 'attributes'=>$this->attributes));
@@ -380,7 +380,7 @@ class backup_setting_ui_checkbox extends backup_setting_ui {
         $icon = $this->get_icon();
         $label = $this->get_label($task);
         if (!empty($icon)) {
-            $label .= '&nbsp;'.$output->render($icon);
+            $label .= $output->render($icon);
         }
         return $this->apply_options(array('element'=>'checkbox','name'=>self::NAME_PREFIX.$this->name, 'label'=>$label, 'text'=>$this->text, 'attributes'=>$this->attributes));
     }
@@ -400,9 +400,9 @@ class backup_setting_ui_checkbox extends backup_setting_ui {
         global $OUTPUT;
         // Checkboxes are always yes or no
         if ($this->get_value()) {
-            return $OUTPUT->pix_icon('i/tick_green_big', get_string('yes'));
+            return $OUTPUT->pix_icon('i/valid', get_string('yes'));
         } else {
-            return $OUTPUT->pix_icon('i/cross_red_big', get_string('no'));
+            return $OUTPUT->pix_icon('i/invalid', get_string('no'));
         }
     }
 
@@ -473,7 +473,7 @@ class backup_setting_ui_radio extends backup_setting_ui {
         $icon = $this->get_icon();
         $label = $this->get_label($task);
         if (!empty($icon)) {
-            $label .= '&nbsp;'.$output->render($icon);
+            $label .= $output->render($icon);
         }
         // name, label, text, value, attributes
         return $this->apply_options(array('element'=>'radio','name'=>self::NAME_PREFIX.$this->name, 'label'=>$label, 'text'=>$this->text, 'value'=>$this->value, 'attributes'=>$this->attributes));
@@ -538,7 +538,7 @@ class backup_setting_ui_select extends backup_setting_ui {
         $icon = $this->get_icon();
         $label = $this->get_label($task);
         if (!empty($icon)) {
-            $label .= '&nbsp;'.$output->render($icon);
+            $label .= $output->render($icon);
         }
         // name, label, options, attributes
         return $this->apply_options(array('element'=>'select','name'=>self::NAME_PREFIX.$this->name, 'label'=>$label, 'options'=>$this->values, 'attributes'=>$this->attributes));
index 2a5f3da..7b8dfe2 100644 (file)
@@ -72,8 +72,8 @@ class core_backup_renderer extends plugin_renderer_base {
      * @return string
      */
     public function backup_details($details, $nextstageurl) {
-        $yestick = $this->output->pix_icon('i/tick_green_big', get_string('yes'));
-        $notick = $this->output->pix_icon('i/cross_red_big', get_string('no'));
+        $yestick = $this->output->pix_icon('i/valid', get_string('yes'));
+        $notick = $this->output->pix_icon('i/valid', get_string('no'));
 
         $html  = html_writer::start_tag('div', array('class'=>'backup-restore'));
 
@@ -147,9 +147,9 @@ class core_backup_renderer extends plugin_renderer_base {
                         $table->data = array();
                     }
                     $name = get_string('pluginname', $activity->modulename);
-                    $icon = new pix_icon('icon', $name, $activity->modulename);
+                    $icon = new pix_icon('icon', $name, $activity->modulename, array('class' => 'iconlarge icon-pre'));
                     $table->data[] = array(
-                        $this->output->render($icon).'&nbsp;'.$name,
+                        $this->output->render($icon).$name,
                         $activity->title,
                         ($activity->settings[$activitykey.'_userinfo'])?$yestick:$notick,
                     );
index e57ecd0..73998ae 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012110800;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_activity_modules'; // Full name of the plugin (used for diagnostics)
index 691286c..4aad4da 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_admin_bookmarks'; // Full name of the plugin (used for diagnostics)
index 5d8fe5e..a28756d 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012110800;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_blog_menu'; // Full name of the plugin (used for diagnostics)
index 3532962..113b7a2 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012110800;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_blog_recent'; // Full name of the plugin (used for diagnostics)
index 32dcf82..38c8b25 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012110800;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_blog_tags'; // Full name of the plugin (used for diagnostics)
index 72db711..2a5b5cc 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_calendar_month'; // Full name of the plugin (used for diagnostics)
index e25aba6..497a85b 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_calendar_upcoming'; // Full name of the plugin (used for diagnostics)
index e1b7118..c0ed6dd 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_comments'; // Full name of the plugin (used for diagnostics)
index 77cf608..7716d92 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_community'; // Full name of the plugin (used for diagnostics)
index c9fc3df..b97ad8e 100644 (file)
@@ -26,7 +26,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version      = 2012091600; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires     = 2012061700; // Requires this Moodle version
+$plugin->version      = 2012112900; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires     = 2012112900; // Requires this Moodle version
 $plugin->component    = 'block_completionstatus';
-$plugin->dependencies = array('report_completion' => 2012061700);
\ No newline at end of file
+$plugin->dependencies = array('report_completion' => 2012112900);
\ No newline at end of file
index 26b2428..7d75fce 100644 (file)
@@ -1 +1,2 @@
-.block_course_list .footer {margin-top: 5px;}
\ No newline at end of file
+.block_course_list .footer {margin-top: 5px;}
+.block_course_list .content li { margin-bottom: .3em;}
index d30f69b..0ce04c8 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_course_list'; // Full name of the plugin (used for diagnostics)
index 787f52b..51a734f 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_course_overview'; // Full name of the plugin (used for diagnostics)
\ No newline at end of file
index 5e9801f..38cb1cf 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_course_summary'; // Full name of the plugin (used for diagnostics)
index 6e56390..73249e9 100644 (file)
@@ -516,7 +516,7 @@ M.core_dock.fixTitleOrientation = function(item, title, text) {
     // We need to fix a font-size - sorry theme designers.
     var fontsize = '11px';
     var transform = (clockwise) ? 'rotate(90deg)' : 'rotate(270deg)';
-    var test = Y.Node.create('<h2><span style="font-size:'+fontsize+';position:absolute;">'+text+'</span></h2>');
+    var test = Y.Node.create('<h2><span class="transform-test-node" style="font-size:'+fontsize+';">'+text+'</span></h2>');
     this.nodes.body.insert(test, 0);
     var width = test.one('span').get('offsetWidth') * 1.2;
     var height = test.one('span').get('offsetHeight');
index 6b99b03..f397d27 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012110800;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_feedback';  // Full name of the plugin (used for diagnostics)
index 1d70116..bcca83b 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_glossary_random'; // Full name of the plugin (used for diagnostics)
index 94b1efd..750e081 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_html';      // Full name of the plugin (used for diagnostics)
index 95b3ce2..ff0f29d 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012110800;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_login';     // Full name of the plugin (used for diagnostics)
index 66f51a7..8ead4fc 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_mentees';   // Full name of the plugin (used for diagnostics)
index 8482826..e79f43c 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_messages';  // Full name of the plugin (used for diagnostics)
index 8f936c5..6bb3270 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_mnet_hosts'; // Full name of the plugin (used for diagnostics)
index 02c53bf..236c103 100644 (file)
@@ -565,7 +565,8 @@ class block_base {
         // The blocks in My Moodle are a special case and use a different capability.
         if (!empty($USER->id)
             && $page->context->contextlevel == CONTEXT_USER // Page belongs to a user
-            && $page->context->instanceid == $USER->id) { // Page belongs to this user
+            && $page->context->instanceid == $USER->id // Page belongs to this user
+            && $page->pagetype == 'my-index') { // Ensure we are on the My Moodle page
             $capability = 'block/' . $this->name() . ':myaddinstance';
             return $this->has_add_block_capability($page, $capability)
                     && has_capability('moodle/my:manageblocks', $page->context);
index a2bbdcb..ff7a0a4 100644 (file)
@@ -26,6 +26,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_myprofile'; // Full name of the plugin (used for diagnostics)
index 6d08f5e..9126897 100644 (file)
@@ -7,6 +7,7 @@
 .block_navigation .block_tree li > p.hasicon img {vertical-align:middle;position:absolute;left:0;top:-1px;width:16px;height:16px;}
 .block_navigation .block_tree li.item_with_icon.contains_branch > p img {left:16px;}
 .block_navigation .block_tree .type_activity > p.branch.hasicon,
+.block_navigation .block_tree .type_activity > p.emptybranch.hasicon,
 .block_navigation .block_tree li.item_with_icon.contains_branch > .tree_item {padding-left:37px;}
 
 .block_navigation .block_tree li ul {padding-left:0;margin:0;}
@@ -16,7 +17,9 @@
 
 .block_navigation .block_tree .tree_item.branch {background-image: url([[pix:t/expanded]]);background-position: 0 0;background-repeat: no-repeat;}
 .block_navigation .block_tree .tree_item.branch.navigation_node {background-image:none;padding-left:0;}
+.block_navigation .block_tree .type_activity > .tree_item.emptybranch,
 .block_navigation .block_tree .type_activity > .tree_item.branch {background-image:none;position:relative;}
+.block_navigation .block_tree .type_activity > .tree_item.hasicon.emptybranch img,
 .block_navigation .block_tree .type_activity > .tree_item.branch img {left: 16px;}
 .block_navigation .block_tree .root_node.leaf {padding-left:0px;}
 .block_navigation .block_tree .active_tree_node {font-weight:bold;}
index 8fa942a..70d6054 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_navigation'; // Full name of the plugin (used for diagnostics)
index 1c9e875..4cdea31 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_news_items'; // Full name of the plugin (used for diagnostics)
index baa80f3..ef5757e 100644 (file)
@@ -1,7 +1,8 @@
 .block_online_users .content .list li.listentry {clear:both;}
 .block_online_users .content .list li.listentry .user {float:left;position:relative;}
-.block_online_users .content .list li.listentry .message {float:right;}
+.block_online_users .content .list li.listentry .user .userpicture { vertical-align: text-bottom;}
+.block_online_users .content .list li.listentry .message {float:right; margin-top: 3px;}
 .block_online_users .content .info {text-align:center;}
 
 .dir-rtl .block_online_users .content .list li.listentry .user {float:right;}
-.dir-rtl .block_online_users .content .list li.listentry .message {float:left;}
\ No newline at end of file
+.dir-rtl .block_online_users .content .list li.listentry .message {float:left;}
index 5afa7eb..18e1354 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_online_users'; // Full name of the plugin (used for diagnostics)
index b11cf95..a4821cf 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012110800;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_participants'; // Full name of the plugin (used for diagnostics)
index 3f5ec71..338fd78 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_private_files'; // Full name of the plugin (used for diagnostics)
index 5ad5a7f..c92a012 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012110800;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_quiz_results'; // Full name of the plugin (used for diagnostics)
index 4d0ea9b..1197d67 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012110800;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_recent_activity'; // Full name of the plugin (used for diagnostics)
index c19bcff..e0d8787 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_rss_client'; // Full name of the plugin (used for diagnostics)
 $plugin->cron      = 300;               // Set min time between cron executions to 300 secs (5 mins)
index 4a11ed9..08c66b2 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012110800;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_search_forums'; // Full name of the plugin (used for diagnostics)
index 46407d5..9997363 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012110800;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_section_links'; // Full name of the plugin (used for diagnostics)
index 9fc46d6..517c84b 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_selfcompletion'; // Full name of the plugin (used for diagnostics)
index 9740627..f3a6d3a 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_settings';  // Full name of the plugin (used for diagnostics)
index bffa658..5ab255e 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012110800;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_site_main_menu'; // Full name of the plugin (used for diagnostics)
index 7eba87a..03d6994 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012110800;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_social_activities'; // Full name of the plugin (used for diagnostics)
index c23f1cc..e29e9a1 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012110800;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_tag_flickr'; // Full name of the plugin (used for diagnostics)
index 63dfc59..639bb56 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012110800;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_tag_youtube'; // Full name of the plugin (used for diagnostics)
index 2c02165..897d4ea 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012091600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2012061700;        // Requires this Moodle version
+$plugin->version   = 2012112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2012112900;        // Requires this Moodle version
 $plugin->component = 'block_tags';      // Full name of the plugin (used for diagnostics)
index bc91d40..57af11a 100644 (file)
@@ -81,9 +81,9 @@ if (!empty($blogs)) {
 
     foreach ($blogs as $blog) {
         if ($blog->failedlastsync) {
-            $validicon = $OUTPUT->pix_icon('i/cross_red_big', get_string('feedisinvalid', 'blog'));
+            $validicon = $OUTPUT->pix_icon('i/invalid', get_string('feedisinvalid', 'blog'));
         } else {
-            $validicon = $OUTPUT->pix_icon('i/tick_green_big', get_string('feedisvalid', 'blog'));
+            $validicon = $OUTPUT->pix_icon('i/valid', get_string('feedisvalid', 'blog'));
         }
 
         $editurl = new moodle_url('/blog/external_blog_edit.php', array('id' => $blog->id));
index 408e014..b6f4e4f 100644 (file)
@@ -56,6 +56,27 @@ If a data source had been specified in the definition, the following would be al
     $cache = cache::make('core', 'string');
     $component = $cache->get('component');
 
+Disabling the cache stores.
+There are times in code when you will want to disable the cache stores.
+While the cache API must still be functional in order for calls to it to work it is possible to disable the use of the cache stores separately so that you can be sure only the cache will function in all circumstances.
+
+    // Disable the cache store at the start of your script with:
+    define('CACHE_DISABLE_STORES', true);
+
+    // Disable the cache within your script when you want with:
+    cache_factory::disable_stores();
+    // If you disabled it using the above means you can re-enable it with:
+    cache_factory::reset();
+
+Disabling the cache entirely.
+Like above there are times when you want the cache to avoid initialising anything it doesn't absolutely need. Things such as installation and upgrade require this functionality.
+When the cache API is disabled it is still functional however special "disabled" classes will be used instead of the regular classes that make the Cache API tick.
+These disabled classes do the least work possible and through this means we avoid all manner of intialisation and configuration.
+Once disabled it cannot be re-enabled.
+
+    // To disable the cache entirely call the following:
+    define('CACHE_DISABLE_ALL', true);
+
 Cache API parts
 ---------------
 
@@ -89,6 +110,7 @@ The following points highlight things you should know about stores.
 ** Data guarantee - Data is guaranteed to exist in the cache once it is set there. It is never cleaned up to free space or because it has not been recently used.
 ** Multiple identifiers - Rather than a single string key, the parts that make up the key are passed as an array.
 ** Native TTL support - When required, the store supports native ttl and doesn't require the cache API to manage ttl of things given to the store.
+* There are two reserved store names, base and dummy. These are both used internally.
 
 ### Definition
 _Definitions were not a part of the previous proposal._
index da3b966..fee8aea 100644 (file)
@@ -122,12 +122,15 @@ class cache_config {
     /**
      * Loads the configuration file and parses its contents into the expected structure.
      *
+     * @param array|false $configuration Can be used to force a configuration. Should only be used when truly required.
      * @return boolean
      */
-    public function load() {
+    public function load($configuration = false) {
         global $CFG;
 
-        $configuration = $this->include_configuration();
+        if ($configuration === false) {
+            $configuration = $this->include_configuration();
+        }
 
         $this->configstores = array();
         $this->configdefinitions = array();
@@ -182,7 +185,7 @@ class cache_config {
             if (!class_exists($class)) {
                 continue;
             }
-            if (!array_key_exists('cache_store', class_implements($class))) {
+            if (!array_key_exists('cache_store', class_parents($class))) {
                 continue;
             }
             if (!array_key_exists('configuration', $store) || !is_array($store['configuration'])) {
@@ -425,7 +428,8 @@ class cache_config {
      */
     public function get_stores_for_definition(cache_definition $definition) {
         // Check if MUC has been disabled.
-        if (defined('NO_CACHE_STORES') && NO_CACHE_STORES !== false) {
+        $factory = cache_factory::instance();
+        if ($factory->stores_disabled()) {
             // Yip its been disabled.
             // To facilitate this we are going to always return an empty array of stores to use.
             // This will force all cache instances to use the cachestore_dummy.
index d44dc8c..43d9229 100644 (file)
@@ -37,7 +37,7 @@ defined('MOODLE_INTERNAL') || die();
  * @copyright  2012 Sam Hemelryk
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
-class cachestore_dummy implements cache_store {
+class cachestore_dummy extends cache_store {
 
     /**
      * The name of this store.
@@ -107,6 +107,11 @@ class cachestore_dummy implements cache_store {
      */
     public function initialise(cache_definition $definition) {
         // If the definition isn't persistent then we need to be persistent here.
+        // The reasoning behind this is that:
+        //   - If the definition is persistent then the cache loader is going to
+        //     store things in its persistent cache.
+        //   - If the definition is not persistent then the cache loader won't try to store anything
+        //     and we will need to store it here in order to make sure it is accessible.
         $this->persist = !$definition->should_be_persistent();
     }
 
@@ -135,30 +140,6 @@ class cachestore_dummy implements cache_store {
         return true;
     }
 
-    /**
-     * Returns true if this store supports data guarantee.
-     * @return bool
-     */
-    public function supports_data_guarantee() {
-        return false;
-    }
-
-    /**
-     * Returns true if this store supports multiple identifiers.
-     * @return bool
-     */
-    public function supports_multiple_identifiers() {
-        return false;
-    }
-
-    /**
-     * Returns true if this store supports a native ttl.
-     * @return bool
-     */
-    public function supports_native_ttl() {
-        return true;
-    }
-
     /**
      * Returns the data for the given key
      * @param string $key
index 9a588df..1458cf0 100644 (file)
@@ -40,6 +40,21 @@ defined('MOODLE_INTERNAL') || die();
  */
 class cache_factory {
 
+    /** The cache has not been initialised yet. */
+    const STATE_UNINITIALISED = 0;
+    /** The cache is in the process of initialising itself. */
+    const STATE_INITIALISING = 1;
+    /** The cache is in the process of saving its configuration file. */
+    const STATE_SAVING = 2;
+    /** The cache is ready to use. */
+    const STATE_READY = 3;
+    /** The cache encountered an error while initialising. */
+    const STATE_ERROR_INITIALISING = 9;
+    /** The cache has been disabled. */
+    const STATE_DISABLED = 10;
+    /** The cache stores have been disabled */
+    const STATE_STORES_DISABLED = 11;
+
     /**
      * An instance of the cache_factory class created upon the first request.
      * @var cache_factory
@@ -82,6 +97,12 @@ class cache_factory {
      */
     protected $lockplugins = null;
 
+    /**
+     * The current state of the cache API.
+     * @var int
+     */
+    protected $state = 0;
+
     /**
      * Returns an instance of the cache_factor method.
      *
@@ -89,8 +110,22 @@ class cache_factory {
      * @return cache_factory
      */
     public static function instance($forcereload = false) {
+        global $CFG;
         if ($forcereload || self::$instance === null) {
-            self::$instance = new cache_factory();
+            // Initialise a new factory to facilitate our needs.
+            if (defined('CACHE_DISABLE_ALL') && CACHE_DISABLE_ALL !== false) {
+                // The cache has been disabled. Load disabledlib and start using the factory designed to handle this
+                // situation. It will use disabled alternatives where available.
+                require_once($CFG->dirroot.'/cache/disabledlib.php');
+                self::$instance = new cache_factory_disabled();
+            } else {
+                // We're using the regular factory.
+                self::$instance = new cache_factory();
+                if (defined('CACHE_DISABLE_STORES') && CACHE_DISABLE_STORES !== false) {
+                    // The cache stores have been disabled.
+                    self::$instance->set_state(self::STATE_STORES_DISABLED);;
+                }
+            }
         }
         return self::$instance;
     }
@@ -113,6 +148,8 @@ class cache_factory {
         $factory->configs = array();
         $factory->definitions = array();
         $factory->lockplugins = null; // MUST be null in order to force its regeneration.
+        // Reset the state to uninitialised.
+        $factory->state = self::STATE_UNINITIALISED;
     }
 
     /**
@@ -206,7 +243,7 @@ class cache_factory {
      * @param string $name The name of the store (must be unique remember)
      * @param array $details
      * @param cache_definition $definition The definition to instantiate it for.
-     * @return boolean
+     * @return boolean|cache_store
      */
     public function create_store_from_config($name, array $details, cache_definition $definition) {
         if (!array_key_exists($name, $this->stores)) {
@@ -253,9 +290,19 @@ class cache_factory {
             $class = 'cache_config_phpunittest';
         }
 
+        $error = false;
         if ($needtocreate) {
             // Create the default configuration.
-            $class::create_default_configuration();
+            // Update the state, we are now initialising the cache.
+            self::set_state(self::STATE_INITIALISING);
+            $configuration = $class::create_default_configuration();
+            if ($configuration !== true) {
+                // Failed to create the default configuration. Disable the cache stores and update the state.
+                self::set_state(self::STATE_ERROR_INITIALISING);
+                $this->configs[$class] = new $class;
+                $this->configs[$class]->load($configuration);
+                $error = true;
+            }
         }
 
         if (!array_key_exists($class, $this->configs)) {
@@ -264,6 +311,11 @@ class cache_factory {
             $this->configs[$class]->load();
         }
 
+        if (!$error) {
+            // The cache is now ready to use. Update the state.
+            self::set_state(self::STATE_READY);
+        }
+
         // Return the instance.
         return $this->configs[$class];
     }
@@ -338,4 +390,83 @@ class cache_factory {
         $class = $this->lockplugins[$type];
         return new $class($name, $config);
     }
+
+    /**
+     * Returns the current state of the cache API.
+     *
+     * @return int
+     */
+    public function get_state() {
+        return $this->state;
+    }
+
+    /**
+     * Updates the state fo the cache API.
+     *
+     * @param int $state
+     * @return bool
+     */
+    public function set_state($state) {
+        if ($state <= $this->state) {
+            return false;
+        }
+        $this->state = $state;
+        return true;
+    }
+
+    /**
+     * Returns true if the cache API has been disabled.
+     *
+     * @return bool
+     */
+    public function is_disabled() {
+        return $this->state === self::STATE_DISABLED;
+    }
+
+    /**
+     * Disables as much of the cache API as possible.
+     *
+     * All of the magic associated with the disabled cache is wrapped into this function.
+     * In switching out the factory for the disabled factory it gains full control over the initialisation of objects
+     * and can use all of the disabled alternatives.
+     * Simple!
+     *
+     * This function has been marked as protected so that it cannot be abused through the public API presently.
+     * Perhaps in the future we will allow this, however as per the build up to the first release containing
+     * MUC it was decided that this was just to risky and abusable.
+     */
+    protected static function disable() {
+        global $CFG;
+        require_once($CFG->dirroot.'/cache/disabledlib.php');
+        self::$instance = new cache_factory_disabled();
+    }
+
+    /**
+     * Returns true if the cache stores have been disabled.
+     *
+     * @return bool
+     */
+    public function stores_disabled() {
+        return $this->state === self::STATE_STORES_DISABLED || $this->is_disabled();
+    }
+
+    /**
+     * Disables cache stores.
+     *
+     * The cache API will continue to function however none of the actual stores will be used.
+     * Instead the dummy store will be provided for all cache requests.
+     * This is useful in situations where you cannot be sure any stores are working.
+     *
+     * In order to re-enable the cache you must call the cache factories static reset method:
+     * <code>
+     * // Disable the cache factory.
+     * cache_factory::disable_stores();
+     * // Re-enable the cache factory by resetting it.
+     * cache_factory::reset();
+     * </code>
+     */
+    public static function disable_stores() {
+        $factory = self::instance();
+        $factory->set_state(self::STATE_STORES_DISABLED);
+    }
 }
\ No newline at end of file
index 983bc6b..d548349 100644 (file)
@@ -230,227 +230,6 @@ interface cache_loader_with_locking {
     public function release_lock($key);
 }
 
-/**
- * Cache store.
- *
- * This interface outlines the requirements for a cache store plugin.
- * It must be implemented by all such plugins and provides a reference to interacting with cache stores.
- *
- * Must be implemented by all cache store plugins.
- *
- * @package    core
- * @category   cache
- * @copyright  2012 Sam Hemelryk
- * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-interface cache_store {
-
-    /**#@+
-     * Constants for features a cache store can support
-     */
-    /**
-     * Supports multi-part keys
-     */
-    const SUPPORTS_MULTIPLE_IDENTIFIERS = 1;
-    /**
-     * Ensures data remains in the cache once set.
-     */
-    const SUPPORTS_DATA_GUARANTEE = 2;
-    /**
-     * Supports a native ttl system.
-     */
-    const SUPPORTS_NATIVE_TTL = 4;
-    /**#@-*/
-
-    /**#@+
-     * Constants for the modes of a cache store
-     */
-    /**
-     * Application caches. These are shared caches.
-     */
-    const MODE_APPLICATION = 1;
-    /**
-     * Session caches. Just access to the PHP session.
-     */
-    const MODE_SESSION = 2;
-    /**
-     * Request caches. Static caches really.
-     */
-    const MODE_REQUEST = 4;
-    /**#@-*/
-
-    /**
-     * Static method to check if the store requirements are met.
-     *
-     * @return bool True if the stores software/hardware requirements have been met and it can be used. False otherwise.
-     */
-    public static function are_requirements_met();
-
-    /**
-     * Static method to check if a store is usable with the given mode.
-     *
-     * @param int $mode One of cache_store::MODE_*
-     */
-    public static function is_supported_mode($mode);
-
-    /**
-     * Returns the supported features as a binary flag.
-     *
-     * @param array $configuration The configuration of a store to consider specifically.
-     * @return int The supported features.
-     */
-    public static function get_supported_features(array $configuration = array());
-
-    /**
-     * Returns the supported modes as a binary flag.
-     *
-     * @param array $configuration The configuration of a store to consider specifically.
-     * @return int The supported modes.
-     */
-    public static function get_supported_modes(array $configuration = array());
-
-    /**
-     * Returns true if this cache store instance supports multiple identifiers.
-     *
-     * @return bool
-     */
-    public function supports_multiple_identifiers();
-
-    /**
-     * Returns true if this cache store instance promotes data guarantee.
-     *
-     * @return bool
-     */
-    public function supports_data_guarantee();
-
-    /**
-     * Returns true if this cache store instance supports ttl natively.
-     *
-     * @return bool
-     */
-    public function supports_native_ttl();
-
-    /**
-     * Used to control the ability to add an instance of this store through the admin interfaces.
-     *
-     * @return bool True if the user can add an instance, false otherwise.
-     */
-    public static function can_add_instance();
-
-    /**
-     * Constructs an instance of the cache store.
-     *
-     * This method should not create connections or perform and processing, it should be used
-     *
-     * @param string $name The name of the cache store
-     * @param array $configuration The configuration for this store instance.
-     */
-    public function __construct($name, array $configuration = array());
-
-    /**
-     * Returns the name of this store instance.
-     * @return string
-     */
-    public function my_name();
-
-    /**
-     * Initialises a new instance of the cache store given the definition the instance is to be used for.
-     *
-     * This function should prepare any given connections etc.
-     *
-     * @param cache_definition $definition
-     */
-    public function initialise(cache_definition $definition);
-
-    /**
-     * Returns true if this cache store instance has been initialised.
-     * @return bool
-     */
-    public function is_initialised();
-
-    /**
-     * Returns true if this cache store instance is ready to use.
-     * @return bool
-     */
-    public function is_ready();
-
-    /**
-     * Retrieves an item from the cache store given its key.
-     *
-     * @param string $key The key to retrieve
-     * @return mixed The data that was associated with the key, or false if the key did not exist.
-     */
-    public function get($key);
-
-    /**
-     * Retrieves several items from the cache store in a single transaction.
-     *
-     * If not all of the items are available in the cache then the data value for those that are missing will be set to false.
-     *
-     * @param array $keys The array of keys to retrieve
-     * @return array An array of items from the cache. There will be an item for each key, those that were not in the store will
-     *      be set to false.
-     */
-    public function get_many($keys);
-
-    /**
-     * Sets an item in the cache given its key and data value.
-     *
-     * @param string $key The key to use.
-     * @param mixed $data The data to set.
-     * @return bool True if the operation was a success false otherwise.
-     */
-    public function set($key, $data);
-
-    /**
-     * Sets many items in the cache in a single transaction.
-     *
-     * @param array $keyvaluearray An array of key value pairs. Each item in the array will be an associative array with two
-     *      keys, 'key' and 'value'.
-     * @return int The number of items successfully set. It is up to the developer to check this matches the number of items
-     *      sent ... if they care that is.
-     */
-    public function set_many(array $keyvaluearray);
-
-    /**
-     * Deletes an item from the cache store.
-     *
-     * @param string $key The key to delete.
-     * @return bool Returns true if the operation was a success, false otherwise.
-     */
-    public function delete($key);
-
-    /**
-     * Deletes several keys from the cache in a single action.
-     *
-     * @param array $keys The keys to delete
-     * @return int The number of items successfully deleted.
-     */
-    public function delete_many(array $keys);
-
-    /**
-     * Purges the cache deleting all items within it.
-     *
-     * @return boolean True on success. False otherwise.
-     */
-    public function purge();
-
-    /**
-     * Performs any necessary clean up when the store instance is being deleted.
-     */
-    public function cleanup();
-
-    /**
-     * Generates an instance of the cache store that can be used for testing.
-     *
-     * Returns an instance of the cache store, or false if one cannot be created.
-     *
-     * @param cache_definition $definition
-     * @return cache_store|false
-     */
-    public static function initialise_test_instance(cache_definition $definition);
-}
-
 /**
  * Cache store feature: locking
  *
@@ -559,6 +338,35 @@ interface cache_is_key_aware {
     public function has_all(array $keys);
 }
 
+/**
+ * Cache store feature: configurable.
+ *
+ * This feature should be implemented by all cache stores that are configurable when adding an instance.
+ * It requires the implementation of methods required to convert form data into the a configuration array for the
+ * store instance, and then the reverse converting configuration data into an array that can be used to set the
+ * data for the edit form.
+ *
+ * Can be implemented by classes already implementing cache_store.
+ */
+interface cache_is_configurable {
+
+    /**
+     * Given the data from the add instance form this function creates a configuration array.
+     *
+     * @param stdClass $data
+     * @return array
+     */
+    public static function config_get_configuration_array($data);
+
+    /**
+     * Allows the cache store to set its data against the edit form before it is shown to the user.
+     *
+     * @param moodleform $editform
+     * @param array $config
+     */
+    public static function config_set_edit_form_data(moodleform $editform, array $config);
+}
+
 /**
  * Cache Data Source.
  *
index 433e9b7..74014c4 100644 (file)
@@ -638,19 +638,22 @@ class cache implements cache_loader {
     public function has($key, $tryloadifpossible = false) {
         $parsedkey = $this->parse_key($key);
         if ($this->is_in_persist_cache($parsedkey)) {
+            // Hoorah, that was easy. It exists in the persist cache so we definitely have it.
             return true;
         }
-        if (($this->has_a_ttl() && !$this->store_supports_native_ttl()) || !$this->store_supports_key_awareness()) {
-            if ($this->store_supports_key_awareness() && !$this->store->has($parsedkey)) {
-                return false;
-            }
+        if ($this->has_a_ttl() && !$this->store_supports_native_ttl()) {
+            // The data has a TTL and the store doesn't support it natively.
+            // We must fetch the data and expect a ttl wrapper.
             $data = $this->store->get($parsedkey);
-            if (!$this->store_supports_native_ttl()) {
-                $has = ($data instanceof cache_ttl_wrapper && !$data->has_expired());
-            } else {
-                $has = ($data !== false);
-            }
+            $has = ($data instanceof cache_ttl_wrapper && !$data->has_expired());
+        } else if (!$this->store_supports_key_awareness()) {
+            // The store doesn't support key awareness, get the data and check it manually... puke.
+            // Either no TTL is set of the store supports its handling natively.
+            $data = $this->store->get($parsedkey);
+            $has = ($data !== false);
         } else {
+            // The store supports key awareness, this is easy!
+            // Either no TTL is set of the store supports its handling natively.
             $has = $this->store->has($parsedkey);
         }
         if (!$has && $tryloadifpossible) {
diff --git a/cache/classes/store.php b/cache/classes/store.php
new file mode 100644 (file)
index 0000000..dca65da
--- /dev/null
@@ -0,0 +1,266 @@
+<?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/>.
+
+/**
+ * Cache store - base class
+ *
+ * This file is part of Moodle's cache API, affectionately called MUC.
+ * It contains the components that are required in order to use caching.
+ *
+ * @package    core
+ * @category   cache
+ * @copyright  2012 Sam Hemelryk
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * Cache store interface.
+ *
+ * This interface defines the static methods that must be implemented by every cache store plugin.
+ * To ensure plugins implement this class the abstract cache_store class implements this interface.
+ *
+ * @package    core
+ * @category   cache
+ * @copyright  2012 Sam Hemelryk
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+interface cache_store_interface {
+    /**
+     * Static method to check if the store requirements are met.
+     *
+     * @return bool True if the stores software/hardware requirements have been met and it can be used. False otherwise.
+     */
+    public static function are_requirements_met();
+
+    /**
+     * Static method to check if a store is usable with the given mode.
+     *
+     * @param int $mode One of cache_store::MODE_*
+     */
+    public static function is_supported_mode($mode);
+
+    /**
+     * Returns the supported features as a binary flag.
+     *
+     * @param array $configuration The configuration of a store to consider specifically.
+     * @return int The supported features.
+     */
+    public static function get_supported_features(array $configuration = array());
+
+    /**
+     * Returns the supported modes as a binary flag.
+     *
+     * @param array $configuration The configuration of a store to consider specifically.
+     * @return int The supported modes.
+     */
+    public static function get_supported_modes(array $configuration = array());
+
+    /**
+     * Generates an instance of the cache store that can be used for testing.
+     *
+     * Returns an instance of the cache store, or false if one cannot be created.
+     *
+     * @param cache_definition $definition
+     * @return cache_store|false
+     */
+    public static function initialise_test_instance(cache_definition $definition);
+}
+
+/**
+ * Abstract cache store class.
+ *
+ * All cache store plugins must extend this base class.
+ * It lays down the foundation for what is required of a cache store plugin.
+ *
+ * @since 2.4
+ * @package    core
+ * @category   cache
+ * @copyright  2012 Sam Hemelryk
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+abstract class cache_store implements cache_store_interface {
+
+    // Constants for features a cache store can support
+
+    /**
+     * Supports multi-part keys
+     */
+    const SUPPORTS_MULTIPLE_IDENTIFIERS = 1;
+    /**
+     * Ensures data remains in the cache once set.
+     */
+    const SUPPORTS_DATA_GUARANTEE = 2;
+    /**
+     * Supports a native ttl system.
+     */
+    const SUPPORTS_NATIVE_TTL = 4;
+
+    // Constants for the modes of a cache store
+
+    /**
+     * Application caches. These are shared caches.
+     */
+    const MODE_APPLICATION = 1;
+    /**
+     * Session caches. Just access to the PHP session.
+     */
+    const MODE_SESSION = 2;
+    /**
+     * Request caches. Static caches really.
+     */
+    const MODE_REQUEST = 4;
+
+    /**
+     * Constructs an instance of the cache store.
+     *
+     * This method should not create connections or perform and processing, it should be used
+     *
+     * @param string $name The name of the cache store
+     * @param array $configuration The configuration for this store instance.
+     */
+    abstract public function __construct($name, array $configuration = array());
+
+    /**
+     * Returns the name of this store instance.
+     * @return string
+     */
+    abstract public function my_name();
+
+    /**
+     * Initialises a new instance of the cache store given the definition the instance is to be used for.
+     *
+     * This function should prepare any given connections etc.
+     *
+     * @param cache_definition $definition
+     */
+    abstract public function initialise(cache_definition $definition);
+
+    /**
+     * Returns true if this cache store instance has been initialised.
+     * @return bool
+     */
+    abstract public function is_initialised();
+
+    /**
+     * Returns true if this cache store instance is ready to use.
+     * @return bool
+     */
+    abstract public function is_ready();
+
+    /**
+     * Retrieves an item from the cache store given its key.
+     *
+     * @param string $key The key to retrieve
+     * @return mixed The data that was associated with the key, or false if the key did not exist.
+     */
+    abstract public function get($key);
+
+    /**
+     * Retrieves several items from the cache store in a single transaction.
+     *
+     * If not all of the items are available in the cache then the data value for those that are missing will be set to false.
+     *
+     * @param array $keys The array of keys to retrieve
+     * @return array An array of items from the cache. There will be an item for each key, those that were not in the store will
+     *      be set to false.
+     */
+    abstract public function get_many($keys);
+
+    /**
+     * Sets an item in the cache given its key and data value.
+     *
+     * @param string $key The key to use.
+     * @param mixed $data The data to set.
+     * @return bool True if the operation was a success false otherwise.
+     */
+    abstract public function set($key, $data);
+
+    /**
+     * Sets many items in the cache in a single transaction.
+     *
+     * @param array $keyvaluearray An array of key value pairs. Each item in the array will be an associative array with two
+     *      keys, 'key' and 'value'.
+     * @return int The number of items successfully set. It is up to the developer to check this matches the number of items
+     *      sent ... if they care that is.
+     */
+    abstract public function set_many(array $keyvaluearray);
+
+    /**
+     * Deletes an item from the cache store.
+     *
+     * @param string $key The key to delete.
+     * @return bool Returns true if the operation was a success, false otherwise.
+     */
+    abstract public function delete($key);
+
+    /**
+     * Deletes several keys from the cache in a single action.
+     *
+     * @param array $keys The keys to delete
+     * @return int The number of items successfully deleted.
+     */
+    abstract public function delete_many(array $keys);
+
+    /**
+     * Purges the cache deleting all items within it.
+     *
+     * @return boolean True on success. False otherwise.
+     */
+    abstract public function purge();
+
+    /**
+     * Performs any necessary clean up when the store instance is being deleted.
+     */
+    abstract public function cleanup();
+
+    /**
+     * Returns true if the user can add an instance of the store plugin.
+     *
+     * @return bool
+     */
+    public static function can_add_instance() {
+        return true;
+    }
+
+    /**
+     * Returns true if the store instance guarantees data.
+     *
+     * @return bool
+     */
+    public function supports_data_guarantee() {
+        return $this::get_supported_features() & self::SUPPORTS_DATA_GUARANTEE;
+    }
+
+    /**
+     * Returns true if the store instance supports multiple identifiers.
+     *
+     * @return bool
+     */
+    public function supports_multiple_identifiers() {
+        return $this::get_supported_features() & self::SUPPORTS_MULTIPLE_IDENTIFIERS;
+    }
+
+    /**
+     * Returns true if the store instance supports native ttl.
+     *
+     * @return bool
+     */
+    public function supports_native_ttl() {
+        return $this::get_supported_features() & self::SUPPORTS_NATIVE_TTL;
+    }
+}
diff --git a/cache/disabledlib.php b/cache/disabledlib.php
new file mode 100644 (file)
index 0000000..18cc11e
--- /dev/null
@@ -0,0 +1,462 @@
+<?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/>.
+
+/**
+ * This file contains classes that are used by the Cache API only when it is disabled.
+ *
+ * These classes are derivatives of other significant classes used by the Cache API customised specifically
+ * to only do what is absolutely necessary when initialising and using the Cache API when its been disabled.
+ *
+ * @package    core
+ * @category   cache
+ * @copyright  2012 Sam Hemelryk
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * Required as it is needed for cache_config_disabled which extends cache_config_writer.
+ */
+require_once($CFG->dirroot.'/cache/locallib.php');
+
+/**
+ * The cache loader class used when the Cache has been disabled.
+ *
+ * @copyright  2012 Sam Hemelryk
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class cache_disabled extends cache {
+
+    /**
+     * Constructs the cache.
+     *
+     * @param cache_definition $definition
+     * @param cache_store $store
+     * @param null $loader Unused.
+     */
+    public function __construct(cache_definition $definition, cache_store $store, $loader = null) {
+        $this->definition = $definition;
+        $this->store = $store;
+    }
+
+    /**
+     * Gets a key from the cache.
+     *
+     * @param int|string $key
+     * @param int $strictness Unused.
+     * @return bool
+     */
+    public function get($key, $strictness = IGNORE_MISSING) {
+        return false;
+    }
+
+    /**
+     * Gets many keys at once from the cache.
+     *
+     * @param array $keys
+     * @param int $strictness Unused.
+     * @return array
+     */
+    public function get_many(array $keys, $strictness = IGNORE_MISSING) {
+        $return = array();
+        foreach ($keys as $key) {
+            $return[$key] = false;
+        }
+        return $return;
+    }
+
+    /**
+     * Sets a key value pair in the cache.
+     *
+     * @param int|string $key Unused.
+     * @param mixed $data Unused.
+     * @return bool
+     */
+    public function set($key, $data) {
+        return false;
+    }
+
+    /**
+     * Sets many key value pairs in the cache at once.
+     *
+     * @param array $keyvaluearray Unused.
+     * @return int
+     */
+    public function set_many(array $keyvaluearray) {
+        return 0;
+    }
+
+    /**
+     * Deletes an item from the cache.
+     *
+     * @param int|string $key Unused.
+     * @param bool $recurse Unused.
+     * @return bool
+     */
+    public function delete($key, $recurse = true) {
+        return false;
+    }
+
+    /**
+     * Deletes many items at once from the cache.
+     *
+     * @param array $keys Unused.
+     * @param bool $recurse Unused.
+     * @return int
+     */
+    public function delete_many(array $keys, $recurse = true) {
+        return 0;
+    }
+
+    /**
+     * Checks if the cache has the requested key.
+     *
+     * @param int|string $key Unused.
+     * @return bool
+     */
+    public function has($key) {
+        return false;
+    }
+
+    /**
+     * Checks if the cache has all of the requested keys.
+     * @param array $keys Unused.
+     * @return bool
+     */
+    public function has_all(array $keys) {
+        return false;
+    }
+
+    /**
+     * Checks if the cache has any of the requested keys.
+     *
+     * @param array $keys Unused.
+     * @return bool
+     */
+    public function has_any(array $keys) {
+        return false;
+    }
+
+    /**
+     * Purges all items from the cache.
+     *
+     * @return bool
+     */
+    public function purge() {
+        return true;
+    }
+}
+
+/**
+ * The cache factory class used when the Cache has been disabled.
+ *
+ * @copyright  2012 Sam Hemelryk
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class cache_factory_disabled extends cache_factory {
+
+    /**
+     * Returns an instance of the cache_factor method.
+     *
+     * @param bool $forcereload Unused.
+     * @return cache_factory
+     * @throws coding_exception