Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

Merge remote branch 'origin/master' into rubric

Conflicts:
	lib/db/upgrade.php
	version.php
  • Loading branch information...
commit 01609c9ad94e5757cef2afc1ed637863cff83762 2 parents 8b9ada5 + 3a81b37
David Mudrák authored October 24, 2011

Showing 466 changed files with 13,137 additions and 7,764 deletions. Show diff stats Hide diff stats

  1. 114  admin/environment.xml
  2. 12  admin/report/questioninstances/index.php
  3. 9  admin/roles/usersroles.php
  4. 5  admin/settings/appearance.php
  5. 2  admin/settings/development.php
  6. 6  admin/tool/capability/index.php
  7. 46  admin/tool/unittest/simpletestlib.php
  8. 7  auth/shibboleth/index.php
  9. 10  auth/upgrade.txt
  10. 4  blog/edit.php
  11. 8  blog/edit_form.php
  12. 14  blog/locallib.php
  13. 29  cohort/index.php
  14. 45  cohort/lib.php
  15. 3  course/category.php
  16. 23  course/lib.php
  17. 12  course/modedit.php
  18. 21  course/moodleform_mod.php
  19. 29  course/report/completion/index.php
  20. 29  course/report/progress/index.php
  21. 20  course/simpletest/testcourselib.php
  22. 10  enrol/cohort/ajax.php
  23. 2  enrol/cohort/lang/en/enrol_cohort.php
  24. 11  enrol/cohort/lib.php
  25. 97  enrol/cohort/locallib.php
  26. 43  enrol/cohort/yui/quickenrolment/assets/skins/sam/quickenrolment.css
  27. 156  enrol/cohort/yui/quickenrolment/quickenrolment.js
  28. 4  enrol/guest/lib.php
  29. 3  enrol/paypal/return.php
  30. 8  enrol/upgrade.txt
  31. 72  grade/lib.php
  32. 2  install/lang/ru/install.php
  33. 4  lang/en/admin.php
  34. 2  lang/en/cohort.php
  35. 1  lang/en/condition.php
  36. 4  lang/en/debug.php
  37. 9  lang/en/webservice.php
  38. 10,164  lib/accesslib.php
  39. 2  lib/adminlib.php
  40. 2  lib/componentlib.class.php
  41. 103  lib/conditionlib.php
  42. 8  lib/datalib.php
  43. 69  lib/db/install.php
  44. 23  lib/db/upgrade.php
  45. 27  lib/deprecatedlib.php
  46. 42  lib/dml/simpletest/testdml.php
  47. 5  lib/editor/tinymce/lib.php
  48. 3  lib/editor/tinymce/readme_moodle.txt
  49. 1  lib/editor/tinymce/tiny_mce/3.4.5/plugins/layer/editor_plugin.js
  50. 1  lib/editor/tinymce/tiny_mce/3.4.5/plugins/media/editor_plugin.js
  51. 1  lib/editor/tinymce/tiny_mce/3.4.5/plugins/paste/editor_plugin.js
  52. 1  lib/editor/tinymce/tiny_mce/3.4.5/tiny_mce.js
  53. 1  lib/editor/tinymce/tiny_mce/3.4.5/tiny_mce_jquery.js
  54. 1  lib/editor/tinymce/tiny_mce/3.4.5/tiny_mce_prototype.js
  55. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/jquery.tinymce.js
  56. 2  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/langs/en.js
  57. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/license.txt
  58. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advhr/css/advhr.css
  59. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advhr/editor_plugin.js
  60. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advhr/editor_plugin_src.js
  61. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advhr/js/rule.js
  62. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advhr/langs/en_dlg.js
  63. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advhr/rule.htm
  64. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advimage/css/advimage.css
  65. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advimage/editor_plugin.js
  66. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advimage/editor_plugin_src.js
  67. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advimage/image.htm
  68. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advimage/img/sample.gif
  69. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advimage/js/image.js
  70. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advimage/langs/en_dlg.js
  71. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advlink/css/advlink.css
  72. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advlink/editor_plugin.js
  73. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advlink/editor_plugin_src.js
  74. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advlink/js/advlink.js
  75. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advlink/langs/en_dlg.js
  76. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advlink/link.htm
  77. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advlist/editor_plugin.js
  78. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/advlist/editor_plugin_src.js
  79. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/autolink/editor_plugin.js
  80. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/autolink/editor_plugin_src.js
  81. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/autoresize/editor_plugin.js
  82. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/autoresize/editor_plugin_src.js
  83. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/autosave/editor_plugin.js
  84. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/autosave/editor_plugin_src.js
  85. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/autosave/langs/en.js
  86. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/bbcode/editor_plugin.js
  87. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/bbcode/editor_plugin_src.js
  88. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/contextmenu/editor_plugin.js
  89. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/contextmenu/editor_plugin_src.js
  90. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/directionality/editor_plugin.js
  91. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/directionality/editor_plugin_src.js
  92. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/dragmath/dragmath.php
  93. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/dragmath/editor_plugin.js
  94. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/dragmath/editor_plugin_src.js
  95. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/dragmath/img/dragmath.gif
  96. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/dragmath/js/dragmath.js
  97. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/dragmath/langs/en_dlg.js
  98. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/editor_plugin.js
  99. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/editor_plugin_src.js
  100. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/emotions.htm
  101. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/img/smiley-cool.gif
  102. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/img/smiley-cry.gif
  103. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/img/smiley-embarassed.gif
  104. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/img/smiley-foot-in-mouth.gif
  105. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/img/smiley-frown.gif
  106. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/img/smiley-innocent.gif
  107. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/img/smiley-kiss.gif
  108. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/img/smiley-laughing.gif
  109. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/img/smiley-money-mouth.gif
  110. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/img/smiley-sealed.gif
  111. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/img/smiley-smile.gif
  112. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/img/smiley-surprised.gif
  113. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/img/smiley-tongue-out.gif
  114. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/img/smiley-undecided.gif
  115. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/img/smiley-wink.gif
  116. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/img/smiley-yell.gif
  117. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/js/emotions.js
  118. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/emotions/langs/en_dlg.js
  119. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/example/dialog.htm
  120. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/example/editor_plugin.js
  121. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/example/editor_plugin_src.js
  122. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/example/img/example.gif
  123. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/example/js/dialog.js
  124. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/example/langs/en.js
  125. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/example/langs/en_dlg.js
  126. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/example_dependency/editor_plugin.js
  127. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/example_dependency/editor_plugin_src.js
  128. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/fullpage/css/fullpage.css
  129. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/fullpage/editor_plugin.js
  130. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/fullpage/editor_plugin_src.js
  131. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/fullpage/fullpage.htm
  132. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/fullpage/js/fullpage.js
  133. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/fullpage/langs/en_dlg.js
  134. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/fullscreen/editor_plugin.js
  135. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/fullscreen/editor_plugin_src.js
  136. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/fullscreen/fullscreen.htm
  137. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/iespell/editor_plugin.js
  138. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/iespell/editor_plugin_src.js
  139. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/inlinepopups/editor_plugin.js
  140. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/inlinepopups/editor_plugin_src.js
  141. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/inlinepopups/skins/clearlooks2/img/alert.gif
  142. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/inlinepopups/skins/clearlooks2/img/button.gif
  143. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif
  144. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif
  145. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/inlinepopups/skins/clearlooks2/img/corners.gif
  146. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif
  147. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif
  148. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/inlinepopups/skins/clearlooks2/window.css
  149. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/inlinepopups/template.htm
  150. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/insertdatetime/editor_plugin.js
  151. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/insertdatetime/editor_plugin_src.js
  152. 1  lib/editor/tinymce/tiny_mce/3.4.6/plugins/layer/editor_plugin.js
  153. 58  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/layer/editor_plugin_src.js
  154. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/legacyoutput/editor_plugin.js
  155. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/legacyoutput/editor_plugin_src.js
  156. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/lists/editor_plugin.js
  157. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/lists/editor_plugin_src.js
  158. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/media/css/media.css
  159. 1  lib/editor/tinymce/tiny_mce/3.4.6/plugins/media/editor_plugin.js
  160. 84  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/media/editor_plugin_src.js
  161. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/media/js/embed.js
  162. 76  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/media/js/media.js
  163. 2  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/media/langs/en_dlg.js
  164. 49  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/media/media.htm
  165. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/media/moxieplayer.swf
  166. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/moodleemoticon/dialog.php
  167. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/moodleemoticon/editor_plugin.js
  168. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/moodleemoticon/editor_plugin_src.js
  169. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/moodleemoticon/img/moodleemoticon.gif
  170. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/moodleemoticon/js/dialog.js
  171. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/moodlemedia/css/media.css
  172. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/moodlemedia/editor_plugin.js
  173. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/moodlemedia/editor_plugin_src.js
  174. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/moodlemedia/img/icon.gif
  175. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/moodlemedia/js/media.js
  176. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/moodlemedia/moodlemedia.htm
  177. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/moodlenolink/editor_plugin.js
  178. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/moodlenolink/editor_plugin_src.js
  179. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/moodlenolink/img/ed_nolink.gif
  180. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/moodlenolink/langs/en.js
  181. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/nonbreaking/editor_plugin.js
  182. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/nonbreaking/editor_plugin_src.js
  183. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/noneditable/editor_plugin.js
  184. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/noneditable/editor_plugin_src.js
  185. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/pagebreak/editor_plugin.js
  186. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/pagebreak/editor_plugin_src.js
  187. 1  lib/editor/tinymce/tiny_mce/3.4.6/plugins/paste/editor_plugin.js
  188. 12  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/paste/editor_plugin_src.js
  189. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/paste/js/pastetext.js
  190. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/paste/js/pasteword.js
  191. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/paste/langs/en_dlg.js
  192. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/paste/pastetext.htm
  193. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/paste/pasteword.htm
  194. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/preview/editor_plugin.js
  195. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/preview/editor_plugin_src.js
  196. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/preview/example.html
  197. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/preview/jscripts/embed.js
  198. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/preview/preview.html
  199. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/print/editor_plugin.js
  200. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/print/editor_plugin_src.js
  201. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/save/editor_plugin.js
  202. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/save/editor_plugin_src.js
  203. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/searchreplace/css/searchreplace.css
  204. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/searchreplace/editor_plugin.js
  205. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/searchreplace/editor_plugin_src.js
  206. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/searchreplace/js/searchreplace.js
  207. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/searchreplace/langs/en_dlg.js
  208. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/searchreplace/searchreplace.htm
  209. 3  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/spellchecker/changelog.txt
  210. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/spellchecker/classes/EnchantSpell.php
  211. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/spellchecker/classes/GoogleSpell.php
  212. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/spellchecker/classes/PSpell.php
  213. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/spellchecker/classes/PSpellShell.php
  214. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/spellchecker/classes/SpellChecker.php
  215. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/spellchecker/classes/utils/JSON.php
  216. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/spellchecker/classes/utils/Logger.php
  217. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/spellchecker/config.php
  218. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/spellchecker/css/content.css
  219. 2  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/spellchecker/editor_plugin.js
  220. 69  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/spellchecker/editor_plugin_src.js
  221. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/spellchecker/img/wline.gif
  222. 2  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/spellchecker/includes/general.php
  223. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/spellchecker/rpc.php
  224. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/style/css/props.css
  225. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/style/editor_plugin.js
  226. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/style/editor_plugin_src.js
  227. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/style/js/props.js
  228. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/style/langs/en_dlg.js
  229. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/style/props.htm
  230. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/tabfocus/editor_plugin.js
  231. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/tabfocus/editor_plugin_src.js
  232. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/table/cell.htm
  233. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/table/css/cell.css
  234. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/table/css/row.css
  235. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/table/css/table.css
  236. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/table/editor_plugin.js
  237. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/table/editor_plugin_src.js
  238. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/table/js/cell.js
  239. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/table/js/merge_cells.js
  240. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/table/js/row.js
  241. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/table/js/table.js
  242. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/table/langs/en_dlg.js
  243. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/table/merge_cells.htm
  244. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/table/row.htm
  245. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/table/table.htm
  246. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/template/blank.htm
  247. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/template/css/template.css
  248. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/template/editor_plugin.js
  249. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/template/editor_plugin_src.js
  250. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/template/js/template.js
  251. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/template/langs/en_dlg.js
  252. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/template/template.htm
  253. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/visualchars/editor_plugin.js
  254. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/visualchars/editor_plugin_src.js
  255. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/wordcount/editor_plugin.js
  256. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/wordcount/editor_plugin_src.js
  257. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/abbr.htm
  258. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/acronym.htm
  259. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/attributes.htm
  260. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/cite.htm
  261. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/css/attributes.css
  262. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/css/popup.css
  263. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/del.htm
  264. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/editor_plugin.js
  265. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/editor_plugin_src.js
  266. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/ins.htm
  267. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/js/abbr.js
  268. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/js/acronym.js
  269. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/js/attributes.js
  270. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/js/cite.js
  271. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/js/del.js
  272. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/js/element_common.js
  273. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/js/ins.js
  274. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/plugins/xhtmlxtras/langs/en_dlg.js
  275. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/about.htm
  276. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/anchor.htm
  277. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/charmap.htm
  278. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/color_picker.htm
  279. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/editor_template.js
  280. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/editor_template_src.js
  281. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/image.htm
  282. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/img/colorpicker.jpg
  283. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/img/flash.gif
  284. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/img/icons.gif
  285. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/img/iframe.gif
  286. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/img/pagebreak.gif
  287. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/img/quicktime.gif
  288. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/img/realmedia.gif
  289. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/img/shockwave.gif
  290. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/img/trans.gif
  291. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/img/video.gif
  292. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/img/windowsmedia.gif
  293. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/js/about.js
  294. 5  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/js/anchor.js
  295. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/js/charmap.js
  296. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/js/color_picker.js
  297. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/js/image.js
  298. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/js/link.js
  299. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/js/source_editor.js
  300. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/langs/en.js
  301. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/langs/en_dlg.js
  302. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/link.htm
  303. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/shortcuts.htm
  304. 3  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/default/content.css
  305. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/default/dialog.css
  306. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/default/img/buttons.png
  307. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/default/img/items.gif
  308. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/default/img/menu_arrow.gif
  309. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/default/img/menu_check.gif
  310. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/default/img/progress.gif
  311. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/default/img/tabs.gif
  312. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/default/ui.css
  313. 2  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/highcontrast/content.css
  314. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/highcontrast/dialog.css
  315. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/highcontrast/ui.css
  316. 2  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/o2k7/content.css
  317. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/o2k7/dialog.css
  318. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/o2k7/img/button_bg.png
  319. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/o2k7/img/button_bg_black.png
  320. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/o2k7/img/button_bg_silver.png
  321. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/o2k7/ui.css
  322. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/o2k7/ui_black.css
  323. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/skins/o2k7/ui_silver.css
  324. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/advanced/source_editor.htm
  325. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/simple/editor_template.js
  326. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/simple/editor_template_src.js
  327. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/simple/img/icons.gif
  328. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/simple/langs/en.js
  329. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/simple/skins/default/content.css
  330. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/simple/skins/default/ui.css
  331. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/simple/skins/o2k7/content.css
  332. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/simple/skins/o2k7/img/button_bg.png
  333. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/themes/simple/skins/o2k7/ui.css
  334. 1  lib/editor/tinymce/tiny_mce/3.4.6/tiny_mce.js
  335. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/tiny_mce_dev.js
  336. 1  lib/editor/tinymce/tiny_mce/3.4.6/tiny_mce_jquery.js
  337. 137  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/tiny_mce_jquery_src.js
  338. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/tiny_mce_popup.js
  339. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/tiny_mce_popup_src.js
  340. 1  lib/editor/tinymce/tiny_mce/3.4.6/tiny_mce_prototype.js
  341. 164  lib/editor/tinymce/tiny_mce/{3.4.5/tiny_mce_src.js → 3.4.6/tiny_mce_prototype_src.js}
  342. 164  lib/editor/tinymce/tiny_mce/{3.4.5/tiny_mce_prototype_src.js → 3.4.6/tiny_mce_src.js}
  343. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/utils/editable_selects.js
  344. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/utils/form_utils.js
  345. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/utils/mctabs.js
  346. 0  lib/editor/tinymce/tiny_mce/{3.4.5 → 3.4.6}/utils/validate.js
  347. 4  lib/editor/tinymce/version.php
  348. 10  lib/enrollib.php
  349. 64  lib/externallib.php
  350. 82  lib/filestorage/file_storage.php
  351. 8  lib/form/datetimeselector.php
  352. 23  lib/moodlelib.php
  353. 2  lib/navigationlib.php
  354. 5  lib/pluginlib.php
  355. 11  lib/questionlib.php
  356. 12  lib/sessionlib.php
  357. 6  lib/setuplib.php
  358. 1,172  lib/simpletest/fulltestaccesslib.php
  359. 382  lib/simpletest/testaccesslib.php
  360. 61  lib/simpletest/testblocklib_blockmanager.php
  361. 118  lib/simpletest/testfilterconfig.php
  362. 2  lib/thirdpartylibs.xml
  363. 10  lib/upgradelib.php
  364. 1  lib/zend/readme_moodle.txt
  365. 3  login/token.php
  366. 2  mod/assignment/type/upload/assignment.class.php
  367. 121  mod/feedback/delete_template.php
  368. 22  mod/feedback/edit.php
  369. 36  mod/feedback/edit_form.php
  370. 6  mod/feedback/item/label/lib.php
  371. 149  mod/feedback/lib.php
  372. 2  mod/feedback/version.php
  373. 489  mod/quiz/accessmanager.php
  374. 72  mod/quiz/accessmanager_form.php
  375. 297  mod/quiz/accessrule/accessrulebase.php
  376. 32  mod/quiz/accessrule/delaybetweenattempts/lang/en/quizaccess_delaybetweenattempts.php
  377. 100  mod/quiz/accessrule/delaybetweenattempts/rule.php
  378. 288  mod/quiz/accessrule/delaybetweenattempts/simpletest/testrule.php
  379. 32  mod/quiz/accessrule/delaybetweenattempts/version.php
  380. 31  mod/quiz/accessrule/ipaddress/lang/en/quizaccess_ipaddress.php
  381. 55  mod/quiz/accessrule/ipaddress/rule.php
  382. 73  mod/quiz/accessrule/ipaddress/simpletest/testrule.php
  383. 32  mod/quiz/accessrule/ipaddress/version.php
  384. 31  mod/quiz/accessrule/numattempts/lang/en/quizaccess_numattempts.php
  385. 63  mod/quiz/accessrule/numattempts/rule.php
  386. 69  mod/quiz/accessrule/numattempts/simpletest/testrule.php
  387. 32  mod/quiz/accessrule/numattempts/version.php
  388. 32  mod/quiz/accessrule/openclosedate/lang/en/quizaccess_openclosedate.php
  389. 95  mod/quiz/accessrule/openclosedate/rule.php
  390. 180  mod/quiz/accessrule/openclosedate/simpletest/testrule.php
  391. 32  mod/quiz/accessrule/openclosedate/version.php
  392. 32  mod/quiz/accessrule/password/lang/en/quizaccess_password.php
  393. 102  mod/quiz/accessrule/password/rule.php
  394. 58  mod/quiz/accessrule/password/simpletest/testrule.php
  395. 32  mod/quiz/accessrule/password/version.php
  396. 33  mod/quiz/accessrule/safebrowser/lang/en/quizaccess_safebrowser.php
  397. 89  mod/quiz/accessrule/safebrowser/rule.php
  398. 62  mod/quiz/accessrule/safebrowser/simpletest/testrule.php
  399. 32  mod/quiz/accessrule/safebrowser/version.php
  400. 31  mod/quiz/accessrule/securewindow/lang/en/quizaccess_securewindow.php
  401. 95  mod/quiz/accessrule/securewindow/rule.php
  402. 58  mod/quiz/accessrule/securewindow/simpletest/testrule.php
  403. 32  mod/quiz/accessrule/securewindow/version.php
  404. 31  mod/quiz/accessrule/timelimit/lang/en/quizaccess_timelimit.php
  405. 58  mod/quiz/accessrule/timelimit/rule.php
  406. 63  mod/quiz/accessrule/timelimit/simpletest/testrule.php
  407. 32  mod/quiz/accessrule/timelimit/version.php
  408. 862  mod/quiz/accessrules.php
  409. 20  mod/quiz/attempt.php
  410. 74  mod/quiz/attemptlib.php
  411. 21  mod/quiz/backup/moodle1/lib.php
  412. 56  mod/quiz/backup/moodle2/backup_mod_quiz_access_subplugin.class.php
  413. 8  mod/quiz/backup/moodle2/backup_quiz_stepslib.php
  414. 54  mod/quiz/backup/moodle2/restore_mod_quiz_access_subplugin.class.php
  415. 27  mod/quiz/backup/moodle2/restore_quiz_stepslib.php
  416. 6  mod/quiz/db/install.xml
  417. 5  mod/quiz/db/subplugins.php
  418. 72  mod/quiz/db/upgrade.php
  419. 15  mod/quiz/lang/en/quiz.php
  420. 18  mod/quiz/lib.php
  421. 40  mod/quiz/locallib.php
  422. 26  mod/quiz/mod_form.php
  423. 17  mod/quiz/module.js
  424. 337  mod/quiz/renderer.php
  425. 2  mod/quiz/report/overview/db/install.xml
  426. 6  mod/quiz/report/overview/report.php
  427. 21  mod/quiz/report/reportlib.php
  428. 9  mod/quiz/report/responses/report.php
  429. 3  mod/quiz/report/statistics/db/upgrade.php
  430. 3  mod/quiz/report/statistics/report.php
  431. 21  mod/quiz/review.php
  432. 2  mod/quiz/reviewquestion.php
  433. 29  mod/quiz/settings.php
  434. 50  mod/quiz/settingslib.php
  435. 614  mod/quiz/simpletest/testaccessrules.php
  436. 67  mod/quiz/simpletest/testquizobj.php
  437. 79  mod/quiz/startattempt.php
  438. 31  mod/quiz/summary.php
  439. 2  mod/quiz/version.php
  440. 82  mod/quiz/view.php
  441. 2  mod/url/db/install.xml
  442. 14  mod/url/db/upgrade.php
  443. 1  mod/url/lang/en/url.php
  444. 11  mod/url/mod_form.php
  445. 2  mod/url/version.php
  446. 4  mod/wiki/pagelib.php
  447. 73  question/behaviour/adaptive/behaviour.php
  448. 16  question/behaviour/adaptive/renderer.php
  449. 309  question/behaviour/adaptive/simpletest/testwalkthrough.php
  450. 7  question/behaviour/adaptivenopenalty/simpletest/testwalkthrough.php
  451. 15  question/engine/questionattempt.php
  452. 2  question/type/multianswer/lang/en/qtype_multianswer.php
  453. 2  question/type/numerical/question.php
  454. 19  question/type/questiontypebase.php
  455. 14  rating/simpletest/testrating.php
  456. 10  rss/file.php
  457. 9  theme/base/style/question.css
  458. 13  theme/nonzero/layout/general.php
  459. 61  theme/nonzero/style/pagelayout.css
  460. 116  theme/overlay/style/pagelayout.css
  461. 67  theme/sky_high/style/pagelayout.css
  462. 4  version.php
  463. 1  webservice/lib.php
  464. 46  webservice/soap/locallib.php
  465. 2  webservice/upload.php
  466. 41  webservice/xmlrpc/locallib.php
