Merge branch 'MDL-32670' of git://github.com/rlorenzo/moodle
authorSam Hemelryk <sam@moodle.com>
Tue, 8 May 2012 06:07:07 +0000 (18:07 +1200)
committerSam Hemelryk <sam@moodle.com>
Tue, 8 May 2012 06:07:07 +0000 (18:07 +1200)
685 files changed:
.gitignore
admin/environment.xml
admin/message.php
admin/settings/appearance.php
admin/settings/courses.php
admin/tool/assignmentupgrade/batchupgrade.php [new file with mode: 0644]
admin/tool/assignmentupgrade/index.php [new file with mode: 0644]
admin/tool/assignmentupgrade/lang/en/tool_assignmentupgrade.php [new file with mode: 0644]
admin/tool/assignmentupgrade/listnotupgraded.php [new file with mode: 0644]
admin/tool/assignmentupgrade/locallib.php [new file with mode: 0644]
admin/tool/assignmentupgrade/module.js [new file with mode: 0644]
admin/tool/assignmentupgrade/renderer.php [new file with mode: 0644]
admin/tool/assignmentupgrade/settings.php [new file with mode: 0644]
admin/tool/assignmentupgrade/styles.css [new file with mode: 0644]
admin/tool/assignmentupgrade/upgradableassignmentsbatchform.php [new file with mode: 0644]
admin/tool/assignmentupgrade/upgradableassignmentstable.php [new file with mode: 0644]
admin/tool/assignmentupgrade/upgradesingle.php [new file with mode: 0644]
admin/tool/assignmentupgrade/upgradesingleconfirm.php [new file with mode: 0644]
admin/tool/assignmentupgrade/version.php [new file with mode: 0644]
admin/tool/phpunit/cli/util.php
admin/tool/unittest/ex_reporter.php
admin/tool/uploaduser/picture.php
admin/webservice/forms.php
admin/webservice/service_functions.php
auth/mnet/auth.php
backup/moodle2/backup_stepslib.php
backup/util/helper/backup_cron_helper.class.php
blocks/section_links/block_section_links.php
calendar/export_execute.php
calendar/lib.php
calendar/renderer.php
calendar/set.php
calendar/view.php
cohort/edit_form.php
cohort/index.php
config-dist.php
course/addsection.php [new file with mode: 0644]
course/category.php
course/edit_form.php
course/editcategory.php
course/editsection.php
course/externallib.php
course/format/renderer.php [new file with mode: 0644]
course/format/topics/format.js [new file with mode: 0644]
course/format/topics/format.php
course/format/topics/lang/en/format_topics.php
course/format/topics/lib.php
course/format/topics/renderer.php [new file with mode: 0644]
course/format/topics/version.php
course/format/upgrade.txt [new file with mode: 0644]
course/format/weeks/format.js [new file with mode: 0644]
course/format/weeks/format.php
course/format/weeks/lang/en/format_weeks.php
course/format/weeks/lib.php
course/format/weeks/renderer.php [new file with mode: 0644]
course/format/weeks/version.php
course/lib.php
course/mod.php
course/modedit.php
course/rest.php
course/tests/courselib_test.php
course/view.php
course/yui/dragdrop/dragdrop.js
course/yui/toolboxes/toolboxes.js
enrol/authorize/db/messages.php [new file with mode: 0644]
enrol/authorize/version.php
enrol/database/tests/adodb_test.php
enrol/externallib.php
enrol/flatfile/db/messages.php [new file with mode: 0644]
enrol/flatfile/lang/en/enrol_flatfile.php
enrol/flatfile/version.php
enrol/imsenterprise/db/messages.php [new file with mode: 0644]
enrol/imsenterprise/lang/en/enrol_imsenterprise.php
enrol/imsenterprise/version.php
enrol/manual/externallib.php
enrol/manual/locallib.php
enrol/paypal/db/messages.php [new file with mode: 0644]
enrol/paypal/lang/en/enrol_paypal.php
enrol/paypal/version.php
files/externallib.php
grade/edit/tree/grade_form.php
grade/grading/form/guide/README [new file with mode: 0644]
grade/grading/form/guide/backup/moodle2/backup_gradingform_guide_plugin.class.php [new file with mode: 0644]
grade/grading/form/guide/backup/moodle2/restore_gradingform_guide_plugin.class.php [new file with mode: 0644]
grade/grading/form/guide/db/install.xml [new file with mode: 0644]
grade/grading/form/guide/edit.php [new file with mode: 0644]
grade/grading/form/guide/edit_form.php [new file with mode: 0644]
grade/grading/form/guide/guideeditor.php [new file with mode: 0644]
grade/grading/form/guide/js/guide.js [new file with mode: 0644]
grade/grading/form/guide/js/guideeditor.js [new file with mode: 0644]
grade/grading/form/guide/lang/en/gradingform_guide.php [new file with mode: 0644]
grade/grading/form/guide/lib.php [new file with mode: 0644]
grade/grading/form/guide/pix/icon.png [new file with mode: 0644]
grade/grading/form/guide/preview.php [new file with mode: 0644]
grade/grading/form/guide/renderer.php [new file with mode: 0644]
grade/grading/form/guide/styles.css [new file with mode: 0644]
grade/grading/form/guide/version.php [new file with mode: 0644]
grade/report/grader/index.php
grade/report/grader/lib.php
grade/report/grader/module.js
grade/report/user/lib.php
group/externallib.php
install/lang/et/admin.php
install/lang/et/error.php
install/lang/et/install.php
install/lang/et/langconfig.php
install/lang/ru/error.php
install/lang/sr_cr/admin.php
install/lang/sr_cr/error.php
install/lang/sr_cr/install.php
install/lang/sr_lt/admin.php
install/lang/sr_lt/error.php
install/lang/sr_lt/install.php
lang/en/access.php
lang/en/admin.php
lang/en/error.php
lang/en/grades.php
lang/en/message.php
lang/en/moodle.php
lang/en/plugin.php
lib/configonlylib.php
lib/csslib.php
lib/db/install.xml
lib/db/services.php
lib/db/upgrade.php
lib/db/upgradelib.php
lib/editor/tinymce/lib.php
lib/editor/tinymce/tiny_mce/3.5/jquery.tinymce.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/jquery.tinymce.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/langs/en.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/langs/en.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/license.txt [moved from lib/editor/tinymce/tiny_mce/3.5dev1/license.txt with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advhr/css/advhr.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advhr/css/advhr.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advhr/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advhr/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advhr/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advhr/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advhr/js/rule.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advhr/js/rule.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advhr/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advhr/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advhr/rule.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advhr/rule.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advimage/css/advimage.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advimage/css/advimage.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advimage/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advimage/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advimage/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advimage/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advimage/image.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advimage/image.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advimage/img/sample.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advimage/img/sample.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advimage/js/image.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advimage/js/image.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advimage/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advimage/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advlink/css/advlink.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advlink/css/advlink.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advlink/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advlink/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advlink/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advlink/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advlink/js/advlink.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advlink/js/advlink.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advlink/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advlink/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advlink/link.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advlink/link.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advlist/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advlist/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/advlist/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/advlist/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/autolink/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/autolink/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/autolink/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/autolink/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/autoresize/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/autoresize/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/autoresize/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/autoresize/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/autosave/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/autosave/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/autosave/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/autosave/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/autosave/langs/en.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/autosave/langs/en.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/bbcode/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/bbcode/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/bbcode/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/bbcode/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/contextmenu/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/contextmenu/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/contextmenu/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/contextmenu/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/directionality/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/directionality/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/directionality/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/directionality/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/dragmath/dragmath.php [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/dragmath/dragmath.php with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/dragmath/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/dragmath/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/dragmath/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/dragmath/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/dragmath/img/dragmath.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/dragmath/img/dragmath.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/dragmath/js/dragmath.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/dragmath/js/dragmath.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/dragmath/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/dragmath/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/emotions.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/emotions.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/img/smiley-cool.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/img/smiley-cool.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/img/smiley-cry.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/img/smiley-cry.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/img/smiley-embarassed.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/img/smiley-embarassed.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/img/smiley-foot-in-mouth.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/img/smiley-foot-in-mouth.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/img/smiley-frown.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/img/smiley-frown.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/img/smiley-innocent.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/img/smiley-innocent.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/img/smiley-kiss.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/img/smiley-kiss.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/img/smiley-laughing.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/img/smiley-laughing.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/img/smiley-money-mouth.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/img/smiley-money-mouth.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/img/smiley-sealed.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/img/smiley-sealed.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/img/smiley-smile.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/img/smiley-smile.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/img/smiley-surprised.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/img/smiley-surprised.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/img/smiley-tongue-out.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/img/smiley-tongue-out.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/img/smiley-undecided.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/img/smiley-undecided.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/img/smiley-wink.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/img/smiley-wink.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/img/smiley-yell.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/img/smiley-yell.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/js/emotions.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/js/emotions.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/emotions/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/emotions/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/example/dialog.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/example/dialog.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/example/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/example/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/example/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/example/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/example/img/example.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/example/img/example.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/example/js/dialog.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/example/js/dialog.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/example/langs/en.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/example/langs/en.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/example/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/example/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/example_dependency/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/example_dependency/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/example_dependency/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/example_dependency/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/fullpage/css/fullpage.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/fullpage/css/fullpage.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/fullpage/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/fullpage/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/fullpage/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/fullpage/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/fullpage/fullpage.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/fullpage/fullpage.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/fullpage/js/fullpage.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/fullpage/js/fullpage.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/fullpage/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/fullpage/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/fullscreen/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/fullscreen/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/fullscreen/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/fullscreen/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/fullscreen/fullscreen.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/fullscreen/fullscreen.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/iespell/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/iespell/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/iespell/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/iespell/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/inlinepopups/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/inlinepopups/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/inlinepopups/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/inlinepopups/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/inlinepopups/skins/clearlooks2/img/alert.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/inlinepopups/skins/clearlooks2/img/alert.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/inlinepopups/skins/clearlooks2/img/button.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/inlinepopups/skins/clearlooks2/img/button.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/inlinepopups/skins/clearlooks2/img/corners.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/inlinepopups/skins/clearlooks2/img/corners.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/inlinepopups/skins/clearlooks2/window.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/inlinepopups/skins/clearlooks2/window.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/inlinepopups/template.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/inlinepopups/template.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/insertdatetime/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/insertdatetime/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/insertdatetime/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/insertdatetime/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/layer/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/layer/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/layer/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/layer/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/legacyoutput/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/legacyoutput/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/legacyoutput/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/legacyoutput/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/lists/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/lists/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/lists/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/lists/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/media/css/media.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/media/css/media.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/media/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/media/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/media/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/media/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/media/js/embed.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/media/js/embed.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/media/js/media.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/media/js/media.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/media/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/media/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/media/media.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/media/media.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/media/moxieplayer.swf [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/media/moxieplayer.swf with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/moodleemoticon/dialog.php [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/moodleemoticon/dialog.php with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/moodleemoticon/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/moodleemoticon/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/moodleemoticon/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/moodleemoticon/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/moodleemoticon/img/moodleemoticon.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/moodleemoticon/img/moodleemoticon.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/moodleemoticon/js/dialog.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/moodleemoticon/js/dialog.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/moodlemedia/css/media.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/moodlemedia/css/media.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/moodlemedia/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/moodlemedia/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/moodlemedia/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/moodlemedia/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/moodlemedia/img/icon.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/moodlemedia/img/icon.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/moodlemedia/js/media.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/moodlemedia/js/media.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/moodlemedia/moodlemedia.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/moodlemedia/moodlemedia.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/moodlenolink/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/moodlenolink/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/moodlenolink/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/moodlenolink/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/moodlenolink/img/ed_nolink.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/moodlenolink/img/ed_nolink.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/moodlenolink/langs/en.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/moodlenolink/langs/en.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/nonbreaking/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/nonbreaking/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/nonbreaking/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/nonbreaking/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/noneditable/editor_plugin.js [new file with mode: 0644]
lib/editor/tinymce/tiny_mce/3.5/plugins/noneditable/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/noneditable/editor_plugin_src.js with 84% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/pagebreak/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/pagebreak/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/pagebreak/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/pagebreak/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/paste/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/paste/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/paste/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/paste/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/paste/js/pastetext.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/paste/js/pastetext.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/paste/js/pasteword.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/paste/js/pasteword.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/paste/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/paste/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/paste/pastetext.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/paste/pastetext.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/paste/pasteword.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/paste/pasteword.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/preview/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/preview/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/preview/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/preview/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/preview/example.html [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/preview/example.html with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/preview/jscripts/embed.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/preview/jscripts/embed.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/preview/preview.html [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/preview/preview.html with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/print/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/print/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/print/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/print/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/save/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/save/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/save/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/save/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/searchreplace/css/searchreplace.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/searchreplace/css/searchreplace.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/searchreplace/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/searchreplace/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/searchreplace/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/searchreplace/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/searchreplace/js/searchreplace.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/searchreplace/js/searchreplace.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/searchreplace/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/searchreplace/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/searchreplace/searchreplace.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/searchreplace/searchreplace.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/spellchecker/changelog.txt [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/spellchecker/changelog.txt with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/spellchecker/classes/EnchantSpell.php [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/spellchecker/classes/EnchantSpell.php with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/spellchecker/classes/GoogleSpell.php [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/spellchecker/classes/GoogleSpell.php with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/spellchecker/classes/PSpell.php [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/spellchecker/classes/PSpell.php with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/spellchecker/classes/PSpellShell.php [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/spellchecker/classes/PSpellShell.php with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/spellchecker/classes/SpellChecker.php [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/spellchecker/classes/SpellChecker.php with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/spellchecker/classes/utils/JSON.php [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/spellchecker/classes/utils/JSON.php with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/spellchecker/classes/utils/Logger.php [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/spellchecker/classes/utils/Logger.php with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/spellchecker/config.php [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/spellchecker/config.php with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/spellchecker/css/content.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/spellchecker/css/content.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/spellchecker/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/spellchecker/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/spellchecker/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/spellchecker/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/spellchecker/img/wline.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/spellchecker/img/wline.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/spellchecker/includes/general.php [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/spellchecker/includes/general.php with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/spellchecker/rpc.php [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/spellchecker/rpc.php with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/style/css/props.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/style/css/props.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/style/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/style/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/style/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/style/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/style/js/props.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/style/js/props.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/style/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/style/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/style/props.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/style/props.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/style/readme.txt [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/style/readme.txt with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/tabfocus/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/tabfocus/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/tabfocus/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/tabfocus/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/table/cell.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/table/cell.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/table/css/cell.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/table/css/cell.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/table/css/row.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/table/css/row.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/table/css/table.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/table/css/table.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/table/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/table/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/table/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/table/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/table/js/cell.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/table/js/cell.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/table/js/merge_cells.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/table/js/merge_cells.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/table/js/row.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/table/js/row.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/table/js/table.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/table/js/table.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/table/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/table/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/table/merge_cells.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/table/merge_cells.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/table/row.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/table/row.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/table/table.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/table/table.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/template/blank.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/template/blank.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/template/css/template.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/template/css/template.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/template/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/template/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/template/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/template/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/template/js/template.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/template/js/template.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/template/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/template/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/template/template.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/template/template.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/css/visualblocks.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/css/visualblocks.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/img/address.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/img/address.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/img/article.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/img/article.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/img/aside.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/img/aside.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/img/blockquote.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/img/blockquote.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/img/div.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/img/div.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/img/figure.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/img/figure.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/img/h1.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/img/h1.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/img/h2.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/img/h2.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/img/h3.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/img/h3.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/img/h4.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/img/h4.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/img/h5.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/img/h5.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/img/h6.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/img/h6.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/img/hgroup.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/img/hgroup.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/img/p.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/img/p.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/img/pre.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/img/pre.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualblocks/img/section.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualblocks/img/section.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualchars/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualchars/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/visualchars/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/visualchars/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/wordcount/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/wordcount/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/wordcount/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/wordcount/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/abbr.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/abbr.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/acronym.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/acronym.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/attributes.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/attributes.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/cite.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/cite.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/css/attributes.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/css/attributes.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/css/popup.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/css/popup.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/del.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/del.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/ins.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/ins.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/js/abbr.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/js/abbr.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/js/acronym.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/js/acronym.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/js/attributes.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/js/attributes.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/js/cite.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/js/cite.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/js/del.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/js/del.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/js/element_common.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/js/element_common.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/js/ins.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/js/ins.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/plugins/xhtmlxtras/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/plugins/xhtmlxtras/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/about.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/about.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/anchor.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/anchor.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/charmap.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/charmap.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/color_picker.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/color_picker.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/editor_template.js [new file with mode: 0644]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/editor_template_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/editor_template_src.js with 95% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/image.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/image.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/img/colorpicker.jpg [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/img/colorpicker.jpg with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/img/flash.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/img/flash.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/img/icons.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/img/icons.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/img/iframe.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/img/iframe.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/img/pagebreak.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/img/pagebreak.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/img/quicktime.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/img/quicktime.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/img/realmedia.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/img/realmedia.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/img/shockwave.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/img/shockwave.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/img/trans.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/img/trans.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/img/video.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/img/video.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/img/windowsmedia.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/img/windowsmedia.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/js/about.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/js/about.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/js/anchor.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/js/anchor.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/js/charmap.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/js/charmap.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/js/color_picker.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/js/color_picker.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/js/image.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/js/image.js with 93% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/js/link.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/js/link.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/js/source_editor.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/js/source_editor.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/langs/en.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/langs/en.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/link.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/link.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/shortcuts.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/shortcuts.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/default/content.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/default/content.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/default/dialog.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/default/dialog.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/default/img/buttons.png [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/default/img/buttons.png with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/default/img/items.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/default/img/items.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/default/img/menu_arrow.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/default/img/menu_arrow.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/default/img/menu_check.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/default/img/menu_check.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/default/img/progress.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/default/img/progress.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/default/img/tabs.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/default/img/tabs.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/default/ui.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/default/ui.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/highcontrast/content.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/highcontrast/content.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/highcontrast/dialog.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/highcontrast/dialog.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/highcontrast/ui.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/highcontrast/ui.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/o2k7/content.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/o2k7/content.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/o2k7/dialog.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/o2k7/dialog.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/o2k7/img/button_bg.png [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/o2k7/img/button_bg.png with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/o2k7/img/button_bg_black.png [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/o2k7/img/button_bg_black.png with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/o2k7/img/button_bg_silver.png [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/o2k7/img/button_bg_silver.png with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/o2k7/ui.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/o2k7/ui.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/o2k7/ui_black.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/o2k7/ui_black.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/skins/o2k7/ui_silver.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/skins/o2k7/ui_silver.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/advanced/source_editor.htm [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/source_editor.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/simple/editor_template.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/simple/editor_template.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/simple/editor_template_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/simple/editor_template_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/simple/img/icons.gif [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/simple/img/icons.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/simple/langs/en.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/simple/langs/en.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/simple/skins/default/content.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/simple/skins/default/content.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/simple/skins/default/ui.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/simple/skins/default/ui.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/simple/skins/o2k7/content.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/simple/skins/o2k7/content.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/simple/skins/o2k7/img/button_bg.png [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/simple/skins/o2k7/img/button_bg.png with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/themes/simple/skins/o2k7/ui.css [moved from lib/editor/tinymce/tiny_mce/3.5dev1/themes/simple/skins/o2k7/ui.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/tiny_mce.js [new file with mode: 0644]
lib/editor/tinymce/tiny_mce/3.5/tiny_mce_dev.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/tiny_mce_dev.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/tiny_mce_jquery.js [new file with mode: 0644]
lib/editor/tinymce/tiny_mce/3.5/tiny_mce_jquery_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/tiny_mce_jquery_src.js with 99% similarity]
lib/editor/tinymce/tiny_mce/3.5/tiny_mce_popup.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/tiny_mce_popup.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/tiny_mce_popup_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/tiny_mce_popup_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/tiny_mce_prototype.js [new file with mode: 0644]
lib/editor/tinymce/tiny_mce/3.5/tiny_mce_prototype_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/tiny_mce_prototype_src.js with 99% similarity]
lib/editor/tinymce/tiny_mce/3.5/tiny_mce_src.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/tiny_mce_src.js with 99% similarity]
lib/editor/tinymce/tiny_mce/3.5/utils/editable_selects.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/utils/editable_selects.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/utils/form_utils.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/utils/form_utils.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/utils/mctabs.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/utils/mctabs.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5/utils/validate.js [moved from lib/editor/tinymce/tiny_mce/3.5dev1/utils/validate.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5dev1/plugins/noneditable/editor_plugin.js [deleted file]
lib/editor/tinymce/tiny_mce/3.5dev1/themes/advanced/editor_template.js [deleted file]
lib/editor/tinymce/tiny_mce/3.5dev1/tiny_mce.js [deleted file]
lib/editor/tinymce/tiny_mce/3.5dev1/tiny_mce_jquery.js [deleted file]
lib/editor/tinymce/tiny_mce/3.5dev1/tiny_mce_prototype.js [deleted file]
lib/environmentlib.php
lib/externallib.php
lib/filelib.php
lib/filestorage/file_storage.php
lib/flickrlib.php
lib/gdlib.php
lib/googleapi.php
lib/javascript-static.js
lib/javascript.php
lib/jslib.php [new file with mode: 0644]
lib/messagelib.php
lib/moodlelib.php
lib/navigationlib.php
lib/outputcomponents.php
lib/outputlib.php
lib/outputrenderers.php
lib/outputrequirementslib.php
lib/pagelib.php
lib/phpunit/bootstrap.php
lib/phpunit/generatorlib.php
lib/phpunit/lib.php
lib/pluginlib.php
lib/setup.php
lib/setuplib.php
lib/tests/moodlelib_test.php
lib/tests/outputcomponents_test.php
lib/tests/phpunit_test.php
lib/tests/weblib_test.php
lib/thirdpartylibs.xml
lib/upgradelib.php
lib/weblib.php
lib/xsendfilelib.php [new file with mode: 0644]
local/readme.txt
message/externallib.php
mod/assign/adminlib.php [new file with mode: 0644]
mod/assign/adminmanageplugins.php [new file with mode: 0644]
mod/assign/assignmentplugin.php [new file with mode: 0644]
mod/assign/backup/moodle2/backup_assign_activity_task.class.php [new file with mode: 0644]
mod/assign/backup/moodle2/backup_assign_stepslib.php [new file with mode: 0644]
mod/assign/backup/moodle2/restore_assign_activity_task.class.php [new file with mode: 0644]
mod/assign/backup/moodle2/restore_assign_stepslib.php [new file with mode: 0644]
mod/assign/db/access.php [new file with mode: 0644]
mod/assign/db/events.php [new file with mode: 0644]
mod/assign/db/install.xml [new file with mode: 0644]
mod/assign/db/log.php [new file with mode: 0644]
mod/assign/db/messages.php [new file with mode: 0644]
mod/assign/db/subplugins.php [new file with mode: 0644]
mod/assign/db/upgrade.php [new file with mode: 0644]
mod/assign/feedback/comments/backup/moodle2/backup_assignfeedback_comments_subplugin.class.php [new file with mode: 0644]
mod/assign/feedback/comments/backup/moodle2/restore_assignfeedback_comments_subplugin.class.php [new file with mode: 0644]
mod/assign/feedback/comments/db/access.php [new file with mode: 0644]
mod/assign/feedback/comments/db/install.php [new file with mode: 0644]
mod/assign/feedback/comments/db/install.xml [new file with mode: 0644]
mod/assign/feedback/comments/db/upgrade.php [new file with mode: 0644]
mod/assign/feedback/comments/lang/en/assignfeedback_comments.php [new file with mode: 0644]
mod/assign/feedback/comments/locallib.php [new file with mode: 0644]
mod/assign/feedback/comments/version.php [new file with mode: 0644]
mod/assign/feedback/file/backup/moodle2/backup_assignfeedback_file_subplugin.class.php [new file with mode: 0644]
mod/assign/feedback/file/backup/moodle2/restore_assignfeedback_file_subplugin.class.php [new file with mode: 0644]
mod/assign/feedback/file/db/access.php [new file with mode: 0644]
mod/assign/feedback/file/db/install.php [new file with mode: 0644]
mod/assign/feedback/file/db/install.xml [new file with mode: 0644]
mod/assign/feedback/file/db/upgrade.php [new file with mode: 0644]
mod/assign/feedback/file/lang/en/assignfeedback_file.php [new file with mode: 0644]
mod/assign/feedback/file/lib.php [new file with mode: 0644]
mod/assign/feedback/file/locallib.php [new file with mode: 0644]
mod/assign/feedback/file/version.php [new file with mode: 0644]
mod/assign/feedbackplugin.php [new file with mode: 0644]
mod/assign/gradeform.php [new file with mode: 0644]
mod/assign/gradingactionsform.php [new file with mode: 0644]
mod/assign/gradingbatchoperationsform.php [new file with mode: 0644]
mod/assign/gradingoptionsform.php [new file with mode: 0644]
mod/assign/gradingtable.php [new file with mode: 0644]
mod/assign/index.php [new file with mode: 0644]
mod/assign/lang/en/assign.php [new file with mode: 0644]
mod/assign/lib.php [new file with mode: 0644]
mod/assign/locallib.php [new file with mode: 0644]
mod/assign/mod_form.php [new file with mode: 0644]
mod/assign/module.js [new file with mode: 0644]
mod/assign/pix/gradefeedback.gif [new file with mode: 0644]
mod/assign/pix/icon.gif [new file with mode: 0644]
mod/assign/portfolio_callback.php [new file with mode: 0644]
mod/assign/renderable.php [new file with mode: 0644]
mod/assign/renderer.php [new file with mode: 0644]
mod/assign/settings.php [new file with mode: 0644]
mod/assign/styles.css [new file with mode: 0644]
mod/assign/submission/comments/db/access.php [new file with mode: 0644]
mod/assign/submission/comments/db/install.php [new file with mode: 0644]
mod/assign/submission/comments/db/upgrade.php [new file with mode: 0644]
mod/assign/submission/comments/lang/en/assignsubmission_comments.php [new file with mode: 0644]
mod/assign/submission/comments/lib.php [new file with mode: 0644]
mod/assign/submission/comments/locallib.php [new file with mode: 0644]
mod/assign/submission/comments/version.php [new file with mode: 0644]
mod/assign/submission/file/backup/moodle2/backup_assignsubmission_file_subplugin.class.php [new file with mode: 0644]
mod/assign/submission/file/backup/moodle2/restore_assignsubmission_file_subplugin.class.php [new file with mode: 0644]
mod/assign/submission/file/db/access.php [new file with mode: 0644]
mod/assign/submission/file/db/install.xml [new file with mode: 0644]
mod/assign/submission/file/db/upgrade.php [new file with mode: 0644]
mod/assign/submission/file/lang/en/assignsubmission_file.php [new file with mode: 0644]
mod/assign/submission/file/lib.php [new file with mode: 0644]
mod/assign/submission/file/locallib.php [new file with mode: 0644]
mod/assign/submission/file/settings.php [new file with mode: 0644]
mod/assign/submission/file/version.php [new file with mode: 0644]
mod/assign/submission/onlinetext/backup/moodle2/backup_assignsubmission_onlinetext_subplugin.class.php [new file with mode: 0644]
mod/assign/submission/onlinetext/backup/moodle2/restore_assignsubmission_onlinetext_subplugin.class.php [new file with mode: 0644]
mod/assign/submission/onlinetext/db/access.php [new file with mode: 0644]
mod/assign/submission/onlinetext/db/install.php [new file with mode: 0644]
mod/assign/submission/onlinetext/db/install.xml [new file with mode: 0644]
mod/assign/submission/onlinetext/db/upgrade.php [new file with mode: 0644]
mod/assign/submission/onlinetext/lang/en/assignsubmission_onlinetext.php [new file with mode: 0644]
mod/assign/submission/onlinetext/lib.php [new file with mode: 0644]
mod/assign/submission/onlinetext/locallib.php [new file with mode: 0644]
mod/assign/submission/onlinetext/version.php [new file with mode: 0644]
mod/assign/submission_form.php [new file with mode: 0644]
mod/assign/submissionplugin.php [new file with mode: 0644]
mod/assign/upgradelib.php [new file with mode: 0644]
mod/assign/version.php [new file with mode: 0644]
mod/assign/view.php [new file with mode: 0644]
mod/assignment/db/install.php [new file with mode: 0644]
mod/assignment/lang/en/assignment.php
mod/assignment/lib.php
mod/choice/view.php
mod/data/lib.php
mod/feedback/edit_form.php
mod/feedback/item/info/lib.php
mod/feedback/item/multichoice/lib.php
mod/feedback/item/multichoicerated/lib.php
mod/feedback/item/numeric/lib.php
mod/feedback/item/textarea/lib.php
mod/feedback/item/textfield/lib.php
mod/feedback/show_entries.php
mod/forum/lib.php
mod/forum/post.php
mod/forum/search.php
mod/forum/view.php
mod/quiz/accessmanager.php
mod/quiz/accessrule/openclosedate/rule.php
mod/quiz/accessrule/openclosedate/tests/rule_test.php
mod/quiz/accessrule/password/rule.php
mod/quiz/accessrule/securewindow/rule.php
mod/quiz/addrandom.php
mod/quiz/addrandomform.php
mod/quiz/attempt.php
mod/quiz/attemptlib.php
mod/quiz/backup/moodle1/lib.php
mod/quiz/backup/moodle2/backup_quiz_activity_task.class.php
mod/quiz/backup/moodle2/backup_quiz_stepslib.php
mod/quiz/backup/moodle2/restore_quiz_activity_task.class.php
mod/quiz/backup/moodle2/restore_quiz_stepslib.php
mod/quiz/comment.php
mod/quiz/cronlib.php [new file with mode: 0644]
mod/quiz/db/access.php
mod/quiz/db/events.php
mod/quiz/db/install.xml
mod/quiz/db/messages.php
mod/quiz/db/upgrade.php
mod/quiz/edit.php
mod/quiz/editlib.php
mod/quiz/grade.php
mod/quiz/index.php
mod/quiz/lang/en/quiz.php
mod/quiz/lib.php
mod/quiz/locallib.php
mod/quiz/mod_form.php
mod/quiz/module.js
mod/quiz/override_form.php
mod/quiz/overridedelete.php
mod/quiz/overrideedit.php
mod/quiz/overrides.php
mod/quiz/processattempt.php
mod/quiz/renderer.php
mod/quiz/report.php
mod/quiz/report/attemptsreport.php
mod/quiz/report/attemptsreport_form.php
mod/quiz/report/attemptsreport_options.php
mod/quiz/report/attemptsreport_table.php
mod/quiz/report/grading/report.php
mod/quiz/report/overview/lang/en/quiz_overview.php
mod/quiz/report/overview/overview_form.php
mod/quiz/report/overview/overview_options.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/responses/responses_form.php
mod/quiz/report/responses/responses_options.php
mod/quiz/report/responses/responses_table.php
mod/quiz/report/statistics/report.php
mod/quiz/report/statistics/responseanalysis.php
mod/quiz/report/statistics/tests/statistics_test.php
mod/quiz/review.php
mod/quiz/reviewquestion.php
mod/quiz/settings.php
mod/quiz/settingslib.php
mod/quiz/startattempt.php
mod/quiz/styles.css
mod/quiz/summary.php
mod/quiz/version.php
mod/quiz/view.php
mod/resource/backup/moodle1/lib.php
mod/scorm/api.php [deleted file]
mod/scorm/loadSCO.php
mod/scorm/loaddatamodel.php
mod/scorm/module.js
mod/scorm/player.php
mod/workshop/allocation/manual/lib.php
mod/workshop/allocation/manual/renderer.php
mod/workshop/assessment.php
mod/workshop/db/access.php
mod/workshop/fileinfolib.php
mod/workshop/lang/en/workshop.php
mod/workshop/lib.php
mod/workshop/locallib.php
mod/workshop/renderer.php
mod/workshop/styles.css
mod/workshop/submission.php
mod/workshop/view.php
notes/externallib.php
pix/i/all.gif [deleted file]
pix/i/one.gif [deleted file]
question/editlib.php
question/engine/datalib.php
question/type/calculated/questiontype.php
question/type/calculatedmulti/edit_calculatedmulti_form.php
question/type/calculatedmulti/question.php
report/participation/index.php
repository/filepicker.php
repository/picasa/lib.php
theme/base/style/course.css
theme/image.php
theme/javascript.php
theme/nimble/style/menu.css
theme/styles.php
theme/yui_combo.php
theme/yui_image.php
user/editlib.php
user/externallib.php
user/index.php
user/lib.php
version.php

index a57c23f..e95a47a 100644 (file)
@@ -25,4 +25,4 @@ CVS
 /.project
 /.buildpath
 /.cache
-/phpunit.xml
\ No newline at end of file
+phpunit.xml
\ No newline at end of file
index cd17818..4b9f456 100644 (file)
     </DATABASE>
     <PHP version="5.3.2" level="required">
     </PHP>
+    <PCREUNICODE level="optional">
+      <FEEDBACK>
+        <ON_CHECK message="pcreunicodewarning" />
+      </FEEDBACK>
+    </PCREUNICODE>
     <PHP_EXTENSIONS>
       <PHP_EXTENSION name="iconv" level="required">
         <FEEDBACK>
         </FEEDBACK>
       </PHP_SETTING>
     </PHP_SETTINGS>
-  </MOODLE>
+</MOODLE>
 </COMPATIBILITY_MATRIX>
index 8daf613..45d9026 100644 (file)
@@ -34,6 +34,10 @@ require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM));
 // Get the submitted params
 $disable    = optional_param('disable', 0, PARAM_INT);
 $enable     = optional_param('enable', 0, PARAM_INT);
+$uninstall  = optional_param('uninstall', 0, PARAM_INT);
+$confirm  = optional_param('confirm', false, PARAM_BOOL);
+
+$headingtitle = get_string('managemessageoutputs', 'message');
 
 if (!empty($disable) && confirm_sesskey()) {
     if (!$processor = $DB->get_record('message_processors', array('id'=>$disable))) {
@@ -42,14 +46,38 @@ if (!empty($disable) && confirm_sesskey()) {
     $DB->set_field('message_processors', 'enabled', '0', array('id'=>$processor->id));      // Disable output
 }
 
-if (!empty($enable) && confirm_sesskey() ) {
+if (!empty($enable) && confirm_sesskey()) {
     if (!$processor = $DB->get_record('message_processors', array('id'=>$enable))) {
         print_error('outputdoesnotexist', 'message');
     }
     $DB->set_field('message_processors', 'enabled', '1', array('id'=>$processor->id));      // Enable output
 }
 
-if ($disable || $enable) {
+if (!empty($uninstall) && confirm_sesskey()) {
+    echo $OUTPUT->header();
+    echo $OUTPUT->heading($headingtitle);
+
+    if (!$processor = $DB->get_record('message_processors', array('id'=>$uninstall))) {
+        print_error('outputdoesnotexist', 'message');
+    }
+
+    $processorname = get_string('pluginname', 'message_'.$processor->name);
+
+    if (!$confirm) {
+        echo $OUTPUT->confirm(get_string('processordeleteconfirm', 'message', $processorname), 'message.php?uninstall='.$processor->id.'&confirm=1', 'message.php');
+        echo $OUTPUT->footer();
+        exit;
+
+    } else {
+        message_processor_uninstall($processor->name);
+        $a = new stdClass();
+        $a->processor = $processorname;
+        $a->directory = $CFG->dirroot.'/message/output/'.$processor->name;
+        notice(get_string('processordeletefiles', 'message', $a), 'message.php');
+    }
+}
+
+if ($disable || $enable || $uninstall) {
     $url = new moodle_url('message.php');
     redirect($url);
 }
@@ -65,6 +93,6 @@ $messageoutputs = $renderer->manage_messageoutputs($processors);
 
 // Display the page
 echo $OUTPUT->header();
-echo $OUTPUT->heading(get_string('managemessageoutputs', 'message'));
+echo $OUTPUT->heading($headingtitle);
 echo $messageoutputs;
 echo $OUTPUT->footer();
\ No newline at end of file
index c791205..67d824a 100644 (file)
@@ -100,7 +100,6 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
     $temp->add(new admin_setting_configcheckbox('navshowmycoursecategories', new lang_string('navshowmycoursecategories', 'admin'), new lang_string('navshowmycoursecategories_help', 'admin'), 0));
     $temp->add(new admin_setting_configcheckbox('navshowallcourses', new lang_string('navshowallcourses', 'admin'), new lang_string('confignavshowallcourses', 'admin'), 0));
     $temp->add(new admin_setting_configtext('navcourselimit',new lang_string('navcourselimit','admin'),new lang_string('confignavcourselimit', 'admin'),20,PARAM_INT));
-    $temp->add(new admin_setting_configcheckbox('navlinkcoursesections', new lang_string('navlinkcoursesections', 'admin'), new lang_string('navlinkcoursesections_help', 'admin'), 0));
     $temp->add(new admin_setting_configcheckbox('usesitenameforsitepages', new lang_string('usesitenameforsitepages', 'admin'), new lang_string('configusesitenameforsitepages', 'admin'), 0));
     $temp->add(new admin_setting_configcheckbox('linkadmincategories', new lang_string('linkadmincategories', 'admin'), new lang_string('linkadmincategories_help', 'admin'), 0));
     $temp->add(new admin_setting_configcheckbox('navshowfrontpagemods', new lang_string('navshowfrontpagemods', 'admin'), new lang_string('navshowfrontpagemods_help', 'admin'), 1));
index 543346b..92722eb 100644 (file)
@@ -161,6 +161,7 @@ if ($hassiteconfig
         400 => '400',
         500 => '500');
     $temp->add(new admin_setting_configselect('backup/backup_auto_keep', new lang_string('keep'), new lang_string('backupkeephelp'), 1, $keepoptoins));
+    $temp->add(new admin_setting_configcheckbox('backup/backup_shortname', new lang_string('backup_shortname', 'admin'), new lang_string('backup_shortnamehelp', 'admin'), 0));
 
     // Automated defaults section.
     $temp->add(new admin_setting_heading('automatedsettings', new lang_string('automatedsettings','backup'), ''));
diff --git a/admin/tool/assignmentupgrade/batchupgrade.php b/admin/tool/assignmentupgrade/batchupgrade.php
new file mode 100644 (file)
index 0000000..20ebf5c
--- /dev/null
@@ -0,0 +1,47 @@
+<?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/>.
+
+/**
+ * Script to show all the assignments that have not been upgraded after the main upgrade.
+ *
+ * @package    tool_assignmentupgrade
+ * @copyright  2012 NetSpot
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+require_once(dirname(__FILE__) . '/../../../config.php');
+require_once(dirname(__FILE__) . '/locallib.php');
+require_once(dirname(__FILE__) . '/upgradableassignmentstable.php');
+require_once(dirname(__FILE__) . '/upgradableassignmentsbatchform.php');
+require_once($CFG->libdir . '/adminlib.php');
+
+require_sesskey();
+
+// admin_externalpage_setup calls require_login and checks moodle/site:config
+admin_externalpage_setup('assignmentupgrade', '', array(), tool_assignmentupgrade_url('batchupgrade'));
+$PAGE->navbar->add(get_string('batchupgrade', 'tool_assignmentupgrade'));
+
+$renderer = $PAGE->get_renderer('tool_assignmentupgrade');
+
+$confirm = required_param('confirm', PARAM_BOOL);
+if (!$confirm) {
+    print_error('invalidrequest');
+    die();
+}
+$result = tool_assignmentupgrade_upgrade_multiple_assignments(optional_param('upgradeall', 0, PARAM_BOOL),
+                                                explode(',', optional_param('selected', '', PARAM_TEXT)));
+
+echo $renderer->convert_multiple_assignments_result($result);
diff --git a/admin/tool/assignmentupgrade/index.php b/admin/tool/assignmentupgrade/index.php
new file mode 100644 (file)
index 0000000..bb7ff49
--- /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/>.
+
+/**
+ * This tool can upgrade old assignment activities to the new assignment activity type
+ *
+ * The upgrade can be done on any old assignment instance providing it is using one of the core
+ * assignment subtypes (online text, single upload, etc).
+ * The new assignment module was introduced in Moodle 2.3 and although it completely reproduces
+ * the features of the existing assignment type it wasn't designed to replace it entirely as there
+ * are many custom assignment types people use and it wouldn't be practical to try to convert them.
+ * Instead the existing assignment type will be left in core and people will be encouraged to
+ * use the new assignment type.
+ *
+ * This screen is the main entry-point to the plugin, it gives the admin a list
+ * of options available to them.
+ *
+ * @package    tool_assignmentupgrade
+ * @copyright  2012 NetSpot
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+require_once(dirname(__FILE__) . '/../../../config.php');
+require_once(dirname(__FILE__) . '/locallib.php');
+require_once($CFG->libdir . '/adminlib.php');
+
+// admin_externalpage_setup calls require_login and checks moodle/site:config
+admin_externalpage_setup('assignmentupgrade');
+
+$renderer = $PAGE->get_renderer('tool_assignmentupgrade');
+
+$actions = array();
+
+$header = get_string('pluginname', 'tool_assignmentupgrade');
+$actions[] = tool_assignmentupgrade_action::make('listnotupgraded');
+
+echo $renderer->index_page($header, $actions);
\ No newline at end of file
diff --git a/admin/tool/assignmentupgrade/lang/en/tool_assignmentupgrade.php b/admin/tool/assignmentupgrade/lang/en/tool_assignmentupgrade.php
new file mode 100644 (file)
index 0000000..3b3734b
--- /dev/null
@@ -0,0 +1,56 @@
+<?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/>.
+
+/**
+ * Strings for the assignment upgrade tool
+ *
+ * @package    tool_assignmentupgrade
+ * @copyright  2012 NetSpot
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+$string['areyousure'] = 'Are you sure?';
+$string['areyousuremessage'] = 'Are you sure you want to upgrade the assignment "{$a->name}"?';
+$string['assignmentid'] = 'Assignment ID';
+$string['assignmentnotfound'] = 'Assignment could not be found (id={$a})';
+$string['assignmenttype'] = 'Assignment type';
+$string['backtoindex'] = 'Back to index';
+$string['batchoperations'] = 'Batch operations';
+$string['batchupgrade'] = 'Upgrade multiple assignments';
+$string['confirmbatchupgrade'] = 'Confirm batch upgrade assignments';
+$string['conversioncomplete'] = 'Assignment converted';
+$string['conversionfailed'] = 'The assignment conversion was not successful. The log from the upgrade was: <br />{$a}';
+$string['listnotupgraded'] = 'List assignments that have not been upgraded';
+$string['listnotupgraded_desc'] = 'You can upgrade individual assignments from here';
+$string['noassignmentstoupgrade'] = 'There are no assignments that require upgrading';
+$string['notsupported'] = '';
+$string['notupgradedintro'] = 'This page lists the assignments created with an older version of Moodle that have not been upgraded to the new assignment module in Moodle 2.3. Not all assignments can be upgraded - if they were created with a custom assignment subtype, then that subtype will need to be upgraded to the new assignment plugin format in order to complete the upgrade.';
+$string['notupgradedtitle'] = 'Assignments not upgraded';
+$string['pluginname'] = 'Assignment upgrade helper';
+$string['select'] = 'Select';
+$string['submissions'] = 'Submissions';
+$string['supported'] = 'Upgrade';
+$string['unknown'] = 'Unknown';
+$string['upgradeassignmentsummary'] = 'Upgrade assignment: {$a->name} (Course: {$a->shortname})';
+$string['upgradeassignmentsuccess'] = 'Result: Upgrade successful';
+$string['upgradeassignmentfailed'] = 'Result: Upgrade failed. The log from the upgrade was: <br/><div class="tool_assignmentupgrade_upgradelog">{$a->log}</div>';
+$string['upgradable'] = 'Upgradable';
+$string['upgradeselected'] = 'Upgrade selected assignments';
+$string['upgradeselectedcount'] = 'Upgrade {$a} selected assignments?';
+$string['upgradeall'] = 'Upgrade all assignments';
+$string['upgradeallconfirm'] = 'Upgrade all assignments?';
+$string['upgradesingle'] = 'Upgrade single assignment';
+$string['viewcourse'] = 'View the course with the converted assignment';
diff --git a/admin/tool/assignmentupgrade/listnotupgraded.php b/admin/tool/assignmentupgrade/listnotupgraded.php
new file mode 100644 (file)
index 0000000..37605a5
--- /dev/null
@@ -0,0 +1,49 @@
+<?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/>.
+
+/**
+ * Script to show all the assignments that have not been upgraded after the main upgrade.
+ *
+ * @package    tool_assignmentupgrade
+ * @copyright  2012 NetSpot
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+require_once(dirname(__FILE__) . '/../../../config.php');
+require_once(dirname(__FILE__) . '/locallib.php');
+require_once(dirname(__FILE__) . '/upgradableassignmentstable.php');
+require_once(dirname(__FILE__) . '/upgradableassignmentsbatchform.php');
+require_once($CFG->libdir . '/adminlib.php');
+
+// admin_externalpage_setup calls require_login and checks moodle/site:config
+admin_externalpage_setup('assignmentupgrade', '', array(), tool_assignmentupgrade_url('listnotupgraded'));
+$PAGE->navbar->add(get_string('listnotupgraded', 'tool_assignmentupgrade'));
+
+$renderer = $PAGE->get_renderer('tool_assignmentupgrade');
+
+$perpage = get_user_preferences('tool_assignmentupgrade_perpage', 5);
+$assignments = new tool_assignmentupgrade_assignments_table($perpage);
+
+$batchform = new tool_assignmentupgrade_batchoperations_form();
+$data = $batchform->get_data();
+if ($data && $data->selectedassignments != '' || $data && isset($data->upgradeall)) {
+    require_sesskey();
+    echo $renderer->confirm_batch_operation_page($data);
+} else {
+    echo $renderer->assignment_list_page($assignments, $batchform);
+}
+
+
diff --git a/admin/tool/assignmentupgrade/locallib.php b/admin/tool/assignmentupgrade/locallib.php
new file mode 100644 (file)
index 0000000..89e0e24
--- /dev/null
@@ -0,0 +1,245 @@
+<?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/>.
+
+/**
+ * Assignment upgrade tool library functions
+ *
+ * @package    tool_assignmentupgrade
+ * @copyright  2012 NetSpot
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * Get the URL of a script within this plugin.
+ * @param string $script the script name, without .php. E.g. 'index'
+ * @param array $params URL parameters (optional)
+ * @return moodle_url
+ */
+function tool_assignmentupgrade_url($script, $params = array()) {
+    return new moodle_url('/admin/tool/assignmentupgrade/' . $script . '.php', $params);
+}
+
+/**
+ * Class to encapsulate the continue / cancel for batch operations
+ *
+ * @package    tool_assignmentupgrade
+ * @copyright  2012 NetSpot
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class tool_assignmentupgrade_batchoperationconfirm implements renderable {
+    /** @var string $continuemessage The message to show above the continue cancel buttons */
+    public $continuemessage = '';
+    /** @var string $continueurl The url to load if the user clicks continue */
+    public $continueurl;
+
+    /**
+     * Constructor for this class
+     * @param stdClass $data - The data from the previous batch form
+     */
+    function __construct($data) {
+        if (isset($data->upgradeselected)) {
+            $this->continuemessage = get_string('upgradeselectedcount', 'tool_assignmentupgrade', count(explode(',', $data->selectedassignments)));
+            $this->continueurl = new moodle_url('/admin/tool/assignmentupgrade/batchupgrade.php', array('upgradeselected'=>'1', 'confirm'=>'1', 'sesskey'=>sesskey(), 'selected'=>$data->selectedassignments));
+        } else if (isset($data->upgradeall)) {
+            if (!tool_assignmentupgrade_any_upgradable_assignments()) {
+                $this->continuemessage = get_string('noassignmentstoupgrade', 'tool_assignmentupgrade');
+                $this->continueurl = '';
+            } else {
+                $this->continuemessage = get_string('upgradeallconfirm', 'tool_assignmentupgrade');
+                $this->continueurl = new moodle_url('/admin/tool/assignmentupgrade/batchupgrade.php', array('upgradeall'=>'1', 'confirm'=>'1', 'sesskey'=>sesskey()));
+            }
+        }
+    }
+}
+
+
+/**
+ * Class to encapsulate one of the functionalities that this plugin offers.
+ *
+ * @package    tool_assignmentupgrade
+ * @copyright  2012 NetSpot
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class tool_assignmentupgrade_action {
+    /** @var string the name of this action. */
+    public $name;
+    /** @var moodle_url the URL to launch this action. */
+    public $url;
+    /** @var string a description of this aciton. */
+    public $description;
+
+    /**
+     * Constructor to set the fields.
+     *
+     * In order to create a new tool_assignmentupgrade_action instance you must use the tool_assignmentupgrade_action::make
+     * method.
+     *
+     * @param string $name the name of this action.
+     * @param moodle_url $url the URL to launch this action.
+     * @param string $description a description of this aciton.
+     */
+    protected function __construct($name, moodle_url $url, $description) {
+        $this->name = $name;
+        $this->url = $url;
+        $this->description = $description;
+    }
+
+    /**
+     * Make an action with standard values.
+     * @param string $shortname internal name of the action. Used to get strings and build a URL.
+     * @param array $params any URL params required.
+     * @return tool_assignmentupgrade_action
+     */
+    public static function make($shortname, $params = array()) {
+        return new self(
+                get_string($shortname, 'tool_assignmentupgrade'),
+                tool_assignmentupgrade_url($shortname, $params),
+                get_string($shortname . '_desc', 'tool_assignmentupgrade'));
+    }
+}
+
+/**
+ * Determine if there are any assignments that can be upgraded
+ * @return boolean - Are there any assignments that can be upgraded
+ */
+function tool_assignmentupgrade_any_upgradable_assignments() {
+    global $DB, $CFG;
+    require_once($CFG->dirroot . '/mod/assign/locallib.php');
+    // first find all the unique assignment types
+    $types = $DB->get_records_sql('SELECT plugin AS assignmenttype, value AS version FROM {config_plugins} WHERE name = ? AND plugin LIKE ?', array('version', 'assignment_%'));
+
+    $upgradabletypes = array();
+
+    foreach ($types as $assignment) {
+        $shorttype = substr($assignment->assignmenttype, strlen('assignment_'));
+        if (assign::can_upgrade_assignment($shorttype, $assignment->version)) {
+            $upgradabletypes[] = $shorttype;
+        }
+    }
+    $paramlist = '?';
+    foreach ($upgradabletypes as $index => $upgradabletype) {
+        if ($index > 0) {
+            $paramlist .= ', ?';
+        }
+    }
+
+    $record = $DB->get_record_sql('SELECT COUNT(id) as count from {assignment} where assignmenttype in (' . $paramlist . ')', $upgradabletypes);
+
+    return $record->count > 0;
+}
+
+/**
+ * Load a list of all the assignmentids that can be upgraded
+ * @return array of assignment ids
+ */
+function tool_assignmentupgrade_load_all_upgradable_assignmentids() {
+    global $DB, $CFG;
+    require_once($CFG->dirroot . '/mod/assign/locallib.php');
+    // first find all the unique assignment types
+    $types = $DB->get_records_sql('SELECT plugin AS assignmenttype, value AS version FROM {config_plugins} WHERE name = ? AND plugin LIKE ?', array('version', 'assignment_%'));
+
+    $upgradabletypes = array();
+
+    foreach ($types as $assignment) {
+        $shorttype = substr($assignment->assignmenttype, strlen('assignment_'));
+        if (assign::can_upgrade_assignment($shorttype, $assignment->version)) {
+            $upgradabletypes[] = $shorttype;
+        }
+    }
+    $paramlist = '?';
+    foreach ($upgradabletypes as $index => $upgradabletype) {
+        if ($index > 0) {
+            $paramlist .= ', ?';
+        }
+    }
+
+    $records = $DB->get_records_sql('SELECT id from {assignment} where assignmenttype in (' . $paramlist . ')', $upgradabletypes);
+    $ids = array();
+    foreach ($records as $record) {
+        $ids[] = $record->id;
+    }
+
+    return $ids;
+}
+
+
+/**
+ * Convert a list of assignments from the old format to the new one.
+ * @param bool $upgradeall - Upgrade all possible assignments
+ * @param array $assignmentids An array of assignment ids to upgrade
+ * @return array of $entry['assignmentsummary' => (result from tool_assignmentupgrade_get_assignment)
+ *                  $entry['success'] => boolean
+ *                  $entry['log'] => string - upgrade log
+ */
+function tool_assignmentupgrade_upgrade_multiple_assignments($upgradeall, $assignmentids) {
+    global $CFG;
+    require_once($CFG->dirroot . '/mod/assign/locallib.php');
+    require_once($CFG->dirroot . '/mod/assign/upgradelib.php');
+    $upgrades = array();
+
+    if ($upgradeall) {
+        $assignmentids = tool_assignmentupgrade_load_all_upgradable_assignmentids();
+    }
+
+    $assignment_upgrader = new assign_upgrade_manager();
+    foreach ($assignmentids as $assignmentid) {
+        $info = tool_assignmentupgrade_get_assignment($assignmentid);
+        if ($info) {
+            $log = '';
+            $success = $assignment_upgrader->upgrade_assignment($assignmentid, $log);
+        } else {
+            $success = false;
+            $log = get_string('assignmentnotfound', 'tool_assignmentupgrade', $assignmentid);
+            $info = new stdClass();
+            $info->name = get_string('unknown', 'tool_assignmentupgrade');
+            $info->shortname = get_string('unknown', 'tool_assignmentupgrade');
+        }
+
+        $upgrades[] = array('assignmentsummary'=>$info, 'success'=>$success, 'log'=>$log);
+    }
+    return $upgrades;
+}
+
+/**
+ * Convert a single assignment from the old format to the new one.
+ * @param stdClass $assignmentinfo An object containing information about this class
+ * @param string $log This gets appended to with the details of the conversion process
+ * @return boolean This is the overall result (true/false)
+ */
+function tool_assignmentupgrade_upgrade_assignment($assignmentinfo, &$log) {
+    global $CFG;
+    require_once($CFG->dirroot . '/mod/assign/locallib.php');
+    require_once($CFG->dirroot . '/mod/assign/upgradelib.php');
+    $assignment_upgrader = new assign_upgrade_manager();
+    return $assignment_upgrader->upgrade_assignment($assignmentinfo->id, $log);
+}
+
+/**
+ * Get the information about a assignment to be upgraded.
+ * @param int $assignmentid the assignment id.
+ * @return stdClass the information about that assignment.
+ */
+function tool_assignmentupgrade_get_assignment($assignmentid) {
+    global $DB;
+    return $DB->get_record_sql("
+            SELECT a.id, a.name, c.shortname, c.id AS courseid
+            FROM {assignment} a
+            JOIN {course} c ON c.id = a.course
+            WHERE a.id = ?", array($assignmentid));
+}
+
diff --git a/admin/tool/assignmentupgrade/module.js b/admin/tool/assignmentupgrade/module.js
new file mode 100644 (file)
index 0000000..829f99a
--- /dev/null
@@ -0,0 +1,66 @@
+
+M.tool_assignmentupgrade = {
+    init_upgrade_table: function(Y) {
+
+        Y.use('node', function(Y) {
+            checkboxes = Y.all('td.c0 input');
+            checkboxes.each(function(node) {
+                node.on('change', function(e) {
+                    rowelement = e.currentTarget.get('parentNode').get('parentNode');
+                    if (e.currentTarget.get('checked')) {
+                        rowelement.setAttribute('class', 'selectedrow');
+                    } else {
+                        rowelement.setAttribute('class', 'unselectedrow');
+                    }
+                });
+
+                rowelement = node.get('parentNode').get('parentNode');
+                if (node.get('checked')) {
+                    rowelement.setAttribute('class', 'selectedrow');
+                } else {
+                    rowelement.setAttribute('class', 'unselectedrow');
+                }
+            });
+        });
+
+        var selectall = Y.one('th.c0 input');
+        selectall.on('change', function(e) {
+            if (e.currentTarget.get('checked')) {
+                checkboxes = Y.all('td.c0 input');
+                checkboxes.each(function(node) {
+                    rowelement = node.get('parentNode').get('parentNode');
+                    node.set('checked', true);
+                    rowelement.setAttribute('class', 'selectedrow');
+                });
+            } else {
+                checkboxes = Y.all('td.c0 input');
+                checkboxes.each(function(node) {
+                    rowelement = node.get('parentNode').get('parentNode');
+                    node.set('checked', false);
+                    rowelement.setAttribute('class', 'unselectedrow');
+                });
+            }
+        });
+
+        var batchform = Y.one('.tool_assignmentupgrade_batchform form');
+        batchform.on('submit', function(e) {
+            checkboxes = Y.all('td.c0 input');
+            var selectedassignments = [];
+            checkboxes.each(function(node) {
+                if (node.get('checked')) {
+                    selectedassignments[selectedassignments.length] = node.get('value');
+                }
+            });
+
+            operation = Y.one('#id_operation');
+            assignmentsinput = Y.one('input.selectedassignments');
+            assignmentsinput.set('value', selectedassignments.join(','));
+            if (selectedassignments.length == 0) {
+                alert(M.str.assign.noassignmentsselected);
+                e.preventDefault();
+            }
+        });
+
+
+    }
+}
diff --git a/admin/tool/assignmentupgrade/renderer.php b/admin/tool/assignmentupgrade/renderer.php
new file mode 100644 (file)
index 0000000..16c013c
--- /dev/null
@@ -0,0 +1,278 @@
+<?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/>.
+
+/**
+ * Defines the renderer for the assignment upgrade helper plugin.
+ *
+ * @package    tool_assignmentupgrade
+ * @copyright  2012 NetSpot
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * Renderer for the assignment upgrade helper plugin.
+ *
+ * @package    tool_assignmentupgrade
+ * @copyright  2012 NetSpot
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class tool_assignmentupgrade_renderer extends plugin_renderer_base {
+
+    /**
+     * Render the index page.
+     * @param string $detected information about what sort of site was detected.
+     * @param array $actions list of actions to show on this page.
+     * @return string html to output.
+     */
+    public function index_page($detected, array $actions) {
+        $output = '';
+        $output .= $this->header();
+        $output .= $this->heading(get_string('pluginname', 'tool_assignmentupgrade'));
+        $output .= $this->box($detected);
+        $output .= html_writer::start_tag('ul');
+        foreach ($actions as $action) {
+            $output .= html_writer::tag('li',
+                    html_writer::link($action->url, $action->name) . ' - ' .
+                    $action->description);
+        }
+        $output .= html_writer::end_tag('ul');
+        $output .= $this->footer();
+        return $output;
+    }
+
+    /**
+     * Render a page that is just a simple message.
+     * @param string $message the message to display.
+     * @return string html to output.
+     */
+    public function simple_message_page($message) {
+        $output = '';
+        $output .= $this->header();
+        $output .= $this->heading($message);
+        $output .= $this->back_to_index();
+        $output .= $this->footer();
+        return $output;
+    }
+
+    /**
+     * Render the confirm batch operation page
+     * @param stdClass $data Submitted form data with list of assignments to upgrade
+     * @return string html to output.
+     */
+    public function confirm_batch_operation_page(stdClass $data) {
+        $output = '';
+        $output .= $this->header();
+
+        $output .= $this->heading(get_string('confirmbatchupgrade', 'tool_assignmentupgrade'));
+        $output .= $this->output->spacer(array(), true);
+
+        $output .= $this->container_start('tool_assignmentupgrade_confirmbatch');
+
+        $output .= $this->render(new tool_assignmentupgrade_batchoperationconfirm($data));
+        $output .= $this->container_end();
+
+        $output .= $this->back_to_index();
+        $output .= $this->footer();
+        return $output;
+    }
+
+    /**
+     * Render the confirm batch continue / cancel links
+     * @param tool_assignmentupgrade_batchoperationconfirm $confirm Wrapper class to determine the continue message and url
+     * @return string html to output.
+     */
+    public function render_tool_assignmentupgrade_batchoperationconfirm(tool_assignmentupgrade_batchoperationconfirm $confirm) {
+        $output = '';
+
+        if ($confirm->continueurl) {
+            $output .= $this->output->confirm($confirm->continuemessage, $confirm->continueurl, tool_assignmentupgrade_url('listnotupgraded'));
+        } else {
+            $output .= $this->output->box($confirm->continuemessage);
+            $output .= $this->output->continue_button(tool_assignmentupgrade_url('listnotupgraded'));
+        }
+        return $output;
+    }
+
+    /**
+     * Render the list of assignments that still need to be upgraded page.
+     * @param tool_assignmentupgrade_assignments_table $assignments of data about assignments.
+     * @param tool_assignmentupgrade_batchoperations_form $batchform Submitted form with list of assignments to upgrade
+     * @return string html to output.
+     */
+    public function assignment_list_page(tool_assignmentupgrade_assignments_table $assignments, tool_assignmentupgrade_batchoperations_form $batchform) {
+        $output = '';
+        $output .= $this->header();
+        $this->page->requires->js_init_call('M.tool_assignmentupgrade.init_upgrade_table', array());
+
+
+        $output .= $this->heading(get_string('notupgradedtitle', 'tool_assignmentupgrade'));
+        $output .= $this->box(get_string('notupgradedintro', 'tool_assignmentupgrade'));
+        $output .= $this->output->spacer(array(), true);
+
+        $output .= $this->container_start('tool_assignmentupgrade_upgradetable');
+
+        $output .= $this->flexible_table($assignments, $assignments->get_rows_per_page(), true);
+        $output .= $this->container_end();
+
+        if ($assignments->anyupgradableassignments) {
+            $output .= $this->container_start('tool_assignmentupgrade_batchform');
+            $output .= $this->moodleform($batchform);
+            $output .= $this->container_end();
+        }
+
+        $output .= $this->back_to_index();
+        $output .= $this->footer();
+        return $output;
+    }
+
+    /**
+     * Render the result of an assignment conversion
+     * @param array $assignments - An array of arrays with keys $entry['assignmentsummary', 'success', 'log']
+     *                            See convert_assignment_result for more description of these keys.
+     * @return string html to output.
+     */
+    public function convert_multiple_assignments_result($assignments) {
+        $output = '';
+        $output .= $this->header();
+        $output .= $this->heading(get_string('batchupgrade', 'tool_assignmentupgrade'));
+
+        foreach ($assignments as $assignment) {
+            $assignmentsummary = $assignment['assignmentsummary'];
+            $success = $assignment['success'];
+            $log = $assignment['log'];
+
+            $output .= $this->heading(get_string('upgradeassignmentsummary', 'tool_assignmentupgrade', $assignmentsummary), 5);
+            if ($success) {
+                $output .= $this->container(get_string('upgradeassignmentsuccess', 'tool_assignmentupgrade'));
+
+            } else {
+                $output .= $this->container(get_string('upgradeassignmentfailed', 'tool_assignmentupgrade', $assignment));
+            }
+            if (isset($assignmentsummary->courseid)) {
+                $output .= html_writer::link(new moodle_url('/course/view.php', array('id'=>$assignmentsummary->courseid)) ,get_string('viewcourse', 'tool_assignmentupgrade'));
+            }
+
+
+        }
+
+        $output .= $this->continue_button(tool_assignmentupgrade_url('listnotupgraded'));
+
+
+        $output .= $this->footer();
+        return $output;
+    }
+
+    /**
+     * Render the result of an assignment conversion
+     * @param stdClass $assignmentsummary data about the assignment to upgrade.
+     * @param bool $success Set to true if the outcome of the conversion was a success
+     * @param string $log The log from the conversion
+     * @return string html to output.
+     */
+    public function convert_assignment_result($assignmentsummary, $success, $log) {
+        $output = '';
+        $output .= $this->header();
+        $output .= $this->heading(get_string('conversioncomplete', 'tool_assignmentupgrade'));
+
+        if (!$success) {
+            $output .= get_string('conversionfailed', 'tool_assignmentupgrade', $log);
+        } else {
+            $output .= html_writer::link(new moodle_url('/course/view.php', array('id'=>$assignmentsummary->courseid)) ,get_string('viewcourse', 'tool_assignmentupgrade'));
+        }
+
+        $output .= $this->continue_button(tool_assignmentupgrade_url('listnotupgraded'));
+
+
+        $output .= $this->footer();
+        return $output;
+    }
+
+    /**
+     * Render the are-you-sure page to confirm a manual upgrade.
+     * @param stdClass $assignmentsummary data about the assignment to upgrade.
+     * @return string html to output.
+     */
+    public function convert_assignment_are_you_sure($assignmentsummary) {
+        $output = '';
+        $output .= $this->header();
+        $output .= $this->heading(get_string('areyousure', 'tool_assignmentupgrade'));
+
+        $params = array('id' => $assignmentsummary->id, 'confirmed' => 1, 'sesskey' => sesskey());
+        $output .= $this->confirm(get_string('areyousuremessage', 'tool_assignmentupgrade', $assignmentsummary),
+                new single_button(tool_assignmentupgrade_url('upgradesingle', $params), get_string('yes')),
+                tool_assignmentupgrade_url('listnotupgraded'));
+
+        $output .= $this->footer();
+        return $output;
+    }
+
+    /**
+     * Helper method dealing with the fact we can not just fetch the output of flexible_table
+     *
+     * @param flexible_table $table
+     * @param int $rowsperpage
+     * @param bool $displaylinks Show links in the table
+     * @return string HTML
+     */
+    protected function flexible_table(flexible_table $table, $rowsperpage, $displaylinks) {
+
+        $o = '';
+        ob_start();
+        $table->out($rowsperpage, $displaylinks);
+        $o = ob_get_contents();
+        ob_end_clean();
+
+        return $o;
+    }
+
+    /**
+     * Helper method dealing with the fact we can not just fetch the output of moodleforms
+     *
+     * @param moodleform $mform
+     * @return string HTML
+     */
+    protected function moodleform(moodleform $mform) {
+
+        $o = '';
+        ob_start();
+        $mform->display();
+        $o = ob_get_contents();
+        ob_end_clean();
+
+        return $o;
+    }
+
+
+    /**
+     * Render a link in a div, such as the 'Back to plugin main page' link.
+     * @param string|moodle_url $url the link URL.
+     * @param string $text the link text.
+     * @return string html to output.
+     */
+    public function end_of_page_link($url, $text) {
+        return html_writer::tag('div', html_writer::link($url, $text), array('class' => 'mdl-align'));
+    }
+
+    /**
+     * Output a link back to the plugin index page.
+     * @return string html to output.
+     */
+    public function back_to_index() {
+        return $this->end_of_page_link(tool_assignmentupgrade_url('index'), get_string('backtoindex', 'tool_assignmentupgrade'));
+    }
+}
diff --git a/admin/tool/assignmentupgrade/settings.php b/admin/tool/assignmentupgrade/settings.php
new file mode 100644 (file)
index 0000000..a637e38
--- /dev/null
@@ -0,0 +1,31 @@
+<?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/>.
+
+/**
+ * Adds this plugin to the admin menu.
+ *
+ * @package    tool_assignmentupgrade
+ * @copyright  2012 NetSpot
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die;
+
+if ($hassiteconfig) { // needs this condition or there is error on login page
+    $ADMIN->add('root', new admin_externalpage('assignmentupgrade',
+            get_string('pluginname', 'tool_assignmentupgrade'),
+            new moodle_url('/admin/tool/assignmentupgrade/index.php')));
+}
\ No newline at end of file
diff --git a/admin/tool/assignmentupgrade/styles.css b/admin/tool/assignmentupgrade/styles.css
new file mode 100644 (file)
index 0000000..0188dc4
--- /dev/null
@@ -0,0 +1,11 @@
+#page-admin-tool-assignmentupgrade-listnotupgraded .tool_assignmentupgrade_upgradetable .c0 { display: none; }
+#page-admin-tool-assignmentupgrade-listnotupgraded.jsenabled .tool_assignmentupgrade_upgradetable .c0 { display: table-cell; }
+/*
+.gradingbatchoperationsform { display: none; }
+.jsenabled .gradingbatchoperationsform { display: block; }
+*/
+
+#page-admin-tool-assignmentupgrade-listnotupgraded .tool_assignmentupgrade_upgradetable tr.selectedrow td { background-color: #ffeecc; }
+#page-admin-tool-assignmentupgrade-listnotupgraded .tool_assignmentupgrade_upgradetable tr.unselectedrow td { background-color: white; }
+
+
diff --git a/admin/tool/assignmentupgrade/upgradableassignmentsbatchform.php b/admin/tool/assignmentupgrade/upgradableassignmentsbatchform.php
new file mode 100644 (file)
index 0000000..105530a
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * This file contains the forms to create and edit an instance of this module
+ *
+ * @package   tool_assignmentupgrade
+ * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
+
+
+/** Include formslib.php */
+require_once ($CFG->libdir.'/formslib.php');
+
+/**
+ * Assignment upgrade batch operations form
+ *
+ * @package   tool_assignmentupgrade
+ * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class tool_assignmentupgrade_batchoperations_form extends moodleform {
+    /**
+     * Define this form - is called from parent constructor
+     */
+    function definition() {
+        $mform = $this->_form;
+        $instance = $this->_customdata;
+
+        $mform->addElement('header', 'general', get_string('batchoperations', 'tool_assignmentupgrade'));
+        // visible elements
+        $mform->addElement('hidden', 'selectedassignments', '', array('class'=>'selectedassignments'));
+
+        $mform->addElement('submit', 'upgradeselected', get_string('upgradeselected', 'tool_assignmentupgrade'));
+        $mform->addElement('submit', 'upgradeall', get_string('upgradeall', 'tool_assignmentupgrade'));
+    }
+
+}
+
diff --git a/admin/tool/assignmentupgrade/upgradableassignmentstable.php b/admin/tool/assignmentupgrade/upgradableassignmentstable.php
new file mode 100644 (file)
index 0000000..0e4830b
--- /dev/null
@@ -0,0 +1,172 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * This file contains the definition for the grading table which subclassses easy_table
+ *
+ * @package   tool_assignmentupgrade
+ * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+require_once($CFG->libdir.'/tablelib.php');
+require_once($CFG->libdir.'/gradelib.php');
+require_once($CFG->dirroot.'/mod/assign/locallib.php');
+
+/**
+ * Extends table_sql to provide a table of assignment submissions
+ *
+ * @package   tool_assignmentupgrade
+ * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class tool_assignmentupgrade_assignments_table extends table_sql implements renderable {
+    /** @var int $perpage */
+    private $perpage = 10;
+    /** @var int $rownum (global index of current row in table) */
+    private $rownum = -1;
+    /** @var renderer_base for getting output */
+    private $output = null;
+    /** @var boolean anyupgradableassignments - True if there is one or more assignments that can upgraded */
+    public $anyupgradableassignments = false;
+
+    /**
+     * This table loads a list of the old assignment instances and tests them to see if they can be upgraded
+     *
+     * @param int $perpage How many per page
+     * @param int $rowoffset The starting row for pagination
+     */
+    function __construct($perpage, $rowoffset=0) {
+        global $PAGE;
+        parent::__construct('tool_assignmentupgrade_assignments');
+        $this->perpage = $perpage;
+        $this->output = $PAGE->get_renderer('tool_assignmentupgrade');
+
+        $this->define_baseurl(new moodle_url('/admin/tool/assignmentupgrade/listnotupgraded.php'));
+
+        $this->anyupgradableassignments = tool_assignmentupgrade_any_upgradable_assignments();
+
+        // do some business - then set the sql
+        if ($rowoffset) {
+            $this->rownum = $rowoffset - 1;
+        }
+
+        $fields = 'a.id as id, a.name as name, a.assignmenttype as type, c.shortname as courseshortname, c.id as courseid, COUNT(s.id) as submissioncount';
+        $from = '{assignment} a JOIN {course} c ON a.course = c.id ' .
+                        ' LEFT JOIN {assignment_submissions} s ON a.id = s.assignment';
+
+
+        $where = '1 = 1';
+        $where .= ' GROUP BY a.id, a.name, a.assignmenttype, c.shortname, c.id ';
+
+        $this->set_sql($fields, $from, $where, array());
+        $this->set_count_sql('SELECT COUNT(*) FROM ' . $from, array());
+
+        $columns = array();
+        $headers = array();
+
+        $columns[] = 'select';
+        $headers[] = get_string('select', 'tool_assignmentupgrade') . '<div class="selectall"><input type="checkbox" name="selectall" title="' . get_string('selectall') . '"/></div>';
+        $columns[] = 'upgradable';
+        $headers[] = get_string('upgradable', 'tool_assignmentupgrade');
+        $columns[] = 'id';
+        $headers[] = get_string('assignmentid', 'tool_assignmentupgrade');
+        $columns[] = 'courseshortname';
+        $headers[] = get_string('course');
+        $columns[] = 'name';
+        $headers[] = get_string('name');
+        $columns[] = 'type';
+        $headers[] = get_string('assignmenttype', 'tool_assignmentupgrade');
+        $columns[] = 'submissioncount';
+        $headers[] = get_string('submissions', 'tool_assignmentupgrade');
+
+        // set the columns
+        $this->define_columns($columns);
+        $this->define_headers($headers);
+        $this->no_sorting('upgradable');
+        $this->no_sorting('select');
+    }
+
+    /**
+     * Return the number of rows to display on a single page
+     *
+     * @return int The number of rows per page
+     */
+    function get_rows_per_page() {
+        return $this->perpage;
+    }
+
+    /**
+     * Format a link to the assignment instance
+     *
+     * @param stdClass $row
+     * @return string
+     */
+    function col_name(stdClass $row) {
+        return html_writer::link(new moodle_url('/mod/assignment/view.php',
+                array('a' => $row->id)), $row->name);
+    }
+
+
+    /**
+     * Format a link to the upgrade single tool
+     *
+     * @param stdClass $row (contains cached result from previous upgradable check)
+     * @return string
+     */
+    function col_upgradable(stdClass $row) {
+        if ($row->upgradable) {
+            return html_writer::link(new moodle_url('/admin/tool/assignmentupgrade/upgradesingleconfirm.php',
+                    array('id' => $row->id, 'sesskey' => sesskey())), get_string('supported', 'tool_assignmentupgrade'));
+        } else {
+            return get_string('notsupported', 'tool_assignmentupgrade');
+        }
+    }
+
+    /**
+     * Insert a checkbox for selecting the current row for batch operations
+     *
+     * @param stdClass $row
+     * @return string
+     */
+    function col_select(stdClass $row) {
+        global $CFG;
+        $version = get_config('assignment_' . $row->type, 'version');
+        require_once($CFG->dirroot . '/mod/assign/locallib.php');
+        if (assign::can_upgrade_assignment($row->type, $version)) {
+            $row->upgradable = true;
+            return '<input type="checkbox" name="selectedassignment" value="' . $row->id . '"/>';
+        }
+        $row->upgradable = false;
+        return '';
+    }
+
+    /**
+     * Override the table show_hide_link to not show for select column
+     *
+     * @param string $column the column name, index into various names.
+     * @param int $index numerical index of the column.
+     * @return string HTML fragment.
+     */
+    protected function show_hide_link($column, $index) {
+        if ($index > 0) {
+            return parent::show_hide_link($column, $index);
+        }
+        return '';
+    }
+}
diff --git a/admin/tool/assignmentupgrade/upgradesingle.php b/admin/tool/assignmentupgrade/upgradesingle.php
new file mode 100644 (file)
index 0000000..2464ebe
--- /dev/null
@@ -0,0 +1,48 @@
+<?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/>.
+
+/**
+ * Script to show all the assignments that have not been upgraded after the main upgrade.
+ *
+ * @package    tool_assignmentupgrade
+ * @copyright  2012 NetSpot
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+require_once(dirname(__FILE__) . '/../../../config.php');
+require_once(dirname(__FILE__) . '/locallib.php');
+require_once($CFG->libdir . '/adminlib.php');
+
+require_sesskey();
+
+$assignmentid = required_param('id', PARAM_INT);
+
+// admin_externalpage_setup calls require_login and checks moodle/site:config
+admin_externalpage_setup('assignmentupgrade', '', array(), tool_assignmentupgrade_url('upgradesingle', array('id' => $assignmentid)));
+
+$PAGE->navbar->add(get_string('upgradesingle', 'tool_assignmentupgrade'));
+$renderer = $PAGE->get_renderer('tool_assignmentupgrade');
+
+$assignmentinfo = tool_assignmentupgrade_get_assignment($assignmentid);
+if (!$assignmentinfo) {
+    print_error('invalidrequest');
+    die();
+}
+
+$log = '';
+$result = tool_assignmentupgrade_upgrade_assignment($assignmentinfo, $log);
+
+echo $renderer->convert_assignment_result($assignmentinfo, $result, $log);
diff --git a/admin/tool/assignmentupgrade/upgradesingleconfirm.php b/admin/tool/assignmentupgrade/upgradesingleconfirm.php
new file mode 100644 (file)
index 0000000..0325b4a
--- /dev/null
@@ -0,0 +1,41 @@
+<?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/>.
+
+/**
+ * Script to show all the assignments that have not been upgraded after the main upgrade.
+ *
+ * @package    tool_assignmentupgrade
+ * @copyright  2012 NetSpot
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+require_once(dirname(__FILE__) . '/../../../config.php');
+require_once(dirname(__FILE__) . '/locallib.php');
+require_once($CFG->libdir . '/adminlib.php');
+
+require_sesskey();
+
+$assignmentid = required_param('id', PARAM_INT);
+
+// admin_externalpage_setup calls require_login and checks moodle/site:config
+admin_externalpage_setup('assignmentupgrade', '', array(), tool_assignmentupgrade_url('upgradesingle', array('id' => $assignmentid)));
+
+$PAGE->navbar->add(get_string('upgradesingle', 'tool_assignmentupgrade'));
+$renderer = $PAGE->get_renderer('tool_assignmentupgrade');
+
+$assignmentinfo = tool_assignmentupgrade_get_assignment($assignmentid);
+
+echo $renderer->convert_assignment_are_you_sure($assignmentinfo);
diff --git a/admin/tool/assignmentupgrade/version.php b/admin/tool/assignmentupgrade/version.php
new file mode 100644 (file)
index 0000000..8c733b3
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * Version details.
+ *
+ * @package    tool_assignmentupgrade
+ * @copyright  2012 NetSpot
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+$plugin->version   = 2012050300;
+$plugin->requires  = 2012050300;
+$plugin->component = 'tool_assignmentupgrade';
+$plugin->dependencies = array('mod_assign' => 2012050300);
index cced963..1a8cea7 100644 (file)
@@ -34,13 +34,14 @@ require_once(__DIR__.'/../../../../lib/phpunit/bootstraplib.php');
 // now get cli options
 list($options, $unrecognized) = cli_get_params(
     array(
-        'drop'        => false,
-        'install'     => false,
-        'buildconfig' => false,
-        'diag'        => false,
-        'phpunitdir'  => false,
-        'run'         => false,
-        'help'        => false,
+        'drop'                  => false,
+        'install'               => false,
+        'buildconfig'           => false,
+        'buildcomponentconfigs' => false,
+        'diag'                  => false,
+        'phpunitdir'            => false,
+        'run'                   => false,
+        'help'                  => false,
     ),
     array(
         'h' => 'help'
@@ -105,18 +106,21 @@ $diag = $options['diag'];
 $drop = $options['drop'];
 $install = $options['install'];
 $buildconfig = $options['buildconfig'];
+$buildcomponentconfigs = $options['buildcomponentconfigs'];
 
-if ($options['help'] or (!$drop and !$install and !$buildconfig and !$diag)) {
+if ($options['help'] or (!$drop and !$install and !$buildconfig and !$buildcomponentconfigs and !$diag)) {
     $help = "Various PHPUnit utility functions
 
 Options:
---drop                Drop database and dataroot
---install             Install database
---buildconfig         Build /phpunit.xml from /phpunit.xml.dist that includes suites for all plugins and core
---diag                Diagnose installation and return error code only
---run                 Execute PHPUnit tests (alternative for standard phpunit binary)
+--drop         Drop database and dataroot
+--install      Install database
+--diag         Diagnose installation and return error code only
+--run          Execute PHPUnit tests (alternative for standard phpunit binary)
+--buildconfig  Build /phpunit.xml from /phpunit.xml.dist that runs all tests
+--buildcomponentconfigs
+               Build distributed phpunit.xml files for each component
 
--h, --help            Print out this help
+-h, --help     Print out this help
 
 Example:
 \$/usr/bin/php lib/phpunit/tool.php --install
@@ -136,9 +140,13 @@ if ($diag) {
     if (phpunit_util::build_config_file()) {
         exit(0);
     } else {
-        phpunit_bootstrap_error(PHPUNIT_EXITCODE_CONFIGWARNING, 'Can not create phpunit.xml configuration file, verify dirroot permissions');
+        phpunit_bootstrap_error(PHPUNIT_EXITCODE_CONFIGWARNING, 'Can not create main /phpunit.xml configuration file, verify dirroot permissions');
     }
 
+} else if ($buildcomponentconfigs) {
+    phpunit_util::build_component_config_files();
+    exit(0);
+
 } else if ($drop) {
     // make sure tests do not run in parallel
     phpunit_util::acquire_test_lock();
index b7b296c..01476d2 100644 (file)
@@ -147,11 +147,11 @@ class ExHtmlReporter extends HtmlReporter {
      * Private method. Used by printPass/Fail/Skip/Error.
      */
     function _paintPassFail($passorfail, $message, $stacktrace = null, $debuginfo = null) {
-        global $FULLME, $CFG, $OUTPUT;
+        global $CFG, $OUTPUT;
 
         echo $OUTPUT->box_start($passorfail . ' generalbox ');
 
-        $url = $this->_htmlEntities($this->_stripParameterFromUrl($FULLME, 'path'));
+        $url = $this->_htmlEntities($this->_stripParameterFromUrl(qualified_me(), 'path'));
         echo '<b class="', $passorfail, '">', $this->get_string($passorfail), '</b>: ';
         $breadcrumb = $this->getTestList();
         array_shift($breadcrumb);
index d78fa60..781b32d 100644 (file)
@@ -226,8 +226,8 @@ function process_file ($file, $userfield, $overwrite) {
         return PIX_FILE_SKIPPED;
     }
 
-    if (my_save_profile_image($user->id, $file)) {
-        $DB->set_field('user', 'picture', 1, array('id'=>$user->id));
+    if ($newrev = my_save_profile_image($user->id, $file)) {
+        $DB->set_field('user', 'picture', $newrev, array('id'=>$user->id));
         echo $OUTPUT->notification(get_string('uploadpicture_userupdated', 'tool_uploaduser', $user->username), 'notifysuccess');
         return PIX_FILE_UPDATED;
     } else {
@@ -244,7 +244,7 @@ function process_file ($file, $userfield, $overwrite) {
  *                picture file to.
  * @param string $originalfile the full path of the picture file.
  *
- * @return bool
+ * @return mixed new unique revision number or false if not saved
  */
 function my_save_profile_image($id, $originalfile) {
     $context = get_context_instance(CONTEXT_USER, $id);
index db996f8..13e1c3d 100644 (file)
@@ -56,7 +56,7 @@ class external_service_form extends moodleform {
 
     function definition() {
         $mform = $this->_form;
-        $service = $this->_customdata;
+        $service = isset($this->_customdata) ? $this->_customdata : new stdClass();
 
         $mform->addElement('header', 'extservice',
                 get_string('externalservice', 'webservice'));
index fc0e886..1b2fd22 100644 (file)
@@ -36,7 +36,7 @@ $confirm = optional_param('confirm', 0, PARAM_BOOL);
 admin_externalpage_setup('externalservicefunctions');
 
 //define nav bar
-$PAGE->set_url('/' . $CFG->admin . '/websevice/service_functions.php', array('id' => $serviceid));
+$PAGE->set_url('/' . $CFG->admin . '/webservice/service_functions.php', array('id' => $serviceid));
 $node = $PAGE->settingsnav->find('externalservices', navigation_node::TYPE_SETTING);
 if ($node) {
     $node->make_active();
index f6938f3..0a136e8 100644 (file)
@@ -318,8 +318,8 @@ class auth_plugin_mnet extends auth_plugin_base {
                             $imagefilename = $CFG->tempdir . '/mnet-usericon-' . $localuser->id;
                             $imagecontents = base64_decode($fetchrequest->response['f1']);
                             file_put_contents($imagefilename, $imagecontents);
-                            if (process_new_icon($usercontext, 'user', 'icon', 0, $imagefilename)) {
-                                $localuser->picture = 1;
+                            if ($newrev = process_new_icon($usercontext, 'user', 'icon', 0, $imagefilename)) {
+                                $localuser->picture = $newrev;
                             }
                             unlink($imagefilename);
                         }
index 47d4040..fa12036 100644 (file)
@@ -397,7 +397,7 @@ class backup_course_structure_step extends backup_structure_step {
 
         $course = new backup_nested_element('course', array('id', 'contextid'), array(
             'shortname', 'fullname', 'idnumber',
-            'summary', 'summaryformat', 'format', 'showgrades',
+            'summary', 'summaryformat', 'format', 'coursedisplay', 'showgrades',
             'newsitems', 'startdate', 'numsections',
             'marker', 'maxbytes', 'legacyfiles', 'showreports',
             'visible', 'hiddensections', 'groupmode', 'groupmodeforce',
index 32ab61e..d25c794 100644 (file)
@@ -356,7 +356,7 @@ abstract class backup_cron_automated_helper {
                 $dir = null;
             }
             if (!empty($dir) && $storage !== 0) {
-                $filename = backup_plan_dbops::get_default_backup_filename($format, $type, $course->id, $users, $anonymised, true);
+                $filename = backup_plan_dbops::get_default_backup_filename($format, $type, $course->id, $users, $anonymised, !$config->backup_shortname);
                 $outcome = $file->copy_content_to($dir.'/'.$filename);
                 if ($outcome && $storage === 1) {
                     $file->delete();
index 4fcde0f..734e624 100644 (file)
@@ -102,15 +102,6 @@ class block_section_links extends block_base {
             }
         }
 
-        if (isloggedin()) {
-            $display = $DB->get_field('course_display', 'display', array('course'=>$this->page->course->id, 'userid'=>$USER->id));
-        }
-        if (!empty($display)) {
-            $link = $CFG->wwwroot.'/course/view.php?id='.$this->page->course->id.'&amp;'.$sectionname.'=';
-        } else {
-            $link = '#section-';
-        }
-
         $sql = "SELECT section, visible
                   FROM {course_sections}
                  WHERE course = ? AND
@@ -129,9 +120,9 @@ class block_section_links extends block_base {
                 }
                 $style = ($isvisible) ? '' : ' class="dimmed"';
                 if ($i == $highlight) {
-                    $text .= "<li><a href=\"$link$i\"$style><strong>$i</strong></a></li>\n";
+                    $text .= '<li><a href="'.course_get_url($course, $i)."\"$style><strong>$i</strong></a></li>\n";
                 } else {
-                    $text .= "<li><a href=\"$link$i\"$style>$i</a></li>\n";
+                    $text .= '<li><a href="'.course_get_url($course, $i)."\"$style>$i</a></li>\n";
                 }
             }
             $text .= '</ol>';
@@ -139,7 +130,7 @@ class block_section_links extends block_base {
                 $isvisible = $sections[$highlight]->visible;
                 if ($isvisible or has_capability('moodle/course:update', $context)) {
                     $style = ($isvisible) ? '' : ' class="dimmed"';
-                    $text .= "\n<a href=\"$link$highlight\"$style>$linktext</a>";
+                    $text .= "\n<a href=\"".course_get_url($course, $highlight)."\"$style>$linktext</a>";
                 }
             }
         }
index ee0bed8..2298682 100644 (file)
@@ -174,11 +174,6 @@ if(empty($serialized)) {
     die('bad serialization');
 }
 
-//IE compatibility HACK!
-if (ini_get_bool('zlib.output_compression')) {
-    ini_set('zlib.output_compression', 'Off');
-}
-
 $filename = 'icalexport.ics';
 
 header('Last-Modified: '. gmdate('D, d M Y H:i:s', time()) .' GMT');
index 7280f14..cfb8fba 100644 (file)
@@ -1740,6 +1740,7 @@ function calendar_get_allowed_types(&$allowed, $course = null) {
         }
         if ($course->id != SITEID) {
             $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
+            $allowed->user = has_capability('moodle/calendar:manageownentries', $coursecontext);
 
             if (has_capability('moodle/calendar:manageentries', $coursecontext)) {
                 $allowed->courses = array($course->id => 1);
@@ -2275,6 +2276,20 @@ class calendar_event {
         // Delete the event
         $DB->delete_records('event', array('id'=>$this->properties->id));
 
+        // If we are deleting parent of a repeated event series, promote the next event in the series as parent
+        if (($this->properties->id == $this->properties->repeatid) && !$deleterepeated) {
+            $newparent = $DB->get_field_sql("SELECT id from {event} where repeatid = ? order by id ASC", array($this->properties->id), IGNORE_MULTIPLE);
+            if (!empty($newparent)) {
+                $DB->execute("UPDATE {event} SET repeatid = ? WHERE repeatid = ?", array($newparent, $this->properties->id));
+                // Get all records where the repeatid is the same as the event being removed
+                $events = $DB->get_records('event', array('repeatid' => $newparent));
+                // For each of the returned events trigger the event_update hook.
+                foreach ($events as $event) {
+                    self::calendar_event_hook('update_event', array($event, false));
+                }
+            }
+        }
+
         // If the editor context hasn't already been set then set it now
         if ($this->editorcontext === null) {
             $this->editorcontext = $this->properties->context;
index 4fe8301..a2f8a7b 100644 (file)
@@ -135,7 +135,9 @@ class core_calendar_renderer extends plugin_renderer_base {
      * @return string
      */
     public function fake_block_filters($courseid, $day, $month, $year, $view, $courses) {
-        return html_writer::tag('div', calendar_filter_controls($this->page->url), array('class'=>'calendar_filters filters'));
+        $returnurl = $this->page->url;
+        $returnurl->param('course', $courseid);
+        return html_writer::tag('div', calendar_filter_controls($returnurl), array('class'=>'calendar_filters filters'));
     }
 
     /**
index 2633369..c02069e 100644 (file)
@@ -45,8 +45,13 @@ require_sesskey();
 
 $var = required_param('var', PARAM_ALPHA);
 $return = clean_param(base64_decode(required_param('return', PARAM_RAW)), PARAM_URL);
-
-$url = new moodle_url('/calendar/set.php', array('return'=>base64_encode($return),'var'=>$var, 'sesskey'=>sesskey()));
+$courseid = optional_param('id', -1, PARAM_INT);
+if ($courseid != -1) {
+    $return = new moodle_url($return, array('course' => $courseid));
+} else {
+    $return = new moodle_url($return);
+}
+$url = new moodle_url('/calendar/set.php', array('return'=>base64_encode($return->out(false)), 'course' => $courseid, 'var'=>$var, 'sesskey'=>sesskey()));
 $PAGE->set_url($url);
 $PAGE->set_context(get_context_instance(CONTEXT_SYSTEM));
 
index 31c3ee2..fbad9e0 100644 (file)
@@ -127,7 +127,7 @@ switch($view) {
         echo $renderer->show_day($calendar);
     break;
     case 'month':
-        echo $renderer->show_month_detailed($calendar);
+        echo $renderer->show_month_detailed($calendar, $url);
     break;
     case 'upcoming':
         $defaultlookahead = CALENDAR_DEFAULT_UPCOMING_LOOKAHEAD;
index fe3f357..249212c 100644 (file)
@@ -49,7 +49,7 @@ class cohort_edit_form extends moodleform {
         $mform->addElement('select', 'contextid', get_string('context', 'role'), $options);
 
         $mform->addElement('text', 'idnumber', get_string('idnumber', 'cohort'), 'maxlength="254" size="50"');
-        $mform->setType('name', PARAM_RAW);
+        $mform->setType('name', PARAM_RAW); // idnumbers are plain text, must not be changed
 
         $mform->addElement('editor', 'description_editor', get_string('description', 'cohort'), null, $editoroptions);
         $mform->setType('description_editor', PARAM_RAW);
index 0ff81bf..9c18bb7 100644 (file)
@@ -98,7 +98,7 @@ $data = array();
 foreach($cohorts['cohorts'] as $cohort) {
     $line = array();
     $line[] = format_string($cohort->name);
-    $line[] = $cohort->idnumber;
+    $line[] = s($cohort->idnumber); // plain text
     $line[] = format_text($cohort->description, $cohort->descriptionformat);
 
     $line[] = $DB->count_records('cohort_members', array('cohortid'=>$cohort->id));
index 495319c..4b3534f 100644 (file)
@@ -220,6 +220,22 @@ $CFG->admin = 'admin';
 // about students being served outdated versions of uploaded files.
 //     $CFG->filelifetime = 86400;
 //
+// Some web servers can offload the file serving from PHP process,
+// comment out one the following options to enable it in Moodle:
+//     $CFG->xsendfile = 'X-Sendfile';           // Apache {@see https://tn123.org/mod_xsendfile/}
+//     $CFG->xsendfile = 'X-LIGHTTPD-send-file'; // Lighttpd {@see http://redmine.lighttpd.net/projects/lighttpd/wiki/X-LIGHTTPD-send-file}
+//     $CFG->xsendfile = 'X-Accel-Redirect';     // Nginx {@see http://wiki.nginx.org/XSendfile}
+// If your X-Sendfile implementation (usually Nginx) uses directory aliases specify them
+// in the following array setting:
+//     $CFG->xsendfilealiases = array(
+//         '/dataroot/' => $CFG->dataroot,
+//         '/cachedir/' => '/var/www/moodle/cache',    // for custom $CFG->cachedir locations
+//         '/tempdir/'  => '/var/www/moodle/temp',     // for custom $CFG->tempdir locations
+//         '/filedir'   => '/var/www/moodle/filedir',  // for custom $CFG->filedir locations
+//     );
+//
+//
+//
 // This setting will prevent the 'My Courses' page being displayed when a student
 // logs in. The site front page will always show the same (logged-out) view.
 //     $CFG->disablemycourses = true;
diff --git a/course/addsection.php b/course/addsection.php
new file mode 100644 (file)
index 0000000..d414527
--- /dev/null
@@ -0,0 +1,37 @@
+<?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/>.
+
+
+require_once(dirname(__FILE__).'/../config.php');
+require_once($CFG->dirroot.'/course/lib.php');
+
+$courseid = required_param('courseid', PARAM_INT);
+$course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
+
+$PAGE->set_url('/course/addsection.php', array('courseid' => $courseid));
+
+// Authorisation checks.
+require_login($course);
+require_capability('moodle/course:update', context_course::instance($course->id));
+require_sesskey();
+
+// Add an additional section.
+$course->numsections++;
+$DB->update_record('course', $course);
+
+// Redirect to where we were..
+redirect(course_get_url($course));
index 6f4f57c..935b83a 100644 (file)
@@ -131,10 +131,8 @@ if ($editingon && $sesskeyprovided) {
         if ($course) {
             $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
             require_capability('moodle/course:visibility', $coursecontext);
-            // Set the visibility of the course
-            $DB->set_field('course', 'visible', $visible, array('id' => $course->id));
-            // we set the old flag when user manually changes visibility of course
-            $DB->set_field('course', 'visibleold', $visible, array('id' => $course->id));
+            // Set the visibility of the course. we set the old flag when user manually changes visibility of course.
+            $DB->update_record('course', array('id' => $course->id, 'visible' => $visible, 'visibleold' => $visible, 'timemodified' => time()));
         }
     }
 
index 44ed742..19d1f98 100644 (file)
@@ -120,6 +120,12 @@ class course_edit_form extends moodleform {
         $mform->addHelpButton('format', 'format');
         $mform->setDefault('format', $courseconfig->format);
 
+        $mform->addElement('select', 'coursedisplay', get_string('coursedisplay'),
+            array(COURSE_DISPLAY_SINGLEPAGE => get_string('coursedisplay_single'),
+                COURSE_DISPLAY_MULTIPAGE => get_string('coursedisplay_multi')));
+        $mform->addHelpButton('coursedisplay', 'coursedisplay');
+        $mform->setDefault('coursedisplay', COURSE_DISPLAY_SINGLEPAGE);
+
         for ($i = 0; $i <= $courseconfig->maxsections; $i++) {
             $sectionmenu[$i] = "$i";
         }
index ff4bad5..97f791a 100644 (file)
@@ -114,11 +114,11 @@ if ($mform->is_cancelled()) {
     } else {
         // Create a new category.
         $newcategory->description = $data->description_editor['text'];
-        $newcategory->sortorder = 999;
-        $newcategory->id = $DB->insert_record('course_categories', $newcategory);
-        $newcategory->context = get_context_instance(CONTEXT_COURSECAT, $newcategory->id);
-        $categorycontext = $newcategory->context;
-        mark_context_dirty($newcategory->context->path);
+
+        // Don't overwrite the $newcategory object as it'll be processed by file_postupdate_standard_editor in a moment
+        $category = create_course_category($newcategory);
+        $newcategory->id = $category->id;
+        $categorycontext = $category->context;
     }
 
     $newcategory = file_postupdate_standard_editor($newcategory, 'description', $editoroptions, $categorycontext, 'coursecat', 'description', 0);
index e9a065b..3bce208 100644 (file)
@@ -29,8 +29,9 @@ require_once($CFG->libdir.'/filelib.php');
 require_once('editsection_form.php');
 
 $id = required_param('id',PARAM_INT);    // Week/topic ID
+$sectionreturn = optional_param('sectionreturn', 0, PARAM_BOOL);
 
-$PAGE->set_url('/course/editsection.php', array('id'=>$id));
+$PAGE->set_url('/course/editsection.php', array('id'=>$id, 'sectionreturn'=> $sectionreturn));
 
 $section = $DB->get_record('course_sections', array('id' => $id), '*', MUST_EXIST);
 $course = $DB->get_record('course', array('id' => $section->course), '*', MUST_EXIST);
@@ -42,12 +43,18 @@ require_capability('moodle/course:update', $context);
 $editoroptions = array('context'=>$context ,'maxfiles' => EDITOR_UNLIMITED_FILES, 'maxbytes'=>$CFG->maxbytes, 'trusttext'=>false, 'noclean'=>true);
 $section = file_prepare_standard_editor($section, 'summary', $editoroptions, $context, 'course', 'section', $section->id);
 $section->usedefaultname = (is_null($section->name));
-$mform = new editsection_form(null, array('course'=>$course, 'editoroptions'=>$editoroptions));
+$mform = new editsection_form($PAGE->url, array('course'=>$course, 'editoroptions'=>$editoroptions));
 $mform->set_data($section); // set current value
 
+if ($sectionreturn) {
+    $returnurl = course_get_url($course, $section->section);
+} else {
+    $returnurl = course_get_url($course);
+}
+
 /// If data submitted, then process and store.
 if ($mform->is_cancelled()){
-    redirect($CFG->wwwroot.'/course/view.php?id='.$course->id);
+    redirect($returnurl);
 
 } else if ($data = $mform->get_data()) {
     if (empty($data->usedefaultname)) {
@@ -61,7 +68,7 @@ if ($mform->is_cancelled()){
     $DB->update_record('course_sections', $section);
     add_to_log($course->id, "course", "editsection", "editsection.php?id=$section->id", "$section->section");
     $PAGE->navigation->clear_cache();
-    redirect("view.php?id=$course->id");
+    redirect($returnurl);
 }
 
 $sectionname  = get_section_name($course, $section);
index e6a86ea..fef3647 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
 // You should have received a copy of the GNU General Public License
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
+
 /**
  * External course API
  *
- * @package    core
- * @subpackage course
- * @copyright  2010 Moodle Pty Ltd (http://moodle.com)
+ * @package    core_course
+ * @category   external
+ * @copyright  2009 Petr Skodak
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
@@ -29,13 +29,21 @@ defined('MOODLE_INTERNAL') || die;
 require_once("$CFG->libdir/externallib.php");
 
 /**
- * Course functions
+ * Course external functions
+ *
+ * @package    core_course
+ * @category   external
+ * @copyright  2011 Jerome Mouneyrac
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @since Moodle 2.2
  */
 class core_course_external extends external_api {
 
     /**
      * Returns description of method parameters
+     *
      * @return external_function_parameters
+     * @since Moodle 2.2
      */
     public static function get_course_contents_parameters() {
         return new external_function_parameters(
@@ -52,9 +60,11 @@ class core_course_external extends external_api {
 
     /**
      * Get course contents
-     * @param int $courseid
-     * @param array $options, not used yet, might be used in later version
+     *
+     * @param int $courseid course id
+     * @param array $options These options are not used yet, might be used in later version
      * @return array
+     * @since Moodle 2.2
      */
     public static function get_course_contents($courseid, $options) {
         global $CFG, $DB;
@@ -183,7 +193,9 @@ class core_course_external extends external_api {
 
     /**
      * Returns description of method result value
+     *
      * @return external_description
+     * @since Moodle 2.2
      */
     public static function get_course_contents_returns() {
         return new external_multiple_structure(
@@ -238,7 +250,9 @@ class core_course_external extends external_api {
 
     /**
      * Returns description of method parameters
+     *
      * @return external_function_parameters
+     * @since Moodle 2.2
      */
     public static function get_courses_parameters() {
         return new external_function_parameters(
@@ -255,8 +269,10 @@ class core_course_external extends external_api {
 
     /**
      * Get courses
-     * @param array $options
+     *
+     * @param array $options It contains an array (list of ids)
      * @return array
+     * @since Moodle 2.2
      */
     public static function get_courses($options) {
         global $CFG, $DB;
@@ -336,7 +352,9 @@ class core_course_external extends external_api {
 
     /**
      * Returns description of method result value
+     *
      * @return external_description
+     * @since Moodle 2.2
      */
     public static function get_courses_returns() {
         return new external_multiple_structure(
@@ -402,7 +420,9 @@ class core_course_external extends external_api {
 
     /**
      * Returns description of method parameters
+     *
      * @return external_function_parameters
+     * @since Moodle 2.2
      */
     public static function create_courses_parameters() {
         $courseconfig = get_config('moodlecourse'); //needed for many default values
@@ -471,8 +491,10 @@ class core_course_external extends external_api {
 
     /**
      * Create  courses
+     *
      * @param array $courses
      * @return array courses (id and shortname only)
+     * @since Moodle 2.2
      */
     public static function create_courses($courses) {
         global $CFG, $DB;
@@ -556,7 +578,9 @@ class core_course_external extends external_api {
 
     /**
      * Returns description of method result value
+     *
      * @return external_description
+     * @since Moodle 2.2
      */
     public static function create_courses_returns() {
         return new external_multiple_structure(
@@ -569,18 +593,82 @@ class core_course_external extends external_api {
         );
     }
 
+    /**
+     * Returns description of method parameters
+     * @return external_function_parameters
+     */
+    public static function delete_courses_parameters() {
+        return new external_function_parameters(
+            array(
+                'courseids' => new external_multiple_structure(new external_value(PARAM_INT, 'course ID')),
+            )
+        );
+    }
+
+    /**
+     * Delete courses
+     * @param array $courseids A list of course ids
+     */
+    public static function delete_courses($courseids) {
+        global $CFG, $DB;
+        require_once($CFG->dirroot."/course/lib.php");
+
+        // Parameter validation.
+        $params = self::validate_parameters(self::delete_courses_parameters(), array('courseids'=>$courseids));
+
+        $transaction = $DB->start_delegated_transaction();
+
+        foreach ($params['courseids'] as $courseid) {
+            $course = $DB->get_record('course', array('id'=>$courseid), '*', MUST_EXIST);
+
+            // Check if the context is valid.
+            $coursecontext = context_course::instance($course->id);
+            self::validate_context($coursecontext);
+
+            // Check if the current user has enought permissions.
+            if (!can_delete_course($courseid)) {
+                throw new moodle_exception('cannotdeletecategorycourse', 'error', '', format_string($course->fullname)." (id: $courseid)");
+            }
+
+            delete_course($course, false);
+        }
+
+        $transaction->allow_commit();
+
+        return null;
+    }
+
+    /**
+     * Returns description of method result value
+     * @return external_description
+     */
+    public static function delete_courses_returns() {
+        return null;
+    }
+
 }
 
 /**
- * Deprecated course functions
- * @deprecated since Moodle 2.2 please use core_course_external instead
+ * Deprecated course external functions
+ *
+ * @package    core_course
+ * @copyright  2009 Petr Skodak
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @since Moodle 2.0
+ * @deprecated Moodle 2.2 MDL-29106 - Please do not use this class any more.
+ * @todo MDL-31194 This will be deleted in Moodle 2.5.
+ * @see core_course_external
  */
 class moodle_course_external extends external_api {
 
     /**
      * Returns description of method parameters
-     * @deprecated since Moodle 2.2 please use core_course_external::get_courses_parameters instead
+     *
      * @return external_function_parameters
+     * @since Moodle 2.0
+     * @deprecated Moodle 2.2 MDL-29106 - Please do not call this function any more.
+     * @todo MDL-31194 This will be deleted in Moodle 2.5.
+     * @see core_course_external::get_courses_parameters()
      */
     public static function get_courses_parameters() {
         return core_course_external::get_courses_parameters();
@@ -588,9 +676,13 @@ class moodle_course_external extends external_api {
 
     /**
      * Get courses
+     *
      * @param array $options
-     * @deprecated since Moodle 2.2 please use core_course_external::get_courses instead
      * @return array
+     * @since Moodle 2.0
+     * @deprecated Moodle 2.2 MDL-29106 - Please do not call this function any more.
+     * @todo MDL-31194 This will be deleted in Moodle 2.5.
+     * @see core_course_external::get_courses()
      */
     public static function get_courses($options) {
         return core_course_external::get_courses($options);
@@ -598,8 +690,12 @@ class moodle_course_external extends external_api {
 
     /**
      * Returns description of method result value
-     * @deprecated since Moodle 2.2 please use core_course_external::get_courses_returns instead
+     *
      * @return external_description
+     * @since Moodle 2.0
+     * @deprecated Moodle 2.2 MDL-29106 - Please do not call this function any more.
+     * @todo MDL-31194 This will be deleted in Moodle 2.5.
+     * @see core_course_external::get_courses_returns()
      */
     public static function get_courses_returns() {
         return core_course_external::get_courses_returns();
@@ -607,8 +703,12 @@ class moodle_course_external extends external_api {
 
     /**
      * Returns description of method parameters
-     * @deprecated since Moodle 2.2 please use core_course_external::create_courses_parameters instead
+     *
      * @return external_function_parameters
+     * @since Moodle 2.0
+     * @deprecated Moodle 2.2 MDL-29106 - Please do not call this function any more.
+     * @todo MDL-31194 This will be deleted in Moodle 2.5.
+     * @see core_course_external::create_courses_parameters()
      */
     public static function create_courses_parameters() {
         return core_course_external::create_courses_parameters();
@@ -616,9 +716,13 @@ class moodle_course_external extends external_api {
 
     /**
      * Create  courses
-     * @deprecated since Moodle 2.2 please use core_course_external::create_courses instead
+     *
      * @param array $courses
      * @return array courses (id and shortname only)
+     * @since Moodle 2.0
+     * @deprecated Moodle 2.2 MDL-29106 - Please do not call this function any more.
+     * @todo MDL-31194 This will be deleted in Moodle 2.5.
+     * @see core_course_external::create_courses()
      */
     public static function create_courses($courses) {
         return core_course_external::create_courses($courses);
@@ -626,8 +730,12 @@ class moodle_course_external extends external_api {
 
     /**
      * Returns description of method result value
-     * @deprecated since Moodle 2.2 please use core_course_external::create_courses_returns instead
+     *
      * @return external_description
+     * @since Moodle 2.0
+     * @deprecated Moodle 2.2 MDL-29106 - Please do not call this function any more.
+     * @todo MDL-31194 This will be deleted in Moodle 2.5.
+     * @see core_course_external::create_courses_returns()
      */
     public static function create_courses_returns() {
         return core_course_external::create_courses_returns();
diff --git a/course/format/renderer.php b/course/format/renderer.php
new file mode 100644 (file)
index 0000000..9a36a2a
--- /dev/null
@@ -0,0 +1,578 @@
+<?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/>.
+
+/**
+ * Base renderer for outputting course formats.
+ *
+ * @package core
+ * @copyright 2012 Dan Poltawski
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @since Moodle 2.3
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+
+/**
+ * This is a convenience renderer which can be used by section based formats
+ * to reduce code duplication. It is not necessary for all course formats to
+ * use this and its likely to change in future releases.
+ *
+ * @package core
+ * @copyright 2012 Dan Poltawski
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @since Moodle 2.3
+ */
+abstract class format_section_renderer_base extends plugin_renderer_base {
+
+    /**
+     * Generate the starting container html for a list of sections
+     * @return string HTML to output.
+     */
+    abstract protected function start_section_list();
+
+    /**
+     * Generate the closing container html for a list of sections
+     * @return string HTML to output.
+     */
+    abstract protected function end_section_list();
+
+    /**
+     * Generate the title for this section page
+     * @return string the page title
+     */
+    abstract protected function page_title();
+
+    /**
+     * Generate the content to displayed on the right part of a section
+     * before course modules are included
+     *
+     * @param stdClass $section The course_section entry from DB
+     * @param stdClass $course The course entry from DB
+     * @param bool $onsectionpage true if being printed on a section page
+     * @return string HTML to output.
+     */
+    protected function section_right_content($section, $course, $onsectionpage) {
+        $o = $this->output->spacer();
+
+        if ($section->section != 0) {
+            $controls = $this->section_edit_controls($course, $section, $onsectionpage);
+            if (!empty($controls)) {
+                $o = implode('<br />', $controls);
+            }
+        }
+
+        return $o;
+    }
+
+    /**
+     * Generate the content to displayed on the left part of a section
+     * before course modules are included
+     *
+     * @param stdClass $section The course_section entry from DB
+     * @param stdClass $course The course entry from DB
+     * @param bool $onsectionpage true if being printed on a section page
+     * @return string HTML to output.
+     */
+    protected function section_left_content($section, $course, $onsectionpage) {
+        $o = $this->output->spacer();
+
+        if ($section->section != 0) {
+            // Only in the non-general sections.
+            if ($course->marker == $section->section) {
+                $o = get_accesshide(get_string('currentsection', 'format_'.$course->format));
+            }
+        }
+
+        return $o;
+    }
+
+    /**
+     * Generate the display of the header part of a section before
+     * course modules are included
+     *
+     * @param stdClass $section The course_section entry from DB
+     * @param stdClass $course The course entry from DB
+     * @param bool $onsectionpage true if being printed on a section page
+     * @return string HTML to output.
+     */
+    protected function section_header($section, $course, $onsectionpage) {
+        global $PAGE;
+
+        $o = '';
+        $currenttext = '';
+        $sectionstyle = '';
+        $linktitle = false;
+
+        if ($section->section != 0) {
+            // Only in the non-general sections.
+            if (!$section->visible) {
+                $sectionstyle = ' hidden';
+            } else if ($course->marker == $section->section) {
+                $sectionstyle = ' current';
+            }
+            $linktitle = ($course->coursedisplay == COURSE_DISPLAY_MULTIPAGE);
+        }
+
+        $o.= html_writer::start_tag('li', array('id' => 'section-'.$section->section,
+            'class' => 'section main clearfix'.$sectionstyle));
+
+        $leftcontent = $this->section_left_content($section, $course, $onsectionpage);
+        $o.= html_writer::tag('div', $leftcontent, array('class' => 'left side'));
+
+        $rightcontent = $this->section_right_content($section, $course, $onsectionpage);
+        $o.= html_writer::tag('div', $rightcontent, array('class' => 'right side'));
+        $o.= html_writer::start_tag('div', array('class' => 'content'));
+
+        if (!$onsectionpage) {
+            $title = get_section_name($course, $section);
+            if ($linktitle) {
+                $title = html_writer::link(course_get_url($course, $section->section), $title);
+            }
+            $o.= $this->output->heading($title, 3, 'sectionname');
+        }
+
+        $o.= html_writer::start_tag('div', array('class' => 'summary'));
+
+        $context = context_course::instance($section->course);
+        $summarytext = file_rewrite_pluginfile_urls($section->summary, 'pluginfile.php',
+            $context->id, 'course', 'section', $section->id);
+        $summaryformatoptions = new stdClass();
+        $summaryformatoptions->noclean = true;
+        $summaryformatoptions->overflowdiv = true;
+
+        $o.= format_text($summarytext, $section->summaryformat, $summaryformatoptions);
+
+        if ($PAGE->user_is_editing() && has_capability('moodle/course:update', $context)) {
+            $url = new moodle_url('/course/editsection.php', array('id'=>$section->id));
+
+            if ($onsectionpage) {
+                $url->param('sectionreturn', 1);
+            }
+
+            $o.= html_writer::link($url,
+                html_writer::empty_tag('img', array('src' => $this->output->pix_url('t/edit'), 'class' => 'iconsmall edit')),
+                array('title' => get_string('editsummary')));
+        }
+        $o.= html_writer::end_tag('div');
+
+        return $o;
+    }
+
+    /**
+     * Generate the display of the footer part of a section
+     *
+     * @return string HTML to output.
+     */
+    protected function section_footer() {
+        $o = html_writer::end_tag('div');
+        $o.= html_writer::end_tag('li');
+
+        return $o;
+    }
+
+    /**
+     * Generate the edit controls of a section
+     *
+     * @param stdClass $course The course entry from DB
+     * @param stdClass $section The course_section entry from DB
+     * @param bool $onsectionpage true if being printed on a section page
+     * @return array of links with edit controls
+     */
+    protected function section_edit_controls($course, $section, $onsectionpage = false) {
+        global $PAGE;
+
+        if (!$PAGE->user_is_editing()) {
+            return array();
+        }
+
+        if (!has_capability('moodle/course:update', context_course::instance($course->id))) {
+            return array();
+        }
+
+        if ($onsectionpage) {
+            $baseurl = course_get_url($course, $section->section);
+        } else {
+            $baseurl = course_get_url($course);
+        }
+        $baseurl->param('sesskey', sesskey());
+
+        $controls = array();
+
+        $url = clone($baseurl);
+        if ($section->visible) { // Show the hide/show eye.
+            $strhidefromothers = get_string('hidefromothers', 'format_'.$course->format);
+            $url->param('hide', $section->section);
+            $controls[] = html_writer::link($url,
+                html_writer::empty_tag('img', array('src' => $this->output->pix_url('i/hide'),
+                'class' => 'icon hide', 'alt' => $strhidefromothers)),
+                array('title' => $strhidefromothers, 'class' => 'editing_showhide'));
+        } else {
+            $strshowfromothers = get_string('showfromothers', 'format_'.$course->format);
+            $url->param('show',  $section->section);
+            $controls[] = html_writer::link($url,
+                html_writer::empty_tag('img', array('src' => $this->output->pix_url('i/show'),
+                'class' => 'icon hide', 'alt' => $strshowfromothers)),
+                array('title' => $strshowfromothers, 'class' => 'editing_showhide'));
+        }
+
+        if (!$onsectionpage) {
+            $url = clone($baseurl);
+            if ($section->section > 1) { // Add a arrow to move section up.
+                $url->param('section', $section->section);
+                $url->param('move', -1);
+                $strmoveup = get_string('moveup');
+
+                $controls[] = html_writer::link($url,
+                    html_writer::empty_tag('img', array('src' => $this->output->pix_url('t/up'),
+                    'class' => 'icon up', 'alt' => $strmove