Merge branch 'MDL-25760' of git://github.com/ptrkmkl/moodle
authorPetr Skoda <commits@skodak.org>
Mon, 28 Feb 2011 09:03:57 +0000 (10:03 +0100)
committerPetr Skoda <commits@skodak.org>
Mon, 28 Feb 2011 09:03:57 +0000 (10:03 +0100)
869 files changed:
admin/cli/automated_backups.php
admin/dbtransfer/lib.php
admin/modules.php
admin/multilangupgrade.php
admin/qtypes.php
admin/registration/lib.php
admin/registration/register.php
admin/registration/renewregistration.php [new file with mode: 0644]
admin/report/courseoverview/index.php
admin/roles/assign.php
admin/roles/lib.php
admin/roles/manage.php
admin/settings/development.php
admin/settings/location.php
admin/settings/plugins.php
admin/settings/server.php
admin/settings/subsystems.php
admin/settings/users.php
admin/uploaduser.php
admin/uploaduser_form.php
admin/user/lib.php
admin/user/user_bulk_confirm.php
admin/user/user_bulk_delete.php
admin/user/user_bulk_forcepasswordchange.php
admin/user/user_bulk_message.php
admin/xmldb/index.php
auth/shibboleth/auth.php
auth/shibboleth/logout.php
backup/lib.php
backup/moodle2/backup_format_plugin.class.php [new file with mode: 0644]
backup/moodle2/backup_plan_builder.class.php
backup/moodle2/backup_plugin.class.php
backup/moodle2/backup_stepslib.php
backup/moodle2/backup_subplugin.class.php
backup/moodle2/restore_format_plugin.class.php [new file with mode: 0644]
backup/moodle2/restore_plan_builder.class.php
backup/moodle2/restore_plugin.class.php
backup/moodle2/restore_qtype_plugin.class.php
backup/moodle2/restore_section_task.class.php
backup/moodle2/restore_stepslib.php
backup/moodle2/restore_subplugin.class.php
backup/restorelib.php
backup/util/dbops/backup_plan_dbops.class.php
backup/util/helper/backup_cron_helper.class.php
backup/util/plan/backup_structure_step.class.php
backup/util/plan/restore_structure_step.class.php
backup/util/structure/base_nested_element.class.php
backup/util/structure/simpletest/testbasenestedelement.php
backup/util/ui/renderer.php
backup/util/xml/parser/processors/simplified_parser_processor.class.php
backup/util/xml/parser/progressive_parser.class.php
backup/util/xml/parser/simpletest/fixtures/test4.xml
blocks/activity_modules/block_activity_modules.php
blocks/calendar_month/block_calendar_month.php
blocks/community/forms.php
blocks/course_overview/block_course_overview.php
blocks/course_summary/block_course_summary.php
blocks/html/block_html.php
blocks/moodleblock.class.php
blocks/myprofile/block_myprofile.php
blocks/myprofile/edit_form.php
blocks/myprofile/lang/en/block_myprofile.php
blocks/myprofile/version.php
blocks/navigation/block_navigation.php
blocks/navigation/renderer.php
blocks/navigation/yui/navigation/navigation.js
blocks/news_items/block_news_items.php
blocks/online_users/block_online_users.php
blocks/rss_client/edit_form.php
blocks/rss_client/editfeed.php
blocks/site_main_menu/block_site_main_menu.php
blocks/social_activities/block_social_activities.php
blog/lib.php
blog/locallib.php
blog/preferences.php
blog/preferences_form.php
blog/rsslib.php
brokenfile.php [new file with mode: 0644]
calendar/export_execute.php
calendar/lib.php
config-dist.php
course/category.php
course/edit_form.php
course/format/topics/format.php
course/format/weeks/format.php
course/lib.php
course/modedit.php
course/pending.php
course/report/completion/index.php
course/report/completion/mod.php
course/report/outline/index.php
course/report/participation/index.php
course/report/progress/index.php
course/request_form.php
course/resources.php
course/togglecompletion.php
course/user.php
course/view.php
enrol/authorize/lang/en/enrol_authorize.php
enrol/authorize/localfuncs.php
enrol/category/locallib.php
enrol/database/lib.php
enrol/database/settings.php
enrol/imsenterprise/db/install.php [new file with mode: 0644]
enrol/imsenterprise/db/upgrade.php [new file with mode: 0644]
enrol/imsenterprise/version.php
enrol/ldap/lang/en/enrol_ldap.php
enrol/ldap/settings.php
enrol/locallib.php
enrol/paypal/lang/en/enrol_paypal.php
enrol/renderer.php
enrol/self/lib.php
filter/activitynames/lang/en/filter_activitynames.php
filter/algebra/algebradebug.php
filter/algebra/lang/en/filter_algebra.php
filter/censor/lang/en/filter_censor.php
filter/emailprotect/lang/en/filter_emailprotect.php
filter/mediaplugin/filter.php
filter/mediaplugin/lang/en/filter_mediaplugin.php
filter/mediaplugin/simpletest/testfiltermediaplugin.php [new file with mode: 0644]
filter/tex/lang/en/filter_tex.php
filter/tex/texdebug.php
grade/edit/outcome/edit_form.php
grade/edit/outcome/index.php
grade/import/csv/index.php [changed mode: 0755->0644]
grade/import/grade_import_form.php [changed mode: 0755->0644]
grade/import/lib.php [changed mode: 0755->0644]
grade/report/grader/lib.php
grade/report/lib.php [changed mode: 0755->0644]
grade/report/outcomes/index.php
grade/report/user/index.php
grade/report/user/lib.php
grade/report/user/settings.php
grade/report/user/styles.css
group/assign.php
group/import.php
group/import_form.php
group/index.php
group/members.php
group/overview.php
index.php
install.php
install/lang/ar/admin.php
install/lang/ca/admin.php
install/lang/cs/install.php
install/lang/da/admin.php
install/lang/da/error.php
install/lang/da/install.php
install/lang/de/install.php
install/lang/en/install.php [changed mode: 0755->0644]
install/lang/eu/admin.php
install/lang/fj/langconfig.php [new file with mode: 0644]
install/lang/fr/admin.php
install/lang/fr/install.php
install/lang/he/admin.php
install/lang/he/install.php
install/lang/it/install.php
install/lang/ja/admin.php
install/lang/lv/install.php
install/lang/nn/langconfig.php
install/lang/pl/admin.php
install/lang/pl/install.php
install/lang/pt/error.php
install/lang/pt_br/admin.php
install/lang/pt_br/error.php
install/lang/pt_br/install.php
install/lang/ru/install.php
install/lang/sk/install.php
install/lang/sl/admin.php
install/lang/so/admin.php [new file with mode: 0644]
install/lang/sv/admin.php
install/lang/ta_lk/error.php
install/lang/ta_lk/install.php
install/lang/ta_lk/moodle.php
install/lang/zh_cn/install.php
lang/en/admin.php
lang/en/completion.php
lang/en/dbtransfer.php
lang/en/edufields.php
lang/en/grades.php [changed mode: 0755->0644]
lang/en/group.php
lang/en/hub.php
lang/en/message.php
lang/en/moodle.php
lang/en/role.php
lib/accesslib.php
lib/adminlib.php
lib/ajax/getnavbranch.php
lib/ajax/section_classes.js
lib/completion/completion_criteria_activity.php
lib/completion/completion_criteria_course.php
lib/completion/completion_criteria_date.php
lib/completion/completion_criteria_duration.php
lib/completion/completion_criteria_grade.php
lib/completion/cron.php
lib/completionlib.php
lib/conditionlib.php
lib/datalib.php
lib/db/access.php
lib/db/install.xml [changed mode: 0755->0644]
lib/db/messages.php
lib/db/upgrade.php
lib/db/upgradelib.php
lib/ddl/oracle_sql_generator.php
lib/ddl/postgres_sql_generator.php
lib/dml/moodle_database.php
lib/dml/mysqli_native_moodle_database.php
lib/dml/oci_native_moodle_database.php
lib/dml/pdo_moodle_database.php
lib/dml/pgsql_native_moodle_database.php
lib/dml/simpletest/testdml.php
lib/dml/sqlsrv_native_moodle_database.php
lib/dml/sqlsrv_native_moodle_recordset.php
lib/editor/tinymce/lib.php
lib/environmentlib.php
lib/eventslib.php
lib/filelib.php
lib/filestorage/file_storage.php
lib/grade/grade_category.php
lib/grade/grade_grade.php
lib/grade/grade_item.php
lib/grade/grade_outcome.php
lib/grade/grade_scale.php
lib/gradelib.php
lib/grouplib.php
lib/javascript-static.js
lib/messagelib.php
lib/minify/MOODLE_README.txt [deleted file]
lib/minify/config.php
lib/modinfolib.php [new file with mode: 0644]
lib/moodlelib.php
lib/navigationlib.php
lib/outputcomponents.php
lib/outputrenderers.php
lib/outputrequirementslib.php
lib/pagelib.php
lib/questionlib.php
lib/sessionlib.php
lib/setup.php
lib/setuplib.php
lib/simpletest/testcomponentlib.php [new file with mode: 0644]
lib/simpletest/testfilelib.php
lib/simpletest/testoutputcomponents.php [new file with mode: 0644]
lib/simpletestlib.php
lib/spikephpcoverage/readme_moodle.txt
lib/spikephpcoverage/src/phpcoverage.remote.bottom.inc.php
lib/spikephpcoverage/src/phpcoverage.remote.top.inc.php
lib/textlib.class.php
lib/upgradelib.php
lib/weblib.php
lib/yui/2.8.1/build/animation/animation-debug.js [deleted file]
lib/yui/2.8.1/build/animation/animation-min.js [deleted file]
lib/yui/2.8.1/build/animation/animation.js [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/ajax-loader.gif [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/asc.gif [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/autocomplete.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/back-h.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/back-v.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/bar-h.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/bar-v.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/bg-h.gif [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/bg-v.gif [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/blankimage.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/button.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/calendar.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/carousel.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/check0.gif [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/check1.gif [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/check2.gif [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/colorpicker.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/container.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/datatable.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/desc.gif [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/dt-arrow-dn.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/dt-arrow-up.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/editor-knob.gif [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/editor-sprite-active.gif [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/editor-sprite.gif [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/editor.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/header_background.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/hue_bg.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/imagecropper.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/layout.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/layout_sprite.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/loading.gif [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/logger.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/menu-button-arrow-disabled.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/menu-button-arrow.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/menu.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/menubaritem_submenuindicator.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/menubaritem_submenuindicator_disabled.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/menuitem_checkbox.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/menuitem_checkbox_disabled.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/menuitem_submenuindicator.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/menuitem_submenuindicator_disabled.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/paginator.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/picker_mask.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/profilerviewer.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/progressbar.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/resize.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/simpleeditor.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/skin.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/slider.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/split-button-arrow-active.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/split-button-arrow-disabled.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/split-button-arrow-focus.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/split-button-arrow-hover.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/split-button-arrow.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/sprite.png [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/sprite.psd [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/tabview.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/treeview-loading.gif [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/treeview-sprite.gif [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/treeview.css [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/wait.gif [deleted file]
lib/yui/2.8.1/build/assets/skins/sam/yuitest.css [deleted file]
lib/yui/2.8.1/build/autocomplete/assets/autocomplete-core.css [deleted file]
lib/yui/2.8.1/build/autocomplete/assets/skins/sam/autocomplete-skin.css [deleted file]
lib/yui/2.8.1/build/autocomplete/assets/skins/sam/autocomplete.css [deleted file]
lib/yui/2.8.1/build/autocomplete/autocomplete-debug.js [deleted file]
lib/yui/2.8.1/build/autocomplete/autocomplete-min.js [deleted file]
lib/yui/2.8.1/build/autocomplete/autocomplete.js [deleted file]
lib/yui/2.8.1/build/base/base-min.css [deleted file]
lib/yui/2.8.1/build/base/base.css [deleted file]
lib/yui/2.8.1/build/button/assets/button-core.css [deleted file]
lib/yui/2.8.1/build/button/assets/skins/sam/button-skin.css [deleted file]
lib/yui/2.8.1/build/button/assets/skins/sam/button.css [deleted file]
lib/yui/2.8.1/build/button/assets/skins/sam/menu-button-arrow-disabled.png [deleted file]
lib/yui/2.8.1/build/button/assets/skins/sam/menu-button-arrow.png [deleted file]
lib/yui/2.8.1/build/button/assets/skins/sam/split-button-arrow-active.png [deleted file]
lib/yui/2.8.1/build/button/assets/skins/sam/split-button-arrow-disabled.png [deleted file]
lib/yui/2.8.1/build/button/assets/skins/sam/split-button-arrow-focus.png [deleted file]
lib/yui/2.8.1/build/button/assets/skins/sam/split-button-arrow-hover.png [deleted file]
lib/yui/2.8.1/build/button/assets/skins/sam/split-button-arrow.png [deleted file]
lib/yui/2.8.1/build/button/button-debug.js [deleted file]
lib/yui/2.8.1/build/button/button-min.js [deleted file]
lib/yui/2.8.1/build/button/button.js [deleted file]
lib/yui/2.8.1/build/calendar/assets/calendar-core.css [deleted file]
lib/yui/2.8.1/build/calendar/assets/calendar.css [deleted file]
lib/yui/2.8.1/build/calendar/assets/calgrad.png [deleted file]
lib/yui/2.8.1/build/calendar/assets/callt.gif [deleted file]
lib/yui/2.8.1/build/calendar/assets/calrt.gif [deleted file]
lib/yui/2.8.1/build/calendar/assets/calx.gif [deleted file]
lib/yui/2.8.1/build/calendar/assets/skins/sam/calendar-skin.css [deleted file]
lib/yui/2.8.1/build/calendar/assets/skins/sam/calendar.css [deleted file]
lib/yui/2.8.1/build/calendar/calendar-debug.js [deleted file]
lib/yui/2.8.1/build/calendar/calendar-min.js [deleted file]
lib/yui/2.8.1/build/calendar/calendar.js [deleted file]
lib/yui/2.8.1/build/carousel/assets/ajax-loader.gif [deleted file]
lib/yui/2.8.1/build/carousel/assets/carousel-core.css [deleted file]
lib/yui/2.8.1/build/carousel/assets/skins/sam/ajax-loader.gif [deleted file]
lib/yui/2.8.1/build/carousel/assets/skins/sam/carousel-skin.css [deleted file]
lib/yui/2.8.1/build/carousel/assets/skins/sam/carousel.css [deleted file]
lib/yui/2.8.1/build/carousel/carousel-debug.js [deleted file]
lib/yui/2.8.1/build/carousel/carousel-min.js [deleted file]
lib/yui/2.8.1/build/carousel/carousel.js [deleted file]
lib/yui/2.8.1/build/charts/assets/charts.swf [deleted file]
lib/yui/2.8.1/build/charts/charts-debug.js [deleted file]
lib/yui/2.8.1/build/charts/charts-min.js [deleted file]
lib/yui/2.8.1/build/charts/charts.js [deleted file]
lib/yui/2.8.1/build/colorpicker/assets/colorpicker-core.css [deleted file]
lib/yui/2.8.1/build/colorpicker/assets/hue_thumb.png [deleted file]
lib/yui/2.8.1/build/colorpicker/assets/picker_mask.png [deleted file]
lib/yui/2.8.1/build/colorpicker/assets/picker_thumb.png [deleted file]
lib/yui/2.8.1/build/colorpicker/assets/skins/sam/colorpicker-skin.css [deleted file]
lib/yui/2.8.1/build/colorpicker/assets/skins/sam/colorpicker.css [deleted file]
lib/yui/2.8.1/build/colorpicker/assets/skins/sam/hue_bg.png [deleted file]
lib/yui/2.8.1/build/colorpicker/assets/skins/sam/picker_mask.png [deleted file]
lib/yui/2.8.1/build/colorpicker/colorpicker-debug.js [deleted file]
lib/yui/2.8.1/build/colorpicker/colorpicker-min.js [deleted file]
lib/yui/2.8.1/build/colorpicker/colorpicker.js [deleted file]
lib/yui/2.8.1/build/connection/connection-debug.js [deleted file]
lib/yui/2.8.1/build/connection/connection-min.js [deleted file]
lib/yui/2.8.1/build/connection/connection.js [deleted file]
lib/yui/2.8.1/build/connection/connection.swf [deleted file]
lib/yui/2.8.1/build/connection/connection_core-debug.js [deleted file]
lib/yui/2.8.1/build/connection/connection_core-min.js [deleted file]
lib/yui/2.8.1/build/connection/connection_core.js [deleted file]
lib/yui/2.8.1/build/container/assets/alrt16_1.gif [deleted file]
lib/yui/2.8.1/build/container/assets/blck16_1.gif [deleted file]
lib/yui/2.8.1/build/container/assets/close12_1.gif [deleted file]
lib/yui/2.8.1/build/container/assets/container-core.css [deleted file]
lib/yui/2.8.1/build/container/assets/container.css [deleted file]
lib/yui/2.8.1/build/container/assets/hlp16_1.gif [deleted file]
lib/yui/2.8.1/build/container/assets/info16_1.gif [deleted file]
lib/yui/2.8.1/build/container/assets/skins/sam/container-skin.css [deleted file]
lib/yui/2.8.1/build/container/assets/skins/sam/container.css [deleted file]
lib/yui/2.8.1/build/container/assets/tip16_1.gif [deleted file]
lib/yui/2.8.1/build/container/assets/warn16_1.gif [deleted file]
lib/yui/2.8.1/build/container/container-debug.js [deleted file]
lib/yui/2.8.1/build/container/container-min.js [deleted file]
lib/yui/2.8.1/build/container/container.js [deleted file]
lib/yui/2.8.1/build/container/container_core-debug.js [deleted file]
lib/yui/2.8.1/build/container/container_core-min.js [deleted file]
lib/yui/2.8.1/build/container/container_core.js [deleted file]
lib/yui/2.8.1/build/cookie/cookie-debug.js [deleted file]
lib/yui/2.8.1/build/cookie/cookie-min.js [deleted file]
lib/yui/2.8.1/build/cookie/cookie.js [deleted file]
lib/yui/2.8.1/build/datasource/datasource-debug.js [deleted file]
lib/yui/2.8.1/build/datasource/datasource-min.js [deleted file]
lib/yui/2.8.1/build/datasource/datasource.js [deleted file]
lib/yui/2.8.1/build/datatable/assets/datatable-core.css [deleted file]
lib/yui/2.8.1/build/datatable/assets/datatable.css [deleted file]
lib/yui/2.8.1/build/datatable/assets/skins/sam/datatable-skin.css [deleted file]
lib/yui/2.8.1/build/datatable/assets/skins/sam/datatable.css [deleted file]
lib/yui/2.8.1/build/datatable/assets/skins/sam/dt-arrow-dn.png [deleted file]
lib/yui/2.8.1/build/datatable/assets/skins/sam/dt-arrow-up.png [deleted file]
lib/yui/2.8.1/build/datatable/datatable-debug.js [deleted file]
lib/yui/2.8.1/build/datatable/datatable-min.js [deleted file]
lib/yui/2.8.1/build/datatable/datatable.js [deleted file]
lib/yui/2.8.1/build/datemath/datemath-debug.js [deleted file]
lib/yui/2.8.1/build/datemath/datemath-min.js [deleted file]
lib/yui/2.8.1/build/datemath/datemath.js [deleted file]
lib/yui/2.8.1/build/dom/dom-debug.js [deleted file]
lib/yui/2.8.1/build/dom/dom-min.js [deleted file]
lib/yui/2.8.1/build/dom/dom.js [deleted file]
lib/yui/2.8.1/build/dragdrop/dragdrop-debug.js [deleted file]
lib/yui/2.8.1/build/dragdrop/dragdrop-min.js [deleted file]
lib/yui/2.8.1/build/dragdrop/dragdrop.js [deleted file]
lib/yui/2.8.1/build/editor/assets/editor-core.css [deleted file]
lib/yui/2.8.1/build/editor/assets/simpleeditor-core.css [deleted file]
lib/yui/2.8.1/build/editor/assets/skins/sam/blankimage.png [deleted file]
lib/yui/2.8.1/build/editor/assets/skins/sam/editor-knob.gif [deleted file]
lib/yui/2.8.1/build/editor/assets/skins/sam/editor-skin.css [deleted file]
lib/yui/2.8.1/build/editor/assets/skins/sam/editor-sprite-active.gif [deleted file]
lib/yui/2.8.1/build/editor/assets/skins/sam/editor-sprite.gif [deleted file]
lib/yui/2.8.1/build/editor/assets/skins/sam/editor.css [deleted file]
lib/yui/2.8.1/build/editor/assets/skins/sam/simpleeditor-skin.css [deleted file]
lib/yui/2.8.1/build/editor/assets/skins/sam/simpleeditor.css [deleted file]
lib/yui/2.8.1/build/editor/editor-debug.js [deleted file]
lib/yui/2.8.1/build/editor/editor-min.js [deleted file]
lib/yui/2.8.1/build/editor/editor.js [deleted file]
lib/yui/2.8.1/build/editor/simpleeditor-debug.js [deleted file]
lib/yui/2.8.1/build/editor/simpleeditor-min.js [deleted file]
lib/yui/2.8.1/build/editor/simpleeditor.js [deleted file]
lib/yui/2.8.1/build/element-delegate/element-delegate-debug.js [deleted file]
lib/yui/2.8.1/build/element-delegate/element-delegate-min.js [deleted file]
lib/yui/2.8.1/build/element-delegate/element-delegate.js [deleted file]
lib/yui/2.8.1/build/element/element-debug.js [deleted file]
lib/yui/2.8.1/build/element/element-min.js [deleted file]
lib/yui/2.8.1/build/element/element.js [deleted file]
lib/yui/2.8.1/build/event-delegate/event-delegate-debug.js [deleted file]
lib/yui/2.8.1/build/event-delegate/event-delegate-min.js [deleted file]
lib/yui/2.8.1/build/event-delegate/event-delegate.js [deleted file]
lib/yui/2.8.1/build/event-mouseenter/event-mouseenter-debug.js [deleted file]
lib/yui/2.8.1/build/event-mouseenter/event-mouseenter-min.js [deleted file]
lib/yui/2.8.1/build/event-mouseenter/event-mouseenter.js [deleted file]
lib/yui/2.8.1/build/event-simulate/event-simulate-debug.js [deleted file]
lib/yui/2.8.1/build/event-simulate/event-simulate-min.js [deleted file]
lib/yui/2.8.1/build/event-simulate/event-simulate.js [deleted file]
lib/yui/2.8.1/build/event/event-debug.js [deleted file]
lib/yui/2.8.1/build/event/event-min.js [deleted file]
lib/yui/2.8.1/build/event/event.js [deleted file]
lib/yui/2.8.1/build/fonts/fonts-min.css [deleted file]
lib/yui/2.8.1/build/fonts/fonts.css [deleted file]
lib/yui/2.8.1/build/get/get-debug.js [deleted file]
lib/yui/2.8.1/build/get/get-min.js [deleted file]
lib/yui/2.8.1/build/get/get.js [deleted file]
lib/yui/2.8.1/build/grids/grids-min.css [deleted file]
lib/yui/2.8.1/build/grids/grids.css [deleted file]
lib/yui/2.8.1/build/history/assets/blank.html [deleted file]
lib/yui/2.8.1/build/history/history-debug.js [deleted file]
lib/yui/2.8.1/build/history/history-min.js [deleted file]
lib/yui/2.8.1/build/history/history.js [deleted file]
lib/yui/2.8.1/build/imagecropper/assets/imagecropper-core.css [deleted file]
lib/yui/2.8.1/build/imagecropper/assets/skins/sam/imagecropper-skin.css [deleted file]
lib/yui/2.8.1/build/imagecropper/assets/skins/sam/imagecropper.css [deleted file]
lib/yui/2.8.1/build/imagecropper/imagecropper-debug.js [deleted file]
lib/yui/2.8.1/build/imagecropper/imagecropper-min.js [deleted file]
lib/yui/2.8.1/build/imagecropper/imagecropper.js [deleted file]
lib/yui/2.8.1/build/imageloader/imageloader-debug.js [deleted file]
lib/yui/2.8.1/build/imageloader/imageloader-min.js [deleted file]
lib/yui/2.8.1/build/imageloader/imageloader.js [deleted file]
lib/yui/2.8.1/build/json/json-debug.js [deleted file]
lib/yui/2.8.1/build/json/json-min.js [deleted file]
lib/yui/2.8.1/build/json/json.js [deleted file]
lib/yui/2.8.1/build/layout/assets/layout-core.css [deleted file]
lib/yui/2.8.1/build/layout/assets/skins/sam/layout-skin.css [deleted file]
lib/yui/2.8.1/build/layout/assets/skins/sam/layout.css [deleted file]
lib/yui/2.8.1/build/layout/assets/skins/sam/layout_sprite.png [deleted file]
lib/yui/2.8.1/build/layout/layout-debug.js [deleted file]
lib/yui/2.8.1/build/layout/layout-min.js [deleted file]
lib/yui/2.8.1/build/layout/layout.js [deleted file]
lib/yui/2.8.1/build/logger/assets/logger-core.css [deleted file]
lib/yui/2.8.1/build/logger/assets/logger.css [deleted file]
lib/yui/2.8.1/build/logger/assets/skins/sam/logger-skin.css [deleted file]
lib/yui/2.8.1/build/logger/assets/skins/sam/logger.css [deleted file]
lib/yui/2.8.1/build/logger/logger-debug.js [deleted file]
lib/yui/2.8.1/build/logger/logger-min.js [deleted file]
lib/yui/2.8.1/build/logger/logger.js [deleted file]
lib/yui/2.8.1/build/menu/assets/menu-core.css [deleted file]
lib/yui/2.8.1/build/menu/assets/menu.css [deleted file]
lib/yui/2.8.1/build/menu/assets/menu_down_arrow.png [deleted file]
lib/yui/2.8.1/build/menu/assets/menu_down_arrow_disabled.png [deleted file]
lib/yui/2.8.1/build/menu/assets/menu_up_arrow.png [deleted file]
lib/yui/2.8.1/build/menu/assets/menu_up_arrow_disabled.png [deleted file]
lib/yui/2.8.1/build/menu/assets/menubaritem_submenuindicator.png [deleted file]
lib/yui/2.8.1/build/menu/assets/menubaritem_submenuindicator_disabled.png [deleted file]
lib/yui/2.8.1/build/menu/assets/menubaritem_submenuindicator_selected.png [deleted file]
lib/yui/2.8.1/build/menu/assets/menuitem_checkbox.png [deleted file]
lib/yui/2.8.1/build/menu/assets/menuitem_checkbox_disabled.png [deleted file]
lib/yui/2.8.1/build/menu/assets/menuitem_checkbox_selected.png [deleted file]
lib/yui/2.8.1/build/menu/assets/menuitem_submenuindicator.png [deleted file]
lib/yui/2.8.1/build/menu/assets/menuitem_submenuindicator_disabled.png [deleted file]
lib/yui/2.8.1/build/menu/assets/menuitem_submenuindicator_selected.png [deleted file]
lib/yui/2.8.1/build/menu/assets/skins/sam/menu-skin.css [deleted file]
lib/yui/2.8.1/build/menu/assets/skins/sam/menu.css [deleted file]
lib/yui/2.8.1/build/menu/assets/skins/sam/menubaritem_submenuindicator.png [deleted file]
lib/yui/2.8.1/build/menu/assets/skins/sam/menubaritem_submenuindicator_disabled.png [deleted file]
lib/yui/2.8.1/build/menu/assets/skins/sam/menuitem_checkbox.png [deleted file]
lib/yui/2.8.1/build/menu/assets/skins/sam/menuitem_checkbox_disabled.png [deleted file]
lib/yui/2.8.1/build/menu/assets/skins/sam/menuitem_submenuindicator.png [deleted file]
lib/yui/2.8.1/build/menu/assets/skins/sam/menuitem_submenuindicator_disabled.png [deleted file]
lib/yui/2.8.1/build/menu/menu-debug.js [deleted file]
lib/yui/2.8.1/build/menu/menu-min.js [deleted file]
lib/yui/2.8.1/build/menu/menu.js [deleted file]
lib/yui/2.8.1/build/paginator/assets/paginator-core.css [deleted file]
lib/yui/2.8.1/build/paginator/assets/skins/sam/paginator-skin.css [deleted file]
lib/yui/2.8.1/build/paginator/assets/skins/sam/paginator.css [deleted file]
lib/yui/2.8.1/build/paginator/paginator-debug.js [deleted file]
lib/yui/2.8.1/build/paginator/paginator-min.js [deleted file]
lib/yui/2.8.1/build/paginator/paginator.js [deleted file]
lib/yui/2.8.1/build/profiler/profiler-debug.js [deleted file]
lib/yui/2.8.1/build/profiler/profiler-min.js [deleted file]
lib/yui/2.8.1/build/profiler/profiler.js [deleted file]
lib/yui/2.8.1/build/profilerviewer/assets/profilerviewer-core.css [deleted file]
lib/yui/2.8.1/build/profilerviewer/assets/skins/sam/asc.gif [deleted file]
lib/yui/2.8.1/build/profilerviewer/assets/skins/sam/desc.gif [deleted file]
lib/yui/2.8.1/build/profilerviewer/assets/skins/sam/header_background.png [deleted file]
lib/yui/2.8.1/build/profilerviewer/assets/skins/sam/profilerviewer-skin.css [deleted file]
lib/yui/2.8.1/build/profilerviewer/assets/skins/sam/profilerviewer.css [deleted file]
lib/yui/2.8.1/build/profilerviewer/assets/skins/sam/wait.gif [deleted file]
lib/yui/2.8.1/build/profilerviewer/profilerviewer-debug.js [deleted file]
lib/yui/2.8.1/build/profilerviewer/profilerviewer-min.js [deleted file]
lib/yui/2.8.1/build/profilerviewer/profilerviewer.js [deleted file]
lib/yui/2.8.1/build/progressbar/assets/progressbar-core.css [deleted file]
lib/yui/2.8.1/build/progressbar/assets/skins/sam/back-h.png [deleted file]
lib/yui/2.8.1/build/progressbar/assets/skins/sam/back-v.png [deleted file]
lib/yui/2.8.1/build/progressbar/assets/skins/sam/bar-h.png [deleted file]
lib/yui/2.8.1/build/progressbar/assets/skins/sam/bar-v.png [deleted file]
lib/yui/2.8.1/build/progressbar/assets/skins/sam/progressbar-skin.css [deleted file]
lib/yui/2.8.1/build/progressbar/assets/skins/sam/progressbar.css [deleted file]
lib/yui/2.8.1/build/progressbar/progressbar-debug.js [deleted file]
lib/yui/2.8.1/build/progressbar/progressbar-min.js [deleted file]
lib/yui/2.8.1/build/progressbar/progressbar.js [deleted file]
lib/yui/2.8.1/build/reset-fonts-grids/reset-fonts-grids.css [deleted file]
lib/yui/2.8.1/build/reset-fonts/reset-fonts.css [deleted file]
lib/yui/2.8.1/build/reset/reset-min.css [deleted file]
lib/yui/2.8.1/build/reset/reset.css [deleted file]
lib/yui/2.8.1/build/resize/assets/resize-core.css [deleted file]
lib/yui/2.8.1/build/resize/assets/skins/sam/layout_sprite.png [deleted file]
lib/yui/2.8.1/build/resize/assets/skins/sam/resize-skin.css [deleted file]
lib/yui/2.8.1/build/resize/assets/skins/sam/resize.css [deleted file]
lib/yui/2.8.1/build/resize/resize-debug.js [deleted file]
lib/yui/2.8.1/build/resize/resize-min.js [deleted file]
lib/yui/2.8.1/build/resize/resize.js [deleted file]
lib/yui/2.8.1/build/selector/selector-debug.js [deleted file]
lib/yui/2.8.1/build/selector/selector-min.js [deleted file]
lib/yui/2.8.1/build/selector/selector.js [deleted file]
lib/yui/2.8.1/build/slider/assets/bg-fader.gif [deleted file]
lib/yui/2.8.1/build/slider/assets/bg-h.gif [deleted file]
lib/yui/2.8.1/build/slider/assets/bg-v-e.gif [deleted file]
lib/yui/2.8.1/build/slider/assets/bg-v.gif [deleted file]
lib/yui/2.8.1/build/slider/assets/left-thumb.png [deleted file]
lib/yui/2.8.1/build/slider/assets/right-thumb.png [deleted file]
lib/yui/2.8.1/build/slider/assets/skins/sam/bg-h.gif [deleted file]
lib/yui/2.8.1/build/slider/assets/skins/sam/bg-v.gif [deleted file]
lib/yui/2.8.1/build/slider/assets/skins/sam/slider-skin.css [deleted file]
lib/yui/2.8.1/build/slider/assets/skins/sam/slider.css [deleted file]
lib/yui/2.8.1/build/slider/assets/slider-core.css [deleted file]
lib/yui/2.8.1/build/slider/assets/slider-skin.css [deleted file]
lib/yui/2.8.1/build/slider/assets/thumb-bar.gif [deleted file]
lib/yui/2.8.1/build/slider/assets/thumb-e.gif [deleted file]
lib/yui/2.8.1/build/slider/assets/thumb-fader.gif [deleted file]
lib/yui/2.8.1/build/slider/assets/thumb-n.gif [deleted file]
lib/yui/2.8.1/build/slider/assets/thumb-s.gif [deleted file]
lib/yui/2.8.1/build/slider/assets/thumb-w.gif [deleted file]
lib/yui/2.8.1/build/slider/slider-debug.js [deleted file]
lib/yui/2.8.1/build/slider/slider-min.js [deleted file]
lib/yui/2.8.1/build/slider/slider.js [deleted file]
lib/yui/2.8.1/build/storage/storage-debug.js [deleted file]
lib/yui/2.8.1/build/storage/storage-min.js [deleted file]
lib/yui/2.8.1/build/storage/storage.js [deleted file]
lib/yui/2.8.1/build/stylesheet/stylesheet-debug.js [deleted file]
lib/yui/2.8.1/build/stylesheet/stylesheet-min.js [deleted file]
lib/yui/2.8.1/build/stylesheet/stylesheet.js [deleted file]
lib/yui/2.8.1/build/swf/swf-debug.js [deleted file]
lib/yui/2.8.1/build/swf/swf-min.js [deleted file]
lib/yui/2.8.1/build/swf/swf.js [deleted file]
lib/yui/2.8.1/build/swfdetect/swfdetect-debug.js [deleted file]
lib/yui/2.8.1/build/swfdetect/swfdetect-min.js [deleted file]
lib/yui/2.8.1/build/swfdetect/swfdetect.js [deleted file]
lib/yui/2.8.1/build/swfstore/swf.js [deleted file]
lib/yui/2.8.1/build/swfstore/swfstore-debug.js [deleted file]
lib/yui/2.8.1/build/swfstore/swfstore-min.js [deleted file]
lib/yui/2.8.1/build/swfstore/swfstore.js [deleted file]
lib/yui/2.8.1/build/swfstore/swfstore.swf [deleted file]
lib/yui/2.8.1/build/tabview/assets/border_tabs.css [deleted file]
lib/yui/2.8.1/build/tabview/assets/loading.gif [deleted file]
lib/yui/2.8.1/build/tabview/assets/skin-sam.css [deleted file]
lib/yui/2.8.1/build/tabview/assets/skins/sam/tabview-skin.css [deleted file]
lib/yui/2.8.1/build/tabview/assets/skins/sam/tabview.css [deleted file]
lib/yui/2.8.1/build/tabview/assets/tabview-core.css [deleted file]
lib/yui/2.8.1/build/tabview/assets/tabview.css [deleted file]
lib/yui/2.8.1/build/tabview/tabview-debug.js [deleted file]
lib/yui/2.8.1/build/tabview/tabview-min.js [deleted file]
lib/yui/2.8.1/build/tabview/tabview.js [deleted file]
lib/yui/2.8.1/build/treeview/assets/skins/sam/check0.gif [deleted file]
lib/yui/2.8.1/build/treeview/assets/skins/sam/check1.gif [deleted file]
lib/yui/2.8.1/build/treeview/assets/skins/sam/check2.gif [deleted file]
lib/yui/2.8.1/build/treeview/assets/skins/sam/loading.gif [deleted file]
lib/yui/2.8.1/build/treeview/assets/skins/sam/treeview-loading.gif [deleted file]
lib/yui/2.8.1/build/treeview/assets/skins/sam/treeview-skin.css [deleted file]
lib/yui/2.8.1/build/treeview/assets/skins/sam/treeview-sprite.gif [deleted file]
lib/yui/2.8.1/build/treeview/assets/skins/sam/treeview.css [deleted file]
lib/yui/2.8.1/build/treeview/assets/treeview-core.css [deleted file]
lib/yui/2.8.1/build/treeview/treeview-debug.js [deleted file]
lib/yui/2.8.1/build/treeview/treeview-min.js [deleted file]
lib/yui/2.8.1/build/treeview/treeview.js [deleted file]
lib/yui/2.8.1/build/uploader/assets/uploader.swf [deleted file]
lib/yui/2.8.1/build/uploader/uploader-debug.js [deleted file]
lib/yui/2.8.1/build/uploader/uploader-min.js [deleted file]
lib/yui/2.8.1/build/uploader/uploader.js [deleted file]
lib/yui/2.8.1/build/utilities/utilities.js [deleted file]
lib/yui/2.8.1/build/yahoo-dom-event/yahoo-dom-event.js [deleted file]
lib/yui/2.8.1/build/yahoo/yahoo-debug.js [deleted file]
lib/yui/2.8.1/build/yahoo/yahoo-min.js [deleted file]
lib/yui/2.8.1/build/yahoo/yahoo.js [deleted file]
lib/yui/2.8.1/build/yuiloader-dom-event/yuiloader-dom-event.js [deleted file]
lib/yui/2.8.1/build/yuiloader/yuiloader-debug.js [deleted file]
lib/yui/2.8.1/build/yuiloader/yuiloader-min.js [deleted file]
lib/yui/2.8.1/build/yuiloader/yuiloader.js [deleted file]
lib/yui/2.8.1/build/yuitest/assets/skins/sam/yuitest-skin.css [deleted file]
lib/yui/2.8.1/build/yuitest/assets/skins/sam/yuitest.css [deleted file]
lib/yui/2.8.1/build/yuitest/assets/testlogger.css [deleted file]
lib/yui/2.8.1/build/yuitest/assets/yuitest-core.css [deleted file]
lib/yui/2.8.1/build/yuitest/yuitest-debug.js [deleted file]
lib/yui/2.8.1/build/yuitest/yuitest-min.js [deleted file]
lib/yui/2.8.1/build/yuitest/yuitest.js [deleted file]
lib/yui/2.8.1/build/yuitest/yuitest_core-debug.js [deleted file]
lib/yui/2.8.1/build/yuitest/yuitest_core-min.js [deleted file]
lib/yui/2.8.1/build/yuitest/yuitest_core.js [deleted file]
login/change_password.php
login/index.php
login/signup_form.php
message/index.php
message/lib.php
message/output/email/message_output_email.php
message/output/jabber/message_output_jabber.php
message/search.html
message/search_advanced.html
mnet/publickey.php
mnet/service/enrol/course.php
mnet/service/enrol/index.php
mnet/service/enrol/lang/en/mnetservice_enrol.php
mnet/service/enrol/locallib.php
mod/assignment/db/upgrade.php
mod/assignment/lib.php
mod/assignment/type/online/assignment.class.php
mod/chat/chatd.php
mod/chat/gui_basic/index.php
mod/chat/gui_header_js/index.php
mod/chat/gui_sockets/index.php
mod/data/css.php
mod/data/db/upgrade.php
mod/data/edit.php
mod/data/export_form.php
mod/data/import.php
mod/data/js.php
mod/data/lang/en/data.php
mod/data/lib.php
mod/data/preset_form.php
mod/data/rsslib.php
mod/data/templates.php
mod/data/view.php
mod/feedback/analysis_to_excel.php
mod/feedback/item/info/lib.php
mod/feedback/item/label/lib.php
mod/feedback/item/multichoice/lib.php
mod/feedback/item/multichoicerated/lib.php
mod/feedback/item/textarea/lib.php
mod/feedback/item/textfield/lib.php
mod/feedback/lang/en/feedback.php
mod/feedback/lib.php
mod/feedback/show_entries.php
mod/folder/db/upgradelib.php
mod/forum/db/upgrade.php
mod/forum/forum.js
mod/forum/index.php
mod/forum/lang/en/forum.php
mod/forum/lib.php
mod/forum/rsslib.php
mod/forum/subscribe.php
mod/forum/user.php
mod/glossary/db/upgrade.php
mod/glossary/import.php
mod/glossary/lang/en/glossary.php
mod/glossary/lib.php
mod/glossary/rsslib.php
mod/glossary/showentry_ajax.php
mod/glossary/sql.php
mod/glossary/view.php
mod/imscp/db/upgradelib.php
mod/label/lib.php
mod/lesson/backup/moodle2/backup_lesson_stepslib.php
mod/lesson/backup/moodle2/restore_lesson_stepslib.php
mod/lesson/editpage.php
mod/lesson/essay.php
mod/lesson/importppt.php
mod/lesson/lib.php
mod/lesson/locallib.php
mod/lesson/pagetypes/essay.php
mod/lesson/pagetypes/matching.php
mod/lesson/pagetypes/multichoice.php
mod/lesson/pagetypes/numerical.php
mod/lesson/pagetypes/shortanswer.php
mod/lesson/pagetypes/truefalse.php
mod/lesson/renderer.php
mod/lesson/report.php
mod/page/db/upgradelib.php
mod/quiz/attemptlib.php
mod/quiz/backup/moodle2/backup_quiz_stepslib.php
mod/quiz/backup/moodle2/restore_quiz_stepslib.php
mod/quiz/comment.php
mod/quiz/db/upgrade.php
mod/quiz/index.php
mod/quiz/lang/en/quiz.php
mod/quiz/lib.php
mod/quiz/locallib.php
mod/quiz/module.js
mod/quiz/overrides.php
mod/quiz/report/overview/lang/en/quiz_overview.php
mod/quiz/report/overview/overview_table.php
mod/quiz/report/overview/report.php
mod/quiz/report/reportlib.php
mod/quiz/report/responses/lang/en/quiz_responses.php
mod/quiz/report/responses/report.php
mod/quiz/report/statistics/lang/en/quiz_statistics.php
mod/quiz/review.php
mod/quiz/reviewquestion.php
mod/quiz/version.php
mod/quiz/view.php
mod/resource/db/upgrade.php
mod/resource/db/upgradelib.php
mod/resource/lang/en/resource.php
mod/resource/view.php
mod/scorm/datamodels/aicclib.php
mod/scorm/datamodels/scorm_12.js.php
mod/scorm/datamodels/scorm_12lib.php
mod/scorm/datamodels/scorm_13lib.php
mod/scorm/db/install.xml
mod/scorm/db/upgrade.php
mod/scorm/lang/en/scorm.php
mod/scorm/lib.php
mod/scorm/locallib.php
mod/scorm/module.js
mod/scorm/player.php
mod/scorm/prereqs.php
mod/scorm/report.php
mod/scorm/settings.php
mod/scorm/styles.css
mod/scorm/version.php [changed mode: 0755->0644]
mod/scorm/view.php
mod/survey/lib.php
mod/url/db/upgradelib.php
mod/wiki/db/migration/lib.php
mod/wiki/db/upgrade.php
mod/wiki/db/upgradelib.php
mod/wiki/diff/difflib.php
mod/wiki/lang/en/wiki.php
mod/wiki/locallib.php
mod/wiki/parser/markups/nwiki.php
mod/wiki/version.php
mod/workshop/allocation/manual/lib.php
mod/workshop/allocation/manual/styles.css
mod/workshop/allocation/random/lang/en/workshopallocation_random.php
mod/workshop/allocation/random/lib.php
mod/workshop/allocation/random/settings_form.php
mod/workshop/allocation/random/styles.css [new file with mode: 0644]
mod/workshop/db/upgrade.php
mod/workshop/db/upgradelib.php
mod/workshop/form/accumulative/backup/moodle2/restore_workshopform_accumulative_subplugin.class.php
mod/workshop/form/accumulative/db/upgradelib.php
mod/workshop/form/comments/backup/moodle2/restore_workshopform_comments_subplugin.class.php
mod/workshop/form/comments/db/upgradelib.php
mod/workshop/form/numerrors/backup/moodle2/restore_workshopform_numerrors_subplugin.class.php
mod/workshop/form/numerrors/db/upgradelib.php
mod/workshop/form/numerrors/lib.php
mod/workshop/form/rubric/backup/moodle2/restore_workshopform_rubric_subplugin.class.php
mod/workshop/form/rubric/db/upgradelib.php
mod/workshop/lib.php
mod/workshop/locallib.php
mod/workshop/version.php
portfolio/boxnet/lang/en/portfolio_boxnet.php
portfolio/flickr/lang/en/portfolio_flickr.php
portfolio/flickr/lib.php
portfolio/mahara/lang/en/portfolio_mahara.php
question/format/blackboard_six/format.php
question/format/gift/format.php
question/format/gift/simpletest/testgiftformat.php
question/format/multianswer/lang/en/qformat_multianswer.php
question/qengine.js
question/type/calculated/lang/en/qtype_calculated.php
question/type/calculatedmulti/lang/en/qtype_calculatedmulti.php
question/type/calculatedsimple/edit_calculatedsimple_form.php
question/type/calculatedsimple/lang/en/qtype_calculatedsimple.php
question/type/description/questiontype.php
question/type/match/backup/moodle2/restore_qtype_match_plugin.class.php
question/type/multianswer/edit_multianswer_form.php
question/type/multianswer/lang/en/qtype_multianswer.php
question/type/multianswer/questiontype.php
question/type/multichoice/lang/en/qtype_multichoice.php
question/type/numerical/questiontype.php
question/type/questiontype.php
question/type/random/backup/moodle2/restore_qtype_random_plugin.class.php
question/type/random/questiontype.php
rating/index.php
rating/lib.php
rating/rate_ajax.php
repository/alfresco/lib.php
repository/boxnet/lang/en/repository_boxnet.php
repository/dropbox/lang/en/repository_dropbox.php
repository/flickr_public/lang/en/repository_flickr_public.php
repository/merlot/lang/en/repository_merlot.php
repository/repository_ajax.php
repository/upload/lib.php
repository/url/lang/en/repository_url.php
tag/coursetags_more.php
tag/edit.php
tag/lib.php
tag/tag_autocomplete.php
theme/arialist/lang/en/theme_arialist.php
theme/arialist/style/core.css
theme/base/style/course.css
theme/base/style/grade.css
theme/base/style/message.css
theme/binarius/style/core.css
theme/brick/lang/en/theme_brick.php
theme/fusion/lang/en/theme_fusion.php
theme/javascript.php
theme/magazine/style/core.css
theme/nonzero/lang/en/theme_nonzero.php
theme/nonzero/style/pagelayout.css
theme/overlay/lang/en/theme_overlay.php
theme/overlay/style/core.css
theme/overlay/style/pagelayout.css
theme/sky_high/lang/en/theme_sky_high.php
theme/splash/lang/en/theme_splash.php
theme/splash/style/blue.css
theme/splash/style/green.css
theme/standard/style/grade.css
theme/styles.php
theme/styles_debug.php
theme/yui_combo.php
user/addnote.php
user/editlib.php
user/filters/courserole.php
user/index.php
user/messageselect.php
user/portfolio.php
user/portfoliologs.php
user/profile.php
user/profile/lib.php
user/selector/lib.php
user/selector/search.php
user/view.php
version.php
webservice/rest/locallib.php
webservice/soap/locallib.php

index 8126c5a..dc80c7a 100644 (file)
@@ -92,7 +92,7 @@ mtrace("Server Time: ".date('r',$timenow)."\n\n");
 // Run automated backups if required.
 require_once($CFG->dirroot.'/backup/util/includes/backup_includes.php');
 require_once($CFG->dirroot.'/backup/util/helper/backup_cron_helper.class.php');
-backup_cron_automated_helper::run_automated_backup(backup_cron_automated_helper::RUN_IMMEDIATLY);
+backup_cron_automated_helper::run_automated_backup(backup_cron_automated_helper::RUN_IMMEDIATELY);
 
 mtrace("Automated cron backups completed correctly");
 
index 6d1b819..de868b3 100644 (file)
@@ -26,7 +26,7 @@ function dbtransfer_export_xml_database($description, $mdb) {
 
     session_get_instance()->write_close(); // release session
 
-    header('Content-Type: application/xhtml+xml');
+    header('Content-Type: application/xhtml+xml; charset=utf-8');
     header('Content-Disposition: attachment; filename=database.xml');
     header('Expires: 0');
     header('Cache-Control: must-revalidate,post-check=0,pre-check=0');
index 3ecb952..71e22bd 100644 (file)
             $settings = "";
         }
 
-        $count = $DB->count_records_select($module->name, "course<>0");
+        try {
+            $count = $DB->count_records_select($module->name, "course<>0");
+        } catch (dml_exception $e) {
+            $count = -1;
+        }
         if ($count>0) {
             $countlink = "<a href=\"{$CFG->wwwroot}/course/search.php?modulelist=$module->name" .
                 "&amp;sesskey=".sesskey()."\" title=\"$strshowmodulecourse\">$count</a>";
-        }
-        else {
+        } else if ($count < 0) {
+            $countlink = get_string('error');
+        } else {
             $countlink = "$count";
         }
 
index d25c709..77c2219 100644 (file)
@@ -56,35 +56,34 @@ foreach ($tables as $table) {
             if (in_array($data->type, array('text','mediumtext','longtext','varchar'))) {  // Text stuff only
                 // first find candidate records
                 $sql = "SELECT id, $column FROM $fulltable WHERE $column LIKE '%</lang>%' OR $column LIKE '%<span lang=%'";
-                if ($rs = $DB->get_recordset_sql($sql)) {
-                    foreach ($rs as $data) {
-                        $text = $data->$column;
-                        $id   = $data->id;
-                        if ($i % 600 == 0) {
-                            echo '<br />';
-                        }
-                        if ($i % 10 == 0) {
-                            echo '.';
-                        }
-                        $i++;
-
-                        if (empty($text) or is_numeric($text)) {
-                            continue; // nothing to do
-                        }
-
-                        $search = '/(<(?:lang|span) lang="[a-zA-Z0-9_-]*".*?>.+?<\/(?:lang|span)>)(\s*<(?:lang|span) lang="[a-zA-Z0-9_-]*".*?>.+?<\/(?:lang|span)>)+/is';
-                        $newtext = preg_replace_callback($search, 'multilangupgrade_impl', $text);
-
-                        if (is_null($newtext)) {
-                            continue; // regex error
-                        }
-
-                        if ($newtext != $text) {
-                            $DB->execute("UPDATE $fulltable SET $column=? WHERE id=?", array($newtext, $id));
-                        }
+                $rs = $DB->get_recordset_sql($sql);
+                foreach ($rs as $data) {
+                    $text = $data->$column;
+                    $id   = $data->id;
+                    if ($i % 600 == 0) {
+                        echo '<br />';
+                    }
+                    if ($i % 10 == 0) {
+                        echo '.';
+                    }
+                    $i++;
+
+                    if (empty($text) or is_numeric($text)) {
+                        continue; // nothing to do
+                    }
+
+                    $search = '/(<(?:lang|span) lang="[a-zA-Z0-9_-]*".*?>.+?<\/(?:lang|span)>)(\s*<(?:lang|span) lang="[a-zA-Z0-9_-]*".*?>.+?<\/(?:lang|span)>)+/is';
+                    $newtext = preg_replace_callback($search, 'multilangupgrade_impl', $text);
+
+                    if (is_null($newtext)) {
+                        continue; // regex error
+                    }
+
+                    if ($newtext != $text) {
+                        $DB->execute("UPDATE $fulltable SET $column=? WHERE id=?", array($newtext, $id));
                     }
-                    $rs->close();
                 }
+                $rs->close();
             }
         }
     }
index 5536540..33a70d8 100644 (file)
         }
 
         // Settings link, if available.
-        if (file_exists($qtype->plugin_dir() . '/settings.php')) {
+        $settings = admin_get_root()->locate('qtypesetting' . $qtypename);
+        if ($settings instanceof admin_externalpage) {
+            $row[] = '<a href="' . $settings->url .
+                    '">' . get_string('settings') . '</a>';
+        } else if ($settings instanceof admin_settingpage) {
             $row[] = '<a href="' . admin_url('settings.php?section=qtypesetting' . $qtypename) .
                     '">' . get_string('settings') . '</a>';
         } else {
index 8fc5dd2..4179d79 100644 (file)
@@ -84,6 +84,33 @@ class registration_manager {
         }
     }
 
+    /**
+     * Return the site secret for a given hub
+     * site identifier is assigned to Mooch
+     * each hub has a unique and personal site secret.
+     * @param string $huburl
+     * @return string site secret
+     */
+    public function get_site_secret_for_hub($huburl) {
+        global $DB;
+
+        $existingregistration = $DB->get_record('registration_hubs',
+                    array('huburl' => $huburl));
+
+        if (!empty($existingregistration)) {
+            return $existingregistration->secret;
+        }
+
+        if ($huburl == HUB_MOODLEORGHUBURL) {
+            $siteidentifier =  get_site_identifier();
+        } else {
+            $siteidentifier = random_string(32) . $_SERVER['HTTP_HOST'];
+        }
+
+        return $siteidentifier;
+
+    }
+
     /**
      * When the site register on a hub, he must call this function
      * @param object $hub where the site is registered on
index 0454bc3..eac6400 100644 (file)
@@ -49,21 +49,6 @@ if (!confirm_sesskey()) {
     throw new moodle_exception('missingparameter');
 }
 
-/* TO DO
-  if DB config plugin table is not good for dealing with token reference and token confirmation
-  => create other DB table
-  -----------------------------------------------------------------------------
-  Local Type | Token | Local WS | Remote Type | Remote URL        | Confirmed
-  -----------------------------------------------------------------------------
-  HUB        4er4e   server    HUB-DIRECTORY  http...moodle.org      Yes
-  HUB        73j53   client    HUB-DIRECTORY  http...moodle.org      Yes
-  SITE       dfsd7   server    HUB            http...hub             Yes
-  SITE       fd8fd   client    HUB            http...hub             Yes
-  HUB        ds78s   server    SITE           http...site.com        Yes
-  HUB-DIR.   d7d8s   server    HUB            http...hub             Yes
-  -----------------------------------------------------------------------------
- */
-
 $registrationmanager = new registration_manager();
 
 $registeredhub = $registrationmanager->get_registeredhub($huburl);
@@ -132,7 +117,8 @@ if (!empty($fromform) and empty($update) and confirm_sesskey()) {
         if (empty($unconfirmedhub)) {
             //we save the token into the communication table in order to have a reference
             $unconfirmedhub = new stdClass();
-            $unconfirmedhub->token = get_site_identifier();
+            $unconfirmedhub->token = $registrationmanager->get_site_secret_for_hub($huburl);
+            $unconfirmedhub->secret = $unconfirmedhub->token;
             $unconfirmedhub->huburl = $huburl;
             $unconfirmedhub->hubname = $hubname;
             $unconfirmedhub->confirmed = 0;
diff --git a/admin/registration/renewregistration.php b/admin/registration/renewregistration.php
new file mode 100644 (file)
index 0000000..ec9fce2
--- /dev/null
@@ -0,0 +1,76 @@
+<?php
+
+///////////////////////////////////////////////////////////////////////////
+//                                                                       //
+// This file is part of Moodle - http://moodle.org/                      //
+// Moodle - Modular Object-Oriented Dynamic Learning Environment         //
+//                                                                       //
+// 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/>.       //
+//                                                                       //
+///////////////////////////////////////////////////////////////////////////
+
+/*
+ * @package    moodle
+ * @subpackage registration
+ * @author     Jerome Mouneyrac <jerome@mouneyrac.com>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL
+ * @copyright  (C) 1999 onwards Martin Dougiamas  http://dougiamas.com
+ *
+ * The administrator is redirect to this page from the hub to renew a registration
+ * process because
+ */
+
+require('../../config.php');
+require_once($CFG->libdir . '/adminlib.php');
+require_once($CFG->dirroot . '/' . $CFG->admin . '/registration/lib.php');
+
+$url = optional_param('url', '', PARAM_URL);
+$hubname = optional_param('hubname', '', PARAM_TEXT);
+$token = optional_param('token', '', PARAM_TEXT);
+
+admin_externalpage_setup('registrationindex');
+
+//check that we are waiting a confirmation from this hub, and check that the token is correct
+$registrationmanager = new registration_manager();
+$registeredhub = $registrationmanager->get_unconfirmedhub($url);
+if (!empty($registeredhub) and $registeredhub->token == $token) {
+
+    echo $OUTPUT->header();
+    echo $OUTPUT->heading(get_string('renewregistration', 'hub'), 3, 'main');
+    $hublink = html_writer::tag('a', $hubname, array('href' => $url));
+
+    $registrationmanager->delete_registeredhub($url);
+
+    //Mooch case, need to recreate the siteidentifier
+    if ($url == HUB_MOODLEORGHUBURL) {
+        $CFG->siteidentifier = null;
+        get_site_identifier();
+    }
+
+    $deletedregmsg = get_string('previousregistrationdeleted', 'hub', $hublink);
+
+    $button = new single_button(new moodle_url('/admin/registration/index.php'),
+                    get_string('restartregistration', 'hub'));
+    $button->class = 'restartregbutton';
+
+    echo html_writer::tag('div', $deletedregmsg . $OUTPUT->render($button),
+            array('class' => 'mdl-align'));
+
+    echo $OUTPUT->footer();
+} else {
+    throw new moodle_exception('wrongtoken', 'hub',
+            $CFG->wwwroot . '/' . $CFG->admin . '/registration/index.php');
+}
+
+
index da91b61..21d980f 100644 (file)
@@ -8,9 +8,6 @@
     $time       = optional_param('time', 0, PARAM_INT);
     $numcourses = optional_param('numcourses', 20, PARAM_INT);
 
-    admin_externalpage_setup('reportcourseoverview');
-    echo $OUTPUT->header();
-
     if (empty($CFG->enablestats)) {
         if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) {
             redirect("$CFG->wwwroot/$CFG->admin/settings.php?section=stats", get_string('mustenablestats', 'admin'), 3);
@@ -19,6 +16,9 @@
         }
     }
 
+    admin_externalpage_setup('reportcourseoverview');
+    echo $OUTPUT->header();
+
     $course = get_site();
     stats_check_uptodate($course->id);
 
index 6922350..65aa221 100755 (executable)
@@ -232,7 +232,8 @@ $assignurl = new moodle_url($PAGE->url, array('roleid'=>$roleid));
     $select = new single_select($PAGE->url, 'roleid', $nameswithcounts, $roleid, null);
     $select->label = get_string('assignanotherrole', 'role');
     echo $OUTPUT->render($select);
-    echo '<p><a href="' . $PAGE->url . '">' . get_string('backtoallroles', 'role') . '</a></p>';
+    $backurl = new moodle_url('/admin/roles/assign.php', array('contextid' => $contextid));
+    echo '<p><a href="' . $backurl->out() . '">' . get_string('backtoallroles', 'role') . '</a></p>';
     echo '</div>';
 
 } else if (empty($assignableroles)) {
index cd55ecf..e211340 100644 (file)
@@ -780,8 +780,8 @@ class define_role_table_advanced extends capability_table_with_risks {
         global $OUTPUT;
         // Extra fields at the top of the page.
         echo '<div class="topfields clearfix">';
-        $this->print_field('name', get_string('name'), $this->get_name_field('name'));
-        $this->print_field('shortname', get_string('shortname'), $this->get_shortname_field('shortname'));
+        $this->print_field('name', get_string('rolefullname', 'role'), $this->get_name_field('name'));
+        $this->print_field('shortname', get_string('roleshortname', 'role'), $this->get_shortname_field('shortname'));
         $this->print_field('edit-description', get_string('description'), $this->get_description_field('description'));
         $this->print_field('menuarchetype', get_string('archetype', 'role').'&nbsp;'.$OUTPUT->help_icon('archetype', 'role'), $this->get_archetype_field('archetype'));
         $this->print_field('', get_string('maybeassignedin', 'role'), $this->get_assignable_levels_control());
index 0473b83..411abc8 100755 (executable)
     $table->head = array(
         get_string('role') . ' ' . $OUTPUT->help_icon('roles', 'role'),
         get_string('description'),
-        get_string('shortname'),
+        get_string('roleshortname', 'role'),
         get_string('edit')
     );
 
index 29d72ff..7de0346 100644 (file)
@@ -20,8 +20,8 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
     $ADMIN->add('experimental', $temp);
 
     // DB transfer related pages
-    $ADMIN->add('experimental', new admin_externalpage('dbtransfer', get_string('dbtransfer', 'dbtransfer'), $CFG->wwwroot.'/'.$CFG->admin.'/dbtransfer/index.php', 'moodle/site:config'));
-    $ADMIN->add('experimental', new admin_externalpage('dbexport', get_string('dbexport', 'dbtransfer'), $CFG->wwwroot.'/'.$CFG->admin.'/dbtransfer/dbexport.php', 'moodle/site:config'));
+    $ADMIN->add('experimental', new admin_externalpage('dbtransfer', get_string('dbtransfer', 'dbtransfer'), $CFG->wwwroot.'/'.$CFG->admin.'/dbtransfer/index.php', 'moodle/site:config', true));
+    $ADMIN->add('experimental', new admin_externalpage('dbexport', get_string('dbexport', 'dbtransfer'), $CFG->wwwroot.'/'.$CFG->admin.'/dbtransfer/dbexport.php', 'moodle/site:config', true));
 
     // "debugging" settingpage
     $temp = new admin_settingpage('debugging', get_string('debugging', 'admin'));
index 4ef1f6f..6e33a51 100644 (file)
@@ -10,6 +10,7 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
     $options[99] = get_string('timezonenotforced', 'admin');
     $temp->add(new admin_setting_configselect('forcetimezone', get_string('forcetimezone', 'admin'), get_string('helpforcetimezone', 'admin'), 99, $options));
     $temp->add(new admin_settings_country_select('country', get_string('country', 'admin'), get_string('configcountry', 'admin'), 0));
+    $temp->add(new admin_setting_configtext('defaultcity', get_string('defaultcity', 'admin'), get_string('defaultcity_help', 'admin'), ''));
 
     $temp->add(new admin_setting_heading('iplookup', get_string('iplookup', 'admin'), get_string('iplookupinfo', 'admin')));
     $temp->add(new admin_setting_configfile('geoipfile', get_string('geoipfile', 'admin'), get_string('configgeoipfile', 'admin', $CFG->dataroot.'/geoip/'), $CFG->dataroot.'/geoip/GeoLiteCity.dat'));
index d107eca..825673c 100644 (file)
@@ -372,13 +372,12 @@ if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext))
     // Question type settings.
     $ADMIN->add('modules', new admin_category('qtypesettings', get_string('questiontypes', 'admin')));
     $ADMIN->add('qtypesettings', new admin_page_manageqtypes());
-    require_once($CFG->libdir . '/questionlib.php');
-    global $QTYPES;
-    foreach ($QTYPES as $qtype) {
-        $settingsfile = $qtype->plugin_dir() . '/settings.php';
+    $qtypes = get_plugin_list('qtype');
+    foreach ($qtypes as $qtype => $path) {
+        $settingsfile = $path . '/settings.php';
         if (file_exists($settingsfile)) {
-            $settings = new admin_settingpage('qtypesetting' . $qtype->name(),
-                    $qtype->local_name(), 'moodle/question:config');
+            $settings = new admin_settingpage('qtypesetting' . $qtype,
+                    get_string('pluginname', 'qtype_' . $qtype), 'moodle/question:config');
             include($settingsfile);
             if ($settings) {
                 $ADMIN->add('qtypesettings', $settings);
index 052405d..7f6647f 100644 (file)
@@ -266,5 +266,6 @@ $ADMIN->add('server', $temp);
 
 
 $ADMIN->add('server', new admin_externalpage('adminregistration', get_string('registration','admin'), "$CFG->wwwroot/$CFG->admin/registration/index.php"));
+$ADMIN->add('root', new admin_externalpage('bloglevelupgrade', get_string('bloglevelupgrade', 'admin'), $CFG->wwwroot.'/'.$CFG->admin.'/blocklevelupgrade.php', 'moodle/site:config', true));
 
 } // end of speedup
index ceccfe5..c7735e6 100644 (file)
@@ -37,10 +37,6 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
     $optionalsubsystems->add(new admin_setting_configcheckbox('enablecompletion',
         get_string('enablecompletion','completion'),
         get_string('configenablecompletion','completion'), 0));
-    $optionalsubsystems->add(new admin_setting_pickroles('progresstrackedroles',
-        get_string('progresstrackedroles','completion'),
-        get_string('configprogresstrackedroles', 'completion'),
-        array('student')));
     $optionalsubsystems->add(new admin_setting_configcheckbox('enableavailability',
         get_string('enableavailability','condition'),
         get_string('configenableavailability','condition'), 0));
index 01ef71c..1e94aa5 100644 (file)
@@ -107,7 +107,7 @@ if ($hassiteconfig
 
         if (!during_initial_install()) {
             $temp->add(new admin_setting_configselect('creatornewroleid', get_string('creatornewroleid', 'admin'),
-                          get_string('configcreatornewroleid', 'admin'), $defaultteacherid, $creatornewroles));
+                          get_string('creatornewroleid_help', 'admin'), $defaultteacherid, $creatornewroles));
         }
 
         $temp->add(new admin_setting_configcheckbox('autologinguests', get_string('autologinguests', 'admin'), get_string('configautologinguests', 'admin'), 0));
index 6da2efb..5ee0e8a 100755 (executable)
@@ -295,7 +295,13 @@ if ($formdata = $mform->is_cancelled()) {
             }
             if (isset($formdata->$field)) {
                 // process templates
-                $user->$field = process_template($formdata->$field, $user);
+                if (is_array($formdata->$field)) {
+                    foreach ($formdata->$field as $k=>$v) {
+                        $user->$field[$k] = process_template($v, $user);
+                    }
+                } else {
+                    $user->$field = process_template($formdata->$field, $user);
+                }
             }
         }
 
@@ -668,10 +674,16 @@ if ($formdata = $mform->is_cancelled()) {
             $courseid      = $ccache[$shortname]->id;
             $coursecontext = get_context_instance(CONTEXT_COURSE, $courseid);
             if (!isset($manualcache[$courseid])) {
-                if ($instances = enrol_get_instances($courseid, false)) {
-                    $manualcache[$courseid] = reset($instances);
-                } else {
-                    $manualcache[$courseid] = false;
+                $manualcache[$courseid] = false;
+                if ($manual) {
+                    if ($instances = enrol_get_instances($courseid, false)) {
+                        foreach ($instances as $instance) {
+                            if ($instance->enrol === 'manual') {
+                                $manualcache[$courseid] = $instance;
+                                break;
+                            }
+                        }
+                    }
                 }
             }
 
index 3024874..956ecdb 100644 (file)
@@ -206,10 +206,18 @@ class admin_uploaduser_form2 extends moodleform {
 
         $mform->addElement('text', 'city', get_string('city'), 'maxlength="100" size="25"');
         $mform->setType('city', PARAM_MULTILANG);
-        $mform->setDefault('city', $templateuser->city);
+        if (empty($CFG->defaultcity)) {
+            $mform->setDefault('city', $templateuser->city);
+        } else {
+            $mform->setDefault('city', $CFG->defaultcity);
+        }
 
         $mform->addElement('select', 'country', get_string('selectacountry'), get_string_manager()->get_list_of_countries());
-        $mform->setDefault('country', $templateuser->country);
+        if (empty($CFG->country)) {
+            $mform->setDefault('country', $templateuser->country);
+        } else {
+            $mform->setDefault('country', $CFG->country);
+        }
         $mform->setAdvanced('country');
 
         $choices = get_list_of_timezones();
index 3f21653..25775cb 100644 (file)
@@ -11,14 +11,13 @@ function add_selection_all($ufiltering) {
 
     list($sqlwhere, $params) = $ufiltering->get_sql_filter("id<>:exguest AND deleted <> 1", array('exguest'=>$CFG->siteguest));
 
-    if ($rs = $DB->get_recordset_select('user', $sqlwhere, $params, 'fullname', 'id,'.$DB->sql_fullname().' AS fullname')) {
-        foreach ($rs as $user) {
-            if (!isset($SESSION->bulk_users[$user->id])) {
-                $SESSION->bulk_users[$user->id] = $user->id;
-            }
+    $rs = $DB->get_recordset_select('user', $sqlwhere, $params, 'fullname', 'id,'.$DB->sql_fullname().' AS fullname');
+    foreach ($rs as $user) {
+        if (!isset($SESSION->bulk_users[$user->id])) {
+            $SESSION->bulk_users[$user->id] = $user->id;
         }
-        $rs->close();
     }
+    $rs->close();
 }
 
 function get_selection_data($ufiltering) {
index 7f10341..c7ba604 100755 (executable)
@@ -24,19 +24,18 @@ echo $OUTPUT->header();
 
 if ($confirm and confirm_sesskey()) {
     list($in, $params) = $DB->get_in_or_equal($SESSION->bulk_users);
-    if ($rs = $DB->get_recordset_select('user', "id $in", $params, '', 'id, username, secret, confirmed, auth, firstname, lastname')) {
-        foreach ($rs as $user) {
-            if ($user->confirmed) {
-                continue;
-            }
-            $auth = get_auth_plugin($user->auth);
-            $result = $auth->user_confirm($user->username, $user->secret);
-            if ($result != AUTH_CONFIRM_OK && $result != AUTH_CONFIRM_ALREADY) {
-                echo $OUTPUT->notification(get_string('usernotconfirmed', '', fullname($user, true)));
-            }
+    $rs = $DB->get_recordset_select('user', "id $in", $params, '', 'id, username, secret, confirmed, auth, firstname, lastname');
+    foreach ($rs as $user) {
+        if ($user->confirmed) {
+            continue;
+        }
+        $auth = get_auth_plugin($user->auth);
+        $result = $auth->user_confirm($user->username, $user->secret);
+        if ($result != AUTH_CONFIRM_OK && $result != AUTH_CONFIRM_ALREADY) {
+            echo $OUTPUT->notification(get_string('usernotconfirmed', '', fullname($user, true)));
         }
-        $rs->close();
     }
+    $rs->close();
     redirect($return, get_string('changessaved'));
 
 } else {
index 26e11f0..a8b6705 100755 (executable)
@@ -25,16 +25,15 @@ echo $OUTPUT->header();
 if ($confirm and confirm_sesskey()) {
 
     list($in, $params) = $DB->get_in_or_equal($SESSION->bulk_users);
-    if ($rs = $DB->get_recordset_select('user', "id $in", $params)) {
-        foreach ($rs as $user) {
-            if (!is_siteadmin($user) and $USER->id != $user->id and delete_user($user)) {
-                unset($SESSION->bulk_users[$user->id]);
-            } else {
-                echo $OUTPUT->notification(get_string('deletednot', '', fullname($user, true)));
-            }
+    $rs = $DB->get_recordset_select('user', "id $in", $params);
+    foreach ($rs as $user) {
+        if (!is_siteadmin($user) and $USER->id != $user->id and delete_user($user)) {
+            unset($SESSION->bulk_users[$user->id]);
+        } else {
+            echo $OUTPUT->notification(get_string('deletednot', '', fullname($user, true)));
         }
-        $rs->close();
     }
+    $rs->close();
     session_gc(); // remove stale sessions
     redirect($return, get_string('changessaved'));
 
index 6988c74..d67c942 100644 (file)
@@ -38,17 +38,16 @@ if ($confirm and confirm_sesskey()) {
     $parts = array_chunk($SESSION->bulk_users, 300);
     foreach ($parts as $users) {
         list($in, $params) = $DB->get_in_or_equal($users);
-        if ($rs = $DB->get_recordset_select('user', "id $in", $params)) {
-            foreach ($rs as $user) {
-                if (!empty($changeable[$user->auth])) {
-                    set_user_preference('auth_forcepasswordchange', 1, $user->id);
-                    unset($SESSION->bulk_users[$user->id]);
-                } else {
-                    echo $OUTPUT->notification(get_string('forcepasswordchangenot', '', fullname($user, true)));
-                }
+        $rs = $DB->get_recordset_select('user', "id $in", $params);
+        foreach ($rs as $user) {
+            if (!empty($changeable[$user->auth])) {
+                set_user_preference('auth_forcepasswordchange', 1, $user->id);
+                unset($SESSION->bulk_users[$user->id]);
+            } else {
+                echo $OUTPUT->notification(get_string('forcepasswordchangenot', '', fullname($user, true)));
             }
-            $rs->close();
         }
+        $rs->close();
     }
     echo $OUTPUT->notification(get_string('changessaved'), 'notifysuccess');
     echo $OUTPUT->continue_button($return);
index 52127fd..a69546e 100755 (executable)
@@ -25,15 +25,14 @@ if (empty($CFG->messaging)) {
 
 if ($confirm and !empty($msg) and confirm_sesskey()) {
     list($in, $params) = $DB->get_in_or_equal($SESSION->bulk_users);
-    if ($rs = $DB->get_recordset_select('user', "id $in", $params)) {
-        foreach ($rs as $user) {
-            //TODO we should probably support all text formats here or only FORMAT_MOODLE
-            //For now bulk messaging is still using the html editor and its supplying html
-            //so we have to use html format for it to be displayed correctly
-            message_post_message($USER, $user, $msg, FORMAT_HTML, 'direct');
-        }
-        $rs->close();
+    $rs = $DB->get_recordset_select('user', "id $in", $params);
+    foreach ($rs as $user) {
+        //TODO we should probably support all text formats here or only FORMAT_MOODLE
+        //For now bulk messaging is still using the html editor and its supplying html
+        //so we have to use html format for it to be displayed correctly
+        message_post_message($USER, $user, $msg, FORMAT_HTML);
     }
+    $rs->close();
     redirect($return);
 }
 
index 4b80b28..70c3f6d 100644 (file)
                         echo $OUTPUT->footer();
                         break;
                     case ACTION_GENERATE_XML:
-                        header('Content-type: application/xhtml+xml');
+                        header('Content-type: application/xhtml+xml; charset=utf-8');
                         echo $xmldb_action->getOutput();
                         break;
                 }
index d5062bc..fa0591e 100644 (file)
@@ -242,7 +242,7 @@ class auth_plugin_shibboleth extends auth_plugin_base {
 
         // set to defaults if undefined
         if (!isset($config->auth_instructions) or empty($config->user_attribute)) {
-            $config->auth_instructions = get_string('shibboleth_instructions', 'auth', $CFG->wwwroot.'/auth/shibboleth/index.php');
+            $config->auth_instructions = get_string('auth_shib_instructions', 'auth_shibboleth', $CFG->wwwroot.'/auth/shibboleth/index.php');
         }
         if (!isset ($config->user_attribute)) {
             $config->user_attribute = '';
@@ -292,7 +292,7 @@ class auth_plugin_shibboleth extends auth_plugin_base {
         } else {
             // Check if integrated WAYF was enabled and is now turned off
             // If it was and only then, reset the Moodle alternate URL
-            if ($this->config->alt_login == 'on'){
+            if (isset($this->config->alt_login) and $this->config->alt_login == 'on'){
                 set_config('alt_login',    'off',    'auth/shibboleth');
                 set_config('alternateloginurl', '');
             }
index b451720..c5c5410 100644 (file)
@@ -12,7 +12,7 @@ require_once($CFG->dirroot."/auth/shibboleth/auth.php");
 // Find out whether host supports https
 $protocol = 'http://';
 if ( isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'){
-       $protocol = 'https://';
+    $protocol = 'https://';
 }
 
 // Front channel logout
@@ -197,11 +197,12 @@ function LogoutNotification($SessionID){
 /*****************************************************************************/
 
 // Same function as in adodb, but cannot be used for file session for some reason...
-function unserializesession( $serialized_string ){
-    $variables = array( );
-    $a = preg_split( "/(\w+)\|/", $serialized_string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE );
-    for( $i = 0; $i < count( $a ); $i = $i+2 ) {
-            $variables[$a[$i]] = unserialize( $a[$i+1] );
+function unserializesession($serialized_string) {
+    $variables = array();
+    $a = preg_split("/(\w+)\|/", $serialized_string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
+    $counta = count($a);
+    for ($i = 0; $i < $counta; $i = $i+2) {
+            $variables[$a[$i]] = unserialize($a[$i+1]);
     }
-    return( $variables );
+    return $variables;
 }
index 865430b..3a4e5da 100644 (file)
         }
 
         // Loop through all directory entries, and construct two temporary arrays containing files and sub directories
-        while(false !== ($entry = readdir($handle))) {
+        while (false !== ($entry = readdir($handle))) {
             if (is_dir($dir. $slash .$entry) && $entry != ".." && $entry != "." && $entry != $excludeddir) {
                 $dir_subdirs[] = $dir. $slash .$entry;
             }
         }
 
         // Delete all files in the curent directory return false and halt if a file cannot be removed
-        for($i=0; $i<count($dir_files); $i++) {
+        $countdirfiles = count($dir_files);
+        for ($i=0; $i<$countdirfiles; $i++) {
             chmod($dir_files[$i], $CFG->directorypermissions);
             if (((unlink($dir_files[$i]))) == FALSE) {
                 return false;
         }
 
         // Empty sub directories and then remove the directory
-        for($i=0; $i<count($dir_subdirs); $i++) {
+        $countdirsubdirs = count($dir_subdirs);
+        for($i=0; $i<$countdirsubdirs; $i++) {
             chmod($dir_subdirs[$i], $CFG->directorypermissions);
             if (delete_dir_contents($dir_subdirs[$i]) == FALSE) {
                 return false;
diff --git a/backup/moodle2/backup_format_plugin.class.php b/backup/moodle2/backup_format_plugin.class.php
new file mode 100644 (file)
index 0000000..d1af1b9
--- /dev/null
@@ -0,0 +1,50 @@
+<?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/>.
+
+/**
+ * @package    moodlecore
+ * @subpackage backup-moodle2
+ * @copyright  2011 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+/**
+ * Class extending standard backup_plugin in order to implement some
+ * helper methods related with the course formats (format plugin)
+ *
+ * TODO: Finish phpdocs
+ */
+abstract class backup_format_plugin extends backup_plugin {
+
+    protected $courseformat; // To store the format (course->format) of the instance
+
+    public function __construct($plugintype, $pluginname, $optigroup, $step) {
+
+        parent::__construct($plugintype, $pluginname, $optigroup, $step);
+
+        $this->courseformat = backup_plan_dbops::get_courseformat_from_courseid($this->task->get_courseid());
+
+    }
+
+    /**
+     * Return the condition encapsulated into sqlparam format
+     * to get evaluated by value, not by path nor processor setting
+     */
+    protected function get_format_condition() {
+        return array('sqlparam' => $this->courseformat);
+    }
+}
index a1cb25c..89c8654 100644 (file)
@@ -34,6 +34,7 @@ require_once($CFG->dirroot . '/backup/moodle2/backup_default_block_task.class.ph
 require_once($CFG->dirroot . '/backup/moodle2/backup_xml_transformer.class.php');
 require_once($CFG->dirroot . '/backup/moodle2/backup_plugin.class.php');
 require_once($CFG->dirroot . '/backup/moodle2/backup_qtype_plugin.class.php');
+require_once($CFG->dirroot . '/backup/moodle2/backup_format_plugin.class.php');
 require_once($CFG->dirroot . '/backup/moodle2/backup_subplugin.class.php');
 require_once($CFG->dirroot . '/backup/moodle2/backup_settingslib.php');
 require_once($CFG->dirroot . '/backup/moodle2/backup_stepslib.php');
index bd10498..da0abfa 100644 (file)
@@ -33,12 +33,16 @@ abstract class backup_plugin {
     protected $pluginname;
     protected $connectionpoint;
     protected $optigroup; // Optigroup, parent of all optigroup elements
+    protected $step;
+    protected $task;
 
-    public function __construct($plugintype, $pluginname, $optigroup) {
+    public function __construct($plugintype, $pluginname, $optigroup, $step) {
         $this->plugintype = $plugintype;
         $this->pluginname = $pluginname;
-        $this->optigroup     = $optigroup;
+        $this->optigroup  = $optigroup;
         $this->connectionpoint = '';
+        $this->step       = $step;
+        $this->task       = $step->get_task();
     }
 
     public function define_plugin_structure($connectionpoint) {
@@ -52,6 +56,22 @@ abstract class backup_plugin {
         }
     }
 
+// Protected API starts here
+
+// backup_step/structure_step/task wrappers
+
+    /**
+     * Returns the value of one (task/plan) setting
+     */
+    protected function get_setting_value($name) {
+        if (is_null($this->task)) {
+            throw new backup_step_exception('not_specified_backup_task');
+        }
+        return $this->task->get_setting_value($name);
+    }
+
+// end of backup_step/structure_step/task wrappers
+
     /**
      * Factory method that will return one backup_plugin_element (backup_optigroup_element)
      * with its name automatically calculated, based one the plugin being handled (type, name)
index 269ad4b..6b4dbf3 100644 (file)
@@ -125,13 +125,21 @@ abstract class backup_activity_structure_step extends backup_structure_step {
             $backupfile = $subpluginsdir . '/backup/moodle2/' . $classname . '.class.php';
             if (file_exists($backupfile)) {
                 require_once($backupfile);
-                $backupsubplugin = new $classname($subplugintype, $name, $optigroup);
+                $backupsubplugin = new $classname($subplugintype, $name, $optigroup, $this);
                 // Add subplugin returned structure to optigroup
                 $backupsubplugin->define_subplugin_structure($element->get_name());
             }
         }
     }
 
+    /**
+     * As far as activity backup steps are implementing backup_subplugin stuff, they need to
+     * have the parent task available for wrapping purposes (get course/context....)
+     */
+    public function get_task() {
+        return $this->task;
+    }
+
     /**
      * Wraps any activity backup structure within the common 'activity' element
      * that will include common to all activities information like id, context...
@@ -310,6 +318,9 @@ class backup_module_structure_step extends backup_structure_step {
         $availability = new backup_nested_element('availability', array('id'), array(
             'sourcecmid', 'requiredcompletion', 'gradeitemid', 'grademin', 'grademax'));
 
+        // attach format plugin structure to $module element, only one allowed
+        $this->add_plugin_structure('format', $module, false);
+
         // Define the tree
         $module->add_child($availinfo);
         $availinfo->add_child($availability);
@@ -346,6 +357,9 @@ class backup_section_structure_step extends backup_structure_step {
         $section = new backup_nested_element('section', array('id'), array(
             'number', 'name', 'summary', 'summaryformat', 'sequence', 'visible'));
 
+        // attach format plugin structure to $section element, only one allowed
+        $this->add_plugin_structure('format', $section, false);
+
         // Define sources
 
         $section->set_source_table('course_sections', array('id' => backup::VAR_SECTIONID));
@@ -395,6 +409,9 @@ class backup_course_structure_step extends backup_structure_step {
 
         $module = new backup_nested_element('module', array(), array('modulename'));
 
+        // attach format plugin structure to $course element, only one allowed
+        $this->add_plugin_structure('format', $course, false);
+
         // Build the tree
 
         $course->add_child($category);
index 75fc21d..ca3e953 100644 (file)
@@ -34,12 +34,16 @@ abstract class backup_subplugin {
     protected $subpluginname;
     protected $connectionpoint;
     protected $optigroup; // Optigroup, parent of all optigroup elements
+    protected $step;
+    protected $task;
 
-    public function __construct($subplugintype, $subpluginname, $optigroup) {
+    public function __construct($subplugintype, $subpluginname, $optigroup, $step) {
         $this->subplugintype = $subplugintype;
         $this->subpluginname = $subpluginname;
         $this->optigroup     = $optigroup;
         $this->connectionpoint = '';
+        $this->step          = $step;
+        $this->task          = $step->get_task();
     }
 
     public function define_subplugin_structure($connectionpoint) {
@@ -53,6 +57,22 @@ abstract class backup_subplugin {
         }
     }
 
+// Protected API starts here
+
+// backup_step/structure_step/task wrappers
+
+    /**
+     * Returns the value of one (task/plan) setting
+     */
+    protected function get_setting_value($name) {
+        if (is_null($this->task)) {
+            throw new backup_step_exception('not_specified_backup_task');
+        }
+        return $this->task->get_setting_value($name);
+    }
+
+// end of backup_step/structure_step/task wrappers
+
     /**
      * Factory method that will return one backup_subplugin_element (backup_optigroup_element)
      * with its name automatically calculated, based one the subplugin being handled (type, name)
diff --git a/backup/moodle2/restore_format_plugin.class.php b/backup/moodle2/restore_format_plugin.class.php
new file mode 100644 (file)
index 0000000..454d3a8
--- /dev/null
@@ -0,0 +1,33 @@
+<?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/>.
+
+/**
+ * @package    moodlecore
+ * @subpackage backup-moodle2
+ * @copyright  2011 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+/**
+ * Class extending standard restore_plugin in order to implement some
+ * helper methods related with the course formats (format plugin)
+ *
+ * TODO: Finish phpdocs
+ */
+abstract class restore_format_plugin extends restore_plugin {
+    // Love these classes. :-) Nothing special to customize here for now
+}
index 46ea999..f685d38 100644 (file)
@@ -33,8 +33,10 @@ require_once($CFG->dirroot . '/backup/moodle2/restore_block_task.class.php');
 require_once($CFG->dirroot . '/backup/moodle2/restore_default_block_task.class.php');
 require_once($CFG->dirroot . '/backup/moodle2/restore_plugin.class.php');
 require_once($CFG->dirroot . '/backup/moodle2/restore_qtype_plugin.class.php');
+require_once($CFG->dirroot . '/backup/moodle2/restore_format_plugin.class.php');
 require_once($CFG->dirroot . '/backup/moodle2/backup_plugin.class.php');
 require_once($CFG->dirroot . '/backup/moodle2/backup_qtype_plugin.class.php');
+require_once($CFG->dirroot . '/backup/moodle2/backup_format_plugin.class.php');
 require_once($CFG->dirroot . '/backup/moodle2/restore_subplugin.class.php');
 require_once($CFG->dirroot . '/backup/moodle2/restore_settingslib.php');
 require_once($CFG->dirroot . '/backup/moodle2/restore_stepslib.php');
index 3f9f5bb..8103ada 100644 (file)
@@ -202,6 +202,18 @@ abstract class restore_plugin {
         return $this->step->apply_date_offset($value);
     }
 
+    /**
+     * Returns the value of one (task/plan) setting
+     */
+    protected function get_setting_value($name) {
+        if (is_null($this->task)) {
+            throw new restore_step_exception('not_specified_restore_task');
+        }
+        return $this->task->get_setting_value($name);
+    }
+
+// end of restore_step/structure_step/task wrappers
+
     /**
      * Simple helper function that returns the name for the restore_path_element
      * It's not mandatory to use it but recommended ;-)
index f3a3b70..fb97beb 100644 (file)
@@ -139,7 +139,7 @@ abstract class restore_qtype_plugin extends restore_plugin {
                 $info->filequestionid = $oldquestionid;
                 $info->dbquestionid   = $newquestionid;
                 $info->answer         = $data->answertext;
-                throw restore_step_exception('error_question_answers_missing_in_db', $info);
+                throw new restore_step_exception('error_question_answers_missing_in_db', $info);
             }
         }
         // Create mapping (we'll use this intensively when restoring question_states. And also answerfeedback files)
index 75bf7c3..5c03bcb 100644 (file)
@@ -32,12 +32,14 @@ class restore_section_task extends restore_task {
 
     protected $info; // info related to section gathered from backup file
     protected $contextid; // course context id
+    protected $sectionid; // new (target) id of the course section
 
     /**
      * Constructor - instantiates one object of this class
      */
     public function __construct($name, $info, $plan = null) {
         $this->info = $info;
+        $this->sectionid = 0;
         parent::__construct($name, $plan);
     }
 
@@ -49,10 +51,18 @@ class restore_section_task extends restore_task {
         return $this->get_basepath() . '/sections/section_' . $this->info->sectionid;
     }
 
+    public function set_sectionid($sectionid) {
+        $this->sectionid = $sectionid;
+    }
+
     public function get_contextid() {
         return $this->contextid;
     }
 
+    public function get_sectionid() {
+        return $this->sectionid;
+    }
+
     /**
      * Create all the steps that will be part of this task
      */
index 2a3fe48..eace014 100644 (file)
@@ -660,8 +660,8 @@ class restore_groups_structure_step extends restore_structure_step {
         $params = array('courseid' => $this->get_courseid(), 'grname' => $data->name);
         if (!empty($data->description)) {
             $description_clause = ' AND ' .
-                                  $DB->sql_compare_text('description') . ' = ' . $DB->sql_compare_text(':desc');
-           $params['desc'] = $data->description;
+                                  $DB->sql_compare_text('description') . ' = ' . $DB->sql_compare_text(':description');
+           $params['description'] = $data->description;
         }
         if (!$groupdb = $DB->get_record_sql("SELECT *
                                                FROM {groups}
@@ -708,8 +708,8 @@ class restore_groups_structure_step extends restore_structure_step {
         $params = array('courseid' => $this->get_courseid(), 'grname' => $data->name);
         if (!empty($data->description)) {
             $description_clause = ' AND ' .
-                                  $DB->sql_compare_text('description') . ' = ' . $DB->sql_compare_text(':desc');
-           $params['desc'] = $data->description;
+                                  $DB->sql_compare_text('description') . ' = ' . $DB->sql_compare_text(':description');
+           $params['description'] = $data->description;
         }
         if (!$groupingdb = $DB->get_record_sql("SELECT *
                                                   FROM {groupings}
@@ -920,7 +920,12 @@ class restore_process_categories_and_questions extends restore_execution_step {
 class restore_section_structure_step extends restore_structure_step {
 
     protected function define_structure() {
-        return array(new restore_path_element('section', '/section'));
+        $section = new restore_path_element('section', '/section');
+
+        // Apply for 'format' plugins optional paths at section level
+        $this->add_plugin_structure('format', $section);
+
+        return array($section);
     }
 
     public function process_section($data) {
@@ -962,6 +967,10 @@ class restore_section_structure_step extends restore_structure_step {
         // Annotate the section mapping, with restorefiles option if needed
         $this->set_mapping('course_section', $oldid, $newitemid, $restorefiles);
 
+        // set the new course_section id in the task
+        $this->task->set_sectionid($newitemid);
+
+
         // Commented out. We never modify course->numsections as far as that is used
         // by a lot of people to "hide" sections on purpose (so this remains as used to be in Moodle 1.x)
         // Note: We keep the code here, to know about and because of the possibility of making this
@@ -991,12 +1000,15 @@ class restore_course_structure_step extends restore_structure_step {
 
     protected function define_structure() {
 
-        $course = new restore_path_element('course', '/course', true); // Grouped
+        $course = new restore_path_element('course', '/course');
         $category = new restore_path_element('category', '/course/category');
         $tag = new restore_path_element('tag', '/course/tags/tag');
-        $allowed = new restore_path_element('allowed', '/course/allowed_modules/module');
+        $allowed_module = new restore_path_element('allowed_module', '/course/allowed_modules/module');
+
+        // Apply for 'format' plugins optional paths at course level
+        $this->add_plugin_structure('format', $course);
 
-        return array($course, $category, $tag, $allowed);
+        return array($course, $category, $tag, $allowed_module);
     }
 
     /**
@@ -1009,8 +1021,6 @@ class restore_course_structure_step extends restore_structure_step {
         global $CFG, $DB;
 
         $data = (object)$data;
-        $coursetags = isset($data->tags['tag']) ? $data->tags['tag'] : array();
-        $coursemodules = isset($data->allowed_modules['module']) ? $data->allowed_modules['module'] : array();
         $oldid = $data->id; // We'll need this later
 
         $fullname  = $this->get_setting_value('course_fullname');
@@ -1026,8 +1036,8 @@ class restore_course_structure_step extends restore_structure_step {
         $data->shortname= $shortname;
         $data->idnumber = '';
 
-        // Category is set by UI when choosing the destination
-        unset($data->category);
+        // Only restrict modules if original course was and target site too for new courses
+        $data->restrictmodules = $data->restrictmodules && !empty($CFG->restrictmodulesfor) && $CFG->restrictmodulesfor == 'all';
 
         $data->startdate= $this->apply_date_offset($data->startdate);
         if ($data->defaultgroupingid) {
@@ -1050,34 +1060,56 @@ class restore_course_structure_step extends restore_structure_step {
         // Course record ready, update it
         $DB->update_record('course', $data);
 
-        // Course tags
-        if (!empty($CFG->usetags) && isset($coursetags)) { // if enabled in server and present in backup
+        // Role name aliases
+        restore_dbops::set_course_role_names($this->get_restoreid(), $this->get_courseid());
+    }
+
+    public function process_category($data) {
+        // Nothing to do with the category. UI sets it before restore starts
+    }
+
+    public function process_tag($data) {
+        global $CFG, $DB;
+
+        $data = (object)$data;
+
+        if (!empty($CFG->usetags)) { // if enabled in server
+            // TODO: This is highly inneficient. Each time we add one tag
+            // we fetch all the existing because tag_set() deletes them
+            // so everything must be reinserted on each call
             $tags = array();
-            foreach ($coursetags as $coursetag) {
-                $coursetag = (object)$coursetag;
-                $tags[] = $coursetag->rawname;
+            $existingtags = tag_get_tags('course', $this->get_courseid());
+            // Re-add all the existitng tags
+            foreach ($existingtags as $existingtag) {
+                $tags[] = $existingtag->rawname;
             }
+            // Add the one being restored
+            $tags[] = $data->rawname;
+            // Send all the tags back to the course
             tag_set('course', $this->get_courseid(), $tags);
         }
-        // Course allowed modules
-        if (!empty($data->restrictmodules) && !empty($coursemodules)) {
+    }
+
+    public function process_allowed_module($data) {
+        global $CFG, $DB;
+
+        $data = (object)$data;
+
+        // only if enabled by admin setting
+        if (!empty($CFG->restrictmodulesfor) && $CFG->restrictmodulesfor == 'all') {
             $available = get_plugin_list('mod');
-            foreach ($coursemodules as $coursemodule) {
-                $mname = $coursemodule['modulename'];
-                if (array_key_exists($mname, $available)) {
-                    if ($module = $DB->get_record('modules', array('name' => $mname, 'visible' => 1))) {
-                        $rec = new stdclass();
-                        $rec->course = $this->get_courseid();
-                        $rec->module = $module->id;
-                        if (!$DB->record_exists('course_allowed_modules', (array)$rec)) {
-                            $DB->insert_record('course_allowed_modules', $rec);
-                        }
+            $mname = $data->modulename;
+            if (array_key_exists($mname, $available)) {
+                if ($module = $DB->get_record('modules', array('name' => $mname, 'visible' => 1))) {
+                    $rec = new stdclass();
+                    $rec->course = $this->get_courseid();
+                    $rec->module = $module->id;
+                    if (!$DB->record_exists('course_allowed_modules', (array)$rec)) {
+                        $DB->insert_record('course_allowed_modules', $rec);
                     }
                 }
             }
         }
-        // Role name aliases
-        restore_dbops::set_course_role_names($this->get_restoreid(), $this->get_courseid());
     }
 
     protected function after_execute() {
@@ -1786,7 +1818,7 @@ class restore_activity_grades_structure_step extends restore_structure_step {
         $data->timecreated  = $this->apply_date_offset($data->timecreated);
         $data->timemodified = $this->apply_date_offset($data->timemodified);
 
-        $gradeitem = new grade_item($data);
+        $gradeitem = new grade_item($data, false);
         $gradeitem->insert('restore');
 
         //sortorder is automatically assigned when inserting. Re-instate the previous sortorder
@@ -1809,7 +1841,7 @@ class restore_activity_grades_structure_step extends restore_structure_step {
         // TODO: Ask, all the rest of locktime/exported... work with time... to be rolled?
         $data->overridden = $this->apply_date_offset($data->overridden);
 
-        $grade = new grade_grade($data);
+        $grade = new grade_grade($data, false);
         $grade->insert('restore');
         // no need to save any grade_grade mapping
     }
@@ -1963,11 +1995,15 @@ class restore_module_structure_step extends restore_structure_step {
 
         $paths = array();
 
-        $paths[] = new restore_path_element('module', '/module');
+        $module = new restore_path_element('module', '/module');
+        $paths[] = $module;
         if ($CFG->enableavailability) {
             $paths[] = new restore_path_element('availability', '/module/availability_info/availability');
         }
 
+        // Apply for 'format' plugins optional paths at module level
+        $this->add_plugin_structure('format', $module);
+
         return $paths;
     }
 
@@ -2219,7 +2255,7 @@ class restore_create_categories_and_questions extends restore_structure_step {
 
         // Check we have one mapping for this category
         if (!$mapping = $this->get_mapping('question_category', $oldid)) {
-            return; // No mapping = this category doesn't need to be created/mapped
+            return self::SKIP_ALL_CHILDREN; // No mapping = this category doesn't need to be created/mapped
         }
 
         // Check we have to create the category (newitemid = 0)
index 7f2b175..d22a0d9 100644 (file)
@@ -151,6 +151,18 @@ abstract class restore_subplugin {
         return $this->step->apply_date_offset($value);
     }
 
+    /**
+     * Returns the value of one (task/plan) setting
+     */
+    protected function get_setting_value($name) {
+        if (is_null($this->task)) {
+            throw new restore_step_exception('not_specified_restore_task');
+        }
+        return $this->task->get_setting_value($name);
+    }
+
+// end of restore_step/structure_step/task wrappers
+
     /**
      * Simple helper function that returns the name for the restore_path_element
      * It's not mandatory to use it but recommended ;-)
index d9ad84b..654a87f 100644 (file)
                                                 $tagsarr = $info['BLOG']['#']['BLOG_TAGS']['0']['#']['BLOG_TAG'];
                                                 //Iterate over tags
                                                 $tags = array();
-                                                for($i = 0; $i < sizeof($tagsarr); $i++) {
+                                                $sizetagsarr = sizeof($tagsarr);
+                                                for ($i = 0; $i < $sizetagsarr; $i++) {
                                                     $tag_info = $tagsarr[$i];
                                                     ///traverse_xmlize($tag_info);                        //Debug
                                                     ///print_object ($GLOBALS['traverse_array']);         //Debug
index 9959236..fe5d941 100644 (file)
@@ -119,6 +119,15 @@ abstract class backup_plan_dbops extends backup_dbops {
         return $sectionsarr;
     }
 
+    /**
+     * Given one course id, return its format in DB
+     */
+    public static function get_courseformat_from_courseid($courseid) {
+        global $DB;
+
+        return $DB->get_field('course', 'format', array('id' => $courseid));
+    }
+
     /**
      * Return the wwwroot of the $CFG->mnet_localhost_id host
      * caching it along the request
@@ -138,34 +147,49 @@ abstract class backup_plan_dbops extends backup_dbops {
     * Returns the default backup filename, based in passed params.
     *
     * Default format is (see MDL-22145)
-    *   backup word - format - type - name - date - info . mbz
+    * backup word - format - type - name - date - info . mbz
     * where name is variable (course shortname, section name/id, activity modulename + cmid)
-    * and info can be (nu = no user info, an = anonymized)
+    * and info can be (nu = no user info, an = anonymized). The last param $useidasname,
+    * defaulting to false, allows to replace the course shortname by the course id (used
+    * by automated backups, to avoid non-ascii chars in OS filesystem)
+    *
+    * @param string $format One of backup::FORMAT_
+    * @param string $type One of backup::TYPE_
+    * @param int $courseid/$sectionid/$cmid
+    * @param bool $users Should be true is users were included in the backup
+    * @param bool $anonymised Should be true is user information was anonymized.
+    * @param bool $useidasname true to use id, false to use strings (default)
+    * @return string The filename to use
     */
-    public static function get_default_backup_filename($format, $type, $id, $users, $anonymised) {
+    public static function get_default_backup_filename($format, $type, $id, $users, $anonymised, $useidasname = false) {
         global $DB;
 
         // Calculate backup word
         $backupword = str_replace(' ', '_', moodle_strtolower(get_string('backupfilename')));
         $backupword = trim(clean_filename($backupword), '_');
 
-        // Calculate proper name element (based on type)
-        switch ($type) {
-            case backup::TYPE_1COURSE:
-                $shortname = $DB->get_field('course', 'shortname', array('id' => $id));
-                break;
-            case backup::TYPE_1SECTION:
-                if (!$shortname = $DB->get_field('course_sections', 'name', array('id' => $id))) {
-                    $shortname = $DB->get_field('course_sections', 'section', array('id' => $id));
-                }
-                break;
-            case backup::TYPE_1ACTIVITY:
-                $cm = get_coursemodule_from_id(null, $id);
-                $shortname = $cm->modname . $id;
-                break;
+        $shortname = '';
+        // Not $useidasname, lets calculate it, else $id will be used
+        if (!$useidasname) {
+            // Calculate proper name element (based on type)
+            switch ($type) {
+                case backup::TYPE_1COURSE:
+                    $shortname = $DB->get_field('course', 'shortname', array('id' => $id));
+                    break;
+                case backup::TYPE_1SECTION:
+                    if (!$shortname = $DB->get_field('course_sections', 'name', array('id' => $id))) {
+                        $shortname = $DB->get_field('course_sections', 'section', array('id' => $id));
+                    }
+                    break;
+                case backup::TYPE_1ACTIVITY:
+                    $cm = get_coursemodule_from_id(null, $id);
+                    $shortname = $cm->modname . $id;
+                    break;
+            }
+            $shortname = str_replace(' ', '_', $shortname);
+            $shortname = moodle_strtolower(trim(clean_filename($shortname), '_'));
         }
-        $shortname = str_replace(' ', '_', $shortname);
-        $shortname = moodle_strtolower(trim(clean_filename($shortname), '_'));
+
         $name = empty($shortname) ? $id : $shortname;
 
         // Calculate date