114  admin/environment.xml
@@ -442,4 +442,118 @@
442 442
       </PHP_SETTING>
443 443
     </PHP_SETTINGS>
444 444
   </MOODLE>
  445
+  <MOODLE version="2.2" requires="1.9">
  446
+    <UNICODE level="required">
  447
+      <FEEDBACK>
  448
+        <ON_ERROR message="unicoderequired" />
  449
+      </FEEDBACK>
  450
+    </UNICODE>
  451
+    <DATABASE level="required">
  452
+      <VENDOR name="mysql" version="5.0.25">
  453
+        <FEEDBACK>
  454
+          <ON_ERROR message="mysql416required" />
  455
+        </FEEDBACK>
  456
+      </VENDOR>
  457
+      <VENDOR name="postgres" version="8.3" />
  458
+      <VENDOR name="mssql" version="9.0" />
  459
+      <VENDOR name="odbc_mssql" version="9.0" />
  460
+      <VENDOR name="mssql_n" version="9.0" />
  461
+      <VENDOR name="oracle" version="10.2" />
  462
+      <VENDOR name="sqlite" version="2.0" />
  463
+    </DATABASE>
  464
+    <PHP version="5.3.2" level="required">
  465
+    </PHP>
  466
+    <PHP_EXTENSIONS>
  467
