Merge branch 'm24_MDL-36364_Improve_the_deletion_logic' of https://github.com/scara...
authorDan Poltawski <dan@moodle.com>
Fri, 16 Nov 2012 07:24:24 +0000 (15:24 +0800)
committerDan Poltawski <dan@moodle.com>
Fri, 16 Nov 2012 07:24:24 +0000 (15:24 +0800)
Conflicts:
cache/stores/file/lib.php

876 files changed:
admin/cli/install.php
admin/courseformats.php [new file with mode: 0644]
admin/editors.php
admin/enrol.php
admin/index.php
admin/oacleanup.php
admin/plugins.php
admin/renderer.php
admin/roles/check.php
admin/roles/lib.php
admin/settings/courses.php
admin/settings/plugins.php
admin/settings/server.php
auth/cas/auth.php
auth/cas/config.html
auth/cas/version.php
auth/ldap/auth.php
auth/ldap/config.html
auth/ldap/lang/en/auth_ldap.php
auth/ldap/version.php
auth/mnet/auth.php
auth/shibboleth/index.php
backup/cc/cc_lib/cc_convert_moodle2.php
backup/moodle2/backup_local_plugin.class.php [new file with mode: 0644]
backup/moodle2/backup_plan_builder.class.php
backup/moodle2/backup_stepslib.php
backup/moodle2/restore_local_plugin.class.php [new file with mode: 0644]
backup/moodle2/restore_plagiarism_plugin.class.php
backup/moodle2/restore_plan_builder.class.php
backup/moodle2/restore_stepslib.php
blocks/activity_modules/block_activity_modules.php
blocks/activity_modules/db/access.php [new file with mode: 0644]
blocks/activity_modules/lang/en/block_activity_modules.php
blocks/activity_modules/version.php
blocks/admin_bookmarks/block_admin_bookmarks.php
blocks/admin_bookmarks/db/access.php [new file with mode: 0644]
blocks/admin_bookmarks/lang/en/block_admin_bookmarks.php
blocks/admin_bookmarks/version.php
blocks/blog_menu/block_blog_menu.php
blocks/blog_menu/db/access.php [new file with mode: 0644]
blocks/blog_menu/lang/en/block_blog_menu.php
blocks/blog_menu/version.php
blocks/blog_recent/db/access.php [new file with mode: 0644]
blocks/blog_recent/lang/en/block_blog_recent.php
blocks/blog_recent/version.php
blocks/blog_tags/db/access.php [new file with mode: 0644]
blocks/blog_tags/lang/en/block_blog_tags.php
blocks/blog_tags/version.php
blocks/calendar_month/db/access.php [new file with mode: 0644]
blocks/calendar_month/lang/en/block_calendar_month.php
blocks/calendar_month/version.php
blocks/calendar_upcoming/db/access.php [new file with mode: 0644]
blocks/calendar_upcoming/lang/en/block_calendar_upcoming.php
blocks/calendar_upcoming/version.php
blocks/comments/db/access.php [new file with mode: 0644]
blocks/comments/lang/en/block_comments.php
blocks/comments/version.php
blocks/community/block_community.php
blocks/community/db/access.php [new file with mode: 0644]
blocks/community/lang/en/block_community.php
blocks/community/version.php
blocks/completionstatus/db/access.php [new file with mode: 0644]
blocks/completionstatus/lang/en/block_completionstatus.php
blocks/completionstatus/version.php
blocks/course_list/block_course_list.php
blocks/course_list/db/access.php [new file with mode: 0644]
blocks/course_list/lang/en/block_course_list.php
blocks/course_list/version.php
blocks/course_overview/db/access.php [new file with mode: 0644]
blocks/course_overview/lang/en/block_course_overview.php
blocks/course_overview/version.php
blocks/course_summary/db/access.php [new file with mode: 0644]
blocks/course_summary/lang/en/block_course_summary.php
blocks/course_summary/version.php
blocks/dock.js
blocks/feedback/db/access.php [new file with mode: 0644]
blocks/feedback/lang/en/block_feedback.php
blocks/feedback/version.php
blocks/glossary_random/db/access.php [new file with mode: 0644]
blocks/glossary_random/lang/en/block_glossary_random.php
blocks/glossary_random/version.php
blocks/html/db/access.php [new file with mode: 0644]
blocks/html/lang/en/block_html.php
blocks/html/version.php
blocks/login/db/access.php [new file with mode: 0644]
blocks/login/lang/en/block_login.php
blocks/login/version.php
blocks/mentees/db/access.php [new file with mode: 0644]
blocks/mentees/lang/en/block_mentees.php
blocks/mentees/version.php
blocks/messages/db/access.php [new file with mode: 0644]
blocks/messages/lang/en/block_messages.php
blocks/messages/version.php
blocks/mnet_hosts/db/access.php [new file with mode: 0644]
blocks/mnet_hosts/lang/en/block_mnet_hosts.php
blocks/mnet_hosts/version.php
blocks/moodleblock.class.php
blocks/myprofile/db/access.php [new file with mode: 0644]
blocks/myprofile/lang/en/block_myprofile.php
blocks/myprofile/version.php
blocks/navigation/block_navigation.php
blocks/navigation/db/access.php [new file with mode: 0644]
blocks/navigation/lang/en/block_navigation.php
blocks/navigation/styles.css
blocks/navigation/version.php
blocks/navigation/yui/navigation/navigation.js
blocks/news_items/db/access.php [new file with mode: 0644]
blocks/news_items/lang/en/block_news_items.php
blocks/news_items/version.php
blocks/online_users/db/access.php
blocks/online_users/lang/en/block_online_users.php
blocks/online_users/version.php
blocks/participants/block_participants.php
blocks/participants/db/access.php [new file with mode: 0644]
blocks/participants/lang/en/block_participants.php
blocks/participants/version.php
blocks/private_files/db/access.php [new file with mode: 0644]
blocks/private_files/lang/en/block_private_files.php
blocks/private_files/renderer.php
blocks/private_files/version.php
blocks/quiz_results/db/access.php [new file with mode: 0644]
blocks/quiz_results/lang/en/block_quiz_results.php
blocks/quiz_results/version.php
blocks/recent_activity/db/access.php [new file with mode: 0644]
blocks/recent_activity/lang/en/block_recent_activity.php
blocks/recent_activity/version.php
blocks/rss_client/db/access.php
blocks/rss_client/lang/en/block_rss_client.php
blocks/rss_client/version.php
blocks/search_forums/block_search_forums.php
blocks/search_forums/db/access.php [new file with mode: 0644]
blocks/search_forums/lang/en/block_search_forums.php
blocks/search_forums/version.php
blocks/section_links/block_section_links.php
blocks/section_links/db/access.php [new file with mode: 0644]
blocks/section_links/lang/en/block_section_links.php
blocks/section_links/version.php
blocks/selfcompletion/db/access.php [new file with mode: 0644]
blocks/selfcompletion/lang/en/block_selfcompletion.php
blocks/selfcompletion/version.php
blocks/settings/block_settings.php
blocks/settings/db/access.php [new file with mode: 0644]
blocks/settings/lang/en/block_settings.php
blocks/settings/renderer.php
blocks/settings/styles.css
blocks/settings/version.php
blocks/site_main_menu/block_site_main_menu.php
blocks/site_main_menu/db/access.php [new file with mode: 0644]
blocks/site_main_menu/lang/en/block_site_main_menu.php
blocks/site_main_menu/version.php
blocks/social_activities/db/access.php [new file with mode: 0644]
blocks/social_activities/lang/en/block_social_activities.php
blocks/social_activities/version.php
blocks/tag_flickr/db/access.php [new file with mode: 0644]
blocks/tag_flickr/lang/en/block_tag_flickr.php
blocks/tag_flickr/version.php
blocks/tag_youtube/db/access.php [new file with mode: 0644]
blocks/tag_youtube/lang/en/block_tag_youtube.php
blocks/tag_youtube/version.php
blocks/tags/db/access.php [new file with mode: 0644]
blocks/tags/lang/en/block_tags.php
blocks/tags/version.php
cache/README.md
cache/admin.php
cache/classes/definition.php
cache/classes/dummystore.php
cache/classes/factory.php
cache/classes/helper.php
cache/classes/interfaces.php
cache/classes/loaders.php
cache/locallib.php
cache/stores/file/addinstanceform.php
cache/stores/file/lang/en/cachestore_file.php
cache/stores/file/lib.php
cache/stores/memcache/lib.php
cache/stores/memcached/lib.php
cache/stores/mongodb/lib.php
cache/stores/session/lib.php
cache/stores/static/lib.php
cache/testperformance.php
cache/tests/cache_test.php
cache/tests/locallib_test.php
calendar/lib.php
calendar/managesubscriptions_form.php
calendar/renderer.php
cohort/assign.php
comment/comment.js
course/category.php
course/changenumsections.php
course/dndupload.js
course/edit.php
course/edit_form.php
course/editsection.php
course/editsection_form.php
course/externallib.php
course/format/formatlegacy.php
course/format/lib.php
course/format/renderer.php
course/format/scorm/config.php [deleted file]
course/format/scorm/lib.php
course/format/scorm/version.php
course/format/social/config.php [deleted file]
course/format/social/lib.php
course/format/social/version.php
course/format/topics/config.php [deleted file]
course/format/topics/format.php
course/format/topics/lib.php
course/format/topics/styles.css
course/format/topics/version.php
course/format/upgrade.txt
course/format/weeks/config.php [deleted file]
course/format/weeks/format.php
course/format/weeks/lib.php
course/format/weeks/renderer.php
course/format/weeks/styles.css
course/format/weeks/version.php
course/index.php
course/lib.php
course/renderer.php
course/search.php
course/tests/courselib_test.php
course/tests/externallib_test.php
course/yui/dragdrop/dragdrop.js
course/yui/formatchooser/formatchooser.js [new file with mode: 0644]
course/yui/toolboxes/toolboxes.js
enrol/database/lib.php
enrol/database/tests/sync_test.php
enrol/imsenterprise/lib.php
enrol/ldap/lib.php
enrol/ldap/settings.php
enrol/ldap/settingslib.php
enrol/ldap/version.php
enrol/manual/lib.php
enrol/paypal/return.php
enrol/renderer.php
enrol/self/edit.php
enrol/self/edit_form.php
enrol/self/lib.php
enrol/tests/enrollib_test.php [new file with mode: 0644]
files/renderer.php
grade/edit/tree/calculation.php
grade/edit/tree/grade.php
grade/lib.php
grade/report/user/lib.php
index.php
install.php
install/lang/ms/moodle.php
lang/en/admin.php
lang/en/editor.php
lang/en/error.php
lang/en/moodle.php
lang/en/plugin.php
lang/en/portfolio.php
lang/en/repository.php
lang/en/role.php
lib/adminlib.php
lib/ajax/getnavbranch.php
lib/blocklib.php
lib/csslib.php
lib/csvlib.class.php
lib/db/access.php
lib/db/caches.php
lib/db/install.php
lib/db/install.xml
lib/db/upgrade.php
lib/deprecatedlib.php
lib/editor/tinymce/lib.php
lib/editor/tinymce/plugins/dragmath/dragmath.php
lib/editor/tinymce/plugins/loader.php
lib/editor/tinymce/plugins/moodleemoticon/dialog.php
lib/editor/tinymce/plugins/spellchecker/classes/GoogleSpell.php
lib/editor/tinymce/readme_moodle.txt
lib/editor/tinymce/tiny_mce/3.5.7/plugins/inlinepopups/editor_plugin.js [deleted file]
lib/editor/tinymce/tiny_mce/3.5.7b/langs/en.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/langs/en.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/license.txt [moved from lib/editor/tinymce/tiny_mce/3.5.7/license.txt with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advhr/css/advhr.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advhr/css/advhr.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advhr/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advhr/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advhr/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advhr/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advhr/js/rule.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advhr/js/rule.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advhr/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advhr/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advhr/rule.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advhr/rule.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advimage/css/advimage.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advimage/css/advimage.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advimage/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advimage/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advimage/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advimage/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advimage/image.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advimage/image.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advimage/img/sample.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advimage/img/sample.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advimage/js/image.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advimage/js/image.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advimage/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advimage/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advlink/css/advlink.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advlink/css/advlink.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advlink/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advlink/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advlink/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advlink/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advlink/js/advlink.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advlink/js/advlink.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advlink/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advlink/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advlink/link.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advlink/link.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advlist/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advlist/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/advlist/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/advlist/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/autolink/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/autolink/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/autolink/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/autolink/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/autoresize/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/autoresize/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/autoresize/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/autoresize/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/autosave/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/autosave/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/autosave/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/autosave/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/autosave/langs/en.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/autosave/langs/en.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/bbcode/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/bbcode/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/bbcode/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/bbcode/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/contextmenu/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/contextmenu/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/contextmenu/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/contextmenu/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/directionality/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/directionality/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/directionality/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/directionality/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/emotions.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/emotions.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/img/smiley-cool.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/img/smiley-cool.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/img/smiley-cry.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/img/smiley-cry.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/img/smiley-embarassed.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/img/smiley-embarassed.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/img/smiley-foot-in-mouth.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/img/smiley-foot-in-mouth.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/img/smiley-frown.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/img/smiley-frown.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/img/smiley-innocent.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/img/smiley-innocent.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/img/smiley-kiss.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/img/smiley-kiss.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/img/smiley-laughing.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/img/smiley-laughing.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/img/smiley-money-mouth.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/img/smiley-money-mouth.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/img/smiley-sealed.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/img/smiley-sealed.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/img/smiley-smile.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/img/smiley-smile.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/img/smiley-surprised.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/img/smiley-surprised.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/img/smiley-tongue-out.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/img/smiley-tongue-out.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/img/smiley-undecided.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/img/smiley-undecided.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/img/smiley-wink.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/img/smiley-wink.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/img/smiley-yell.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/img/smiley-yell.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/js/emotions.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/js/emotions.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/emotions/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/emotions/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/example/dialog.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/example/dialog.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/example/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/example/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/example/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/example/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/example/img/example.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/example/img/example.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/example/js/dialog.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/example/js/dialog.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/example/langs/en.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/example/langs/en.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/example/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/example/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/example_dependency/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/example_dependency/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/example_dependency/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/example_dependency/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/fullpage/css/fullpage.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/fullpage/css/fullpage.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/fullpage/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/fullpage/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/fullpage/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/fullpage/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/fullpage/fullpage.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/fullpage/fullpage.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/fullpage/js/fullpage.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/fullpage/js/fullpage.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/fullpage/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/fullpage/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/fullscreen/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/fullscreen/editor_plugin.js with 54% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/fullscreen/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/fullscreen/editor_plugin_src.js with 96% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/fullscreen/fullscreen.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/fullscreen/fullscreen.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/iespell/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/iespell/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/iespell/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/iespell/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/inlinepopups/editor_plugin.js [new file with mode: 0644]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/inlinepopups/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/inlinepopups/editor_plugin_src.js with 96% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/inlinepopups/skins/clearlooks2/img/alert.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/inlinepopups/skins/clearlooks2/img/alert.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/inlinepopups/skins/clearlooks2/img/button.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/inlinepopups/skins/clearlooks2/img/button.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/inlinepopups/skins/clearlooks2/img/corners.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/inlinepopups/skins/clearlooks2/img/corners.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/inlinepopups/skins/clearlooks2/window.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/inlinepopups/skins/clearlooks2/window.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/inlinepopups/template.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/inlinepopups/template.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/insertdatetime/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/insertdatetime/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/insertdatetime/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/insertdatetime/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/layer/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/layer/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/layer/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/layer/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/legacyoutput/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/legacyoutput/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/legacyoutput/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/legacyoutput/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/lists/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/lists/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/lists/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/lists/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/media/css/media.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/media/css/media.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/media/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/media/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/media/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/media/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/media/js/embed.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/media/js/embed.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/media/js/media.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/media/js/media.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/media/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/media/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/media/media.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/media/media.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/media/moxieplayer.swf [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/media/moxieplayer.swf with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/nonbreaking/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/nonbreaking/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/nonbreaking/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/nonbreaking/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/noneditable/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/noneditable/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/noneditable/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/noneditable/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/pagebreak/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/pagebreak/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/pagebreak/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/pagebreak/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/paste/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/paste/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/paste/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/paste/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/paste/js/pastetext.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/paste/js/pastetext.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/paste/js/pasteword.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/paste/js/pasteword.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/paste/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/paste/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/paste/pastetext.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/paste/pastetext.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/paste/pasteword.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/paste/pasteword.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/preview/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/preview/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/preview/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/preview/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/preview/example.html [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/preview/example.html with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/preview/jscripts/embed.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/preview/jscripts/embed.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/preview/preview.html [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/preview/preview.html with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/print/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/print/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/print/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/print/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/save/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/save/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/save/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/save/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/searchreplace/css/searchreplace.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/searchreplace/css/searchreplace.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/searchreplace/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/searchreplace/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/searchreplace/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/searchreplace/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/searchreplace/js/searchreplace.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/searchreplace/js/searchreplace.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/searchreplace/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/searchreplace/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/searchreplace/searchreplace.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/searchreplace/searchreplace.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/spellchecker/css/content.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/spellchecker/css/content.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/spellchecker/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/spellchecker/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/spellchecker/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/spellchecker/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/spellchecker/img/wline.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/spellchecker/img/wline.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/style/css/props.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/style/css/props.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/style/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/style/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/style/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/style/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/style/js/props.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/style/js/props.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/style/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/style/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/style/props.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/style/props.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/style/readme.txt [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/style/readme.txt with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/tabfocus/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/tabfocus/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/tabfocus/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/tabfocus/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/table/cell.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/table/cell.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/table/css/cell.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/table/css/cell.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/table/css/row.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/table/css/row.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/table/css/table.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/table/css/table.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/table/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/table/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/table/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/table/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/table/js/cell.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/table/js/cell.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/table/js/merge_cells.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/table/js/merge_cells.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/table/js/row.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/table/js/row.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/table/js/table.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/table/js/table.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/table/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/table/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/table/merge_cells.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/table/merge_cells.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/table/row.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/table/row.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/table/table.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/table/table.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/template/blank.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/template/blank.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/template/css/template.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/template/css/template.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/template/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/template/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/template/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/template/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/template/js/template.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/template/js/template.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/template/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/template/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/template/template.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/template/template.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/visualblocks/css/visualblocks.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/visualblocks/css/visualblocks.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/visualblocks/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/visualblocks/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/visualblocks/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/visualblocks/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/visualchars/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/visualchars/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/visualchars/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/visualchars/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/wordcount/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/wordcount/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/wordcount/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/wordcount/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/abbr.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/abbr.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/acronym.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/acronym.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/attributes.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/attributes.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/cite.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/cite.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/css/attributes.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/css/attributes.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/css/popup.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/css/popup.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/del.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/del.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/editor_plugin.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/editor_plugin.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/editor_plugin_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/editor_plugin_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/ins.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/ins.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/js/abbr.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/js/abbr.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/js/acronym.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/js/acronym.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/js/attributes.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/js/attributes.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/js/cite.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/js/cite.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/js/del.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/js/del.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/js/element_common.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/js/element_common.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/js/ins.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/js/ins.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/plugins/xhtmlxtras/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/plugins/xhtmlxtras/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/about.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/about.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/anchor.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/anchor.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/charmap.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/charmap.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/color_picker.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/color_picker.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/editor_template.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/editor_template.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/editor_template_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/editor_template_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/image.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/image.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/img/colorpicker.jpg [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/img/colorpicker.jpg with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/img/flash.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/img/flash.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/img/icons.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/img/icons.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/img/iframe.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/img/iframe.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/img/pagebreak.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/img/pagebreak.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/img/quicktime.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/img/quicktime.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/img/realmedia.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/img/realmedia.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/img/shockwave.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/img/shockwave.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/img/trans.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/img/trans.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/img/video.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/img/video.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/img/windowsmedia.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/img/windowsmedia.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/js/about.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/js/about.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/js/anchor.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/js/anchor.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/js/charmap.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/js/charmap.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/js/color_picker.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/js/color_picker.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/js/image.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/js/image.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/js/link.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/js/link.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/js/source_editor.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/js/source_editor.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/langs/en.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/langs/en.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/langs/en_dlg.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/langs/en_dlg.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/link.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/link.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/shortcuts.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/shortcuts.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/default/content.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/default/content.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/default/dialog.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/default/dialog.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/default/img/buttons.png [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/default/img/buttons.png with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/default/img/items.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/default/img/items.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/default/img/menu_arrow.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/default/img/menu_arrow.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/default/img/menu_check.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/default/img/menu_check.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/default/img/progress.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/default/img/progress.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/default/img/tabs.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/default/img/tabs.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/default/ui.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/default/ui.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/highcontrast/content.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/highcontrast/content.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/highcontrast/dialog.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/highcontrast/dialog.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/highcontrast/ui.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/highcontrast/ui.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/o2k7/content.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/o2k7/content.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/o2k7/dialog.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/o2k7/dialog.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/o2k7/img/button_bg.png [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/o2k7/img/button_bg.png with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/o2k7/img/button_bg_black.png [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/o2k7/img/button_bg_black.png with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/o2k7/img/button_bg_silver.png [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/o2k7/img/button_bg_silver.png with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/o2k7/ui.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/o2k7/ui.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/o2k7/ui_black.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/o2k7/ui_black.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/skins/o2k7/ui_silver.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/skins/o2k7/ui_silver.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/advanced/source_editor.htm [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/advanced/source_editor.htm with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/simple/editor_template.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/simple/editor_template.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/simple/editor_template_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/simple/editor_template_src.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/simple/img/icons.gif [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/simple/img/icons.gif with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/simple/langs/en.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/simple/langs/en.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/simple/skins/default/content.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/simple/skins/default/content.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/simple/skins/default/ui.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/simple/skins/default/ui.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/simple/skins/o2k7/content.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/simple/skins/o2k7/content.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/simple/skins/o2k7/img/button_bg.png [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/simple/skins/o2k7/img/button_bg.png with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/themes/simple/skins/o2k7/ui.css [moved from lib/editor/tinymce/tiny_mce/3.5.7/themes/simple/skins/o2k7/ui.css with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/tiny_mce.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/tiny_mce.js with 59% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/tiny_mce_popup.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/tiny_mce_popup.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/tiny_mce_src.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/tiny_mce_src.js with 96% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/utils/editable_selects.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/utils/editable_selects.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/utils/form_utils.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/utils/form_utils.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/utils/mctabs.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/utils/mctabs.js with 100% similarity]
lib/editor/tinymce/tiny_mce/3.5.7b/utils/validate.js [moved from lib/editor/tinymce/tiny_mce/3.5.7/utils/validate.js with 100% similarity]
lib/editor/tinymce/version.php
lib/enrollib.php
lib/filelib.php
lib/form/dndupload.js
lib/form/editor.php
lib/form/filemanager.js
lib/form/filemanager.php
lib/googleapi.php
lib/grade/grade_item.php
lib/grade/tests/grade_item_test.php
lib/gradelib.php
lib/installlib.php
lib/javascript-static.js
lib/jslib.php
lib/ldaplib.php
lib/messagelib.php
lib/minify/lib/JSMin.php [deleted file]
lib/minify/readme_moodle.txt
lib/modinfolib.php
lib/moodlelib.php
lib/navigationlib.php
lib/outputcomponents.php
lib/outputlib.php
lib/outputrenderers.php
lib/outputrequirementslib.php
lib/pagelib.php
lib/phpunit/classes/util.php
lib/pluginlib.php
lib/portfolio/exporter.php
lib/portfoliolib.php
lib/setup.php
lib/setuplib.php
lib/statslib.php
lib/tests/csvclass_test.php
lib/tests/fixtures/statslib-test00.xml [new file with mode: 0644]
lib/tests/fixtures/statslib-test01.xml [new file with mode: 0644]
lib/tests/fixtures/statslib-test02.xml [new file with mode: 0644]
lib/tests/fixtures/statslib-test03.xml [new file with mode: 0644]
lib/tests/fixtures/statslib-test04.xml [new file with mode: 0644]
lib/tests/fixtures/statslib-test05.xml [new file with mode: 0644]
lib/tests/fixtures/statslib-test06.xml [new file with mode: 0644]
lib/tests/fixtures/statslib-test07.xml [new file with mode: 0644]
lib/tests/fixtures/statslib-test08.xml [new file with mode: 0644]
lib/tests/fixtures/statslib-test09.xml [new file with mode: 0644]
lib/tests/fixtures/statslib-test10.xml [new file with mode: 0644]
lib/tests/fixtures/tabfile.csv [new file with mode: 0644]
lib/tests/gradelib_test.php [new file with mode: 0644]
lib/tests/messagelib_test.php [new file with mode: 0644]
lib/tests/modinfolib_test.php [new file with mode: 0644]
lib/tests/moodlelib_test.php
lib/tests/outputlib_test.php
lib/tests/pluginlib_test.php
lib/tests/statslib_test.php [new file with mode: 0644]
lib/upgradelib.php
lib/weblib.php
lib/yui/chooserdialogue/chooserdialogue.js
lib/yui/dragdrop/dragdrop.js
mdeploy.php [new file with mode: 0644]
mdeploytest.php [new file with mode: 0644]
mnet/service/enrol/course.php
mod/assign/gradingtable.php
mod/assign/lang/en/assign.php
mod/assign/locallib.php
mod/assign/module.js
mod/assign/pix/icon.png [new file with mode: 0644]
mod/assign/pix/icon.svg [new file with mode: 0644]
mod/assign/portfolio_callback.php [deleted file]
mod/assign/renderable.php
mod/assignment/lib.php
mod/assignment/pix/icon.png [new file with mode: 0644]
mod/assignment/pix/icon.svg [new file with mode: 0644]
mod/assignment/renderer.php
mod/assignment/type/online/assignment.class.php
mod/assignment/type/upload/assignment.class.php
mod/assignment/type/uploadsingle/assignment.class.php
mod/book/pix/icon.png
mod/book/pix/icon.svg [new file with mode: 0644]
mod/chat/lib.php
mod/chat/pix/icon.png [new file with mode: 0644]
mod/chat/pix/icon.svg [new file with mode: 0644]
mod/chat/report.php
mod/chat/upgrade.txt [new file with mode: 0644]
mod/choice/pix/icon.png [new file with mode: 0644]
mod/choice/pix/icon.svg [new file with mode: 0644]
mod/data/field/url/field.class.php
mod/data/import.php
mod/data/lib.php
mod/data/pix/icon.png [new file with mode: 0644]
mod/data/pix/icon.svg [new file with mode: 0644]
mod/data/view.php
mod/feedback/lib.php
mod/feedback/pix/icon.png [new file with mode: 0644]
mod/feedback/pix/icon.svg [new file with mode: 0644]
mod/folder/pix/icon.png [new file with mode: 0644]
mod/folder/pix/icon.svg [new file with mode: 0644]
mod/forum/discuss.php
mod/forum/lib.php
mod/forum/pix/icon.png [new file with mode: 0644]
mod/forum/pix/icon.svg [new file with mode: 0644]
mod/glossary/export.php
mod/glossary/lib.php
mod/glossary/pix/icon.png [new file with mode: 0644]
mod/glossary/pix/icon.svg [new file with mode: 0644]
mod/imscp/pix/icon.png [new file with mode: 0644]
mod/imscp/pix/icon.svg [new file with mode: 0644]
mod/label/pix/icon.png [new file with mode: 0644]
mod/label/pix/icon.svg [new file with mode: 0644]
mod/lesson/essay.php
mod/lesson/pix/icon.png [new file with mode: 0644]
mod/lesson/pix/icon.svg [new file with mode: 0644]
mod/lti/pix/icon.png [new file with mode: 0644]
mod/lti/pix/icon.svg [new file with mode: 0644]
mod/lti/tests/generator/lib.php [new file with mode: 0644]
mod/lti/tests/generator_test.php [new file with mode: 0644]
mod/page/pix/icon.png [new file with mode: 0644]
mod/page/pix/icon.svg [new file with mode: 0644]
mod/quiz/editlib.php
mod/quiz/lib.php
mod/quiz/module.js
mod/quiz/pix/icon.png
mod/quiz/pix/icon.svg [new file with mode: 0644]
mod/quiz/tests/generator/lib.php [new file with mode: 0644]
mod/resource/lib.php
mod/resource/pix/icon.png [new file with mode: 0644]
mod/resource/pix/icon.svg [new file with mode: 0644]
mod/scorm/datamodel.php
mod/scorm/lib.php
mod/scorm/pix/icon.png [new file with mode: 0644]
mod/scorm/pix/icon.svg [new file with mode: 0644]
mod/survey/lang/en/survey.php
mod/survey/pix/icon.png [new file with mode: 0644]
mod/survey/pix/icon.svg [new file with mode: 0644]
mod/url/lib.php
mod/url/locallib.php
mod/url/pix/icon.png [new file with mode: 0644]
mod/url/pix/icon.svg [new file with mode: 0644]
mod/wiki/pix/icon.png [new file with mode: 0644]
mod/wiki/pix/icon.svg [new file with mode: 0644]
mod/workshop/backup/moodle1/lib.php
mod/workshop/backup/moodle2/backup_workshop_stepslib.php
mod/workshop/backup/moodle2/restore_workshop_activity_task.class.php
mod/workshop/backup/moodle2/restore_workshop_stepslib.php
mod/workshop/db/install.xml
mod/workshop/db/upgrade.php
mod/workshop/lang/en/workshop.php
mod/workshop/lib.php
mod/workshop/locallib.php
mod/workshop/mod_form.php
mod/workshop/pix/icon.png [new file with mode: 0644]
mod/workshop/pix/icon.svg [new file with mode: 0644]
mod/workshop/renderer.php
mod/workshop/styles.css
mod/workshop/version.php
mod/workshop/view.php
pix/help.png [new file with mode: 0644]
pix/help.svg [new file with mode: 0644]
pix/i/assignroles.png [new file with mode: 0644]
pix/i/assignroles.svg [new file with mode: 0644]
pix/i/backup.png [new file with mode: 0644]
pix/i/backup.svg [new file with mode: 0644]
pix/i/checkpermissions.png [new file with mode: 0644]
pix/i/checkpermissions.svg [new file with mode: 0644]
pix/i/cohort.png [new file with mode: 0644]
pix/i/cohort.svg [new file with mode: 0644]
pix/i/dragdrop.png [new file with mode: 0644]
pix/i/dragdrop.svg [new file with mode: 0644]
pix/i/edit.png [new file with mode: 0644]
pix/i/edit.svg [new file with mode: 0644]
pix/i/enrolusers.png [new file with mode: 0644]
pix/i/enrolusers.svg [new file with mode: 0644]
pix/i/export.png [new file with mode: 0644]
pix/i/export.svg [new file with mode: 0644]
pix/i/filter.png [new file with mode: 0644]
pix/i/filter.svg [new file with mode: 0644]
pix/i/grades.png [new file with mode: 0644]
pix/i/grades.svg [new file with mode: 0644]
pix/i/group.png [new file with mode: 0644]
pix/i/group.svg [new file with mode: 0644]
pix/i/hide.png [new file with mode: 0644]
pix/i/hide.svg [new file with mode: 0644]
pix/i/import.png [new file with mode: 0644]
pix/i/import.svg [new file with mode: 0644]
pix/i/info.png [new file with mode: 0644]
pix/i/info.svg [new file with mode: 0644]
pix/i/item.png [new file with mode: 0644]
pix/i/item.svg [new file with mode: 0644]
pix/i/marked.png [new file with mode: 0644]
pix/i/marked.svg [new file with mode: 0644]
pix/i/marker.png [new file with mode: 0644]
pix/i/marker.svg [new file with mode: 0644]
pix/i/move_2d.png [new file with mode: 0644]
pix/i/move_2d.svg [new file with mode: 0644]
pix/i/navigationitem.png
pix/i/navigationitem.svg [new file with mode: 0644]
pix/i/outcomes.png [new file with mode: 0644]
pix/i/outcomes.svg [new file with mode: 0644]
pix/i/permissions.png [new file with mode: 0644]
pix/i/permissions.svg [new file with mode: 0644]
pix/i/publish.png
pix/i/publish.svg [new file with mode: 0644]
pix/i/report.png [new file with mode: 0644]
pix/i/report.svg [new file with mode: 0644]
pix/i/repository.png
pix/i/repository.svg [new file with mode: 0644]
pix/i/restore.png [new file with mode: 0644]
pix/i/restore.svg [new file with mode: 0644]
pix/i/return.png [new file with mode: 0644]
pix/i/return.svg [new file with mode: 0644]
pix/i/rss.png [new file with mode: 0644]
pix/i/rss.svg [new file with mode: 0644]
pix/i/scales.png [new file with mode: 0644]
pix/i/scales.svg [new file with mode: 0644]
pix/i/settings.png [new file with mode: 0644]
pix/i/settings.svg [new file with mode: 0644]
pix/i/show.png [new file with mode: 0644]
pix/i/show.svg [new file with mode: 0644]
pix/i/switchrole.png [new file with mode: 0644]
pix/i/switchrole.svg [new file with mode: 0644]
pix/i/user.png [new file with mode: 0644]
pix/i/user.svg [new file with mode: 0644]
pix/i/users.png [new file with mode: 0644]
pix/i/users.svg [new file with mode: 0644]
pix/i/withsubcat.png
pix/i/withsubcat.svg [new file with mode: 0644]
pix/t/add.png [new file with mode: 0644]
pix/t/add.svg [new file with mode: 0644]
pix/t/assignroles.png [new file with mode: 0644]
pix/t/assignroles.svg [new file with mode: 0644]
pix/t/backup.png [new file with mode: 0644]
pix/t/backup.svg [new file with mode: 0644]
pix/t/block_to_dock.png
pix/t/block_to_dock.svg [new file with mode: 0644]
pix/t/block_to_dock_rtl.png [new file with mode: 0644]
pix/t/block_to_dock_rtl.svg [new file with mode: 0644]
pix/t/cohort.png [new file with mode: 0644]
pix/t/cohort.svg [new file with mode: 0644]
pix/t/collapsed.png
pix/t/collapsed.svg [new file with mode: 0644]
pix/t/collapsed_empty.png
pix/t/collapsed_empty.svg [new file with mode: 0644]
pix/t/collapsed_empty_rtl.png
pix/t/collapsed_empty_rtl.svg [new file with mode: 0644]
pix/t/collapsed_rtl.png
pix/t/collapsed_rtl.svg [new file with mode: 0644]
pix/t/copy.png [new file with mode: 0644]
pix/t/copy.svg [new file with mode: 0644]
pix/t/delete.png [new file with mode: 0644]
pix/t/delete.svg [new file with mode: 0644]
pix/t/dock_to_block.png
pix/t/dock_to_block.svg [new file with mode: 0644]
pix/t/dock_to_block_rtl.png [new file with mode: 0644]
pix/t/dock_to_block_rtl.svg [new file with mode: 0644]
pix/t/dockclose.png
pix/t/dockclose.svg [new file with mode: 0644]
pix/t/down.png [new file with mode: 0644]
pix/t/down.svg [new file with mode: 0644]
pix/t/edit.png [new file with mode: 0644]
pix/t/edit.svg [new file with mode: 0644]
pix/t/editstring.png
pix/t/editstring.svg [new file with mode: 0644]
pix/t/enrolusers.png [new file with mode: 0644]
pix/t/enrolusers.svg [new file with mode: 0644]
pix/t/expanded.png
pix/t/expanded.svg [new file with mode: 0644]
pix/t/groupn.png [new file with mode: 0644]
pix/t/groupn.svg [new file with mode: 0644]
pix/t/groups.png [new file with mode: 0644]
pix/t/groups.svg [new file with mode: 0644]
pix/t/groupv.png [new file with mode: 0644]
pix/t/groupv.svg [new file with mode: 0644]
pix/t/hide.png [new file with mode: 0644]
pix/t/hide.svg [new file with mode: 0644]
pix/t/left.png [new file with mode: 0644]
pix/t/left.svg [new file with mode: 0644]
pix/t/move.png [new file with mode: 0644]
pix/t/move.svg [new file with mode: 0644]
pix/t/restore.png [new file with mode: 0644]
pix/t/restore.svg [new file with mode: 0644]
pix/t/right.png [new file with mode: 0644]
pix/t/right.svg [new file with mode: 0644]
pix/t/show.png [new file with mode: 0644]
pix/t/show.svg [new file with mode: 0644]
pix/t/switch_minus.png [new file with mode: 0644]
pix/t/switch_minus.svg [new file with mode: 0644]
pix/t/switch_plus.png [new file with mode: 0644]
pix/t/switch_plus.svg [new file with mode: 0644]
pix/t/up.png [new file with mode: 0644]
pix/t/up.svg [new file with mode: 0644]
portfolio/add.php
portfolio/upgrade.txt
question/behaviour/rendererbase.php
question/editlib.php
repository/alfresco/lang/en/repository_alfresco.php
repository/alfresco/lib.php
repository/draftfiles_manager.php
repository/filepicker.js
repository/filepicker.php
repository/lib.php
repository/repository_ajax.php
repository/upgrade.txt
repository/upload/lib.php
theme/afterburner/config.php
theme/afterburner/layout/default.php
theme/anomaly/config.php
theme/anomaly/layout/general.php
theme/anomaly/layout/report.php
theme/arialist/config.php
theme/arialist/layout/general.php
theme/arialist/layout/report.php
theme/base/config.php
theme/base/layout/general.php
theme/base/layout/report.php
theme/base/style/admin.css
theme/base/style/blocks.css
theme/base/style/core.css
theme/base/style/course.css
theme/base/style/dock.css
theme/binarius/config.php
theme/binarius/layout/general.php
theme/binarius/layout/report.php
theme/boxxie/config.php
theme/boxxie/layout/general.php
theme/brick/config.php
theme/brick/layout/general.php
theme/canvas/config.php
theme/canvas/layout/general.php
theme/canvas/layout/report.php
theme/fusion/style/core.css
theme/magazine/style/core.css
theme/mymobile/style/jmobile11_rtl.css
theme/sky_high/pix/footer-rtl.jpg [new file with mode: 0644]
theme/sky_high/pix/header-rtl.jpg [new file with mode: 0644]
theme/sky_high/style/core.css
theme/standard/style/blocks.css
theme/standard/style/core.css
theme/standard/style/course.css
theme/standard/style/dock.css
theme/upgrade.txt
user/files.php
user/files_form.php
user/portfoliologs.php
user/selector/lib.php
user/view.php
version.php
webservice/externallib.php
webservice/tests/externallib_test.php

index 38aa06e..858571f 100644 (file)
@@ -164,6 +164,7 @@ require_once($CFG->libdir.'/moodlelib.php');
 require_once($CFG->libdir.'/deprecatedlib.php');
 require_once($CFG->libdir.'/adminlib.php');
 require_once($CFG->libdir.'/componentlib.class.php');
+require_once($CFG->dirroot.'/cache/lib.php');
 
 require($CFG->dirroot.'/version.php');
 $CFG->target_release = $release;
diff --git a/admin/courseformats.php b/admin/courseformats.php
new file mode 100644 (file)
index 0000000..a8377de
--- /dev/null
@@ -0,0 +1,131 @@
+<?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/>.
+
+/**
+ * Allows the admin to enable, disable and uninstall course formats
+ *
+ * @package    core_admin
+ * @copyright  2012 Marina Glancy
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+require_once('../config.php');
+require_once($CFG->libdir.'/adminlib.php');
+require_once($CFG->libdir.'/pluginlib.php');
+
+$action  = required_param('action', PARAM_ALPHANUMEXT);
+$formatname   = required_param('format', PARAM_PLUGIN);
+$confirm = optional_param('confirm', 0, PARAM_BOOL);
+
+$syscontext = context_system::instance();
+$PAGE->set_url('/admin/courseformats.php');
+$PAGE->set_context($syscontext);
+
+require_login();
+require_capability('moodle/site:config', $syscontext);
+require_sesskey();
+
+$return = new moodle_url('/admin/settings.php', array('section' => 'manageformats'));
+
+$allplugins = plugin_manager::instance()->get_plugins();
+$formatplugins = $allplugins['format'];
+$sortorder = array_flip(array_keys($formatplugins));
+
+if (!isset($formatplugins[$formatname])) {
+    print_error('courseformatnotfound', 'error', $return, $formatname);
+}
+
+switch ($action) {
+    case 'disable':
+        if ($formatplugins[$formatname]->is_enabled()) {
+            if (get_config('moodlecourse', 'format') === $formatname) {
+                print_error('cannotdisableformat', 'error', $return);
+            }
+            set_config('disabled', 1, 'format_'. $formatname);
+        }
+        break;
+    case 'enable':
+        if (!$formatplugins[$formatname]->is_enabled()) {
+            unset_config('disabled', 'format_'. $formatname);
+        }
+        break;
+    case 'up':
+        if ($sortorder[$formatname]) {
+            $currentindex = $sortorder[$formatname];
+            $seq = array_keys($formatplugins);
+            $seq[$currentindex] = $seq[$currentindex-1];
+            $seq[$currentindex-1] = $formatname;
+            set_config('format_plugins_sortorder', implode(',', $seq));
+        }
+        break;
+    case 'down':
+        if ($sortorder[$formatname] < count($sortorder)-1) {
+            $currentindex = $sortorder[$formatname];
+            $seq = array_keys($formatplugins);
+            $seq[$currentindex] = $seq[$currentindex+1];
+            $seq[$currentindex+1] = $formatname;
+            set_config('format_plugins_sortorder', implode(',', $seq));
+        }
+        break;
+    case 'uninstall':
+        echo $OUTPUT->header();
+        echo $OUTPUT->heading(get_string('courseformats', 'moodle'));
+
+        $coursecount = $DB->count_records('course', array('format' => $formatname));
+        if ($coursecount) {
+            // Check that default format is set. It will be used to convert courses
+            // using this format
+            $defaultformat = get_config('moodlecourse', 'format');
+            $defaultformat = $formatplugins[get_config('moodlecourse', 'format')];
+            if (!$defaultformat) {
+                echo $OUTPUT->error_text(get_string('defaultformatnotset', 'admin'));
+                echo $OUTPUT->footer();
+                exit;
+            }
+        }
+
+        $format = $formatplugins[$formatname];
+        $deleteurl = $format->get_uninstall_url();
+        if (!$deleteurl) {
+            // somebody was trying to cheat and type non-existing link
+            echo $OUTPUT->error_text(get_string('cannotuninstall', 'admin', $format->displayname));
+            echo $OUTPUT->footer();
+            exit;
+        }
+
+        if (!$confirm) {
+            if ($coursecount) {
+                $message = get_string('formatuninstallwithcourses', 'admin',
+                        (object)array('count' => $coursecount, 'format' => $format->displayname,
+                            'defaultformat' => $defaultformat->displayname));
+            } else {
+                $message = get_string('formatuninstallconfirm', 'admin', $format->displayname);
+            }
+            $deleteurl->param('confirm', 1);
+            echo $OUTPUT->confirm($message, $deleteurl, $return);
+        } else {
+            $a = new stdClass();
+            $a->plugin = $format->displayname;
+            $a->directory = $format->rootdir;
+            uninstall_plugin('format', $formatname);
+            echo $OUTPUT->notification(get_string('formatuninstalled', 'admin', $a), 'notifysuccess');
+            echo $OUTPUT->continue_button($return);
+        }
+
+        echo $OUTPUT->footer();
+        exit;
+}
+redirect($return);
index 1a8f530..f6e68ff 100644 (file)
@@ -8,14 +8,18 @@ require_once('../config.php');
 require_once($CFG->libdir.'/adminlib.php');
 require_once($CFG->libdir.'/tablelib.php');
 
+$action  = required_param('action', PARAM_ALPHANUMEXT);
+$editor  = required_param('editor', PARAM_PLUGIN);
+$confirm = optional_param('confirm', 0, PARAM_BOOL);
+
+$PAGE->set_url('/admin/editors.php', array('action'=>$action, 'editor'=>$editor));
+$PAGE->set_context(context_system::instance());
+
 require_login();
 require_capability('moodle/site:config', context_system::instance());
 
 $returnurl = "$CFG->wwwroot/$CFG->admin/settings.php?section=manageeditors";
 
-$action = optional_param('action', '', PARAM_ALPHANUMEXT);
-$editor = optional_param('editor', '', PARAM_PLUGIN);
-
 // get currently installed and enabled auth plugins
 $available_editors = editors_get_available();
 if (!empty($editor) and empty($available_editors[$editor])) {
@@ -78,6 +82,48 @@ switch ($action) {
             }
         }
         break;
+
+    case 'uninstall':
+        if ($editor === 'textarea') {
+            redirect($returnurl);
+        }
+        if (get_string_manager()->string_exists('pluginname', 'editor_'.$editor)) {
+            $strplugin = get_string('pluginname', 'editor_'.$editor);
+        } else {
+            $strplugin = $editor;
+        }
+
+        $PAGE->set_title($strplugin);
+        echo $OUTPUT->header();
+
+        if (!$confirm) {
+            echo $OUTPUT->heading(get_string('editors', 'core_editor'));
+
+            $deleteurl = new moodle_url('/admin/editors.php', array('action'=>'uninstall', 'editor'=>$editor, 'sesskey'=>sesskey(), 'confirm'=>1));
+
+            echo $OUTPUT->confirm(get_string('editordeleteconfirm', 'core_editor', $strplugin),
+                $deleteurl, $returnurl);
+            echo $OUTPUT->footer();
+            die();
+
+        } else {
+            // Remove from enabled list.
+            $key = array_search($editor, $active_editors);
+            unset($active_editors[$key]);
+            set_config('texteditors', implode(',', $active_editors));
+
+            // Delete everything!!
+            uninstall_plugin('editor', $editor);
+
+            $a = new stdClass();
+            $a->name = $strplugin;
+            $a->directory = "$CFG->dirroot/lib/editor/$editor";
+            echo $OUTPUT->notification(get_string('plugindeletefiles', '', $a), 'notifysuccess');
+            echo $OUTPUT->continue_button($returnurl);
+            echo $OUTPUT->footer();
+            die();
+        }
+
     default:
         break;
 }
index b0818dd..10062a1 100644 (file)
@@ -103,7 +103,7 @@ switch ($action) {
             $strplugin = $enrol;
         }
 
-        echo $PAGE->set_title($strplugin);
+        $PAGE->set_title($strplugin);
         echo $OUTPUT->header();
 
         if (!$confirm) {
index 410cbf6..2f88126 100644 (file)
@@ -261,6 +261,18 @@ if ($version > $CFG->version) {  // upgrade
         }
 
         $output = $PAGE->get_renderer('core', 'admin');
+
+        $deployer = available_update_deployer::instance();
+        if ($deployer->enabled()) {
+            $deployer->initialize($reloadurl, $reloadurl);
+
+            $deploydata = $deployer->submitted_data();
+            if (!empty($deploydata)) {
+                echo $output->upgrade_plugin_confirm_deploy_page($deployer, $deploydata);
+                die();
+            }
+        }
+
         echo $output->upgrade_plugin_check_page(plugin_manager::instance(), available_update_checker::instance(),
                 $version, $showallplugins, $reloadurl,
                 new moodle_url('/admin/index.php', array('confirmupgrade'=>1, 'confirmrelease'=>1, 'confirmplugincheck'=>1)));
@@ -305,6 +317,17 @@ if (moodle_needs_upgrading()) {
 
             $output = $PAGE->get_renderer('core', 'admin');
 
+            $deployer = available_update_deployer::instance();
+            if ($deployer->enabled()) {
+                $deployer->initialize($PAGE->url, $PAGE->url);
+
+                $deploydata = $deployer->submitted_data();
+                if (!empty($deploydata)) {
+                    echo $output->upgrade_plugin_confirm_deploy_page($deployer, $deploydata);
+                    die();
+                }
+            }
+
             // check plugin dependencies first
             $failed = array();
             if (!plugin_manager::instance()->all_plugins_ok($version, $failed)) {
@@ -416,9 +439,30 @@ $cronoverdue = ($lastcron < time() - 3600 * 24);
 $dbproblems = $DB->diagnose();
 $maintenancemode = !empty($CFG->maintenance_enabled);
 
+// Available updates for Moodle core
 $updateschecker = available_update_checker::instance();
-$availableupdates = $updateschecker->get_update_info('core',
+$availableupdates = array();
+$availableupdates['core'] = $updateschecker->get_update_info('core',
     array('minmaturity' => $CFG->updateminmaturity, 'notifybuilds' => $CFG->updatenotifybuilds));
+
+// Available updates for contributed plugins
+$pluginman = plugin_manager::instance();
+foreach ($pluginman->get_plugins() as $plugintype => $plugintypeinstances) {
+    foreach ($plugintypeinstances as $pluginname => $plugininfo) {
+        if (!empty($plugininfo->availableupdates)) {
+            foreach ($plugininfo->availableupdates as $pluginavailableupdate) {
+                if ($pluginavailableupdate->version > $plugininfo->versiondisk) {
+                    if (!isset($availableupdates[$plugintype.'_'.$pluginname])) {
+                        $availableupdates[$plugintype.'_'.$pluginname] = array();
+                    }
+                    $availableupdates[$plugintype.'_'.$pluginname][] = $pluginavailableupdate;
+                }
+            }
+        }
+    }
+}
+
+// The timestamp of the most recent check for available updates
 $availableupdatesfetch = $updateschecker->get_last_timefetched();
 
 $buggyiconvnomb = (!function_exists('mb_convert_encoding') and @iconv('UTF-8', 'UTF-8//IGNORE', '100'.chr(130).'€') !== '100€');
index fe2e444..a27aff9 100644 (file)
@@ -59,11 +59,19 @@ function online_assignment_cleanup($output=false) {
         if ($output) echo $OUTPUT->heading($fullname);
 
         /// retrieve a list of sections beyond what is currently being shown
+        $courseformatoptions = course_get_format($course)->get_format_options();
+        if (!isset($courseformatoptions['numsections'])) {
+            // Course format does not use numsections
+            if ($output) {
+                echo 'No extra sections<br />';
+            }
+            continue;
+        }
         $sql = "SELECT *
                   FROM {course_sections}
                  WHERE course=? AND section>?
               ORDER BY section ASC";
-        $params = array($course->id, $course->numsections);
+        $params = array($course->id, $courseformatoptions['numsections']);
         if (!($xsections = $DB->get_records_sql($sql, $params))) {
             if ($output) echo 'No extra sections<br />';
             continue;
@@ -94,7 +102,7 @@ function online_assignment_cleanup($output=false) {
                         /// the journal update erroneously stored it in course_sections->section
                         $newsection = $xsection->section;
                         /// double check the new section
-                        if ($newsection > $course->numsections) {
+                        if ($newsection > $courseformatoptions['numsections']) {
                             /// get the record for section 0 for this course
                             if (!($zerosection = $DB->get_record('course_sections', array('course'=>$course->id, 'section'=>'0')))) {
                                 continue;
index 8da3fd7..4a99a29 100644 (file)
@@ -32,15 +32,36 @@ require_capability('moodle/site:config', context_system::instance());
 admin_externalpage_setup('pluginsoverview');
 
 $fetchremote = optional_param('fetchremote', false, PARAM_BOOL);
+$updatesonly = optional_param('updatesonly', false, PARAM_BOOL);
+$contribonly = optional_param('contribonly', false, PARAM_BOOL);
 
 $pluginman = plugin_manager::instance();
 $checker = available_update_checker::instance();
 
+// Filtering options.
+$options = array(
+    'updatesonly' => $updatesonly,
+    'contribonly' => $contribonly,
+);
+
 if ($fetchremote) {
     require_sesskey();
     $checker->fetch();
-    redirect($PAGE->url);
+    redirect(new moodle_url($PAGE->url, $options));
 }
 
 $output = $PAGE->get_renderer('core', 'admin');
-echo $output->plugin_management_page($pluginman, $checker);
+
+$deployer = available_update_deployer::instance();
+if ($deployer->enabled()) {
+    $myurl = new moodle_url($PAGE->url, array('updatesonly' => $updatesonly, 'contribonly' => $contribonly));
+    $deployer->initialize($myurl, $myurl);
+
+    $deploydata = $deployer->submitted_data();
+    if (!empty($deploydata)) {
+        echo $output->upgrade_plugin_confirm_deploy_page($deployer, $deploydata);
+        die();
+    }
+}
+
+echo $output->plugin_management_page($pluginman, $checker, $options);
index 293bf52..7ca6ea2 100644 (file)
@@ -234,6 +234,62 @@ class core_admin_renderer extends plugin_renderer_base {
         return $output;
     }
 
+    /**
+     * Prints a page with a summary of plugin deployment to be confirmed.
+     *
+     * @param available_update_deployer $deployer
+     * @param array $data deployer's data package as returned by {@link available_update_deployer::submitted_data()}
+     * @return string
+     */
+    public function upgrade_plugin_confirm_deploy_page(available_update_deployer $deployer, array $data) {
+
+        if (!$deployer->initialized()) {
+            throw new coding_exception('Unable to render a page for non-initialized deployer.');
+        }
+
+        if (empty($data['updateinfo'])) {
+            throw new coding_exception('Missing required data component.');
+        }
+
+        $updateinfo = $data['updateinfo'];
+
+        $output  = '';
+        $output .= $this->header();
+        $output .= $this->container_start('generalbox updateplugin', 'notice');
+
+        $a = new stdClass();
+        if (get_string_manager()->string_exists('pluginname', $updateinfo->component)) {
+            $a->name = get_string('pluginname', $updateinfo->component);
+        } else {
+            $a->name = $updateinfo->component;
+        }
+
+        if (isset($updateinfo->release)) {
+            $a->version = $updateinfo->release . ' (' . $updateinfo->version . ')';
+        } else {
+            $a->version = $updateinfo->version;
+        }
+        $a->url = $updateinfo->download;
+
+        $output .= $this->output->heading(get_string('updatepluginconfirm', 'core_plugin'));
+        $output .= $this->output->container(format_text(get_string('updatepluginconfirminfo', 'core_plugin', $a)), 'updatepluginconfirminfo');
+        $output .= $this->output->container(get_string('updatepluginconfirmwarning', 'core_plugin', 'updatepluginconfirmwarning'));
+
+        if ($repotype = $deployer->plugin_external_source($data['updateinfo'])) {
+            $output .= $this->output->container(get_string('updatepluginconfirmexternal', 'core_plugin', $repotype), 'updatepluginconfirmexternal');
+        }
+
+        $widget = $deployer->make_execution_widget($data['updateinfo']);
+        $output .= $this->output->render($widget);
+
+        $output .= $this->output->single_button($data['returnurl'], get_string('cancel', 'core'), 'get');
+
+        $output .= $this->container_end();
+        $output .= $this->footer();
+
+        return $output;
+    }
+
     /**
      * Display the admin notifications page.
      * @param int $maturity
@@ -278,22 +334,30 @@ class core_admin_renderer extends plugin_renderer_base {
     /**
      * Display the plugin management page (admin/plugins.php).
      *
+     * The filtering options array may contain following items:
+     *  bool contribonly - show only contributed extensions
+     *  bool updatesonly - show only plugins with an available update
+     *
      * @param plugin_manager $pluginman
      * @param available_update_checker $checker
+     * @param array $options filtering options
      * @return string HTML to output.
      */
-    public function plugin_management_page(plugin_manager $pluginman, available_update_checker $checker) {
+    public function plugin_management_page(plugin_manager $pluginman, available_update_checker $checker, array $options = array()) {
         global $CFG;
 
         $output = '';
 
         $output .= $this->header();
         $output .= $this->heading(get_string('pluginsoverview', 'core_admin'));
-        $output .= $this->plugins_overview_panel($pluginman);
+        $output .= $this->plugins_overview_panel($pluginman, $options);
 
         if (empty($CFG->disableupdatenotifications)) {
             $output .= $this->container_start('checkforupdates');
-            $output .= $this->single_button(new moodle_url($this->page->url, array('fetchremote' => 1)), get_string('checkforupdates', 'core_plugin'));
+            $output .= $this->single_button(
+                new moodle_url($this->page->url, array_merge($options, array('fetchremote' => 1))),
+                get_string('checkforupdates', 'core_plugin')
+            );
             if ($timefetched = $checker->get_last_timefetched()) {
                 $output .= $this->container(get_string('checkforupdateslast', 'core_plugin',
                     userdate($timefetched, get_string('strftimedatetime', 'core_langconfig'))));
@@ -301,7 +365,7 @@ class core_admin_renderer extends plugin_renderer_base {
             $output .= $this->container_end();
         }
 
-        $output .= $this->box($this->plugins_control_panel($pluginman), 'generalbox');
+        $output .= $this->box($this->plugins_control_panel($pluginman, $options), 'generalbox');
         $output .= $this->footer();
 
         return $output;
@@ -495,21 +559,39 @@ class core_admin_renderer extends plugin_renderer_base {
     }
 
     /**
-     * Displays the info about available Moodle updates
+     * Displays the info about available Moodle core and plugin updates
      *
-     * @param array|null $updates array of available_update_info objects or null
+     * The structure of the $updates param has changed since 2.4. It contains not only updates
+     * for the core itself, but also for all other installed plugins.
+     *
+     * @param array|null $updates array of (string)component => array of available_update_info objects or null
      * @param int|null $fetch timestamp of the most recent updates fetch or null (unknown)
      * @return string
      */
     protected function available_updates($updates, $fetch) {
 
         $updateinfo = $this->box_start('generalbox adminwarning availableupdatesinfo');
+        $someupdateavailable = false;
         if (is_array($updates)) {
-            $updateinfo .= $this->heading(get_string('updateavailable', 'core_admin'), 3);
-            foreach ($updates as $update) {
-                $updateinfo .= $this->moodle_available_update_info($update);
+            if (is_array($updates['core'])) {
+                $someupdateavailable = true;
+                $updateinfo .= $this->heading(get_string('updateavailable', 'core_admin'), 3);
+                foreach ($updates['core'] as $update) {
+                    $updateinfo .= $this->moodle_available_update_info($update);
+                }
             }
-        } else {
+            unset($updates['core']);
+            // If something has left in the $updates array now, it is updates for plugins.
+            if (!empty($updates)) {
+                $someupdateavailable = true;
+                $updateinfo .= $this->heading(get_string('updateavailableforplugin', 'core_admin'), 3);
+                $pluginsoverviewurl = new moodle_url('/admin/plugins.php', array('updatesonly' => 1));
+                $updateinfo .= $this->container(get_string('pluginsoverviewsee', 'core_admin',
+                    array('url' => $pluginsoverviewurl->out())));
+            }
+        }
+
+        if (!$someupdateavailable) {
             $now = time();
             if ($fetch and ($fetch <= $now) and ($now - $fetch < HOURSECS)) {
                 $updateinfo .= $this->heading(get_string('updateavailablenot', 'core_admin'), 3);
@@ -852,9 +934,10 @@ class core_admin_renderer extends plugin_renderer_base {
      * Prints an overview about the plugins - number of installed, number of extensions etc.
      *
      * @param plugin_manager $pluginman provides information about the plugins
+     * @param array $options filtering options
      * @return string as usually
      */
-    public function plugins_overview_panel(plugin_manager $pluginman) {
+    public function plugins_overview_panel(plugin_manager $pluginman, array $options = array()) {
         global $CFG;
 
         $plugininfo = $pluginman->get_plugins();
@@ -880,14 +963,49 @@ class core_admin_renderer extends plugin_renderer_base {
         }
 
         $info = array();
+        $filter = array();
+        $somefilteractive = false;
         $info[] = html_writer::tag('span', get_string('numtotal', 'core_plugin', $numtotal), array('class' => 'info total'));
         $info[] = html_writer::tag('span', get_string('numdisabled', 'core_plugin', $numdisabled), array('class' => 'info disabled'));
         $info[] = html_writer::tag('span', get_string('numextension', 'core_plugin', $numextension), array('class' => 'info extension'));
+        if ($numextension > 0) {
+            if (empty($options['contribonly'])) {
+                $filter[] = html_writer::link(
+                    new moodle_url($this->page->url, array('contribonly' => 1)),
+                    get_string('filtercontribonly', 'core_plugin'),
+                    array('class' => 'filter-item show-contribonly')
+                );
+            } else {
+                $filter[] = html_writer::tag('span', get_string('filtercontribonlyactive', 'core_plugin'),
+                    array('class' => 'filter-item active show-contribonly'));
+                $somefilteractive = true;
+            }
+        }
         if ($numupdatable > 0) {
             $info[] = html_writer::tag('span', get_string('numupdatable', 'core_plugin', $numupdatable), array('class' => 'info updatable'));
+            if (empty($options['updatesonly'])) {
+                $filter[] = html_writer::link(
+                    new moodle_url($this->page->url, array('updatesonly' => 1)),
+                    get_string('filterupdatesonly', 'core_plugin'),
+                    array('class' => 'filter-item show-updatesonly')
+                );
+            } else {
+                $filter[] = html_writer::tag('span', get_string('filterupdatesonlyactive', 'core_plugin'),
+                    array('class' => 'filter-item active show-updatesonly'));
+                $somefilteractive = true;
+            }
+        }
+        if ($somefilteractive) {
+            $filter[] = html_writer::link($this->page->url, get_string('filterall', 'core_plugin'), array('class' => 'filter-item show-all'));
         }
 
-        return $this->output->box(implode(html_writer::tag('span', ' ', array('class' => 'separator')), $info), '', 'plugins-overview-panel');
+        $output  = $this->output->box(implode(html_writer::tag('span', ' ', array('class' => 'separator')), $info), '', 'plugins-overview-panel');
+
+        if (!empty($filter)) {
+            $output .= $this->output->box(implode(html_writer::tag('span', ' ', array('class' => 'separator')), $filter), '', 'plugins-overview-filter');
+        }
+
+        return $output;
     }
 
     /**
@@ -896,13 +1014,43 @@ class core_admin_renderer extends plugin_renderer_base {
      * This default implementation renders all plugins into one big table.
      *
      * @param plugin_manager $pluginman provides information about the plugins.
+     * @param array $options filtering options
      * @return string HTML code
      */
-    public function plugins_control_panel(plugin_manager $pluginman) {
+    public function plugins_control_panel(plugin_manager $pluginman, array $options = array()) {
         global $CFG;
 
         $plugininfo = $pluginman->get_plugins();
 
+        // Filter the list of plugins according the options.
+        if (!empty($options['updatesonly'])) {
+            $updateable = array();
+            foreach ($plugininfo as $plugintype => $pluginnames) {
+                foreach ($pluginnames as $pluginname => $pluginfo) {
+                    if (!empty($pluginfo->availableupdates)) {
+                        foreach ($pluginfo->availableupdates as $pluginavailableupdate) {
+                            if ($pluginavailableupdate->version > $pluginfo->versiondisk) {
+                                $updateable[$plugintype][$pluginname] = $pluginfo;
+                            }
+                        }
+                    }
+                }
+            }
+            $plugininfo = $updateable;
+        }
+
+        if (!empty($options['contribonly'])) {
+            $contribs = array();
+            foreach ($plugininfo as $plugintype => $pluginnames) {
+                foreach ($pluginnames as $pluginname => $pluginfo) {
+                    if (!$pluginfo->is_standard()) {
+                        $contribs[$plugintype][$pluginname] = $pluginfo;
+                    }
+                }
+            }
+            $plugininfo = $contribs;
+        }
+
         if (empty($plugininfo)) {
             return '';
         }
@@ -973,12 +1121,10 @@ class core_admin_renderer extends plugin_renderer_base {
                     $availability = new html_table_cell('');
                 } else if ($isenabled) {
                     $row->attributes['class'] .= ' enabled';
-                    $icon = $this->output->pix_icon('i/hide', get_string('pluginenabled', 'core_plugin'));
-                    $availability = new html_table_cell($icon . ' ' . get_string('pluginenabled', 'core_plugin'));
+                    $availability = new html_table_cell(get_string('pluginenabled', 'core_plugin'));
                 } else {
                     $row->attributes['class'] .= ' disabled';
-                    $icon = $this->output->pix_icon('i/show', get_string('plugindisabled', 'core_plugin'));
-                    $availability = new html_table_cell($icon . ' ' . get_string('plugindisabled', 'core_plugin'));
+                    $availability = new html_table_cell(get_string('plugindisabled', 'core_plugin'));
                 }
 
                 $actions = array();
@@ -1058,6 +1204,18 @@ class core_admin_renderer extends plugin_renderer_base {
         $box  = $this->output->box_start($boxclasses);
         $box .= html_writer::tag('div', get_string('updateavailable', 'core_plugin', $updateinfo->version), array('class' => 'version'));
         $box .= $this->output->box(implode(html_writer::tag('span', ' ', array('class' => 'separator')), $info), '');
+
+        $deployer = available_update_deployer::instance();
+        if ($deployer->initialized()) {
+            $impediments = $deployer->deployment_impediments($updateinfo);
+            if (empty($impediments)) {
+                $widget = $deployer->make_confirm_widget($updateinfo);
+                $box .= $this->output->render($widget);
+            } else if (isset($impediments['notwritable'])) {
+                $box .= $this->output->help_icon('notwritable', 'core_plugin', get_string('notwritable', 'core_plugin'));
+            }
+        }
+
         $box .= $this->output->box_end();
 
         return $box;
index 470159e..d3917b0 100644 (file)
@@ -59,16 +59,11 @@ $courseid = $course->id;
 $contextname = print_context_name($context);
 
 // Get the user_selector we will need.
-// Teachers within a course just get to see the same list of people they can
-// assign roles to. Admins (people with moodle/role:manage) can run this report for any user.
-$options = array('context' => $context, 'roleid' => 0);
-if (has_capability('moodle/role:manage', $context)) {
-    $userselector = new potential_assignees_course_and_above('reportuser', $options);
-} else {
-    $userselector = roles_get_potential_user_selector($context, 'reportuser', $options);
-}
-$userselector->set_multiselect(false);
-$userselector->set_rows(10);
+// Teachers within a course just get to see the same list of enrolled users.
+// Admins (people with moodle/role:manage) can run this report for any user.
+$options = array('accesscontext' => $context);
+$userselector = new role_check_users_selector('reportuser', $options);
+$userselector->set_rows(20);
 
 // Work out an appropriate page title.
 $title = get_string('checkpermissionsin', 'role', $contextname);
index 5765cf5..60acdf9 100644 (file)
@@ -1074,6 +1074,135 @@ class potential_assignees_below_course extends role_assign_user_selector_base {
     }
 }
 
+/**
+ * User selector subclass for the selection of users in the check permissions page.
+ *
+ * @copyright 2012 Petr Skoda {@link http://skodak.org}
+ */
+class role_check_users_selector extends user_selector_base {
+    const MAX_ENROLLED_PER_PAGE = 100;
+    const MAX_POTENTIAL_PER_PAGE = 100;
+
+    /** @var bool limit listing of users to enrolled only */
+    var $onlyenrolled;
+
+    /**
+     * Constructor.
+     *
+     * @param string $name the control name/id for use in the HTML.
+     * @param array $options other options needed to construct this selector.
+     * You must be able to clone a userselector by doing new get_class($us)($us->get_name(), $us->get_options());
+     */
+    public function __construct($name, $options) {
+        if (!isset($options['multiselect'])) {
+            $options['multiselect'] = false;
+        }
+        parent::__construct($name, $options);
+
+        $coursecontext = $this->accesscontext->get_course_context(false);
+        if ($coursecontext and $coursecontext->id != SITEID and !has_capability('moodle/role:manage', $coursecontext)) {
+            // Prevent normal teachers from looking up all users.
+            $this->onlyenrolled = true;
+        } else {
+            $this->onlyenrolled = false;
+        }
+    }
+
+    public function find_users($search) {
+        global $DB;
+
+        list($wherecondition, $params) = $this->search_sql($search, 'u');
+
+        $fields      = 'SELECT ' . $this->required_fields_sql('u');
+        $countfields = 'SELECT COUNT(1)';
+
+        $coursecontext = $this->accesscontext->get_course_context(false);
+
+        if ($coursecontext and $coursecontext != SITEID) {
+            $sql1 = " FROM {user} u
+                      JOIN {user_enrolments} ue ON (ue.userid = u.id)
+                      JOIN {enrol} e ON (e.id = ue.enrolid AND e.courseid = :courseid1)
+                     WHERE $wherecondition";
+            $params['courseid1'] = $coursecontext->instanceid;
+
+            if ($this->onlyenrolled) {
+                $sql2 = null;
+            } else {
+                $sql2 = " FROM {user} u
+                     LEFT JOIN ({user_enrolments} ue
+                                JOIN {enrol} e ON (e.id = ue.enrolid AND e.courseid = :courseid2)) ON (ue.userid = u.id)
+                         WHERE $wherecondition
+                               AND ue.id IS NULL";
+                $params['courseid2'] = $coursecontext->instanceid;
+            }
+
+        } else {
+            if ($this->onlyenrolled) {
+                // Bad luck, current user may not view only enrolled users.
+                return array();
+            }
+            $sql1 = null;
+            $sql2 = " FROM {user} u
+                     WHERE $wherecondition";
+        }
+
+        $params['contextid'] = $this->accesscontext->id;
+
+        list($sort, $sortparams) = users_order_by_sql('u', $search, $this->accesscontext);
+        $order = ' ORDER BY ' . $sort;
+
+        $result = array();
+
+        if ($search) {
+            $groupname1 = get_string('enrolledusersmatching', 'enrol', $search);
+            $groupname2 = get_string('potusersmatching', 'role', $search);
+        } else {
+            $groupname1 = get_string('enrolledusers', 'enrol');
+            $groupname2 = get_string('potusers', 'role');
+        }
+
+        if ($sql1) {
+            $enrolleduserscount = $DB->count_records_sql($countfields . $sql1, $params);
+            if (!$this->is_validating() and $enrolleduserscount > $this::MAX_ENROLLED_PER_PAGE) {
+                $result[$groupname1] = array();
+                $toomany = $this->too_many_results($search, $enrolleduserscount);
+                $result[implode(' - ', array_keys($toomany))] = array();
+
+            } else {
+                $enrolledusers = $DB->get_records_sql($fields . $sql1 . $order, array_merge($params, $sortparams));
+                if ($enrolledusers) {
+                    $result[$groupname1] = $enrolledusers;
+                }
+            }
+            if ($sql2) {
+                $result[''] = array();
+            }
+        }
+        if ($sql2) {
+            $otheruserscount = $DB->count_records_sql($countfields . $sql2, $params);
+            if (!$this->is_validating() and $otheruserscount > $this::MAX_POTENTIAL_PER_PAGE) {
+                $result[$groupname2] = array();
+                $toomany = $this->too_many_results($search, $otheruserscount);
+                $result[implode(' - ', array_keys($toomany))] = array();
+            } else {
+                $otherusers = $DB->get_records_sql($fields . $sql2 . $order, array_merge($params, $sortparams));
+                if ($otherusers) {
+                    $result[$groupname2] = $otherusers;
+                }
+            }
+        }
+
+        return $result;
+    }
+
+    protected function get_options() {
+        global $CFG;
+        $options = parent::get_options();
+        $options['file'] = $CFG->admin . '/roles/lib.php';
+        return $options;
+    }
+}
+
 /**
  * User selector subclass for the list of potential users on the assign roles page,
  * when we are assigning in a context at or above the course level. In this case we
index 363bfb1..b68a10a 100644 (file)
@@ -15,9 +15,10 @@ if ($hassiteconfig
 /// NOTE: these settings must be applied after all other settings because they depend on them
     ///main course settings
     $temp = new admin_settingpage('coursesettings', new lang_string('coursesettings'));
-    $courseformats = get_plugin_list('format');
+    require_once($CFG->dirroot.'/course/lib.php');
+    $courseformats = get_sorted_course_formats(true);
     $formcourseformats = array();
-    foreach ($courseformats as $courseformat => $courseformatdir) {
+    foreach ($courseformats as $courseformat) {
         $formcourseformats[$courseformat] = new lang_string('pluginname', "format_$courseformat");
     }
     $temp->add(new admin_setting_configselect('moodlecourse/format', new lang_string('format'), new lang_string('coursehelpformat'), 'weeks',$formcourseformats));
index 29d0665..b7fa57e 100644 (file)
@@ -20,6 +20,15 @@ if ($hassiteconfig) {
     // hidden script for converting journals to online assignments (or something like that) linked from elsewhere
     $ADMIN->add('modsettings', new admin_externalpage('oacleanup', 'Online Assignment Cleanup', $CFG->wwwroot.'/'.$CFG->admin.'/oacleanup.php', 'moodle/site:config', true));
 
+    // course formats
+    $ADMIN->add('modules', new admin_category('formatsettings', new lang_string('courseformats')));
+    $temp = new admin_settingpage('manageformats', new lang_string('manageformats', 'core_admin'));
+    $temp->add(new admin_setting_manageformats());
+    $ADMIN->add('formatsettings', $temp);
+    foreach ($allplugins['format'] as $format) {
+        $format->load_settings($ADMIN, 'formatsettings', $hassiteconfig);
+    }
+
     // blocks
     $ADMIN->add('modules', new admin_category('blocksettings', new lang_string('blocks')));
     $ADMIN->add('blocksettings', new admin_page_manageblocks());
@@ -245,6 +254,15 @@ if ($hassiteconfig) {
 
 /// Web services
     $ADMIN->add('modules', new admin_category('webservicesettings', new lang_string('webservices', 'webservice')));
+    // Mobile
+    $temp = new admin_settingpage('mobile', new lang_string('mobile','admin'), 'moodle/site:config', false);
+    $enablemobiledocurl = new moodle_url(get_docs_url('Enable_mobile_web_services'));
+    $enablemobiledoclink = html_writer::link($enablemobiledocurl, new lang_string('documentation'));
+    $temp->add(new admin_setting_enablemobileservice('enablemobilewebservice',
+            new lang_string('enablemobilewebservice', 'admin'),
+            new lang_string('configenablemobilewebservice', 'admin', $enablemobiledoclink), 0));
+    $temp->add(new admin_setting_configtext('mobilecssurl', new lang_string('mobilecssurl', 'admin'), new lang_string('configmobilecssurl','admin'), '', PARAM_URL));
+    $ADMIN->add('webservicesettings', $temp);
     /// overview page
     $temp = new admin_settingpage('webservicesoverview', new lang_string('webservicesoverview', 'webservice'));
     $temp->add(new admin_setting_webservicesoverview());
@@ -253,9 +271,9 @@ if ($hassiteconfig) {
     $ADMIN->add('webservicesettings', new admin_externalpage('webservicedocumentation', new lang_string('wsdocapi', 'webservice'), "$CFG->wwwroot/$CFG->admin/webservice/documentation.php", 'moodle/site:config', false));
     /// manage service
     $temp = new admin_settingpage('externalservices', new lang_string('externalservices', 'webservice'));
-    $enablemobiledocurl = new moodle_url(get_docs_url('Enable_mobile_web_services'));
-    $enablemobiledoclink = html_writer::link($enablemobiledocurl, new lang_string('documentation'));
-    $temp->add(new admin_setting_enablemobileservice('enablemobilewebservice', new lang_string('enablemobilewebservice', 'admin'), new lang_string('configenablemobilewebservice', 'admin', $enablemobiledoclink), 0));
+    $temp->add(new admin_setting_enablemobileservice('enablemobilewebservice',
+            new lang_string('enablemobilewebservice', 'admin'),
+            new lang_string('configenablemobilewebservice', 'admin', $enablemobiledoclink), 0));
     $temp->add(new admin_setting_heading('manageserviceshelpexplaination', new lang_string('information', 'webservice'), new lang_string('servicehelpexplanation', 'webservice')));
     $temp->add(new admin_setting_manageexternalservices());
     $ADMIN->add('webservicesettings', $temp);
@@ -294,6 +312,10 @@ if ($hassiteconfig) {
 
 // Question type settings
 if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext)) {
+    if (!$hassiteconfig) {
+        require_once("$CFG->libdir/pluginlib.php");
+        $allplugins = plugin_manager::instance()->get_plugins();
+    }
     // Question behaviour settings.
     $ADMIN->add('modules', new admin_category('qbehavioursettings', new lang_string('questionbehaviours', 'admin')));
     $ADMIN->add('qbehavioursettings', new admin_page_manageqbehaviours());
index 0c8746e..4e773cd 100644 (file)
@@ -228,6 +228,10 @@ if (empty($CFG->disableupdatenotifications)) {
     $temp = new admin_settingpage('updatenotifications', new lang_string('updatenotifications', 'core_admin'));
     $temp->add(new admin_setting_configcheckbox('updateautocheck', new lang_string('updateautocheck', 'core_admin'),
                                                 new lang_string('updateautocheck_desc', 'core_admin'), 1));
+    if (empty($CFG->disableupdateautodeploy)) {
+        $temp->add(new admin_setting_configcheckbox('updateautodeploy', new lang_string('updateautodeploy', 'core_admin'),
+                                                    new lang_string('updateautodeploy_desc', 'core_admin'), 0));
+    }
     $temp->add(new admin_setting_configselect('updateminmaturity', new lang_string('updateminmaturity', 'core_admin'),
                                               new lang_string('updateminmaturity_desc', 'core_admin'), MATURITY_STABLE,
                                               array(
index ce84377..915d247 100644 (file)
@@ -3,7 +3,7 @@
 /**
  * @author Martin Dougiamas
  * @author Jerome GUTIERREZ
- * @author Iaki Arenaza
+ * @author Iñaki Arenaza
  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  * @package moodle multiauth
  *
@@ -206,6 +206,10 @@ class auth_plugin_cas extends auth_plugin_ldap {
             }
         }
 
+        if (!ldap_paged_results_supported($this->config->ldap_version)) {
+            echo $OUTPUT->notification(get_string('pagedresultsnotsupp', 'auth_ldap'));
+        }
+
         include($CFG->dirroot.'/auth/cas/config.html');
     }
 
@@ -279,6 +283,9 @@ class auth_plugin_cas extends auth_plugin_ldap {
         if (empty($config->ldapencoding)) {
             $config->ldapencoding = 'utf-8';
         }
+        if (!isset($config->pagesize)) {
+            $config->pagesize = LDAP_DEFAULT_PAGESIZE;
+        }
         if (!isset($config->contexts)) {
             $config->contexts = '';
         }
@@ -339,6 +346,7 @@ class auth_plugin_cas extends auth_plugin_ldap {
         // save LDAP settings
         set_config('host_url', trim($config->host_url), $this->pluginconfig);
         set_config('ldapencoding', trim($config->ldapencoding), $this->pluginconfig);
+        set_config('pagesize', (int)trim($config->pagesize), $this->pluginconfig);
         set_config('contexts', trim($config->contexts), $this->pluginconfig);
         set_config('user_type', textlib::strtolower(trim($config->user_type)), $this->pluginconfig);
         set_config('user_attribute', textlib::strtolower(trim($config->user_attribute)), $this->pluginconfig);
index 031df6e..0cb7c27 100644 (file)
@@ -44,6 +44,9 @@ if (!isset($config->host_url)) {
 if (empty($config->ldapencoding)) {
     $config->ldapencoding = 'utf-8';
 }
+if (!isset($config->pagesize)) {
+    $config->pagesize = LDAP_DEFAULT_PAGESIZE;
+}
 if (!isset($config->contexts)) {
     $config->contexts = '';
 }
@@ -258,6 +261,25 @@ $yesno = array( get_string('no'), get_string('yes') );
         <?php print_string('auth_ldap_ldap_encoding', 'auth_ldap') ?>
     </td>
 </tr>
+<tr valign="top">
+    <td align="right">
+        <label for="pagesize"><?php print_string('pagesize_key', 'auth_ldap') ?></label>
+    </td>
+    <td>
+        <?php $disabled = (!ldap_paged_results_supported($config->ldap_version)) ? ' disabled="disabled"' : '' ; ?>
+        <input id="pagesize" name="pagesize" type="text" value="<?php echo $config->pagesize ?>" <?php echo $disabled ?>/>
+        <?php
+            if (isset($err['pagesize'])) { echo $OUTPUT->error_text($err['pagesize']); }
+            if ($disabled) {
+                // Don't loose the page size value (disabled fields are not submitted!)
+        ?>
+            <input id="pagesize" name="pagesize" type="hidden" value="<?php echo $config->pagesize ?>" />
+        <?php } ?>
+    </td>
+    <td>
+        <?php print_string('pagesize', 'auth_ldap') ?>
+    </td>
+</tr>
 <tr>
     <td colspan="2">
         <h4><?php print_string('auth_ldap_bind_settings', 'auth_ldap') ?></h4>
index 1de46a5..e603db8 100644 (file)
@@ -27,6 +27,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->version   = 2012110700;        // The current plugin version (Date: YYYYMMDDXX)
 $plugin->requires  = 2012061700;        // Requires this Moodle version
 $plugin->component = 'auth_cas';        // Full name of the plugin (used for diagnostics)
index a90a41b..fed0bae 100644 (file)
@@ -2,7 +2,7 @@
 
 /**
  * @author Martin Dougiamas
- * @author Iaki Arenaza
+ * @author Iñaki Arenaza
  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  * @package moodle multiauth
  *
@@ -214,6 +214,7 @@ class auth_plugin_ldap extends auth_plugin_base {
 
         $ldapconnection = $this->ldap_connect();
         if(!($user_dn = $this->ldap_find_userdn($ldapconnection, $extusername))) {
+            $this->ldap_close();
             return false;
         }
 
@@ -231,11 +232,13 @@ class auth_plugin_ldap extends auth_plugin_base {
         }
 
         if (!$user_info_result = ldap_read($ldapconnection, $user_dn, '(objectClass=*)', $search_attribs)) {
+            $this->ldap_close();
             return false; // error!
         }
 
         $user_entry = ldap_get_entries_moodle($ldapconnection, $user_info_result);
         if (empty($user_entry)) {
+            $this->ldap_close();
             return false; // entry not found
         }
 
@@ -647,39 +650,50 @@ class auth_plugin_ldap extends auth_plugin_base {
         $contexts = explode(';', $this->config->contexts);
 
         if (!empty($this->config->create_context)) {
-              array_push($contexts, $this->config->create_context);
+            array_push($contexts, $this->config->create_context);
         }
 
-        $fresult = array();
+        $ldap_pagedresults = ldap_paged_results_supported($this->config->ldap_version);
+        $ldap_cookie = '';
         foreach ($contexts as $context) {
             $context = trim($context);
             if (empty($context)) {
                 continue;
             }
-            if ($this->config->search_sub) {
-                //use ldap_search to find first user from subtree
-                $ldap_result = ldap_search($ldapconnection, $context,
-                                           $filter,
-                                           array($this->config->user_attribute));
-            } else {
-                //search only in this context
-                $ldap_result = ldap_list($ldapconnection, $context,
-                                         $filter,
-                                         array($this->config->user_attribute));
-            }
 
-            if(!$ldap_result) {
-                continue;
-            }
+            do {
+                if ($ldap_pagedresults) {
+                    ldap_control_paged_result($ldapconnection, $this->config->pagesize, true, $ldap_cookie);
+                }
+                if ($this->config->search_sub) {
+                    // Use ldap_search to find first user from subtree.
+                    $ldap_result = ldap_search($ldapconnection, $context, $filter, array($this->config->user_attribute));
+                } else {
+                    // Search only in this context.
+                    $ldap_result = ldap_list($ldapconnection, $context, $filter, array($this->config->user_attribute));
+                }
+                if(!$ldap_result) {
+                    continue;
+                }
+                if ($ldap_pagedresults) {
+                    ldap_control_paged_result_response($ldapconnection, $ldap_result, $ldap_cookie);
+                }
+                if ($entry = @ldap_first_entry($ldapconnection, $ldap_result)) {
+                    do {
+                        $value = ldap_get_values_len($ldapconnection, $entry, $this->config->user_attribute);
+                        $value = textlib::convert($value[0], $this->config->ldapencoding, 'utf-8');
+                        $this->ldap_bulk_insert($value);
+                    } while ($entry = ldap_next_entry($ldapconnection, $entry));
+                }
+                unset($ldap_result); // Free mem.
+            } while ($ldap_pagedresults && !empty($ldap_cookie));
+        }
 
-            if ($entry = @ldap_first_entry($ldapconnection, $ldap_result)) {
-                do {
-                    $value = ldap_get_values_len($ldapconnection, $entry, $this->config->user_attribute);
-                    $value = textlib::convert($value[0], $this->config->ldapencoding, 'utf-8');
-                    $this->ldap_bulk_insert($value);
-                } while ($entry = ldap_next_entry($ldapconnection, $entry));
-            }
-            unset($ldap_result); // free mem
+        // If LDAP paged results were used, the current connection must be completely
+        // closed and a new one created, to work without paged results from here on.
+        if ($ldap_pagedresults) {
+            $this->ldap_close(true);
+            $ldapconnection = $this->ldap_connect();
         }
 
         /// preserve our user database
@@ -1411,42 +1425,46 @@ class auth_plugin_ldap extends auth_plugin_base {
 
         $contexts = explode(';', $this->config->contexts);
         if (!empty($this->config->create_context)) {
-              array_push($contexts, $this->config->create_context);
+            array_push($contexts, $this->config->create_context);
         }
 
+        $ldap_pagedresults = ldap_paged_results_supported($this->config->ldap_version);
         foreach ($contexts as $context) {
             $context = trim($context);
             if (empty($context)) {
                 continue;
             }
 
-            if ($this->config->search_sub) {
-                // Use ldap_search to find first user from subtree
-                $ldap_result = ldap_search($ldapconnection, $context,
-                                           $filter,
-                                           array($this->config->user_attribute));
-            } else {
-                // Search only in this context
-                $ldap_result = ldap_list($ldapconnection, $context,
-                                         $filter,
-                                         array($this->config->user_attribute));
-            }
-
-            if(!$ldap_result) {
-                continue;
-            }
-
-            $users = ldap_get_entries_moodle($ldapconnection, $ldap_result);
-
-            // Add found users to list
-            for ($i = 0; $i < count($users); $i++) {
-                $extuser = textlib::convert($users[$i][$this->config->user_attribute][0],
-                                             $this->config->ldapencoding, 'utf-8');
-                array_push($fresult, $extuser);
-            }
+            do {
+                if ($ldap_pagedresults) {
+                    ldap_control_paged_result($ldapconnection, $this->config->pagesize, true, $ldap_cookie);
+                }
+                if ($this->config->search_sub) {
+                    // Use ldap_search to find first user from subtree.
+                    $ldap_result = ldap_search($ldapconnection, $context, $filter, array($this->config->user_attribute));
+                } else {
+                    // Search only in this context.
+                    $ldap_result = ldap_list($ldapconnection, $context, $filter, array($this->config->user_attribute));
+                }
+                if(!$ldap_result) {
+                    continue;
+                }
+                if ($ldap_pagedresults) {
+                    ldap_control_paged_result_response($ldapconnection, $ldap_result, $ldap_cookie);
+                }
+                $users = ldap_get_entries_moodle($ldapconnection, $ldap_result);
+                // Add found users to list.
+                for ($i = 0; $i < count($users); $i++) {
+                    $extuser = textlib::convert($users[$i][$this->config->user_attribute][0],
+                                                $this->config->ldapencoding, 'utf-8');
+                    array_push($fresult, $extuser);
+                }
+                unset($ldap_result); // Free mem.
+            } while ($ldap_pagedresults && !empty($ldap_cookie));
         }
 
-        $this->ldap_close();
+        // If paged results were used, make sure the current connection is completely closed
+        $this->ldap_close($ldap_pagedresults);
         return $fresult;
     }
 
@@ -1693,6 +1711,10 @@ class auth_plugin_ldap extends auth_plugin_base {
             return;
         }
 
+        if (!ldap_paged_results_supported($this->config->ldap_version)) {
+            echo $OUTPUT->notification(get_string('pagedresultsnotsupp', 'auth_ldap'));
+        }
+
         include($CFG->dirroot.'/auth/ldap/config.html');
     }
 
@@ -1707,6 +1729,9 @@ class auth_plugin_ldap extends auth_plugin_base {
         if (empty($config->ldapencoding)) {
          $config->ldapencoding = 'utf-8';
         }
+        if (!isset($config->pagesize)) {
+            $config->pagesize = LDAP_DEFAULT_PAGESIZE;
+        }
         if (!isset($config->contexts)) {
              $config->contexts = '';
         }
@@ -1807,6 +1832,7 @@ class auth_plugin_ldap extends auth_plugin_base {
         // Save settings
         set_config('host_url', trim($config->host_url), $this->pluginconfig);
         set_config('ldapencoding', trim($config->ldapencoding), $this->pluginconfig);
+        set_config('pagesize', (int)trim($config->pagesize), $this->pluginconfig);
         set_config('contexts', $config->contexts, $this->pluginconfig);
         set_config('user_type', textlib::strtolower(trim($config->user_type)), $this->pluginconfig);
         set_config('user_attribute', textlib::strtolower(trim($config->user_attribute)), $this->pluginconfig);
@@ -2009,10 +2035,14 @@ class auth_plugin_ldap extends auth_plugin_base {
     /**
      * Disconnects from a LDAP server
      *
+     * @param force boolean Forces closing the real connection to the LDAP server, ignoring any
+     *                      cached connections. This is needed when we've used paged results
+     *                      and want to use normal results again.
      */
-    function ldap_close() {
+    function ldap_close($force=false) {
         $this->ldapconns--;
-        if($this->ldapconns == 0) {
+        if (($this->ldapconns == 0) || ($force)) {
+            $this->ldapconns = 0;
             @ldap_close($this->ldapconnection);
             unset($this->ldapconnection);
         }
index 3efe253..7112d4d 100644 (file)
@@ -7,6 +7,9 @@ if (!isset($config->host_url)) {
 if (empty($config->ldapencoding)) {
     $config->ldapencoding = 'utf-8';
 }
+if (!isset($config->pagesize)) {
+    $config->pagesize = LDAP_DEFAULT_PAGESIZE;
+}
 if (!isset($config->contexts)) {
     $config->contexts = '';
 }
@@ -148,6 +151,26 @@ $yesno = array(get_string('no'), get_string('yes'));
         <?php print_string('auth_ldap_ldap_encoding', 'auth_ldap') ?>
     </td>
 </tr>
+<tr valign="top">
+    <td align="right">
+        <label for="pagesize"><?php print_string('pagesize_key', 'auth_ldap') ?></label>
+    </td>
+    <td>
+        <?php $disabled = (!ldap_paged_results_supported($config->ldap_version)) ? ' disabled="disabled"' : '' ; ?>
+        <input id="pagesize" name="pagesize" type="text" value="<?php echo $config->pagesize ?>" <?php echo $disabled ?>/>
+        <?php
+            if (isset($err['pagesize'])) { echo $OUTPUT->error_text($err['pagesize']); }
+            if ($disabled) {
+                // Don't loose the page size value (disabled fields are not submitted!)
+        ?>
+            <input id="pagesize" name="pagesize" type="hidden" value="<?php echo $config->pagesize ?>" />
+        <?php } ?>
+
+    </td>
+    <td>
+        <?php print_string('pagesize', 'auth_ldap') ?>
+    </td>
+</tr>
 <tr>
     <td colspan="2">
         <h4><?php print_string('auth_ldap_bind_settings', 'auth_ldap') ?></h4>
index 848169a..7fa7db6 100644 (file)
@@ -128,6 +128,9 @@ $string['ntlmsso_attempting'] = 'Attempting Single Sign On via NTLM...';
 $string['ntlmsso_failed'] = 'Auto-login failed, try the normal login page...';
 $string['ntlmsso_isdisabled'] = 'NTLM SSO is disabled.';
 $string['ntlmsso_unknowntype'] = 'Unknown ntlmsso type!';
+$string['pagedresultsnotsupp'] = 'LDAP paged results not supported (either your PHP version lacks support or you have configured Moodle to use LDAP protocol version 2)';
+$string['pagesize'] = 'Make sure this value is smaller than your LDAP server result set size limit (the maximum number of entries that can be returned in a single query)';
+$string['pagesize_key'] = 'Page Size';
 $string['pluginname'] = 'LDAP server';
 $string['pluginnotenabled'] = 'Plugin not enabled!';
 $string['renamingnotallowed'] = 'User renaming not allowed in LDAP';
index 71a1d5a..e05dfde 100644 (file)
@@ -26,6 +26,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2012061700;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->version   = 2012110700;        // The current plugin version (Date: YYYYMMDDXX)
 $plugin->requires  = 2012061700;        // Requires this Moodle version
 $plugin->component = 'auth_ldap';       // Full name of the plugin (used for diagnostics)
index ee103bb..203d161 100644 (file)
@@ -378,23 +378,28 @@ class auth_plugin_mnet extends auth_plugin_base {
                 $extra = $DB->get_records_sql($sql);
 
                 $keys = array_keys($courses);
-                $defaultrole = reset(get_archetype_roles('student'));
-                //$defaultrole = get_default_course_role($ccache[$shortname]); //TODO: rewrite this completely, there is no default course role any more!!!
-                foreach ($keys AS $id) {
-                    if ($courses[$id]->visible == 0) {
-                        unset($courses[$id]);
-                        continue;
+                $studentroles = get_archetype_roles('student');
+                if (!empty($studentroles)) {
+                    $defaultrole = reset($studentroles);
+                    //$defaultrole = get_default_course_role($ccache[$shortname]); //TODO: rewrite this completely, there is no default course role any more!!!
+                    foreach ($keys AS $id) {
+                        if ($courses[$id]->visible == 0) {
+                            unset($courses[$id]);
+                            continue;
+                        }
+                        $courses[$id]->cat_id          = $courses[$id]->category;
+                        $courses[$id]->defaultroleid   = $defaultrole->id;
+                        unset($courses[$id]->category);
+                        unset($courses[$id]->visible);
+
+                        $courses[$id]->cat_name        = $extra[$id]->cat_name;
+                        $courses[$id]->cat_description = $extra[$id]->cat_description;
+                        $courses[$id]->defaultrolename = $defaultrole->name;
+                        // coerce to array
+                        $courses[$id] = (array)$courses[$id];
                     }
-                    $courses[$id]->cat_id          = $courses[$id]->category;
-                    $courses[$id]->defaultroleid   = $defaultrole->id;
-                    unset($courses[$id]->category);
-                    unset($courses[$id]->visible);
-
-                    $courses[$id]->cat_name        = $extra[$id]->cat_name;
-                    $courses[$id]->cat_description = $extra[$id]->cat_description;
-                    $courses[$id]->defaultrolename = $defaultrole->name;
-                    // coerce to array
-                    $courses[$id] = (array)$courses[$id];
+                } else {
+                    throw new moodle_exception('unknownrole', 'error', '', 'student');
                 }
             } else {
                 // if the array is empty, send it anyway
index 6a760ec..88caf30 100644 (file)
@@ -28,7 +28,7 @@
 
     // Check whether Shibboleth is configured properly
     if (empty($pluginconfig->user_attribute)) {
-        print_error('shib_not_set_up_error', 'auth');
+        print_error('shib_not_set_up_error', 'auth_shibboleth');
      }
 
 /// If we can find the Shibboleth attribute, save it in session and return to main login page
@@ -95,9 +95,9 @@
     // If we can find any (user independent) Shibboleth attributes but no user
     // attributes we probably didn't receive any user attributes
     elseif (!empty($_SERVER['HTTP_SHIB_APPLICATION_ID']) || !empty($_SERVER['Shib-Application-ID'])) {
-        print_error('shib_no_attributes_error', 'auth' , '', '\''.$pluginconfig->user_attribute.'\', \''.$pluginconfig->field_map_firstname.'\', \''.$pluginconfig->field_map_lastname.'\' and \''.$pluginconfig->field_map_email.'\'');
+        print_error('shib_no_attributes_erro