+      <PHP_EXTENSION name="iconv" level="required">
  468
+        <FEEDBACK>
  469
+          <ON_CHECK message="iconvrequired" />
  470
+        </FEEDBACK>
  471
+      </PHP_EXTENSION>
  472
+      <PHP_EXTENSION name="mbstring" level="optional">
  473
+        <FEEDBACK>
  474
+          <ON_CHECK message="mbstringrecommended" />
  475
+        </FEEDBACK>
  476
+      </PHP_EXTENSION>
  477
+      <PHP_EXTENSION name="curl" level="required">
  478
+        <FEEDBACK>
  479
+          <ON_CHECK message="curlrequired" />
  480
+        </FEEDBACK>
  481
+      </PHP_EXTENSION>
  482
+      <PHP_EXTENSION name="openssl" level="optional">
  483
+        <FEEDBACK>
  484
+          <ON_CHECK message="opensslrecommended" />
  485
+        </FEEDBACK>
  486
+      </PHP_EXTENSION>
  487
+      <PHP_EXTENSION name="tokenizer" level="optional">
  488
+        <FEEDBACK>
  489
+          <ON_CHECK message="tokenizerrecommended" />
  490
+        </FEEDBACK>
  491
+      </PHP_EXTENSION>
  492
+      <PHP_EXTENSION name="xmlrpc" level="optional">
  493
+        <FEEDBACK>
  494
+          <ON_CHECK message="xmlrpcrecommended" />
  495
+        </FEEDBACK>
  496
+      </PHP_EXTENSION>
  497
+      <PHP_EXTENSION name="soap" level="optional">
  498
+        <FEEDBACK>
  499
+          <ON_CHECK message="soaprecommended" />
  500
+        </FEEDBACK>
  501
+      </PHP_EXTENSION>
  502
+      <PHP_EXTENSION name="ctype" level="required">
  503
+        <FEEDBACK>
  504
+          <ON_ERROR message="ctyperequired" />
  505
+        </FEEDBACK>
  506
+      </PHP_EXTENSION>
  507
+      <PHP_EXTENSION name="zip" level="required">
  508
+        <FEEDBACK>
  509
+          <ON_ERROR message="ziprequired" />
  510
+        </FEEDBACK>
  511
+      </PHP_EXTENSION>
  512
+      <PHP_EXTENSION name="gd" level="optional">
  513
+        <FEEDBACK>
  514
+          <ON_CHECK message="gdrecommended" />
  515
+        </FEEDBACK>
  516
+      </PHP_EXTENSION>
  517
+      <PHP_EXTENSION name="simplexml" level="required">
  518
+        <FEEDBACK>
  519
+          <ON_CHECK message="simplexmlrequired" />
  520
+        </FEEDBACK>
  521
+      </PHP_EXTENSION>
  522
+      <PHP_EXTENSION name="spl" level="required">
  523
+        <FEEDBACK>
  524
+          <ON_CHECK message="splrequired" />
  525
+        </FEEDBACK>
  526
+      </PHP_EXTENSION>
  527
+      <PHP_EXTENSION name="pcre" level="required">
  528
+      </PHP_EXTENSION>
  529
+      <PHP_EXTENSION name="dom" level="required">
  530
+      </PHP_EXTENSION>
  531
+      <PHP_EXTENSION name="xml" level="required">
  532
+      </PHP_EXTENSION>
  533
+      <PHP_EXTENSION name="intl" level="optional">
  534
+        <FEEDBACK>
  535
+          <ON_CHECK message="intlrecommended" />
  536
+        </FEEDBACK>
  537
+      </PHP_EXTENSION>
  538
+      <PHP_EXTENSION name="json" level="required">
  539
+      </PHP_EXTENSION>
  540
+    </PHP_EXTENSIONS>
  541
+    <PHP_SETTINGS>
  542
+      <PHP_SETTING name="memory_limit" value="40M" level="required">
  543
+        <FEEDBACK>
  544
+          <ON_ERROR message="settingmemorylimit" />
  545
+        </FEEDBACK>
  546
+      </PHP_SETTING>
  547
+      <PHP_SETTING name="safe_mode" value="0" level="optional">
  548
+        <FEEDBACK>
  549
+          <ON_CHECK message="settingsafemode" />
  550
+        </FEEDBACK>
  551
+      </PHP_SETTING>
  552
+      <PHP_SETTING name="file_uploads" value="1" level="optional">
  553
+        <FEEDBACK>
  554
+          <ON_CHECK message="settingfileuploads" />
  555
+        </FEEDBACK>
  556
+      </PHP_SETTING>
  557
+    </PHP_SETTINGS>
  558
+  </MOODLE>
445 559
 </COMPATIBILITY_MATRIX>
12  admin/report/questioninstances/index.php
@@ -65,13 +65,15 @@
65 65
 
66 66
     // Get the question counts, and all the context information, for each
67 67
     // context. That is, rows of these results can be used as $context objects.
  68
+    $ctxpreload = context_helper::get_preload_record_columns_sql('con');
  69
+    $ctxgroupby = implode(',', array_keys(context_helper::get_preload_record_columns('con')));
68 70
     $counts = $DB->get_records_sql("
69  
-            SELECT qc.contextid, count(1) as numquestions, sum(hidden) as numhidden, con.id, con.contextlevel, con.instanceid, con.path, con.depth
  71
+            SELECT qc.contextid, count(1) as numquestions, sum(hidden) as numhidden, $ctxpreload
70 72
             FROM {question} q
71 73
             JOIN {question_categories} qc ON q.category = qc.id
72 74
             JOIN {context} con ON con.id = qc.contextid
73 75
             $sqlqtypetest
74  
-            GROUP BY contextid, con.id, con.contextlevel, con.instanceid, con.path, con.depth
  76
+            GROUP BY qc.contextid, $ctxgroupby
75 77
             ORDER BY numquestions DESC, numhidden ASC, con.contextlevel ASC, con.id ASC", $params);
76 78
 
77 79
     // Print the report heading.
@@ -94,8 +96,10 @@
94 96
     $totalhidden = 0;
95 97
     foreach ($counts as $count) {
96 98
         // Work out a link for editing questions in this context.
97  
-        $contextname = print_context_name($count);
98  
-        $url = question_edit_url($count);
  99
+        context_helper::preload_from_record($count);
  100
+        $context = context::instance_by_id($count->contextid);
  101
+        $contextname = $context->get_context_name();
  102
+        $url = question_edit_url($context);
99 103
         if ($url) {
100 104
             $contextname = '<a href="' . $url . '" title="' .
101 105
                     get_string('editquestionshere', 'report_questioninstances') .
9  admin/roles/usersroles.php
@@ -96,7 +96,8 @@
96 96
 
97 97
 /// Put the contexts into a tree structure.
98 98
 foreach ($contexts as $conid => $con) {
99  
-    $parentcontextid = get_parent_contextid($con);
  99
+    $context = context::instance_by_id($conid);
  100
+    $parentcontextid = get_parent_contextid($context);
100 101
     if ($parentcontextid) {
101 102
         $contexts[$parentcontextid]->children[] = $conid;
102 103
     }
@@ -156,13 +157,13 @@ function print_report_tree($contextid, $contexts, $systemcontext, $fullname) {
156 157
     }
157 158
 
158 159
     // Pull the current context into an array for convinience.
159  
-    $context = $contexts[$contextid];
  160
+    $context = context::instance_by_id($contextid);
160 161
 
161 162
     // Print the context name.
162  
-    echo $OUTPUT->heading(print_context_name($contexts[$contextid]), 4, 'contextname');
  163
+    echo $OUTPUT->heading($context->get_context_name(), 4, 'contextname');
163 164
 
164 165
     // If there are any role assignments here, print them.
165  
-    foreach ($context->roleassignments as $ra) {
  166
+    foreach ($contexts[$contextid]->roleassignments as $ra) {
166 167
         $value = $ra->contextid . ',' . $ra->roleid;
167 168
         $inputid = 'unassign' . $value;
168 169
 
5  admin/settings/appearance.php
@@ -118,8 +118,11 @@
118 118
     $ADMIN->add('appearance', $temp);
119 119
 
120 120
     // coursecontact is the person responsible for course - usually manages enrolments, receives notification, etc.
121  
-    $temp = new admin_settingpage('coursecontact', get_string('coursecontact', 'admin'));
  121
+    $temp = new admin_settingpage('coursecontact', get_string('courses'));
122 122
     $temp->add(new admin_setting_special_coursecontact());
  123
+    $temp->add(new admin_setting_configcheckbox('courselistshortnames',
  124
+            get_string('courselistshortnames', 'admin'),
  125
+            get_string('courselistshortnames_desc', 'admin'), 0));
123 126
     $ADMIN->add('appearance', $temp);
124 127
 
125 128
     $temp = new admin_settingpage('ajax', get_string('ajaxuse'));
2  admin/settings/development.php
@@ -26,7 +26,7 @@
26 26
     $temp->add(new admin_setting_configcheckbox('xmlstrictheaders', get_string('xmlstrictheaders', 'admin'), get_string('configxmlstrictheaders', 'admin'), 0));
27 27
     $temp->add(new admin_setting_configcheckbox('debugsmtp', get_string('debugsmtp', 'admin'), get_string('configdebugsmtp', 'admin'), 0));
28 28
     $temp->add(new admin_setting_configcheckbox('perfdebug', get_string('perfdebug', 'admin'), get_string('configperfdebug', 'admin'), '7', '15', '7'));
29  
-    $temp->add(new admin_setting_configcheckbox('debugstringids', get_string('debugstringids', 'admin'), get_string('configdebugstringids', 'admin'), 0));
  29
+    $temp->add(new admin_setting_configcheckbox('debugstringids', get_string('debugstringids', 'admin'), get_string('debugstringids_desc', 'admin'), 0));
30 30
     $temp->add(new admin_setting_configcheckbox('debugvalidators', get_string('debugvalidators', 'admin'), get_string('configdebugvalidators', 'admin'), 0));
31 31
     $temp->add(new admin_setting_configcheckbox('debugpageinfo', get_string('debugpageinfo', 'admin'), get_string('configdebugpageinfo', 'admin'), 0));
32 32
     $ADMIN->add('development', $temp);
6  admin/tool/capability/index.php
@@ -138,7 +138,8 @@
138 138
 
139 139
     // Put the contexts into a tree structure.
140 140
     foreach ($contexts as $conid => $con) {
141  
-        $parentcontextid = get_parent_contextid($con);
  141
+        $context = context::instance_by_id($conid);
  142
+        $parentcontextid = get_parent_contextid($context);
142 143
         if ($parentcontextid) {
143 144
             $contexts[$parentcontextid]->children[] = $conid;
144 145
         }
@@ -196,7 +197,8 @@ function print_report_tree($contextid, $contexts, $allroles) {
196 197
         $url = "$CFG->wwwroot/$CFG->admin/roles/override.php?contextid=$contextid";
197 198
         $title = get_string('changeoverrides', 'tool_capability');
198 199
     }
199  
-    echo '<h3><a href="' . $url . '" title="' . $title . '">', print_context_name($contexts[$contextid]), '</a></h3>';
  200
+    $context = context::instance_by_id($contextid);
  201
+    echo '<h3><a href="' . $url . '" title="' . $title . '">', $context->get_context_name(), '</a></h3>';
200 202
 
201 203
     // If there are any role overrides here, print them.
202 204
     if (!empty($contexts[$contextid]->rolecapabilities)) {
46  admin/tool/unittest/simpletestlib.php
@@ -746,6 +746,52 @@ protected function revert_global_user_id() {
746 746
     }
747 747
 
748 748
     /**
  749
+     * Recreates the system context record in the 'context' table
  750
+     *
  751
+     * Once we have switched to test db, if we have recreated the
  752
+     * context table and it's empty, it may be necessary to manually
  753
+     * create the system context record if unittests are going to
  754
+     * play with contexts.
  755
+     *
  756
+     * This is needed because the context_system::instance() method
  757
+     * is exceptional and always requires the record to exist, never
  758
+     * creating it :-( No problem for other contexts.
  759
+     *
  760
+     * Altenatively one complete install can be done, like
  761
+     * {@see accesslib_test::test_everything_in_accesslib} does, but that's
  762
+     * to much for some tests not requiring all the roles/caps/friends
  763
+     * to be present.
  764
+     *
  765
+     * Ideally some day we'll move a lot of these UnitTests to a complete
  766
+     * cloned installation with real data to play with. That day this
  767
+     * won't be necessary anymore.
  768
+     */
  769
+    protected function create_system_context_record() {
  770
+        global $DB;
  771
+
  772
+        // If, for any reason, the record exists, do nothing
  773
+        if ($DB->record_exists('context', array('contextlevel'=>CONTEXT_SYSTEM))) {
  774
+            return;
  775
+        }
  776
+
  777
+        $record = new stdClass();
  778
+        $record->contextlevel = CONTEXT_SYSTEM;
  779
+        $record->instanceid   = 0;
  780
+        $record->depth        = 1;
  781
+        $record->path         = null;
  782
+        if (defined('SYSCONTEXTID')) {
  783
+            $record->id = SYSCONTEXTID;
  784
+            $DB->import_record('context', $record);
  785
+            $DB->get_manager()->reset_sequence('context');
  786
+        } else {
  787
+            $record->id = $DB->insert_record('context', $record);
  788
+        }
  789
+        // fix path
  790
+        $record->path  = '/'.$record->id;
  791
+        $DB->set_field('context', 'path', $record->path, array('id' => $record->id));
  792
+    }
  793
+
  794
+    /**
749 795
      * Check that the user has not forgotten to clean anything up, and if they
750 796
      * have, display a rude message and clean it up for them.
751 797
      */
7  auth/shibboleth/index.php
@@ -39,7 +39,9 @@
39 39
 
40 40
         if ($shibbolethauth->user_login($frm->username, $frm->password)) {
41 41
 
42  
-            $USER = authenticate_user_login($frm->username, $frm->password);
  42
+            $user = authenticate_user_login($frm->username, $frm->password);
  43
+            enrol_check_plugins($user);
  44
+            session_set_user($user);
43 45
 
44 46
             $USER->loggedin = true;
45 47
             $USER->site     = $CFG->wwwroot; // for added security, store the site in the
@@ -75,9 +77,6 @@
75 77
                 }
76 78
             }
77 79
 
78  
-            enrol_check_plugins($USER);
79  
-            load_all_capabilities();     /// This is what lets the user do anything on the site  :-)
80  
-
81 80
             redirect($urltogo);
82 81
 
83 82
             exit;
10  auth/upgrade.txt
... ...
@@ -0,0 +1,10 @@
  1
+This files describes API changes in /auth/* - plugins,
  2
+information provided here is intended especially for developers.
  3
+
  4
+=== 2.2 ===
  5
+
  6
+required changes in code:
  7
+* the correct sequence to set up global $USER is:
  8
+    $user = get_complete_user_data('username', $username); // or $user = authenticate_user_login()
  9
+    enrol_check_plugins($user);
  10
+    session_set_user($user);
4  blog/edit.php
@@ -143,9 +143,9 @@
143 143
     if ($CFG->useblogassociations && ($blogassociations = $DB->get_records('blog_association', array('blogid' => $entry->id)))) {
144 144
 
145 145
         foreach ($blogassociations as $assocrec) {
146  
-            $contextrec = $DB->get_record('context', array('id' => $assocrec->contextid));
  146
+            $context = get_context_instance_by_id($assocrec->contextid);
147 147
 
148  
-            switch ($contextrec->contextlevel) {
  148
+            switch ($context->contextlevel) {
149 149
                 case CONTEXT_COURSE:
150 150
                     $entry->courseassoc = $assocrec->contextid;
151 151
                     break;
8  blog/edit_form.php
@@ -95,7 +95,7 @@ function definition() {
95 95
                     $a->modname = $mod->name;
96 96
                     $context = get_context_instance(CONTEXT_MODULE, $modid);
97 97
                 } else {
98  
-                    $context = $DB->get_record('context', array('id' => $entry->modassoc));
  98
+                    $context = get_context_instance_by_id($entry->modassoc);
99 99
                     $cm = $DB->get_record('course_modules', array('id' => $context->instanceid));
100 100
                     $a = new stdClass();
101 101
                     $a->modtype = $DB->get_field('modules', 'name', array('id' => $cm->module));
@@ -134,7 +134,7 @@ function validation($data, $files) {
134 134
 
135 135
         // validate course association
136 136
         if (!empty($data['courseassoc']) && has_capability('moodle/blog:associatecourse', $sitecontext)) {
137  
-            $coursecontext = $DB->get_record('context', array('id' => $data['courseassoc'], 'contextlevel' => CONTEXT_COURSE));
  137
+            $coursecontext = get_context_instance(CONTEXT_COURSE, $data['courseassoc']);
138 138
 
139 139
             if ($coursecontext)  {
140 140
                 if (!is_enrolled($coursecontext) and !is_viewing($coursecontext)) {
@@ -149,12 +149,12 @@ function validation($data, $files) {
149 149
         if (!empty($data['modassoc'])) {
150 150
             $modcontextid = $data['modassoc'];
151 151
 
152  
-            $modcontext = $DB->get_record('context', array('id' => $modcontextid, 'contextlevel' => CONTEXT_MODULE));
  152
+            $modcontext = get_context_instance(CONTEXT_MODULE, $modcontextid);
153 153
 
154 154
             if ($modcontext) {
155 155
                 // get context of the mod's course
156 156
                 $path = explode('/', $modcontext->path);
157  
-                $coursecontext = $DB->get_record('context', array('id' => $path[(count($path) - 2)]));
  157
+                $coursecontext = get_context_instance_by_id($path[(count($path) - 2)]);
158 158
 
159 159
                 // ensure only one course is associated
160 160
                 if (!empty($data['courseassoc'])) {
14  blog/locallib.php
@@ -247,10 +247,10 @@ public function print_html($return=false) {
247 247
 
248 248
             // First find and show the associated course
249 249
             foreach ($blogassociations as $assocrec) {
250  
-                $contextrec = $DB->get_record('context', array('id' => $assocrec->contextid));
251  
-                if ($contextrec->contextlevel ==  CONTEXT_COURSE) {
252  
-                    $assocurl = new moodle_url('/course/view.php', array('id' => $contextrec->instanceid));
253  
-                    $text = $DB->get_field('course', 'shortname', array('id' => $contextrec->instanceid)); //TODO: performance!!!!
  250
+                $context = get_context_instance_by_id($assocrec->contextid);
  251
+                if ($context->contextlevel ==  CONTEXT_COURSE) {
  252
+                    $assocurl = new moodle_url('/course/view.php', array('id' => $context->instanceid));
  253
+                    $text = $DB->get_field('course', 'shortname', array('id' => $context->instanceid)); //TODO: performance!!!!
254 254
                     $assocstr .= $OUTPUT->action_icon($assocurl, new pix_icon('i/course', $text), null, array(), true);
255 255
                     $hascourseassocs = true;
256 256
                     $assoctype = get_string('course');
@@ -259,15 +259,15 @@ public function print_html($return=false) {
259 259
 
260 260
             // Now show mod association
261 261
             foreach ($blogassociations as $assocrec) {
262  
-                $contextrec = $DB->get_record('context', array('id' => $assocrec->contextid));
  262
+                $context = get_context_instance_by_id($assocrec->contextid);
263 263
 
264  
-                if ($contextrec->contextlevel ==  CONTEXT_MODULE) {
  264
+                if ($context->contextlevel ==  CONTEXT_MODULE) {
265 265
                     if ($hascourseassocs) {
266 266
                         $assocstr .= ', ';
267 267
                         $hascourseassocs = false;
268 268
                     }
269 269
 
270  
-                    $modinfo = $DB->get_record('course_modules', array('id' => $contextrec->instanceid));
  270
+                    $modinfo = $DB->get_record('course_modules', array('id' => $context->instanceid));
271 271
                     $modname = $DB->get_field('modules', 'name', array('id' => $modinfo->module));
272 272
 
273 273
                     $assocurl = new moodle_url('/mod/'.$modname.'/view.php', array('id' => $modinfo->id));
29  cohort/index.php
@@ -25,9 +25,12 @@
25 25
  */
26 26
 
27 27
 require('../config.php');
  28
+require($CFG->dirroot.'/cohort/lib.php');
28 29
 require_once($CFG->libdir.'/adminlib.php');
29 30
 
30 31
 $contextid = optional_param('contextid', 0, PARAM_INT);
  32
+$page = optional_param('page', 0, PARAM_INT);
  33
+$searchquery  = optional_param('search', '', PARAM_RAW);
31 34
 
32 35
 require_login();
33 36
 
@@ -68,10 +71,31 @@
68 71
 
69 72
 echo $OUTPUT->heading(get_string('cohortsin', 'cohort', print_context_name($context)));
70 73
 
71  
-$cohorts = $DB->get_records('cohort', array('contextid'=>$context->id));
  74
+// add search form
  75
+$search  = html_writer::start_tag('form', array('id'=>'searchcohortquery', 'method'=>'get'));
  76
+$search .= html_writer::start_tag('div');
  77
+$search .= html_writer::label(get_string('searchcohort', 'cohort').':', 'cohort_search_q');
  78
+$search .= html_writer::empty_tag('input', array('id'=>'cohort_search_q', 'type'=>'text', 'name'=>'search', 'value'=>$searchquery));
  79
+$search .= html_writer::empty_tag('input', array('type'=>'submit', 'value'=>get_string('search', 'cohort')));
  80
+$search .= html_writer::end_tag('div');
  81
+$search .= html_writer::end_tag('form');
  82
+echo $search;
  83
+
  84
+$cohorts = cohort_get_cohorts($context->id, $page, 25, $searchquery);
  85
+
  86
+// output pagination bar
  87
+$params = array('page' => $page);
  88
+if ($contextid) {
  89
+    $params['contextid'] = $contextid;
  90
+}
  91
+if ($search) {
  92
+    $params['search'] = $searchquery;
  93
+}
  94
+$baseurl = new moodle_url('/cohort/index.php', $params);
  95
+echo $OUTPUT->paging_bar($cohorts['totalcohorts'], $page, 25, $baseurl);
72 96
 
73 97
 $data = array();
74  
-foreach($cohorts as $cohort) {
  98
+foreach($cohorts['cohorts'] as $cohort) {
75 99
     $line = array();
76 100
     $line[] = format_string($cohort->name);
77 101
     $line[] = $cohort->idnumber;
@@ -107,6 +131,7 @@
107 131
 $table->width = '80%';
108 132
 $table->data  = $data;
109 133
 echo html_writer::table($table);
  134
+echo $OUTPUT->paging_bar($cohorts['totalcohorts'], $page, 25, $baseurl);
110 135
 
111 136
 if ($manager) {
112 137
     echo $OUTPUT->single_button(new moodle_url('/cohort/edit.php', array('contextid'=>$context->id)), get_string('add'));
45  cohort/lib.php
@@ -191,6 +191,51 @@ function cohort_get_visible_list($course) {
191 191
 }
192 192
 
193 193
 /**
  194
+ * Get all the cohorts.
  195
+ *
  196
+ * @global moodle_database $DB
  197
+ * @param int $contextid
  198
+ * @param int $page number of the current page
  199
+ * @param int $perpage items per page
  200
+ * @param string $search search string
  201
+ * @return array    Array(totalcohorts => int, cohorts => array)
  202
+ */
  203
+function cohort_get_cohorts($contextid, $page = 0, $perpage = 25, $search = '') {
  204
+    global $DB;
  205
+
  206
+    $cohorts = array();
  207
+
  208
+    // Add some additional sensible conditions
  209
+    $tests = array('contextid = ?');
  210
+    $params = array($contextid);
  211
+
  212
+    if (!empty($search)) {
  213
+        $conditions = array(
  214
+            'name',
  215
+            'idnumber',
  216
+            'description',
  217
+        );
  218
+        $searchparam = '%' . $search . '%';
  219
+        foreach ($conditions as $key=>$condition) {
  220
+            $conditions[$key] = $DB->sql_like($condition,"?", false);
  221
+            $params[] = $searchparam;
  222
+        }
  223
+        $tests[] = '(' . implode(' OR ', $conditions) . ')';
  224
+    }
  225
+    $wherecondition = implode(' AND ', $tests);
  226
+
  227
+    $fields = 'SELECT *';
  228
+    $countfields = 'SELECT COUNT(1)';
  229
+    $sql = " FROM {cohort}
  230
+             WHERE $wherecondition";
  231
+    $order = ' ORDER BY name ASC';
  232
+    $totalcohorts = $DB->count_records_sql($countfields . $sql, $params);
  233
+    $cohorts = $DB->get_records_sql($fields . $sql . $order, $params, $page*$perpage, $perpage);
  234
+
  235
+    return array('totalcohorts' => $totalcohorts, 'cohorts' => $cohorts);
  236
+}
  237
+
  238
+/**
194 239
  * Cohort assignment candidates
195 240
  */
196 241
 class cohort_candidate_selector extends user_selector_base {
3  course/category.php
@@ -314,7 +314,8 @@
314 314
 
315 315
             $linkcss = $acourse->visible ? '' : ' class="dimmed" ';
316 316
             echo '<tr>';
317  
-            echo '<td><a '.$linkcss.' href="view.php?id='.$acourse->id.'">'. format_string($acourse->fullname) .'</a></td>';
  317
+            $coursename = get_course_display_name_for_list($acourse);
  318
+            echo '<td><a '.$linkcss.' href="view.php?id='.$acourse->id.'">'. format_string($coursename) .'</a></td>';
318 319
             if ($editingon) {
319 320
                 echo '<td>';
320 321
                 if (has_capability('moodle/course:update', $coursecontext)) {
23  course/lib.php
@@ -2174,6 +2174,22 @@ function make_categories_options() {
2174 2174
 }
2175 2175
 
2176 2176
 /**
  2177
+ * Gets the name of a course to be displayed when showing a list of courses.
  2178
+ * By default this is just $course->fullname but user can configure it. The
  2179
+ * result of this function should be passed through print_string.
  2180
+ * @param object $course Moodle course object
  2181
+ * @return string Display name of course (either fullname or short + fullname)
  2182
+ */
  2183
+function get_course_display_name_for_list($course) {
  2184
+    global $CFG;
  2185
+    if (!empty($CFG->courselistshortnames)) {
  2186
+        return $course->shortname . ' ' .$course->fullname;
  2187
+    } else {
  2188
+        return $course->fullname;
  2189
+    }
  2190
+}
  2191
+
  2192
+/**
2177 2193
  * Prints the category info in indented fashion
2178 2194
  * This function is only used by print_whole_category_list() above
2179 2195
  */
@@ -2231,7 +2247,8 @@ function print_category_info($category, $depth=0, $showcourses = false) {
2231 2247
                     $linkcss = array('class'=>'dimmed');
2232 2248
                 }
2233 2249
 
2234  
-                $courselink = html_writer::link(new moodle_url('/course/view.php', array('id'=>$course->id)), format_string($course->fullname), $linkcss);
  2250
+                $coursename = get_course_display_name_for_list($course);
  2251
+                $courselink = html_writer::link(new moodle_url('/course/view.php', array('id'=>$course->id)), format_string($coursename), $linkcss);
2235 2252
 
2236 2253
                 // print enrol info
2237 2254
                 $courseicon = '';
@@ -2423,7 +2440,9 @@ function print_course($course, $highlightterms = '') {
2423 2440
     echo html_writer::start_tag('h3', array('class'=>'name'));
2424 2441
 
2425 2442
     $linkhref = new moodle_url('/course/view.php', array('id'=>$course->id));
2426  
-    $linktext = highlight($highlightterms, format_string($course->fullname));
  2443
+
  2444
+    $coursename = get_course_display_name_for_list($course);
  2445
+    $linktext = highlight($highlightterms, format_string($coursename));
2427 2446
     $linkparams = array('title'=>get_string('entercourse'));
2428 2447
     if (empty($course->visible)) {
2429 2448
         $linkparams['class'] = 'dimmed';
12  course/modedit.php
@@ -320,12 +320,6 @@
320 320
         if (!empty($CFG->enableavailability)) {
321 321
             $cm->availablefrom             = $fromform->availablefrom;
322 322
             $cm->availableuntil            = $fromform->availableuntil;
323  
-            // The form time is midnight, but because we want it to be
324  
-            // inclusive, set it to 23:59:59 on that day.
325  
-            if ($cm->availableuntil) {
326  
-                $cm->availableuntil = strtotime('23:59:59',
327  
-                    $cm->availableuntil);
328  
-            }
329 323
             $cm->showavailability          = $fromform->showavailability;
330 324
             condition_info::update_cm_from_form($cm,$fromform,true);
331 325
         }
@@ -411,12 +405,6 @@
411 405
         if(!empty($CFG->enableavailability)) {
412 406
             $newcm->availablefrom             = $fromform->availablefrom;
413 407
             $newcm->availableuntil            = $fromform->availableuntil;
414  
-            // The form time is midnight, but because we want it to be
415  
-            // inclusive, set it to 23:59:59 on that day.
416  
-            if ($newcm->availableuntil) {
417  
-                $newcm->availableuntil = strtotime('23:59:59',
418  
-                    $newcm->availableuntil);
419  
-            }
420 408
             $newcm->showavailability          = $fromform->showavailability;
421 409
         }
422 410
         if (isset($fromform->showdescription)) {
21  course/moodleform_mod.php
@@ -309,7 +309,7 @@ function validation($data, $files) {
309 309
         // Conditions: Don't let them set dates which make no sense
310 310
         if (array_key_exists('availablefrom', $data) &&
311 311
             $data['availablefrom'] && $data['availableuntil'] &&
312  
-            $data['availablefrom'] > $data['availableuntil']) {
  312
+            $data['availablefrom'] >= $data['availableuntil']) {
313 313
             $errors['availablefrom'] = get_string('badavailabledates', 'condition');
314 314
         }
315 315
 
@@ -430,10 +430,23 @@ function standard_coursemodule_elements(){
430 430
 
431 431
         if (!empty($CFG->enableavailability)) {
432 432
             // Conditional availability
433  
-            $mform->addElement('header', 'availabilityconditionsheader', get_string('availabilityconditions', 'condition'));
434  
-            $mform->addElement('date_selector', 'availablefrom', get_string('availablefrom', 'condition'), array('optional'=>true));
  433
+
  434
+            // Available from/to defaults to midnight because then the display
  435
+            // will be nicer where it tells users when they can access it (it
  436
+            // shows only the date and not time).
  437
+            $date = usergetdate(time());
  438
+            $midnight = make_timestamp($date['year'], $date['mon'], $date['mday']);
  439
+
  440
+            // From/until controls
  441
+            $mform->addElement('header', 'availabilityconditionsheader',
  442
+                    get_string('availabilityconditions', 'condition'));
  443
+            $mform->addElement('date_time_selector', 'availablefrom',
  444
+                    get_string('availablefrom', 'condition'),
  445
+                    array('optional' => true, 'defaulttime' => $midnight));
435 446
             $mform->addHelpButton('availablefrom', 'availablefrom', 'condition');
436  
-            $mform->addElement('date_selector', 'availableuntil', get_string('availableuntil', 'condition'), array('optional'=>true));
  447
+            $mform->addElement('date_time_selector', 'availableuntil',
  448
+                    get_string('availableuntil', 'condition'),
  449
+                    array('optional' => true, 'defaulttime' => $midnight));
437 450
 
438 451
             // Conditions based on grades
439 452
             $gradeoptions = array();
29  course/report/completion/index.php
@@ -241,6 +241,9 @@ function csv_quote($value) {
241 241
 foreach ($initials as $initial) {
242 242
     $var = 'si'.$initial;
243 243
 
  244
+    $othervar = $initial == 'first' ? 'silast' : 'sifirst';
  245
+    $othervar = $$othervar != 'all' ? "&amp;{$othervar}={$$othervar}" : '';
  246
+
244 247
     $pagingbar .= ' <div class="initialbar '.$initial.'initial">';
245 248
     $pagingbar .= get_string($initial.'name').':&nbsp;';
246 249
 
@@ -248,7 +251,7 @@ function csv_quote($value) {
248 251
         $pagingbar .= '<strong>'.get_string('all').'</strong> ';
249 252
     }
250 253
     else {
251  
-        $pagingbar .= '<a href="'.$link.'">'.get_string('all').'</a> ';
  254
+        $pagingbar .= "<a href=\"{$link}{$othervar}\">".get_string('all').'</a> ';
252 255
     }
253 256
 
254 257
     foreach ($alphabet as $letter) {
@@ -256,7 +259,7 @@ function csv_quote($value) {
256 259
             $pagingbar .= '<strong>'.$letter.'</strong> ';
257 260
         }
258 261
         else {
259  
-            $pagingbar .= '<a href="'.$link.'&amp;'.$var.'='.$letter.'">'.$letter.'</a> ';
  262
+            $pagingbar .= "<a href=\"$link&amp;$var={$letter}{$othervar}\">$letter</a> ";
260 263
         }
261 264
     }
262 265
 
@@ -270,10 +273,19 @@ function csv_quote($value) {
270 273
     $pagingbar .= '<div class="paging">';
271 274
     $pagingbar .= get_string('page').': ';
272 275
 
  276
+    $sistrings = array();
  277
+    if ($sifirst != 'all') {
  278
+        $sistrings[] =  "sifirst={$sifirst}";
  279
+    }
  280
+    if ($silast != 'all') {
  281
+        $sistrings[] =  "silast={$silast}";
  282
+    }
  283
+    $sistring = !empty($sistrings) ? '&amp;'.implode('&amp;', $sistrings) : '';
  284
+
273 285
     // Display previous link
274 286
     if ($start > 0) {
275 287
         $pstart = max($start - COMPLETION_REPORT_PAGE, 0);
276  
-        $pagingbar .= '(<a class="previous" href="'.$link.$pstart.'">'.get_string('previous').'</a>)&nbsp;';
  288
+        $pagingbar .= "(<a class=\"previous\" href=\"{$link}{$pstart}{$sistring}\">".get_string('previous').'</a>)&nbsp;';
277 289
     }
278 290
 
279 291
     // Create page links
@@ -286,7 +298,7 @@ function csv_quote($value) {
286 298
             $pagingbar .= '&nbsp;'.$curpage.'&nbsp;';
287 299
         }
288 300
         else {
289  
-            $pagingbar .= '&nbsp;<a href="'.$link.$curstart.'">'.$curpage.'</a>&nbsp;';
  301
+            $pagingbar .= "&nbsp;<a href=\"{$link}{$curstart}{$sistring}\">$curpage</a>&nbsp;";
290 302
         }
291 303
 
292 304
         $curstart += COMPLETION_REPORT_PAGE;
@@ -295,7 +307,7 @@ function csv_quote($value) {
295 307
     // Display next link
296 308
     $nstart = $start + COMPLETION_REPORT_PAGE;
297 309
     if ($nstart < $total) {
298  
-        $pagingbar .= '&nbsp;(<a class="next" href="'.$link.$nstart.'">'.get_string('next').'</a>)';
  310
+        $pagingbar .= "&nbsp;(<a class=\"next\" href=\"{$link}{$nstart}{$sistring}\">".get_string('next').'</a>)';
299 311
     }
300 312
 
301 313
     $pagingbar .= '</div>';
@@ -441,12 +453,15 @@ function csv_quote($value) {
441 453
 
442 454
     // User heading / sort option
443 455
     print '<th scope="col" class="completion-sortchoice" style="clear: both;">';
  456
+
  457
+    $sistring = "&amp;silast={$silast}&amp;sifirst={$sifirst}";
  458
+
444 459
     if($firstnamesort) {
445 460
         print
446  
-            get_string('firstname').' / <a href="./?course='.$course->id.'">'.
  461
+            get_string('firstname')." / <a href=\"./?course={$course->id}{$sistring}\">".
447 462
             get_string('lastname').'</a>';
448 463
     } else {
449  
-        print '<a href="./?course='.$course->id.'&amp;sort=firstname">'.
  464
+        print "<a href=\"./?course={$course->id}&amp;sort=firstname{$sistring}\">".
450 465
             get_string('firstname').'</a> / '.
451 466
             get_string('lastname');
452 467
     }
29  course/report/progress/index.php
@@ -173,6 +173,9 @@ function csv_quote($value) {
173 173
 foreach ($initials as $initial) {
174 174
     $var = 'si'.$initial;
175 175
 
  176
+    $othervar = $initial == 'first' ? 'silast' : 'sifirst';
  177
+    $othervar = $$othervar != 'all' ? "&amp;{$othervar}={$$othervar}" : '';
  178
+
176 179
     $pagingbar .= ' <div class="initialbar '.$initial.'initial">';
177 180
     $pagingbar .= get_string($initial.'name').':&nbsp;';
178 181
 
@@ -180,7 +183,7 @@ function csv_quote($value) {
180 183
         $pagingbar .= '<strong>'.get_string('all').'</strong> ';
181 184
     }
182 185
     else {
183  
-        $pagingbar .= '<a href="'.$link.'">'.get_string('all').'</a> ';
  186
+        $pagingbar .= "<a href=\"{$link}{$othervar}\">".get_string('all').'</a> ';
184 187
     }
185 188
 
186 189
     foreach ($alphabet as $letter) {
@@ -188,7 +191,7 @@ function csv_quote($value) {
188 191
             $pagingbar .= '<strong>'.$letter.'</strong> ';
189 192
         }
190 193
         else {
191  
-            $pagingbar .= '<a href="'.$link.'&amp;'.$var.'='.$letter.'">'.$letter.'</a> ';
  194
+            $pagingbar .= "<a href=\"$link&amp;$var={$letter}{$othervar}\">$letter</a> ";
192 195
         }
193 196
     }
194 197
 
@@ -202,10 +205,19 @@ function csv_quote($value) {
202 205
     $pagingbar .= '<div class="paging">';
203 206
     $pagingbar .= get_string('page').': ';
204 207
 
  208
+    $sistrings = array();
  209
+    if ($sifirst != 'all') {
  210
+        $sistrings[] =  "sifirst={$sifirst}";
  211
+    }
  212
+    if ($silast != 'all') {
  213
+        $sistrings[] =  "silast={$silast}";
  214
+    }
  215
+    $sistring = !empty($sistrings) ? '&amp;'.implode('&amp;', $sistrings) : '';
  216
+
205 217
     // Display previous link
206 218
     if ($start > 0) {
207 219
         $pstart = max($start - COMPLETION_REPORT_PAGE, 0);
208  
-        $pagingbar .= '(<a class="previous" href="'.$link.$pstart.'">'.get_string('previous').'</a>)&nbsp;';
  220
+        $pagingbar .= "(<a class=\"previous\" href=\"{$link}{$pstart}{$sistring}\">".get_string('previous').'</a>)&nbsp;';
209 221
     }
210 222
 
211 223
     // Create page links
@@ -218,7 +230,7 @@ function csv_quote($value) {
218 230
             $pagingbar .= '&nbsp;'.$curpage.'&nbsp;';
219 231
         }
220 232
         else {
221  
-            $pagingbar .= '&nbsp;<a href="'.$link.$curstart.'">'.$curpage.'</a>&nbsp;';
  233
+            $pagingbar .= "&nbsp;<a href=\"{$link}{$curstart}{$sistring}\">$curpage</a>&nbsp;";
222 234
         }
223 235
 
224 236
         $curstart += COMPLETION_REPORT_PAGE;
@@ -227,7 +239,7 @@ function csv_quote($value) {
227 239
     // Display next link
228 240
     $nstart = $start + COMPLETION_REPORT_PAGE;
229 241
     if ($nstart < $total) {
230  
-        $pagingbar .= '&nbsp;(<a class="next" href="'.$link.$nstart.'">'.get_string('next').'</a>)';
  242
+        $pagingbar .= "&nbsp;(<a class=\"next\" href=\"{$link}{$nstart}{$sistring}\">".get_string('next').'</a>)';
231 243
     }
232 244
 
233 245
     $pagingbar .= '</div>';
@@ -251,12 +263,15 @@ function csv_quote($value) {
251 263
 
252 264
     // User heading / sort option
253 265
     print '<th scope="col" class="completion-sortchoice">';
  266
+
  267
+    $sistring = "&amp;silast={$silast}&amp;sifirst={$sifirst}";
  268
+
254 269
     if($firstnamesort) {
255 270
         print
256  
-            get_string('firstname').' / <a href="./?course='.$course->id.'">'.
  271
+            get_string('firstname')." / <a href=\"./?course={$course->id}{$sistring}\">".
257 272
             get_string('lastname').'</a>';
258 273
     } else {
259  
-        print '<a href="./?course='.$course->id.'&amp;sort=firstname">'.
  274
+        print "<a href=\"./?course={$course->id}&amp;sort=firstname{$sistring}\">".
260 275
             get_string('firstname').'</a> / '.
261 276
             get_string('lastname');
262 277
     }
20  course/simpletest/testcourselib.php
@@ -113,4 +113,24 @@ function testReorderSections() {
113 113
         $this->assertEqual(25, next($newsections_flipped));
114 114
         $this->assertEqual(21, next($newsections_flipped));
115 115
     }
  116
+
  117
+    function test_get_course_display_name_for_list() {
  118
+        global $CFG;
  119
+
  120
+        $course = (object)array('shortname' => 'FROG101',
  121
+                'fullname' => 'Introduction to pond life');
  122
+
  123
+        // Store config value in case other tests rely on it
  124
+        $oldcfg = $CFG->courselistshortnames;
  125
+
  126
+        $CFG->courselistshortnames = 0;
  127
+        $this->assertEqual('Introduction to pond life',
  128
+                get_course_display_name_for_list($course));
  129
+
  130
+        $CFG->courselistshortnames = 1;
  131
+        $this->assertEqual('FROG101 Introduction to pond life',
  132
+                get_course_display_name_for_list($course));
  133
+
  134
+        $CFG->courselistshortnames = $oldcfg;
  135
+    }
116 136
 }
10  enrol/cohort/ajax.php
@@ -70,7 +70,9 @@
70 70
         break;
71 71
     case 'getcohorts':
72 72
         require_capability('moodle/course:enrolconfig', $context);
73  
-        $outcome->response = enrol_cohort_get_cohorts($manager);
  73
+        $offset = optional_param('offset', 0, PARAM_INT);
  74
+        $search  = optional_param('search', '', PARAM_RAW);
  75
+        $outcome->response = enrol_cohort_search_cohorts($manager, $offset, 25, $search);
74 76
         break;
75 77
     case 'enrolcohort':
76 78
         require_capability('moodle/course:enrolconfig', $context);
@@ -79,8 +81,7 @@
79 81
         $cohortid = required_param('cohortid', PARAM_INT);
80 82
         
81 83
         $roles = $manager->get_assignable_roles();
82  
-        $cohorts = enrol_cohort_get_cohorts($manager);
83  
-        if (!array_key_exists($cohortid, $cohorts) || !array_key_exists($roleid, $roles)) {
  84
+        if (!enrol_cohort_can_view_cohort($cohortid) || !array_key_exists($roleid, $roles)) {